0023776: Redesign of MFC samples after V2d viewer removing
[occt.git] / samples / mfc / standard / Common / OCC_3dView.cpp
index d51f223..2a68322 100755 (executable)
@@ -4,8 +4,7 @@
 #include "stdafx.h"
 
 #include "OCC_3dView.h"
-
-#include "OCC_3dApp.h"
+#include "OCC_App.h"
 #include "OCC_3dBaseDoc.h"
 #include <res\OCC_Resource.h>
 
@@ -59,33 +58,31 @@ END_MESSAGE_MAP()
 
 OCC_3dView::OCC_3dView()
 {
-       // TODO: add construction code here
-    myXmin=0;
-    myYmin=0;  
-    myXmax=0;
-    myYmax=0;
-    myCurZoom=0;
-       myWidth=0;
-       myHeight=0;
-    // will be set in OnInitial update, but, for more security :
-    myCurrentMode = CurAction3d_Nothing;
-    myDegenerateModeIsOn=Standard_True;
-    m_Pen = NULL;
-       
+  // TODO: add construction code here
+  myXmin=0;
+  myYmin=0;  
+  myXmax=0;
+  myYmax=0;
+  myCurZoom=0;
+  myWidth=0;
+  myHeight=0;
+  // will be set in OnInitial update, but, for more security :
+  myCurrentMode = CurAction3d_Nothing;
+  myDegenerateModeIsOn=Standard_True;
+  m_Pen = NULL;
 }
 
 OCC_3dView::~OCC_3dView()
 {
-       if ( myView )
-               myView->Remove();
-       if (m_Pen) delete m_Pen;
+  if ( myView )
+    myView->Remove();
+  if (m_Pen) delete m_Pen;
 }
 
 BOOL OCC_3dView::PreCreateWindow(CREATESTRUCT& cs)
 {
        // TODO: Modify the Window class or styles here by modifying
        //  the CREATESTRUCT cs
-
        return CView::PreCreateWindow(cs);
 }
 
@@ -93,26 +90,25 @@ BOOL OCC_3dView::PreCreateWindow(CREATESTRUCT& cs)
 // OCC_3dView drawing
 void OCC_3dView::OnInitialUpdate() 
 {
-       CView::OnInitialUpdate();
-       
-    myView = GetDocument()->GetViewer()->CreateView();
+  CView::OnInitialUpdate();
 
-    // set the default mode in wireframe ( not hidden line ! )
-    myView->SetDegenerateModeOn();
-    // store for restore state after rotation (witch is in Degenerated mode)
-    myDegenerateModeIsOn = Standard_True;
+  myView = GetDocument()->GetViewer()->CreateView();
 
+  // set the default mode in wireframe ( not hidden line ! )
+  myView->SetDegenerateModeOn();
+  // store for restore state after rotation (which is in Degenerated mode)
+  myDegenerateModeIsOn = Standard_True;
 
-       Handle(Graphic3d_WNTGraphicDevice) theGraphicDevice = 
-               ((OCC_3dApp*)AfxGetApp())->GetGraphicDevice();
-    
-    Handle(WNT_Window) aWNTWindow = new WNT_Window(theGraphicDevice,GetSafeHwnd ());
-    myView->SetWindow(aWNTWindow);
-    if (!aWNTWindow->IsMapped()) aWNTWindow->Map();
 
-    // store the mode ( nothing , dynamic zooming, dynamic ... )
-    myCurrentMode = CurAction3d_Nothing;
-       
+  Handle(Graphic3d_GraphicDriver) aGraphicDriver = 
+    ((OCC_App*)AfxGetApp())->GetGraphicDriver();
+
+  Handle(WNT_Window) aWNTWindow = new WNT_Window(GetSafeHwnd());
+  myView->SetWindow(aWNTWindow);
+  if (!aWNTWindow->IsMapped()) aWNTWindow->Map();
+
+  // store the mode ( nothing , dynamic zooming, dynamic ... )
+  myCurrentMode = CurAction3d_Nothing;
 }
 
 void OCC_3dView::OnDraw(CDC* pDC)
@@ -142,10 +138,10 @@ void OCC_3dView::Dump(CDumpContext& dc) const
        CView::Dump(dc);
 }
 
-OCC_3dBaseDoc* OCC_3dView::GetDocument() // non-debug version is inline
+OCC_3dDoc* OCC_3dView::GetDocument() // non-debug version is inline
 {
 //     ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(OCC_3dBaseDoc)));
-       return (OCC_3dBaseDoc*)m_pDocument;
+       return (OCC_3dDoc*)m_pDocument;
 }
 
 #endif //_DEBUG
@@ -189,23 +185,47 @@ void OCC_3dView::OnSize(UINT nType, int cx, int cy)
    myView->MustBeResized();
 }
 
+// See the back View
 void OCC_3dView::OnBUTTONBack() 
-{ myView->SetProj(V3d_Xneg); } // See the back View
+{
+  myView->SetProj(V3d_Xneg);
+} 
+
+// See the front View
 void OCC_3dView::OnBUTTONFront() 
-{ myView->SetProj(V3d_Xpos); } // See the front View
+{
+  myView->SetProj(V3d_Xpos);
+} 
 
+// See the bottom View
 void OCC_3dView::OnBUTTONBottom() 
-{ myView->SetProj(V3d_Zneg); } // See the bottom View
+{
+  myView->SetProj(V3d_Zneg);
+}
+
+// See the top View
 void OCC_3dView::OnBUTTONTop() 
-{ myView->SetProj(V3d_Zpos); } // See the top View     
+{
+  myView->SetProj(V3d_Zpos);
+}      
 
+// See the left View
 void OCC_3dView::OnBUTTONLeft() 
-{ myView->SetProj(V3d_Ypos); } // See the left View    
+{
+  myView->SetProj(V3d_Ypos);
+}
+
+// See the right View
 void OCC_3dView::OnBUTTONRight() 
-{ myView->SetProj(V3d_Yneg); } // See the right View
+{
+  myView->SetProj(V3d_Yneg);
+} 
 
+// See the axonometric View
 void OCC_3dView::OnBUTTONAxo() 
-{ myView->SetProj(V3d_XposYnegZpos); } // See the axonometric View
+{
+  myView->SetProj(V3d_XposYnegZpos);
+} 
 
 void OCC_3dView::OnBUTTONHlrOff() 
 {
@@ -222,7 +242,9 @@ void OCC_3dView::OnBUTTONHlrOn()
 }
 
 void OCC_3dView::OnBUTTONPan() 
-{  myCurrentMode = CurAction3d_DynamicPanning; }
+{
+  myCurrentMode = CurAction3d_DynamicPanning;
+}
 
 void OCC_3dView::OnBUTTONPanGlo() 
 {
@@ -235,11 +257,14 @@ void OCC_3dView::OnBUTTONPanGlo()
 }
 
 void OCC_3dView::OnBUTTONReset() 
-{   myView->Reset(); }
+{
+  myView->Reset();
+}
 
 void OCC_3dView::OnBUTTONRot() 
-{   myCurrentMode = CurAction3d_DynamicRotation; }
-
+{
+  myCurrentMode = CurAction3d_DynamicRotation; 
+}
 
 void OCC_3dView::OnBUTTONZoomAll() 
 {
@@ -260,144 +285,143 @@ void OCC_3dView::OnLButtonDown(UINT nFlags, CPoint point)
   myXmax=point.x;  myYmax=point.y;
 
   if ( nFlags & MK_CONTROL ) 
-         {
-           // Button MB1 down Control :start zomming 
-        // SetCursor(AfxGetApp()->LoadStandardCursor());
-         }
-       else // if ( Ctrl )
-         {
-        switch (myCurrentMode)
-        {
-         case CurAction3d_Nothing : // start a drag
-           if (nFlags & MK_SHIFT)
-                       GetDocument()->ShiftDragEvent(myXmax,myYmax,-1,myView);
-           else
-                GetDocument()->DragEvent(myXmax,myYmax,-1,myView);
-        break;
-         break;
-         case CurAction3d_DynamicZooming : // noting
-         break;
-         case CurAction3d_WindowZooming : // noting
-         break;
-         case CurAction3d_DynamicPanning :// noting
-         break;
-         case CurAction3d_GlobalPanning :// noting
-        break;
-        case  CurAction3d_DynamicRotation :
-                       if (!myDegenerateModeIsOn)
-                         myView->SetDegenerateModeOn();
-                       myView->StartRotation(point.x,point.y);  
-        break;
-        default :
-           Standard_Failure::Raise(" incompatible Current Mode ");
-        break;
-        }
+  {
+    // Button MB1 down Control :start zomming 
+    // SetCursor(AfxGetApp()->LoadStandardCursor());
+  }
+  else // if ( Ctrl )
+  {
+    switch (myCurrentMode)
+    {
+    case CurAction3d_Nothing : // start a drag
+      if (nFlags & MK_SHIFT)
+        GetDocument()->ShiftDragEvent(myXmax,myYmax,-1,myView);
+      else
+        GetDocument()->DragEvent(myXmax,myYmax,-1,myView);
+      break;
+      break;
+    case CurAction3d_DynamicZooming : // noting
+      break;
+    case CurAction3d_WindowZooming : // noting
+      break;
+    case CurAction3d_DynamicPanning :// noting
+      break;
+    case CurAction3d_GlobalPanning :// noting
+      break;
+    case  CurAction3d_DynamicRotation :
+      if (!myDegenerateModeIsOn)
+        myView->SetDegenerateModeOn();
+      myView->StartRotation(point.x,point.y);  
+      break;
+    default :
+      Standard_Failure::Raise(" incompatible Current Mode ");
+      break;
     }
+  }
 }
 
 void OCC_3dView::OnLButtonUp(UINT nFlags, CPoint point) 
 {
-   if ( nFlags & MK_CONTROL ) 
-         {
-        return;
-         }
-       else // if ( Ctrl )
-         {
-        switch (myCurrentMode)
-        {
-         case CurAction3d_Nothing :
-         if (point.x == myXmin && point.y == myYmin)
-         { // no offset between down and up --> selectEvent
-            myXmax=point.x;  
-            myYmax=point.y;
-            if (nFlags & MK_SHIFT )
-              GetDocument()->ShiftInputEvent(point.x,point.y,myView);
-            else
-              GetDocument()->InputEvent     (point.x,point.y,myView);
-         } else
-         {
-            myXmax=point.x;    myYmax=point.y;
-            DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_False);
-                   if (nFlags & MK_SHIFT)
-                               GetDocument()->ShiftDragEvent(point.x,point.y,1,myView);
-                       else
-                               GetDocument()->DragEvent(point.x,point.y,1,myView);
-         }
-         break;
-         case CurAction3d_DynamicZooming :
-             // SetCursor(AfxGetApp()->LoadStandardCursor());         
-              myCurrentMode = CurAction3d_Nothing;
-         break;
-         case CurAction3d_WindowZooming :
-           myXmax=point.x;        myYmax=point.y;
-           DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_False);
-              if ((abs(myXmin-myXmax)>ValZWMin) || (abs(myYmin-myYmax)>ValZWMin))
-                                        // Test if the zoom window is greater than a minimale window.
-                       {
-                         // Do the zoom window between Pmin and Pmax
-                         myView->WindowFitAll(myXmin,myYmin,myXmax,myYmax);  
-                       }  
-              myCurrentMode = CurAction3d_Nothing;
-         break;
-         case CurAction3d_DynamicPanning :
-           myCurrentMode = CurAction3d_Nothing;
-         break;
-         case CurAction3d_GlobalPanning :
-              myView->Place(point.x,point.y,myCurZoom); 
-              myCurrentMode = CurAction3d_Nothing;
-        break;
-        case  CurAction3d_DynamicRotation :
-              myCurrentMode = CurAction3d_Nothing;
-                  if (!myDegenerateModeIsOn)
-                       {  
-                         CWaitCursor aWaitCursor;
-                         myView->SetDegenerateModeOff();
-                         myDegenerateModeIsOn = Standard_False;
-                       }
-                  else
-                       {
-                         myView->SetDegenerateModeOn();
-                         myDegenerateModeIsOn = Standard_True;
-                       }
-               break;
-        default :
-           Standard_Failure::Raise(" incompatible Current Mode ");
-        break;
-        } //switch (myCurrentMode)
-    } //       else // if ( Ctrl )
+  if ( nFlags & MK_CONTROL ) 
+  {
+    return;
+  }
+  else // if ( Ctrl )
+  {
+    switch (myCurrentMode)
+    {
+    case CurAction3d_Nothing :
+      if (point.x == myXmin && point.y == myYmin)
+      { // no offset between down and up --> selectEvent
+        myXmax=point.x;  
+        myYmax=point.y;
+        if (nFlags & MK_SHIFT )
+          GetDocument()->ShiftInputEvent(point.x,point.y,myView);
+        else
+          GetDocument()->InputEvent     (point.x,point.y,myView);
+      } else
+      {
+        myXmax=point.x;    myYmax=point.y;
+        DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_False);
+        if (nFlags & MK_SHIFT)
+          GetDocument()->ShiftDragEvent(point.x,point.y,1,myView);
+        else
+          GetDocument()->DragEvent(point.x,point.y,1,myView);
+      }
+      break;
+    case CurAction3d_DynamicZooming :
+      // SetCursor(AfxGetApp()->LoadStandardCursor());         
+      myCurrentMode = CurAction3d_Nothing;
+      break;
+    case CurAction3d_WindowZooming :
+      myXmax=point.x;        myYmax=point.y;
+      DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_False);
+      if ((abs(myXmin-myXmax)>ValZWMin) || (abs(myYmin-myYmax)>ValZWMin))
+        // Test if the zoom window is greater than a minimale window.
+      {
+        // Do the zoom window between Pmin and Pmax
+        myView->WindowFitAll(myXmin,myYmin,myXmax,myYmax);  
+      }  
+      myCurrentMode = CurAction3d_Nothing;
+      break;
+    case CurAction3d_DynamicPanning :
+      myCurrentMode = CurAction3d_Nothing;
+      break;
+    case CurAction3d_GlobalPanning :
+      myView->Place(point.x,point.y,myCurZoom); 
+      myCurrentMode = CurAction3d_Nothing;
+      break;
+    case  CurAction3d_DynamicRotation :
+      myCurrentMode = CurAction3d_Nothing;
+      if (!myDegenerateModeIsOn)
+      {  
+        CWaitCursor aWaitCursor;
+        myView->SetDegenerateModeOff();
+        myDegenerateModeIsOn = Standard_False;
+      }
+      else
+      {
+        myView->SetDegenerateModeOn();
+        myDegenerateModeIsOn = Standard_True;
+      }
+      break;
+    default :
+      Standard_Failure::Raise(" incompatible Current Mode ");
+      break;
+    } //switch (myCurrentMode)
+  } // else // if ( Ctrl )
 }
 
 void OCC_3dView::OnMButtonDown(UINT nFlags, CPoint point) 
 {
-   if ( nFlags & MK_CONTROL ) 
-         {
-       // Button MB2 down Control : panning init  
-        // SetCursor(AfxGetApp()->LoadStandardCursor());   
-         }
+  if ( nFlags & MK_CONTROL ) 
+  {
+    // Button MB2 down Control : panning init  
+    // SetCursor(AfxGetApp()->LoadStandardCursor());   
+  }
 }
 
 void OCC_3dView::OnMButtonUp(UINT nFlags, CPoint point) 
 {
-   if ( nFlags & MK_CONTROL ) 
-         {
-       // Button MB2 down Control : panning init  
-        // SetCursor(AfxGetApp()->LoadStandardCursor());   
-         }
+  if ( nFlags & MK_CONTROL ) 
+  {
+    // Button MB2 down Control : panning init  
+    // SetCursor(AfxGetApp()->LoadStandardCursor());   
+  }
 }
 
 void OCC_3dView::OnRButtonDown(UINT nFlags, CPoint point) 
 {
-   if ( nFlags & MK_CONTROL ) 
-         {
-        // SetCursor(AfxGetApp()->LoadStandardCursor());   
-           if (!myDegenerateModeIsOn)
-             myView->SetDegenerateModeOn();
-             myView->StartRotation(point.x,point.y);  
-         }
-       else // if ( Ctrl )
-         {
-           GetDocument()->Popup(point.x,point.y,myView);
-      }        
+  if ( nFlags & MK_CONTROL ) 
+  { 
+    if (!myDegenerateModeIsOn)
+      myView->SetDegenerateModeOn();
+    myView->StartRotation(point.x,point.y);  
+  }
+  else // if ( Ctrl )
+  {
+    GetDocument()->Popup(point.x,point.y,myView);
+  }    
 }
 
 void OCC_3dView::OnRButtonUp(UINT nFlags, CPoint point) 
@@ -417,84 +441,82 @@ void OCC_3dView::OnRButtonUp(UINT nFlags, CPoint point)
 
 void OCC_3dView::OnMouseMove(UINT nFlags, CPoint point) 
 {
-    //   ============================  LEFT BUTTON =======================
+   //   ============================  LEFT BUTTON =======================
   if ( nFlags & MK_LBUTTON)
+  {
+    if ( nFlags & MK_CONTROL ) 
     {
-     if ( nFlags & MK_CONTROL ) 
-         {
-           // move with MB1 and Control : on the dynamic zooming  
-           // Do the zoom in function of mouse's coordinates  
-           myView->Zoom(myXmax,myYmax,point.x,point.y); 
-           // save the current mouse coordinate in min 
-               myXmax = point.x; 
-        myYmax = point.y;      
-         }
-         else // if ( Ctrl )
-         {
-        switch (myCurrentMode)
-        {
-         case CurAction3d_Nothing :
-                  myXmax = point.x;  myYmax = point.y;
-           DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_False);
-           if (nFlags & MK_SHIFT)              
-                    GetDocument()->ShiftDragEvent(myXmax,myYmax,0,myView);
-           else
-             GetDocument()->DragEvent(myXmax,myYmax,0,myView);
-           DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_True);
-
-          break;
-         case CurAction3d_DynamicZooming :
-              myView->Zoom(myXmax,myYmax,point.x,point.y); 
-              // save the current mouse coordinate in min \n";
-              myXmax=point.x;  myYmax=point.y;
-         break;
-         case CurAction3d_WindowZooming :
-                  myXmax = point.x; myYmax = point.y;  
-                  DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_False,LongDash);
-                  DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_True,LongDash);
-         break;
-         case CurAction3d_DynamicPanning :
-                  myView->Pan(point.x-myXmax,myYmax-point.y); // Realize the panning
-                  myXmax = point.x; myYmax = point.y;  
-         break;
-         case CurAction3d_GlobalPanning : // nothing           
+      // move with MB1 and Control : on the dynamic zooming  
+      // Do the zoom in function of mouse's coordinates  
+      myView->Zoom(myXmax,myYmax,point.x,point.y); 
+      // save the current mouse coordinate in min 
+      myXmax = point.x; 
+      myYmax = point.y;        
+    }
+    else // if ( Ctrl )
+    {
+      switch (myCurrentMode)
+      {
+      case CurAction3d_Nothing :
+        myXmax = point.x;  myYmax = point.y;
+        DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_False);
+        if (nFlags & MK_SHIFT)         
+          GetDocument()->ShiftDragEvent(myXmax,myYmax,0,myView);
+        else
+          GetDocument()->DragEvent(myXmax,myYmax,0,myView);
+        DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_True);
+
+        break;
+      case CurAction3d_DynamicZooming :
+        myView->Zoom(myXmax,myYmax,point.x,point.y); 
+        // save the current mouse coordinate in min \n";
+        myXmax=point.x;  myYmax=point.y;
+        break;
+      case CurAction3d_WindowZooming :
+        myXmax = point.x; myYmax = point.y;    
+        DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_False,LongDash);
+        DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_True,LongDash);
+        break;
+      case CurAction3d_DynamicPanning :
+        myView->Pan(point.x-myXmax,myYmax-point.y); // Realize the panning
+        myXmax = point.x; myYmax = point.y;    
+        break;
+      case CurAction3d_GlobalPanning : // nothing           
         break;
-        case  CurAction3d_DynamicRotation :
-          myView->Rotation(point.x,point.y);
-             myView->Redraw();
+      case  CurAction3d_DynamicRotation :
+        myView->Rotation(point.x,point.y);
+        myView->Redraw();
         break;
-        default :
-           Standard_Failure::Raise(" incompatible Current Mode ");
+      default :
+        Standard_Failure::Raise(" incompatible Current Mode ");
         break;
-        }//  switch (myCurrentMode)
-      }// if ( nFlags & MK_CONTROL )  else 
-    } else //   if ( nFlags & MK_LBUTTON) 
-    //   ============================  MIDDLE BUTTON =======================
-    if ( nFlags & MK_MBUTTON)
+      }//  switch (myCurrentMode)
+    }// if ( nFlags & MK_CONTROL )  else 
+  } 
+  else if ( nFlags & MK_MBUTTON)
+  {
+    if ( nFlags & MK_CONTROL ) 
     {
-     if ( nFlags & MK_CONTROL ) 
-         {
-               myView->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)
+      myView->Pan(point.x-myXmax,myYmax-point.y); // Realize the panning
+      myXmax = point.x; myYmax = point.y;      
+
+    }
+  } 
+  else if ( nFlags & MK_RBUTTON)
+  {
+    if ( nFlags & MK_CONTROL ) 
     {
-     if ( nFlags & MK_CONTROL ) 
-         {
-        myView->Rotation(point.x,point.y);
-         }
-    }else //if ( nFlags & MK_RBUTTON)
-    //   ============================  NO BUTTON =======================
-    {  // No buttons 
-         myXmax = point.x; myYmax = point.y;   
-         if (nFlags & MK_SHIFT)
-               GetDocument()->ShiftMoveEvent(point.x,point.y,myView);
-         else
-               GetDocument()->MoveEvent(point.x,point.y,myView);
-   }
+      myView->Rotation(point.x,point.y);
+    }
+  }
+  else 
+  {  // No buttons 
+    myXmax = point.x; myYmax = point.y;        
+    if (nFlags & MK_SHIFT)
+      GetDocument()->ShiftMoveEvent(point.x,point.y,myView);
+    else
+      GetDocument()->MoveEvent(point.x,point.y,myView);
+  }
 }
 
 void OCC_3dView::DrawRectangle(const Standard_Integer  MinX    ,