0027772: Foundation Classes - define Standard_Boolean using C++ type "bool" instead...
[occt.git] / samples / mfc / standard / 08_HLR / src / SelectionDialog.cpp
old mode 100755 (executable)
new mode 100644 (file)
index e631b7f..bbcb5fd
@@ -22,270 +22,305 @@ static char THIS_FILE[] = __FILE__;
 /////////////////////////////////////////////////////////////////////////////
 // CSelectionDialog dialog
 
-CSelectionDialog::CSelectionDialog(CHLRDoc* aDoc,CWnd* pParent /*=NULL*/)
-       : CDialog(CSelectionDialog::IDD, pParent)
+CSelectionDialog::CSelectionDialog (CHLRDoc* aDoc,CWnd* pParent /*=NULL*/)
+: CDialog(CSelectionDialog::IDD, pParent)
 {
-    myDoc =  aDoc;
-       myDisplay = false;
-       //{{AFX_DATA_INIT(CSelectionDialog)
-       m_Algo        = 0;
-       m_DisplayMode = 0;
-       m_NbIsos      = 2;
-       m_DrawHiddenLine = TRUE;
-       m_DegeneratedModeOn = TRUE;
-       //}}AFX_DATA_INIT
+  myDoc =  aDoc;
+  myIsDisplayed = false;
+  //{{AFX_DATA_INIT(CSelectionDialog)
+  m_Algo        = 0;
+  m_DisplayMode = 0;
+  m_NbIsos      = 2;
+  m_DrawHiddenLine = TRUE;
+  m_HlrModeIsOn = TRUE;
+  //}}AFX_DATA_INIT
 }
 
-void CSelectionDialog::DoDataExchange(CDataExchange* pDX)
+void CSelectionDialog::DoDataExchange (CDataExchange* pDX)
 {
-       CDialog::DoDataExchange(pDX);
-       //{{AFX_DATA_MAP(CSelectionDialog)
-       DDX_Radio(pDX, IDC_PolyAlgo, m_Algo);
-       DDX_Radio(pDX, IDC_DisplayDefault, m_DisplayMode);
-       DDX_Text(pDX, IDC_EDIT_NBIsos, m_NbIsos);
-       DDX_Check(pDX, IDC_DrawHiddenLine, m_DrawHiddenLine);
-       DDX_Check(pDX, IDC_DegeneratedMode, m_DegeneratedModeOn);
-       //}}AFX_DATA_MAP
+  CDialog::DoDataExchange(pDX);
+  //{{AFX_DATA_MAP(CSelectionDialog)
+  DDX_Radio(pDX, IDC_PolyAlgo, m_Algo);
+  DDX_Radio(pDX, IDC_DisplayDefault, m_DisplayMode);
+  DDX_Text(pDX, IDC_EDIT_NBIsos, m_NbIsos);
+  DDX_Check(pDX, IDC_DrawHiddenLine, m_DrawHiddenLine);
+  DDX_Check(pDX, IDC_HlrModeIsOn, m_HlrModeIsOn);
+  //}}AFX_DATA_MAP
 }
 
 
 BEGIN_MESSAGE_MAP(CSelectionDialog, CDialog)
-       //{{AFX_MSG_MAP(CSelectionDialog)
-       ON_BN_CLICKED(ID_GetShape, OnGetShape)
-       ON_BN_CLICKED(IDC_DisplayDefault, OnDisplayDefault)
-       ON_BN_CLICKED(IDC_VIsoParametrics, OnVIsoParametrics)
-       ON_BN_CLICKED(IDC_VApparentContour, OnVApparentContour)
-       ON_BN_CLICKED(IDC_VSewingEdges, OnVSewingEdges)
-       ON_BN_CLICKED(IDC_VsharpEdges, OnVsharpEdges)
-       ON_BN_CLICKED(IDC_VsmoothEdges, OnVsmoothEdges)
-       ON_BN_CLICKED(IDC_HsharpEdges, OnHsharpEdges)
-       ON_BN_CLICKED(IDC_HsmoothEdges, OnHsmoothEdges)
-       ON_BN_CLICKED(IDC_HSewingEdges, OnHSewingEdges)
-       ON_BN_CLICKED(IDC_HIsoParametrics, OnHIsoParametrics)
-       ON_BN_CLICKED(IDC_HApparentContour, OnHApparentContour)
-       ON_EN_CHANGE(IDC_EDIT_NBIsos, OnChangeEDITNBIsos)
-       ON_BN_CLICKED(IDC_Algo, OnAlgo)
-       ON_BN_CLICKED(IDC_PolyAlgo, OnPolyAlgo)
-       ON_BN_CLICKED(ID_Update2D, OnUpdate2D)
-       ON_BN_CLICKED(IDC_TopView, OnTopView)
-       ON_BN_CLICKED(IDC_BottomView, OnBottomView)
-       ON_BN_CLICKED(IDC_LeftView, OnLeftView)
-       ON_BN_CLICKED(IDC_RightView, OnRightView)
-       ON_BN_CLICKED(IDC_FrontView, OnFrontView)
-       ON_BN_CLICKED(IDC_BackView, OnBackView)
-       ON_BN_CLICKED(IDC_AxoView, OnAxoView)
-       ON_WM_LBUTTONDOWN()
-       ON_WM_LBUTTONUP()
-       ON_WM_RBUTTONDOWN()
-       ON_WM_RBUTTONUP()
-       ON_WM_MOUSEMOVE()
-       ON_BN_CLICKED(IDC_DrawHiddenLine, OnDrawHiddenLine)
-       ON_BN_CLICKED(IDC_DegeneratedMode, OnDegeneratedMode)
-       ON_WM_DRAWITEM()
-       ON_WM_PAINT()
-       //}}AFX_MSG_MAP
+  //{{AFX_MSG_MAP(CSelectionDialog)
+  ON_BN_CLICKED(ID_GetShape, OnGetSelectedShapes)
+  ON_BN_CLICKED(IDC_DisplayDefault, OnDisplayDefault)
+  ON_BN_CLICKED(IDC_VIsoParametrics, OnVIsoParametrics)
+  ON_BN_CLICKED(IDC_VApparentContour, OnVApparentContour)
+  ON_BN_CLICKED(IDC_VSewingEdges, OnVSewingEdges)
+  ON_BN_CLICKED(IDC_VsharpEdges, OnVsharpEdges)
+  ON_BN_CLICKED(IDC_VsmoothEdges, OnVsmoothEdges)
+  ON_BN_CLICKED(IDC_HsharpEdges, OnHsharpEdges)
+  ON_BN_CLICKED(IDC_HsmoothEdges, OnHsmoothEdges)
+  ON_BN_CLICKED(IDC_HSewingEdges, OnHSewingEdges)
+  ON_BN_CLICKED(IDC_HIsoParametrics, OnHIsoParametrics)
+  ON_BN_CLICKED(IDC_HApparentContour, OnHApparentContour)
+  ON_EN_CHANGE(IDC_EDIT_NBIsos, OnChangeEDITNBIsos)
+  ON_BN_CLICKED(IDC_Algo, OnAlgo)
+  ON_BN_CLICKED(IDC_PolyAlgo, OnPolyAlgo)
+  ON_BN_CLICKED(ID_Update2D, OnUpdate2D)
+  ON_BN_CLICKED(IDC_TopView, OnTopView)
+  ON_BN_CLICKED(IDC_BottomView, OnBottomView)
+  ON_BN_CLICKED(IDC_LeftView, OnLeftView)
+  ON_BN_CLICKED(IDC_RightView, OnRightView)
+  ON_BN_CLICKED(IDC_FrontView, OnFrontView)
+  ON_BN_CLICKED(IDC_BackView, OnBackView)
+  ON_BN_CLICKED(IDC_AxoView, OnAxoView)
+  ON_WM_LBUTTONDOWN()
+  ON_WM_LBUTTONUP()
+  ON_WM_RBUTTONDOWN()
+  ON_WM_RBUTTONUP()
+  ON_WM_MOUSEMOVE()
+  ON_BN_CLICKED(IDC_DrawHiddenLine, OnDrawHiddenLine)
+  ON_BN_CLICKED(IDC_HlrModeIsOn, OnHlrMode)
+  ON_WM_DRAWITEM()
+  ON_WM_PAINT()
+  //}}AFX_MSG_MAP
 END_MESSAGE_MAP()
 
 /////////////////////////////////////////////////////////////////////////////
 // CSelectionDialog message handlers
 
-BOOL CSelectionDialog::OnInitDialog() 
+BOOL CSelectionDialog::OnInitDialog()
 {
-       CDialog::OnInitDialog();
-
-       VERIFY(TopView.AutoLoad(IDC_TopView, this));
-       VERIFY(BottomView.AutoLoad(IDC_BottomView, this)) ;
-       VERIFY(LeftView  .AutoLoad(IDC_LeftView  , this)) ;
-       VERIFY(RightView .AutoLoad(IDC_RightView , this)) ;
-       VERIFY(FrontView .AutoLoad(IDC_FrontView , this)) ;
-       VERIFY(BackView  .AutoLoad(IDC_BackView  , this)) ;
-       VERIFY(AxoView   .AutoLoad(IDC_AxoView   , this)) ;
-
-    // get the View Window position to managed mouse move
-       CRect BoxRect,ViewRect;
-       GetWindowRect(BoxRect);
-       CWnd * TheViewerWindow = GetDlgItem(IDC_DUMMYBUTTON);
-    TheViewerWindow->GetWindowRect(ViewRect);
-       myPosMinX = ViewRect.TopLeft().x - BoxRect.TopLeft().x;
-       myPosMaxX = ViewRect.Width()+myPosMinX;
-       myPosMinY = ViewRect.TopLeft().y - BoxRect.TopLeft().y;
-       myPosMaxY = myPosMinY + ViewRect.Height();
-
-    ShowHideButton(Standard_False);
-       OnDisplay(true);
-
-       return TRUE;  // return TRUE unless you set the focus to a control
-                     // EXCEPTION: OCX Property Pages should return FALSE
+  CDialog::OnInitDialog();
+
+  VERIFY(TopView.AutoLoad (IDC_TopView, this));
+  VERIFY(BottomView.AutoLoad (IDC_BottomView, this)) ;
+  VERIFY(LeftView  .AutoLoad (IDC_LeftView  , this)) ;
+  VERIFY(RightView .AutoLoad (IDC_RightView , this)) ;
+  VERIFY(FrontView .AutoLoad (IDC_FrontView , this)) ;
+  VERIFY(BackView  .AutoLoad (IDC_BackView  , this)) ;
+  VERIFY(AxoView   .AutoLoad (IDC_AxoView   , this)) ;
+
+  // get the View Window position to managed mouse move
+  CRect BoxRect,ViewRect;
+  GetWindowRect (BoxRect);
+  CWnd * TheViewerWindow = GetDlgItem (IDC_HlrDlgView);
+  TheViewerWindow->GetWindowRect (ViewRect);
+  myPosMinX = ViewRect.TopLeft().x - BoxRect.TopLeft().x;
+  myPosMaxX = ViewRect.Width() + myPosMinX;
+  myPosMinY = ViewRect.TopLeft().y - BoxRect.TopLeft().y;
+  myPosMaxY = myPosMinY + ViewRect.Height();
+
+  ShowHideButton (Standard_False);
+  OnDisplay (true);
+
+  // return TRUE unless you set the focus to a control
+  // EXCEPTION: OCX Property Pages should return FALSE
+  return TRUE;
 }
 
-void CSelectionDialog::OnDisplay(bool isFit) 
+void CSelectionDialog::OnDisplay (bool isFit)
 {
-       GetDlgItem(IDC_DUMMYBUTTON)->SetRedraw(true);
-       if(!myDisplay) {
-           Handle(Graphic3d_WNTGraphicDevice) theGraphicDevice = 
-                       ((CHLRApp*)AfxGetApp())->GetGraphicDevice();
-
-               myActiveViewer = new V3d_Viewer(theGraphicDevice,(short *) "Visu3D");
-               myActiveViewer->SetDefaultLights();
-               myActiveViewer->SetLightOn();
-               myActiveView = myActiveViewer->CreateView();
-
-               Handle(WNT_Window) aWNTWindow = new WNT_Window(theGraphicDevice,
-                                                                      GetDlgItem(IDC_DUMMYBUTTON)->GetSafeHwnd(),
-                                                      Quantity_NOC_GRAY);
-
-           aWNTWindow->SetDoubleBuffer(Standard_False);
-
-           if (m_DegeneratedModeOn) myActiveView->SetDegenerateModeOn();
-               myActiveView->SetWindow(aWNTWindow);
-
-               myInteractiveContext = new AIS_InteractiveContext(myActiveViewer);
-
-               // TRIHEDRON
-               Handle(Geom_Axis2Placement) aTrihedronAxis=new Geom_Axis2Placement(gp::XOY());
-               myTrihedron=new AIS_Trihedron(aTrihedronAxis);
-
-               myInteractiveContext->Display(myTrihedron);
-       }
-       if(isFit) {
-               myActiveView->ZFitAll();
-               myActiveView->FitAll();
-       }
-       myActiveView->Redraw();
-       myDisplay = Standard_True;
-       GetDlgItem(IDC_DUMMYBUTTON)->SetRedraw(false);
+  // GetDlgItem(IDC_HlrDlgView)->SetRedraw() wrapping of this method makes view blinking,
+  // but displaying of big models may be faster.
+  //GetDlgItem(IDC_HlrDlgView)->SetRedraw(true);
+  if (!myIsDisplayed)
+  {
+    Handle(Graphic3d_GraphicDriver) aGraphicDriver =
+      ((CHLRApp*)AfxGetApp())->GetGraphicDriver();
+
+    myActiveViewer = new V3d_Viewer (aGraphicDriver, (Standard_ExtString )"Visu3D");
+    myActiveViewer->SetDefaultLights();
+    myActiveViewer->SetLightOn();
+    myActiveView = myActiveViewer->CreateView();
+
+    Handle(WNT_Window) aWNTWindow = new WNT_Window (GetDlgItem (IDC_HlrDlgView)->GetSafeHwnd(),
+                                                    Quantity_NOC_GRAY);
+    myActiveView->SetComputedMode (m_HlrModeIsOn != 0);
+    myActiveView->SetWindow(aWNTWindow);
+
+    myInteractiveContext = new AIS_InteractiveContext (myActiveViewer);
+
+    // TRIHEDRON
+    Handle(Geom_Axis2Placement) aTrihedronAxis = new Geom_Axis2Placement (gp::XOY());
+    myTrihedron = new AIS_Trihedron (aTrihedronAxis);
+
+    myInteractiveContext->Display (myTrihedron);
+    myIsDisplayed = Standard_True;
+  }
+  if(isFit)
+  {
+    myActiveView->ZFitAll();
+    myActiveView->FitAll();
+  }
+
+  myActiveView->Redraw();
+  //GetDlgItem (IDC_HlrDlgView)->SetRedraw (false);
 }
 
 
-void CSelectionDialog::SetTitle(CString & aTitle)
+void CSelectionDialog::SetTitle (const CString & aTitle)
 {
-  SetWindowText(aTitle);
+  SetWindowText (aTitle);
 }
 
-void CSelectionDialog::OnGetShape() 
+void CSelectionDialog::UpdateViews()
 {
-  UpdateData(true);
-  myDoc->GetInteractiveContext2D()->EraseAll();
-  myDisplayableShape = new ISession2D_Shape( );
-  UpdateProjector();
-  myDisplayableShape->SetNbIsos(m_NbIsos);
+  // Clear HLR dialog view
+  myInteractiveContext->RemoveAll();
+  myInteractiveContext->Display (myTrihedron);
 
-  myInteractiveContext->EraseAll(Standard_False);
-  myInteractiveContext->Display(myTrihedron);
+  UpdateProjector();
 
+  // Display chosen shapes in the HLR dialog view.
   Standard_Boolean OneOrMoreFound = Standard_False;
   for (myDoc->GetAISContext()->InitCurrent();
-       myDoc->GetAISContext()->MoreCurrent ();
-       myDoc->GetAISContext()->NextCurrent ())
+       myDoc->GetAISContext()->MoreCurrent();
+       myDoc->GetAISContext()->NextCurrent())
   {
-    Handle(AIS_Shape) anAISShape = Handle(AIS_Shape)::DownCast(myDoc->GetAISContext()->Current());
-
+    Handle(AIS_Shape) anAISShape = Handle(AIS_Shape)::DownCast (myDoc->GetAISContext()->Current());
     if (!anAISShape.IsNull())
-      {
-        OneOrMoreFound = Standard_True;
-        TopoDS_Shape aShape = anAISShape->Shape();
-        myDisplayableShape->Add( aShape  );
-               myInteractiveContext->Display(anAISShape);
-      }
-   }
+    {
+      OneOrMoreFound = Standard_True;
+      myInteractiveContext->Display (anAISShape);
+    }
+  }
 
-  Standard_Integer DisplayMode = m_DisplayMode;
-  if (m_Algo == 1) DisplayMode+=100;
-  if (!m_DrawHiddenLine) DisplayMode+=1000;
+  // Apply HLR to chosen shapes and display result into the 2d view.
+  Apply();
+  // Update viewer
+  myDoc->FitAll2DViews (Standard_False);
+  // Check the selection: if no object : disable all possiblity.
+  ShowHideButton (OneOrMoreFound);
+  OnDisplay (true);
+}
 
-   myDoc->GetInteractiveContext2D()->Display(myDisplayableShape,  // object
-                                             DisplayMode,  // display mode
-                                             DisplayMode,   // selection mode 
-                                              Standard_True);   // Redraw
+void CSelectionDialog::OnGetSelectedShapes()
+{
+  // Create new displayable shape.
+  myDisplayableShape = new ISession2D_Shape();
+  UpdateProjector();
+  myDisplayableShape->SetNbIsos (m_NbIsos);
 
-  myDoc->FitAll2DViews(Standard_False); // Update Viewer
+  // Clear HLR dialog view
+  myInteractiveContext->RemoveAll();
+  myInteractiveContext->Display (myTrihedron);
 
+  Standard_Boolean OneOrMoreFound = Standard_False;
+  for (myDoc->GetAISContext()->InitCurrent();
+       myDoc->GetAISContext()->MoreCurrent();
+       myDoc->GetAISContext()->NextCurrent())
+  {
+    Handle(AIS_Shape) anAISShape = Handle(AIS_Shape)::DownCast (myDoc->GetAISContext()->Current());
 
-  // check the selection :
-  // if no object : disable all possiblity!!
-  ShowHideButton(OneOrMoreFound);
-  OnDisplay(true);
+    if (!anAISShape.IsNull())
+    {
+      OneOrMoreFound = Standard_True;
+      TopoDS_Shape aShape = anAISShape->Shape();
+      myDisplayableShape->Add (aShape);
+      Handle(AIS_Shape) aSelectedShape = new AIS_Shape (aShape);
+      myInteractiveContext->Display (aSelectedShape);
+    }
+  }
+
+  // Apply HLR to chosen shapes and display result into the 2d view.
+  Apply();
+  // Update viewer
+  myDoc->FitAll2DViews (Standard_False);
+
+  // Check the selection: if no object : disable all possiblity.
+  ShowHideButton (OneOrMoreFound);
+  OnDisplay (true);
 }
 
-void CSelectionDialog::Apply() 
+void CSelectionDialog::Apply()
 {
-  SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
-  myDoc->GetInteractiveContext2D()->EraseAll(Standard_False);
-  UpdateData(true);
+  SetCursor(AfxGetApp()->LoadStandardCursor (IDC_WAIT));
+  myDoc->GetInteractiveContext2D()->RemoveAll();
+  UpdateData (true);
 
-  Standard_Integer DisplayMode = m_DisplayMode;
-  if (m_Algo == 1) DisplayMode+=100;
+  Standard_Integer aDisplayMode = m_DisplayMode;
 
-  if (!m_DrawHiddenLine) DisplayMode+=1000;
+  if (m_Algo == 1)
+  {
+    aDisplayMode += 100;
+  }
 
-  myDoc->GetInteractiveContext2D()->Display(myDisplayableShape,  // object
-                                            DisplayMode,  
-                                            DisplayMode,
-                                            Standard_True); // Redraw
+  if (!m_DrawHiddenLine)
+  {
+    aDisplayMode += 1000;
+  }
 
-  SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
+  myDoc->GetInteractiveContext2D()->Display (myDisplayableShape,  // object
+                                             aDisplayMode,
+                                             aDisplayMode,
+                                             Standard_True); // Redraw
+
+  SetCursor(AfxGetApp()->LoadStandardCursor (IDC_ARROW));
 }
 
 void CSelectionDialog::UpdateProjector()
 {
-    V3d_Coordinate DX,DY,DZ,XAt,YAt,ZAt, Vx,Vy,Vz ; 
-    myActiveView->Proj(DX,DY,DZ); 
-    myActiveView->At(XAt,YAt,ZAt); 
-    myActiveView->Up( Vx,Vy,Vz );
-       OnDisplay(false);
-    Standard_Boolean IsPerspective = (myActiveView->Type() == V3d_PERSPECTIVE);
-    Quantity_Length aFocus = 1;
-    Prs3d_Projector aPrs3dProjector(IsPerspective,aFocus,DX,DY,DZ,XAt,YAt,ZAt,Vx,Vy,Vz);
-    HLRAlgo_Projector aProjector = aPrs3dProjector.Projector();
-       if (myDisplayableShape.IsNull()) return;
-    myDisplayableShape->SetProjector(aProjector);
+  V3d_Coordinate DX,DY,DZ,XAt,YAt,ZAt, Vx,Vy,Vz ;
+  myActiveView->Proj(DX,DY,DZ);
+  myActiveView->At(XAt,YAt,ZAt);
+  myActiveView->Up( Vx,Vy,Vz );
+  OnDisplay(false);
+  Standard_Boolean IsPerspective = (myActiveView->Type() == V3d_PERSPECTIVE);
+  Quantity_Length aFocus = 1;
+  Prs3d_Projector aPrs3dProjector(IsPerspective,aFocus,DX,DY,DZ,XAt,YAt,ZAt,Vx,Vy,Vz);
+  HLRAlgo_Projector aProjector = aPrs3dProjector.Projector();
+
+  if (myDisplayableShape.IsNull()) return;
+  myDisplayableShape->SetProjector(aProjector);
 }
 
 void CSelectionDialog::ShowHideButton(Standard_Boolean EnableButton)
 {
-       UpdateData(true);
-
-    GetDlgItem(ID_Update2D          )->EnableWindow(EnableButton);
-    GetDlgItem(IDC_DisplayDefault   )->EnableWindow(EnableButton);
-    GetDlgItem(IDC_PolyAlgo         )->EnableWindow(EnableButton);
-    GetDlgItem(IDC_Algo             )->EnableWindow(EnableButton);
+  UpdateData(true);
 
-    GetDlgItem(IDC_VsharpEdges      )->EnableWindow(EnableButton);
-    GetDlgItem(IDC_VsmoothEdges     )->EnableWindow(EnableButton);
-    GetDlgItem(IDC_VSewingEdges     )->EnableWindow(EnableButton);
-    GetDlgItem(IDC_VApparentContour )->EnableWindow(EnableButton);
-    GetDlgItem(IDC_VIsoParametrics  )->EnableWindow(EnableButton);
+  GetDlgItem(ID_Update2D          )->EnableWindow(EnableButton);
+  GetDlgItem(IDC_DisplayDefault   )->EnableWindow(EnableButton);
+  GetDlgItem(IDC_PolyAlgo         )->EnableWindow(EnableButton);
+  GetDlgItem(IDC_Algo             )->EnableWindow(EnableButton);
 
-    GetDlgItem(IDC_DrawHiddenLine   )->EnableWindow(EnableButton);
+  GetDlgItem(IDC_VsharpEdges      )->EnableWindow(EnableButton);
+  GetDlgItem(IDC_VsmoothEdges     )->EnableWindow(EnableButton);
+  GetDlgItem(IDC_VSewingEdges     )->EnableWindow(EnableButton);
+  GetDlgItem(IDC_VApparentContour )->EnableWindow(EnableButton);
+  GetDlgItem(IDC_VIsoParametrics  )->EnableWindow(EnableButton);
 
-    GetDlgItem(IDC_HsmoothEdges     )->EnableWindow(EnableButton && m_DrawHiddenLine);
-    GetDlgItem(IDC_HSewingEdges     )->EnableWindow(EnableButton && m_DrawHiddenLine);
-    GetDlgItem(IDC_HApparentContour )->EnableWindow(EnableButton && m_DrawHiddenLine);
-    GetDlgItem(IDC_HsharpEdges      )->EnableWindow(EnableButton && m_DrawHiddenLine);
-    GetDlgItem(IDC_HIsoParametrics  )->EnableWindow(EnableButton && m_DrawHiddenLine);
+  GetDlgItem(IDC_DrawHiddenLine   )->EnableWindow(EnableButton);
 
-    GetDlgItem(IDC_EDIT_NBIsos      )->EnableWindow(EnableButton);
-    GetDlgItem(IDC_STATIC_NbIsos    )->EnableWindow(EnableButton);
+  GetDlgItem(IDC_HsmoothEdges     )->EnableWindow(EnableButton && m_DrawHiddenLine);
+  GetDlgItem(IDC_HSewingEdges     )->EnableWindow(EnableButton && m_DrawHiddenLine);
+  GetDlgItem(IDC_HApparentContour )->EnableWindow(EnableButton && m_DrawHiddenLine);
+  GetDlgItem(IDC_HsharpEdges      )->EnableWindow(EnableButton && m_DrawHiddenLine);
+  GetDlgItem(IDC_HIsoParametrics  )->EnableWindow(EnableButton && m_DrawHiddenLine);
 
-    if(m_Algo == 0)
-    {
-       if (m_DisplayMode == 5) m_DisplayMode=0;
-       if (m_DisplayMode == 10) m_DisplayMode=0;
+  GetDlgItem(IDC_EDIT_NBIsos      )->EnableWindow(EnableButton);
+  GetDlgItem(IDC_STATIC_NbIsos    )->EnableWindow(EnableButton);
 
-       GetDlgItem(IDC_VIsoParametrics)->EnableWindow(false);
-       GetDlgItem(IDC_HIsoParametrics)->EnableWindow(false);
-       GetDlgItem(IDC_STATIC_NbIsos)  ->EnableWindow(false);
-       GetDlgItem(IDC_EDIT_NBIsos)    ->EnableWindow(false);
-    }
-    else
+  if(m_Algo == 0)
+  {
+    if (m_DisplayMode == 5 || m_DisplayMode == 10)
     {
-       GetDlgItem(IDC_VIsoParametrics)->EnableWindow(true);
-       GetDlgItem(IDC_HIsoParametrics)->EnableWindow(m_DrawHiddenLine);
-       GetDlgItem(IDC_STATIC_NbIsos)  ->EnableWindow(true);
-       GetDlgItem(IDC_EDIT_NBIsos)    ->EnableWindow(true);
+      m_DisplayMode=0;
     }
-       UpdateData(false);
+
+    GetDlgItem(IDC_VIsoParametrics)->EnableWindow(false);
+    GetDlgItem(IDC_HIsoParametrics)->EnableWindow(false);
+    GetDlgItem(IDC_STATIC_NbIsos)  ->EnableWindow(false);
+    GetDlgItem(IDC_EDIT_NBIsos)    ->EnableWindow(false);
+  }
+  else
+  {
+    GetDlgItem(IDC_VIsoParametrics)->EnableWindow(true);
+    GetDlgItem(IDC_HIsoParametrics)->EnableWindow(m_DrawHiddenLine);
+    GetDlgItem(IDC_STATIC_NbIsos)  ->EnableWindow(true);
+    GetDlgItem(IDC_EDIT_NBIsos)    ->EnableWindow(true);
+  }
+  UpdateData(false);
 } 
 
 void CSelectionDialog::OnDisplayDefault() 
@@ -312,108 +347,111 @@ void CSelectionDialog::OnHApparentContour()
 { Apply(); }
 
 void CSelectionDialog::OnChangeEDITNBIsos() 
-{ 
-       UpdateData(true);
-       myDisplayableShape->SetNbIsos(m_NbIsos);
-       Apply(); 
+{
+  UpdateData(true);
+  myDisplayableShape->SetNbIsos(m_NbIsos);
+  Apply(); 
 }
 void CSelectionDialog::OnAlgo() 
-{ ShowHideButton();
+{
+  ShowHideButton();
   Apply();
 }
 
 void CSelectionDialog::OnPolyAlgo() 
-{ ShowHideButton();    
+{
+  ShowHideButton();
   Apply();
 }
 
 void CSelectionDialog::OnDrawHiddenLine() 
 {
   UpdateData(true);
-  if (m_DisplayMode >=6 ) 
-  { m_DisplayMode=0;
-    UpdateData(false); }
-  ShowHideButton();    
-  Apply();     
+  if(m_DisplayMode >=6 )
+  {
+    m_DisplayMode=0;
+    UpdateData(false);
+  }
+  ShowHideButton();
+  Apply();
 }
 
 void CSelectionDialog::OnUpdate2D() 
 {
-    SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
-    myDoc->ActivateFrame(RUNTIME_CLASS(OCC_2dView),SW_NORMAL);
-    UpdateProjector();
-       Apply();                                        
-    SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
+  SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
+  myDoc->ActivateFrame(RUNTIME_CLASS(OCC_2dView),SW_NORMAL);
+  UpdateProjector();
+  Apply();
+  myDoc->FitAll2DViews(Standard_False);
+  SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
 }
 
 void CSelectionDialog::OnTopView() 
 {
-    myActiveView->SetProj(V3d_Zpos);
-       OnDisplay(true);
+  myActiveView->SetProj(V3d_Zpos);
+  OnDisplay(true);
 }
 
 void CSelectionDialog::OnBottomView() 
 {
-    myActiveView->SetProj(V3d_Zneg);
-       OnDisplay(true);
+  myActiveView->SetProj(V3d_Zneg);
+  OnDisplay(true);
 }
 
 void CSelectionDialog::OnLeftView() 
 {
-    myActiveView->SetProj(V3d_Ypos);
-       OnDisplay(true);
+  myActiveView->SetProj(V3d_Xneg);
+  OnDisplay(true);
 }
 
 void CSelectionDialog::OnRightView() 
 {
-    myActiveView->SetProj(V3d_Yneg);
-       OnDisplay(true);
+  myActiveView->SetProj(V3d_Xpos);
+  OnDisplay(true);
 }
 
 void CSelectionDialog::OnFrontView() 
 {
-    myActiveView->SetProj(V3d_Xpos);
-       OnDisplay(true);
+  myActiveView->SetProj(V3d_Yneg);
+  OnDisplay(true);
 }
 
 void CSelectionDialog::OnBackView() 
 {
-    myActiveView->SetProj(V3d_Xneg);
-       OnDisplay(true);
+  myActiveView->SetProj(V3d_Ypos);
+  OnDisplay(true);
 }
 
 void CSelectionDialog::OnAxoView() 
 {
-    myActiveView->SetProj(V3d_XposYnegZpos);
-       OnDisplay(true);
+  myActiveView->SetProj(V3d_XposYnegZpos);
+  OnDisplay(true);
 }
 
-void CSelectionDialog::OnDegeneratedMode() 
+void CSelectionDialog::OnHlrMode()
 {
-       UpdateData(true);
+  UpdateData(true);
 
-    if(m_DegeneratedModeOn)
-    {
-         myActiveView->SetDegenerateModeOn();
-         m_DegeneratedModeOn = Standard_True;
-    }
-    else
-    {
-      SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
-         myActiveView->SetDegenerateModeOff();
-         m_DegeneratedModeOn = Standard_False;
-      SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
-    }
-       OnDisplay(false);
+  if (!m_HlrModeIsOn)
+  {
+    myActiveView->SetComputedMode (m_HlrModeIsOn != 0);
+  }
+  else
+  {
+    SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
+    myActiveView->SetComputedMode (m_HlrModeIsOn != 0);
+    SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
+  }
+  OnDisplay(false);
 }
 
 void CSelectionDialog::OnLButtonDown(UINT nFlags, CPoint point) 
 {
-       CDialog::OnLButtonDown(nFlags, point);
+  CDialog::OnLButtonDown(nFlags, point);
 
-       if ((myPosMinX > point.x)||(myPosMaxX < point.x) ||
-               (myPosMinY > point.y) ||(myPosMaxY < point.y))
-               return;
+  if ((myPosMinX > point.x)||(myPosMaxX < point.x) ||
+    (myPosMinY > point.y) ||(myPosMaxY < point.y))
+    return;
 
   //  save the current mouse coordinate
   myXmax=point.x;  myYmax=point.y;
@@ -421,91 +459,91 @@ void CSelectionDialog::OnLButtonDown(UINT nFlags, CPoint point)
 
 void CSelectionDialog::OnLButtonUp(UINT nFlags, CPoint point) 
 {
-       CDialog::OnLButtonUp(nFlags, point);
+  CDialog::OnLButtonUp(nFlags, point);
 
-       if ((myPosMinX > point.x)||(myPosMaxX < point.x) ||
-               (myPosMinY > point.y) ||(myPosMaxY < point.y))
-               return;
+  if ((myPosMinX > point.x)||(myPosMaxX < point.x) ||
+    (myPosMinY > point.y) ||(myPosMaxY < point.y))
+    return;
 }
 
 void CSelectionDialog::OnRButtonDown(UINT nFlags, CPoint point) 
 {
-       CDialog::OnRButtonDown(nFlags, point);
-
-       if ((myPosMinX > point.x)||(myPosMaxX < point.x) ||
-               (myPosMinY > point.y) ||(myPosMaxY < point.y))
-               return;
-
-   if ( nFlags & CASCADESHORTCUTKEY ) 
-         {
-           if (!m_DegeneratedModeOn)
-             myActiveView->SetDegenerateModeOn();
-           myActiveView->StartRotation(point.x,point.y);  
-               OnDisplay(false);
-         }
+  CDialog::OnRButtonDown(nFlags, point);
+
+  if ((myPosMinX > point.x) || (myPosMaxX < point.x) ||
+      (myPosMinY > point.y) || (myPosMaxY < point.y))
+  {
+    return;
+  }
+
+  if ( nFlags & CASCADESHORTCUTKEY )
+  {
+    if (m_HlrModeIsOn)
+    {
+      myActiveView->SetComputedMode (Standard_False);
+    }
+    myActiveView->StartRotation (point.x, point.y);
+    OnDisplay (false);
+  }
 }
 
 void CSelectionDialog::OnRButtonUp(UINT nFlags, CPoint point) 
 {
-       CDialog::OnRButtonUp(nFlags, point);
+  CDialog::OnRButtonUp(nFlags, point);
 
-       if ((myPosMinX > point.x)||(myPosMaxX < point.x) ||
-               (myPosMinY > point.y) ||(myPosMaxY < point.y))
-               return;
+  if ((myPosMinX > point.x) || (myPosMaxX < point.x) ||
+      (myPosMinY > point.y) || (myPosMaxY < point.y))
+  {
+    return;
+  }
 
-    SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
-    // reset tyhe good Degenerated mode according to the strored one
-    //   --> dynamic rotation may have change it 
-    if (!m_DegeneratedModeOn)  
-      myActiveView->SetDegenerateModeOff();
-     else
-      myActiveView->SetDegenerateModeOn();
-    OnDisplay(false);
-    SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
+  SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
+  // reset the good HLR mode according to the stored one
+  //   --> dynamic rotation may have change it
+  myActiveView->SetComputedMode (m_HlrModeIsOn != 0);
+  OnDisplay(false);
+  SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
 }
 
 void CSelectionDialog::OnMouseMove(UINT nFlags, CPoint point) 
 {
-       CDialog::OnMouseMove(nFlags, point);
+  CDialog::OnMouseMove(nFlags, point);
 
-       if ((myPosMinX > point.x)||(myPosMaxX < point.x) ||
-               (myPosMinY > point.y) ||(myPosMaxY < point.y))
-               return;
+  if ((myPosMinX > point.x)||(myPosMaxX < point.x) ||
+    (myPosMinY > point.y) ||(myPosMaxY < point.y))
+    return;
 
-    //   ============================  LEFT BUTTON =======================
   if ( nFlags & MK_LBUTTON)
+  {//left button
+    if ( nFlags & CASCADESHORTCUTKEY ) 
     {
-     if ( nFlags & CASCADESHORTCUTKEY ) 
-         {
-           // move with MB1 and Control : on the dynamic zooming  
-           // Do the zoom in function of mouse's coordinates  
-           myActiveView->Zoom(myXmax,myYmax,point.x,point.y); 
-           // save the current mouse coordinate 
-               myXmax = point.x;    myYmax = point.y;  
-      }// if ( nFlags & CASCADESHORTCUTKEY )  else 
-    } else //   if ( nFlags & MK_LBUTTON) 
-    //   ============================  MIDDLE BUTTON =======================
-    if ( nFlags & MK_MBUTTON)
+      // move with MB1 and Control : on the dynamic zooming  
+      // Do the zoom in function of mouse's coordinates  
+      myActiveView->Zoom(myXmax,myYmax,point.x,point.y); 
+      // save the current mouse coordinate 
+      myXmax = point.x;    myYmax = point.y;   
+    }// if ( nFlags & CASCADESHORTCUTKEY )  else 
+  }
+  else if ( nFlags & MK_MBUTTON)
+  {
+    if ( nFlags & CASCADESHORTCUTKEY ) 
     {
-     if ( nFlags & CASCADESHORTCUTKEY ) 
-         {
-               myActiveView->Pan(point.x-myXmax,myYmax-point.y); // Realize the panning
-               myXmax = point.x; myYmax = point.y;     
-         }
-    } else //  if ( nFlags & MK_MBUTTON)
-    //   ============================  RIGHT BUTTON =======================
-    if ( nFlags & MK_RBUTTON)
+      myActiveView->Pan(point.x-myXmax,myYmax-point.y); // Realize the panning
+      myXmax = point.x; myYmax = point.y;      
+    }
+  }
+  else if ( nFlags & MK_RBUTTON)
+  {//right button
+    if ( nFlags & CASCADESHORTCUTKEY ) 
     {
-     if ( nFlags & CASCADESHORTCUTKEY ) 
-         {
-        myActiveView->Rotation(point.x,point.y);
-         }
-    } else //if ( nFlags & MK_RBUTTON)
-    //   ============================  NO BUTTON =======================
-    {  // No buttons 
-         myXmax = point.x; myYmax = point.y;   
-   }
-       OnDisplay(false);
+      myActiveView->Rotation(point.x,point.y);
+    }
+  } 
+  else
+  {// No buttons 
+    myXmax = point.x; myYmax = point.y;        
+  }
+  OnDisplay(false);
 }
 
 void CSelectionDialog::OnOK() 
@@ -515,7 +553,5 @@ void CSelectionDialog::OnOK()
 
 void CSelectionDialog::OnPaint() 
 {
-       CPaintDC dc(this); // device context for painting
-       
-       OnDisplay(false);
+  OnDisplay(false);
 }