Integration of OCCT 6.5.0 from SVN
[occt.git] / samples / mfc / standard / 10_Convert / src / WNT / OCCDemoDoc.cpp
CommitLineData
7fd59977 1// OCCDemoDoc.cpp : implementation of the COCCDemoDoc class
2//
3
4#include "stdafx.h"
5#include "OCCDemo.h"
6
7#include "OCCDemoDoc.h"
8#include "OCCDemo_Presentation.h"
9#include "OCCDemoView.h"
10
11#include <Standard_ErrorHandler.hxx>
12#include <Standard_SStream.hxx>
13
14#ifdef _DEBUG
15#undef THIS_FILE
16static char THIS_FILE[] = __FILE__;
17#endif
18
19/////////////////////////////////////////////////////////////////////////////
20// COCCDemoDoc
21
22IMPLEMENT_DYNCREATE(COCCDemoDoc, CDocument)
23
24BEGIN_MESSAGE_MAP(COCCDemoDoc, CDocument)
25 //{{AFX_MSG_MAP(COCCDemoDoc)
26 ON_COMMAND(ID_BUTTONNext, OnBUTTONNext)
27 ON_COMMAND(ID_BUTTONStart, OnBUTTONStart)
28 ON_COMMAND(ID_BUTTONRepeat, OnBUTTONRepeat)
29 ON_COMMAND(ID_BUTTONPrev, OnBUTTONPrev)
30 ON_COMMAND(ID_BUTTONEnd, OnBUTTONEnd)
31 ON_UPDATE_COMMAND_UI(ID_BUTTONNext, OnUpdateBUTTONNext)
32 ON_UPDATE_COMMAND_UI(ID_BUTTONPrev, OnUpdateBUTTONPrev)
33 ON_COMMAND(ID_FILE_NEW, OnFileNew)
34 ON_COMMAND(ID_BUTTONShowResult, OnBUTTONShowResult)
35 ON_UPDATE_COMMAND_UI(ID_BUTTONShowResult, OnUpdateBUTTONShowResult)
36 ON_COMMAND(ID_DUMP_VIEW, OnDumpView)
37 //}}AFX_MSG_MAP
38END_MESSAGE_MAP()
39
40/////////////////////////////////////////////////////////////////////////////
41// COCCDemoDoc construction/destruction
42
43COCCDemoDoc::COCCDemoDoc()
44{
45 // TODO: add one-time construction code here
46 Handle(Graphic3d_WNTGraphicDevice) theGraphicDevice =
47 ((COCCDemoApp*)AfxGetApp())->GetGraphicDevice();
48
49 myViewer = new V3d_Viewer(theGraphicDevice,(short *) "Visu3D");
50 myViewer->SetDefaultLights();
51 myViewer->SetLightOn();
52 myViewer->SetDefaultBackgroundColor(Quantity_TOC_RGB, 0.,0.,0.);
53
54 myAISContext = new AIS_InteractiveContext(myViewer);
55 myShowResult = FALSE;
56 myPresentation = OCCDemo_Presentation::Current;
57 myPresentation->SetDocument(this);
58
59 strcpy_s(myDataDir, "Data");
60 strcpy_s(myLastPath, ".");
61}
62
63COCCDemoDoc::~COCCDemoDoc()
64{
65}
66
67BOOL COCCDemoDoc::OnNewDocument()
68{
69 if (!CDocument::OnNewDocument())
70 return FALSE;
71
72 // TODO: add reinitialization code here
73 // (SDI documents will reuse this document)
74 SetTitle(myPresentation->GetName());
75
76 myAISContext->EraseAll(Standard_False);
77 myAISContext->SetDisplayMode(AIS_Shaded);
78
79 POSITION pos = GetFirstViewPosition();
80 while (pos != NULL)
81 {
82 COCCDemoView* pView = (COCCDemoView*) GetNextView(pos);
83 pView->Reset();
84 }
85
86 return TRUE;
87}
88
89void COCCDemoDoc::Start()
90{
91 myPresentation->Init();
92 OnBUTTONStart();
93}
94
95/////////////////////////////////////////////////////////////////////////////
96// COCCDemoDoc serialization
97
98void COCCDemoDoc::Serialize(CArchive& ar)
99{
100 if (ar.IsStoring())
101 {}// TODO: add storing code here
102 else
103 {}// TODO: add loading code here
104}
105
106/////////////////////////////////////////////////////////////////////////////
107// COCCDemoDoc diagnostics
108
109#ifdef _DEBUG
110void COCCDemoDoc::AssertValid() const
111{
112 CDocument::AssertValid();
113}
114
115void COCCDemoDoc::Dump(CDumpContext& dc) const
116{
117 CDocument::Dump(dc);
118}
119#endif //_DEBUG
120
121/////////////////////////////////////////////////////////////////////////////
122// COCCDemoDoc commands
123
124void COCCDemoDoc::OnFileNew()
125{
126 OnNewDocument();
127 Start();
128}
129
130void COCCDemoDoc::InitViewButtons()
131{
132 POSITION pos = GetFirstViewPosition();
133 while (pos != NULL)
134 {
135 COCCDemoView* pView = (COCCDemoView*) GetNextView(pos);
136 pView->InitButtons();
137 }
138}
139
140void COCCDemoDoc::DoSample()
141{
142 InitViewButtons();
143
144 HCURSOR hOldCursor = ::GetCursor();
145 HCURSOR hNewCursor = AfxGetApp()->LoadStandardCursor(IDC_APPSTARTING);
146
147 SetCursor(hNewCursor);
148 {
149 try
150 {
151 myPresentation->DoSample();
152 }
153 catch (Standard_Failure)
154 {
155 Standard_SStream aSStream;
156 aSStream << "An exception was caught: " << Standard_Failure::Caught() << ends;
157 Standard_CString aMsg = aSStream.str().c_str();
158// aSStream.rdbuf()->freeze(0); // allow deletion of dynamic array
159 AfxMessageBox (aMsg);
160 }
161 }
162 SetCursor(hOldCursor);
163}
164
165void COCCDemoDoc::OnBUTTONStart()
166{
167 myAISContext->EraseAll(Standard_False);
168 myPresentation->FirstSample();
169 DoSample();
170}
171
172void COCCDemoDoc::OnBUTTONEnd()
173{
174 myAISContext->EraseAll(Standard_False);
175 myPresentation->LastSample();
176 DoSample();
177}
178
179void COCCDemoDoc::OnBUTTONRepeat()
180{
181 DoSample();
182}
183
184void COCCDemoDoc::OnBUTTONNext()
185{
186 if (!myPresentation->AtLastSample())
187 {
188 myPresentation->NextSample();
189 DoSample();
190 }
191}
192
193void COCCDemoDoc::OnBUTTONPrev()
194{
195 if (!myPresentation->AtFirstSample())
196 {
197 myPresentation->PrevSample();
198 DoSample();
199 }
200}
201
202void COCCDemoDoc::OnUpdateBUTTONNext(CCmdUI* pCmdUI)
203{
204 pCmdUI->Enable (!myPresentation->AtLastSample());
205}
206
207void COCCDemoDoc::OnUpdateBUTTONPrev(CCmdUI* pCmdUI)
208{
209 pCmdUI->Enable (!myPresentation->AtFirstSample());
210}
211
212void COCCDemoDoc::OnBUTTONShowResult()
213{
214 myShowResult = !myShowResult;
215 if (myShowResult)
216 myCResultDialog.ShowWindow(SW_SHOWNORMAL);
217 else
218 myCResultDialog.ShowWindow(SW_HIDE);
219}
220
221void COCCDemoDoc::OnUpdateBUTTONShowResult(CCmdUI* pCmdUI)
222{
223 pCmdUI->SetCheck (myShowResult);
224}
225
226void COCCDemoDoc::OnDumpView()
227{
228 // save current directory and restore it on exit
229 char aCurPath[MAX_PATH];
230 ::GetCurrentDirectory(MAX_PATH, aCurPath);
231
232 ::SetCurrentDirectory(myLastPath);
233
234 CFileDialog *aDlg = new CFileDialog(false, "gif", "OCCView.gif",
235 OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "GIF Files (*.gif)|*.gif||", NULL);
236
237 int result = aDlg->DoModal();
238 if ( result == IDOK)
239 {
240 CString aFileName = aDlg->GetFileName();
241 delete aDlg;
242
243 POSITION pos = GetFirstViewPosition();
244 while (pos != NULL)
245 {
246 COCCDemoView* pView = (COCCDemoView*) GetNextView(pos);
247 pView->UpdateWindow();
248 }
249
250 myViewer->InitActiveViews();
251 Handle(V3d_View) aView = myViewer->ActiveView();
252 char aStrFileName[MAX_PATH];
253 strcpy_s(aStrFileName, aFileName);
254 aView->Dump(aStrFileName);
255 }
256 else
257 delete aDlg;
258
259 ::GetCurrentDirectory(MAX_PATH, myLastPath);
260 ::SetCurrentDirectory(aCurPath);
261}
262
263void COCCDemoDoc::Fit()
264{
265 CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
266 CMDIChildWnd *pChild = (CMDIChildWnd *) pFrame->GetActiveFrame();
267 COCCDemoView *pView = (COCCDemoView *) pChild->GetActiveView();
268 pView->FitAll();
269}