0023776: Redesign of MFC samples after V2d viewer removing
[occt.git] / samples / mfc / standard / 08_HLR / src / HLRDoc.cpp
1 // HLRDoc.cpp : implementation of the CHLRDoc class
2 //
3
4
5 #include "stdafx.h"
6
7 #include "HLRDoc.h"
8 #include "HLRApp.h"
9 #include <OCC_2dView.h>
10 #include <OCC_3dView.h>
11
12
13 #include <ImportExport/ImportExport.h>
14 #include "AISDialogs.h"
15 #include <AIS_ListOfInteractive.hxx>
16
17 #ifdef _DEBUG
18 //#define new DEBUG_NEW  // by cascade
19 #undef THIS_FILE
20 static char THIS_FILE[] = __FILE__;
21 #endif
22
23 /////////////////////////////////////////////////////////////////////////////
24 // CHLRDoc
25
26 IMPLEMENT_DYNCREATE(CHLRDoc, CDocument)
27
28
29 BEGIN_MESSAGE_MAP(CHLRDoc, OCC_3dBaseDoc)
30   //{{AFX_MSG_MAP(CHLRDoc)
31   ON_COMMAND(ID_WINDOW_NEW3D, OnWindowNew3d)
32   ON_COMMAND(ID_WINDOW_NEW2D, OnWindowNew2d)
33   ON_COMMAND(ID_FILE_IMPORT_BREP, OnFileImportBrep)
34   ON_COMMAND(ID_BUTTON_HLRDialog, OnBUTTONHLRDialog)
35   //}}AFX_MSG_MAP
36
37
38 END_MESSAGE_MAP()
39
40 /////////////////////////////////////////////////////////////////////////////
41 // CHLRDoc construction/destruction
42
43 CHLRDoc::CHLRDoc()
44 {
45   // TODO: add one-time construction code here
46   Handle(Graphic3d_GraphicDriver) theGraphicDriver = 
47     ((CHLRApp*)AfxGetApp())->GetGraphicDriver();
48
49   // VIEWER 3D
50   TCollection_ExtendedString a3DName ("Visu3D");
51   myViewer = new V3d_Viewer (theGraphicDriver, a3DName.ToExtString(), "", 1000.0,
52                              V3d_XposYnegZpos, Quantity_NOC_GRAY30,
53                              V3d_ZBUFFER, V3d_GOURAUD, V3d_WAIT, 
54                              Standard_True, Standard_False);
55
56   myViewer->SetDefaultLights();
57   myViewer->SetLightOn();
58
59   myAISContext =new AIS_InteractiveContext (myViewer);
60
61   // 2D VIEWER: exploit V3d viewer for 2D visualization
62   TCollection_ExtendedString a2DName ("Visu2D");
63   my2DViewer = new V3d_Viewer (theGraphicDriver, a2DName.ToExtString());
64   my2DViewer->SetCircularGridValues (0, 0, 10, 8, 0);
65   my2DViewer->SetRectangularGridValues (0, 0, 10, 10, 0);
66
67   //Set projection mode for 2D visualization
68   my2DViewer->SetDefaultViewProj (V3d_Zpos);
69
70   myInteractiveContext2D = new AIS_InteractiveContext (my2DViewer);
71
72   CFrameWnd* pFrame2d = ((CHLRApp*)AfxGetApp())->CreateView2D (this);
73   pFrame2d->ShowWindow (SW_SHOWNORMAL);
74   myCSelectionDialogIsCreated = false;
75 }
76
77 CHLRDoc::~CHLRDoc()
78 {
79   if (myCSelectionDialogIsCreated)
80   {
81     myCSelectionDialog->ShowWindow(SW_ERASE);
82     delete myCSelectionDialog;
83   }
84 }
85
86 void CHLRDoc::OnWindowNew2d() 
87 {
88   ((CHLRApp*)AfxGetApp())->CreateView2D(this);  
89 }
90
91 void CHLRDoc::OnWindowNew3d() 
92 {
93   ((CHLRApp*)AfxGetApp())->CreateView3D(this);  
94 }
95
96 //  nCmdShow could be :    ( default is SW_RESTORE ) 
97 // SW_HIDE   SW_SHOWNORMAL   SW_NORMAL   
98 // SW_SHOWMINIMIZED     SW_SHOWMAXIMIZED    
99 // SW_MAXIMIZE          SW_SHOWNOACTIVATE   
100 // SW_SHOW              SW_MINIMIZE         
101 // SW_SHOWMINNOACTIVE   SW_SHOWNA           
102 // SW_RESTORE           SW_SHOWDEFAULT      
103 // SW_MAX    
104
105 // use pViewClass = RUNTIME_CLASS( CHLRView3D ) for 3D Views
106 // use pViewClass = RUNTIME_CLASS( CHLRView2D ) for 2D Views
107
108 void CHLRDoc::ActivateFrame(CRuntimeClass* pViewClass,int nCmdShow)
109 {
110   POSITION position = GetFirstViewPosition();
111   while (position != (POSITION)NULL)
112   {
113     CView* pCurrentView = (CView*)GetNextView(position);
114     if(pCurrentView->IsKindOf(pViewClass) )
115     {
116       ASSERT_VALID(pCurrentView);
117       CFrameWnd* pParentFrm = pCurrentView->GetParentFrame();
118       ASSERT(pParentFrm != (CFrameWnd *)NULL);
119       // simply make the frame window visible
120       pParentFrm->ActivateFrame(nCmdShow);
121     }
122   }
123 }
124
125 void CHLRDoc::FitAll2DViews(Standard_Boolean UpdateViewer)
126 {
127   if (UpdateViewer)   my2DViewer->Update();
128   POSITION position = GetFirstViewPosition();
129   while (position != (POSITION)NULL)
130   {
131     CView* pCurrentView = (CView*)GetNextView(position);
132     if(pCurrentView->IsKindOf(RUNTIME_CLASS(OCC_2dView)) )
133     {
134       ASSERT_VALID(pCurrentView);
135       ((OCC_2dView*)pCurrentView)->GetV2dView()->FitAll();
136     }
137   }
138 }
139
140 /////////////////////////////////////////////////////////////////////////////
141 // CHLRDoc diagnostics
142
143 #ifdef _DEBUG
144 void CHLRDoc::AssertValid() const
145 {
146   CDocument::AssertValid();
147 }
148
149 void CHLRDoc::Dump(CDumpContext& dc) const
150 {
151   CDocument::Dump(dc);
152 }
153 #endif //_DEBUG
154
155 /////////////////////////////////////////////////////////////////////////////
156 // CHLRDoc commands
157 void CHLRDoc::OnBUTTONHLRDialog() 
158 {
159   if (!myCSelectionDialogIsCreated)
160   {
161     myCSelectionDialog = new CSelectionDialog(this,AfxGetMainWnd());
162     myCSelectionDialog->Create(CSelectionDialog::IDD, AfxGetMainWnd());
163     myCSelectionDialogIsCreated = true;
164   }
165   myCSelectionDialog->ShowWindow(SW_RESTORE);   
166 }
167
168 void CHLRDoc::OnFileImportBrep() 
169 {   CImportExport::ReadBREP(myAISContext);
170         Fit();
171 }
172 void CHLRDoc::Fit()
173 {
174   POSITION position = GetFirstViewPosition();
175   while (position != (POSITION)NULL)
176   {
177     CView* pCurrentView = (CView*)GetNextView(position);
178     if(pCurrentView->IsKindOf(RUNTIME_CLASS(OCC_3dView)) )
179     {
180       ((OCC_3dView *) pCurrentView)->FitAll();
181     }
182   }
183 }