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>
12 #include <Standard_SStream.hxx>
16 static char THIS_FILE[] = __FILE__;
19 /////////////////////////////////////////////////////////////////////////////
22 IMPLEMENT_DYNCREATE(COCCDemoDoc, CDocument)
24 BEGIN_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)
40 /////////////////////////////////////////////////////////////////////////////
41 // COCCDemoDoc construction/destruction
43 COCCDemoDoc::COCCDemoDoc()
45 // TODO: add one-time construction code here
46 Handle(Graphic3d_GraphicDriver) aGraphicDriver =
47 ((COCCDemoApp*)AfxGetApp())->GetGraphicDriver();
49 myViewer = new V3d_Viewer(aGraphicDriver, (Standard_ExtString )"Visu3D");
50 myViewer->SetDefaultLights();
51 myViewer->SetLightOn();
52 myViewer->SetDefaultBackgroundColor(Quantity_TOC_RGB, 0.,0.,0.);
54 myAISContext = new AIS_InteractiveContext(myViewer);
56 myPresentation = OCCDemo_Presentation::Current;
57 myPresentation->SetDocument(this);
59 strcpy_s(myDataDir, "Data");
60 strcpy_s(myLastPath, ".");
63 COCCDemoDoc::~COCCDemoDoc()
67 BOOL COCCDemoDoc::OnNewDocument()
69 if (!CDocument::OnNewDocument())
72 // TODO: add reinitialization code here
73 // (SDI documents will reuse this document)
74 SetTitle(myPresentation->GetName());
76 myAISContext->EraseAll();
77 myAISContext->SetDisplayMode(AIS_Shaded);
79 POSITION pos = GetFirstViewPosition();
82 COCCDemoView* pView = (COCCDemoView*) GetNextView(pos);
89 void COCCDemoDoc::Start()
91 myPresentation->Init();
95 /////////////////////////////////////////////////////////////////////////////
96 // COCCDemoDoc serialization
98 void COCCDemoDoc::Serialize(CArchive& ar)
101 {}// TODO: add storing code here
103 {}// TODO: add loading code here
106 /////////////////////////////////////////////////////////////////////////////
107 // COCCDemoDoc diagnostics
110 void COCCDemoDoc::AssertValid() const
112 CDocument::AssertValid();
115 void COCCDemoDoc::Dump(CDumpContext& dc) const
121 /////////////////////////////////////////////////////////////////////////////
122 // COCCDemoDoc commands
124 void COCCDemoDoc::OnFileNew()
130 void COCCDemoDoc::InitViewButtons()
132 POSITION pos = GetFirstViewPosition();
135 COCCDemoView* pView = (COCCDemoView*) GetNextView(pos);
136 pView->InitButtons();
140 void COCCDemoDoc::DoSample()
144 HCURSOR hOldCursor = ::GetCursor();
145 HCURSOR hNewCursor = AfxGetApp()->LoadStandardCursor(IDC_APPSTARTING);
147 SetCursor(hNewCursor);
151 myPresentation->DoSample();
153 catch (Standard_Failure)
155 Standard_SStream aSStream;
156 aSStream << "An exception was caught: " << Standard_Failure::Caught() << ends;
157 CString aMsg = aSStream.str().c_str();
158 AfxMessageBox (aMsg);
161 SetCursor(hOldCursor);
164 void COCCDemoDoc::OnBUTTONStart()
166 myAISContext->EraseAll();
167 myPresentation->FirstSample();
171 void COCCDemoDoc::OnBUTTONEnd()
173 myAISContext->EraseAll();
174 myPresentation->LastSample();
178 void COCCDemoDoc::OnBUTTONRepeat()
183 void COCCDemoDoc::OnBUTTONNext()
185 if (!myPresentation->AtLastSample())
187 myPresentation->NextSample();
192 void COCCDemoDoc::OnBUTTONPrev()
194 if (!myPresentation->AtFirstSample())
196 myPresentation->PrevSample();
201 void COCCDemoDoc::OnUpdateBUTTONNext(CCmdUI* pCmdUI)
203 pCmdUI->Enable (!myPresentation->AtLastSample());
206 void COCCDemoDoc::OnUpdateBUTTONPrev(CCmdUI* pCmdUI)
208 pCmdUI->Enable (!myPresentation->AtFirstSample());
211 void COCCDemoDoc::OnBUTTONShowResult()
213 myShowResult = !myShowResult;
215 myCResultDialog.ShowWindow(SW_SHOWNORMAL);
217 myCResultDialog.ShowWindow(SW_HIDE);
220 void COCCDemoDoc::OnUpdateBUTTONShowResult(CCmdUI* pCmdUI)
222 pCmdUI->SetCheck (myShowResult);
225 void COCCDemoDoc::OnDumpView()
227 for (POSITION aPos = GetFirstViewPosition(); aPos != NULL;)
229 COCCDemoView* pView = (COCCDemoView* )GetNextView (aPos);
230 pView->UpdateWindow();
233 myViewer->InitActiveViews();
234 Handle(V3d_View) aView = myViewer->ActiveView();
238 void COCCDemoDoc::Fit()
240 CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
241 CMDIChildWnd *pChild = (CMDIChildWnd *) pFrame->GetActiveFrame();
242 COCCDemoView *pView = (COCCDemoView *) pChild->GetActiveView();