1 // OCCDemoDoc.cpp : implementation of the COCCDemoDoc class
7 #include "OCCDemoDoc.h"
8 #include "OCCDemo_Presentation.h"
9 #include "OCCDemoView.h"
11 #include <Standard_ErrorHandler.hxx>
15 static char THIS_FILE[] = __FILE__;
18 /////////////////////////////////////////////////////////////////////////////
21 IMPLEMENT_DYNCREATE(COCCDemoDoc, CDocument)
23 BEGIN_MESSAGE_MAP(COCCDemoDoc, CDocument)
24 //{{AFX_MSG_MAP(COCCDemoDoc)
25 ON_COMMAND(ID_BUTTONNext, OnBUTTONNext)
26 ON_COMMAND(ID_BUTTONStart, OnBUTTONStart)
27 ON_COMMAND(ID_BUTTONRepeat, OnBUTTONRepeat)
28 ON_COMMAND(ID_BUTTONPrev, OnBUTTONPrev)
29 ON_COMMAND(ID_BUTTONEnd, OnBUTTONEnd)
30 ON_UPDATE_COMMAND_UI(ID_BUTTONNext, OnUpdateBUTTONNext)
31 ON_UPDATE_COMMAND_UI(ID_BUTTONPrev, OnUpdateBUTTONPrev)
32 ON_COMMAND(ID_FILE_NEW, OnFileNew)
33 ON_COMMAND(ID_BUTTONShowResult, OnBUTTONShowResult)
34 ON_UPDATE_COMMAND_UI(ID_BUTTONShowResult, OnUpdateBUTTONShowResult)
35 ON_COMMAND(ID_DUMP_VIEW, OnDumpView)
39 /////////////////////////////////////////////////////////////////////////////
40 // COCCDemoDoc construction/destruction
42 COCCDemoDoc::COCCDemoDoc()
44 // TODO: add one-time construction code here
45 Handle(Graphic3d_WNTGraphicDevice) theGraphicDevice =
46 ((COCCDemoApp*)AfxGetApp())->GetGraphicDevice();
48 myViewer = new V3d_Viewer(theGraphicDevice);
49 myViewer->SetDefaultLights();
50 myViewer->SetLightOn();
51 myViewer->SetDefaultBackgroundColor(Quantity_TOC_RGB, 0.,0.,0.);
53 myAISContext = new AIS_InteractiveContext(myViewer);
55 myPresentation = OCCDemo_Presentation::Current;
56 myPresentation->SetDocument(this);
59 if (!aFile.Open("Data\\points.dat", CFile::modeRead)){
60 strcpy(myDataDir, "..\\Data");
63 strcpy(myDataDir, "Data");
64 strcpy(myLastPath, ".");
67 COCCDemoDoc::~COCCDemoDoc()
71 BOOL COCCDemoDoc::OnNewDocument()
73 if (!CDocument::OnNewDocument())
76 // TODO: add reinitialization code here
77 // (SDI documents will reuse this document)
79 SetTitle(myPresentation->GetName());
81 myAISContext->EraseAll(Standard_False);
82 myAISContext->SetDisplayMode(AIS_Shaded);
84 POSITION pos = GetFirstViewPosition();
87 COCCDemoView* pView = (COCCDemoView*) GetNextView(pos);
94 void COCCDemoDoc::Start()
96 myPresentation->Init();
100 /////////////////////////////////////////////////////////////////////////////
101 // COCCDemoDoc serialization
103 void COCCDemoDoc::Serialize(CArchive& ar)
106 {}// TODO: add storing code here
108 {}// TODO: add loading code here
111 /////////////////////////////////////////////////////////////////////////////
112 // COCCDemoDoc diagnostics
115 void COCCDemoDoc::AssertValid() const
117 CDocument::AssertValid();
120 void COCCDemoDoc::Dump(CDumpContext& dc) const
126 /////////////////////////////////////////////////////////////////////////////
127 // COCCDemoDoc commands
129 void COCCDemoDoc::OnFileNew()
135 void COCCDemoDoc::InitViewButtons()
137 POSITION pos = GetFirstViewPosition();
140 COCCDemoView* pView = (COCCDemoView*) GetNextView(pos);
141 pView->InitButtons();
145 void COCCDemoDoc::DoSample()
149 HCURSOR hOldCursor = ::GetCursor();
150 HCURSOR hNewCursor = AfxGetApp()->LoadStandardCursor(IDC_APPSTARTING);
152 SetCursor(hNewCursor);
156 myPresentation->DoSample();
158 catch (Standard_Failure)
160 Standard_SStream ostr;
161 ostr<<Standard_Failure::Caught()<<"\n\0";
163 AfxMessageBox (GetSString(ostr));
166 SetCursor(hOldCursor);
169 void COCCDemoDoc::OnBUTTONStart()
171 myAISContext->EraseAll(Standard_False);
172 myPresentation->FirstSample();
176 void COCCDemoDoc::OnBUTTONEnd()
178 myAISContext->EraseAll(Standard_False);
179 myPresentation->LastSample();
183 void COCCDemoDoc::OnBUTTONRepeat()
188 void COCCDemoDoc::OnBUTTONNext()
190 if (!myPresentation->AtLastSample())
192 myPresentation->NextSample();
197 void COCCDemoDoc::OnBUTTONPrev()
199 if (!myPresentation->AtFirstSample())
201 myPresentation->PrevSample();
206 void COCCDemoDoc::OnUpdateBUTTONNext(CCmdUI* pCmdUI)
208 pCmdUI->Enable (!myPresentation->AtLastSample());
211 void COCCDemoDoc::OnUpdateBUTTONPrev(CCmdUI* pCmdUI)
213 pCmdUI->Enable (!myPresentation->AtFirstSample());
216 void COCCDemoDoc::OnBUTTONShowResult()
218 myShowResult = !myShowResult;
220 myCResultDialog.ShowWindow(SW_SHOWNORMAL);
222 myCResultDialog.ShowWindow(SW_HIDE);
225 void COCCDemoDoc::OnUpdateBUTTONShowResult(CCmdUI* pCmdUI)
227 pCmdUI->SetCheck (myShowResult);
230 void COCCDemoDoc::OnDumpView()
232 // save current directory and restore it on exit
233 char aCurPath[MAX_PATH];
234 ::GetCurrentDirectory(MAX_PATH, aCurPath);
236 ::SetCurrentDirectory(myLastPath);
238 CFileDialog *aDlg = new CFileDialog(false, "gif", "OCCView.gif",
239 OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "GIF Files (*.gif)|*.gif||", NULL);
241 int result = aDlg->DoModal();
244 CString aFileName = aDlg->GetFileName();
247 POSITION pos = GetFirstViewPosition();
250 COCCDemoView* pView = (COCCDemoView*) GetNextView(pos);
251 pView->UpdateWindow();
254 myViewer->InitActiveViews();
255 Handle(V3d_View) aView = myViewer->ActiveView();
256 char aStrFileName[MAX_PATH];
257 strcpy(aStrFileName, aFileName);
258 aView->Dump(aStrFileName);
263 ::GetCurrentDirectory(MAX_PATH, myLastPath);
264 ::SetCurrentDirectory(aCurPath);
267 void COCCDemoDoc::Fit()
269 CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
270 CMDIChildWnd *pChild = (CMDIChildWnd *) pFrame->GetActiveFrame();
271 COCCDemoView *pView = (COCCDemoView *) pChild->GetActiveView();