1 // OCC_3dBaseDoc.cpp: implementation of the OCC_3dBaseDoc class.
2 //
3 //////////////////////////////////////////////////////////////////////
4 
5 #include <stdafx.h>
6 
7 #include "OCC_3dBaseDoc.h"
8 
9 #include "OCC_3dView.h"
10 #include "OCC_App.h"
11 #include <res\OCC_Resource.h>
12 #include "ImportExport/ImportExport.h"
13 #include "AISDialogs.h"
14 #include <AIS_ListOfInteractive.hxx>
15 #include <AIS_ListIteratorOfListOfInteractive.hxx>
16 #include <TColStd_ListIteratorOfListOfInteger.hxx>
17 #include <TColStd_ListOfInteger.hxx>
18 #include <TopoDS_Shape.hxx>
19 
BEGIN_MESSAGE_MAP(OCC_3dBaseDoc,OCC_BaseDoc)20 BEGIN_MESSAGE_MAP(OCC_3dBaseDoc, OCC_BaseDoc)
21   //{{AFX_MSG_MAP(OCC_3dBaseDoc)
22   ON_COMMAND(ID_FILE_IMPORT_BREP, OnFileImportBrep)
23   ON_COMMAND(ID_FILE_EXPORT_BREP, OnFileExportBrep)
24   ON_COMMAND(ID_OBJECT_ERASE, OnObjectErase)
25   ON_UPDATE_COMMAND_UI(ID_OBJECT_ERASE, OnUpdateObjectErase)
26   ON_COMMAND(ID_OBJECT_COLOR, OnObjectColor)
27   ON_UPDATE_COMMAND_UI(ID_OBJECT_COLOR, OnUpdateObjectColor)
28   ON_COMMAND(ID_OBJECT_SHADING, OnObjectShading)
29   ON_UPDATE_COMMAND_UI(ID_OBJECT_SHADING, OnUpdateObjectShading)
30   ON_COMMAND(ID_OBJECT_WIREFRAME, OnObjectWireframe)
31   ON_UPDATE_COMMAND_UI(ID_OBJECT_WIREFRAME, OnUpdateObjectWireframe)
32   ON_COMMAND(ID_OBJECT_TRANSPARENCY, OnObjectTransparency)
33   ON_UPDATE_COMMAND_UI(ID_OBJECT_TRANSPARENCY, OnUpdateObjectTransparency)
34   ON_COMMAND(ID_OBJECT_MATERIAL, OnObjectMaterial)
35   ON_UPDATE_COMMAND_UI(ID_OBJECT_MATERIAL, OnUpdateObjectMaterial)
36   ON_COMMAND(ID_OBJECT_DISPLAYALL, OnObjectDisplayall)
37   ON_UPDATE_COMMAND_UI(ID_OBJECT_DISPLAYALL, OnUpdateObjectDisplayall)
38   ON_COMMAND(ID_OBJECT_REMOVE, OnObjectRemove)
39   ON_UPDATE_COMMAND_UI(ID_OBJECT_REMOVE, OnUpdateObjectRemove)
40 
41   //}}AFX_MSG_MAP
42   ON_COMMAND_EX_RANGE(ID_OBJECT_MATERIAL_BRASS,ID_OBJECT_MATERIAL_DEFAULT, OnObjectMaterialRange)
43   ON_UPDATE_COMMAND_UI_RANGE(ID_OBJECT_MATERIAL_BRASS,ID_OBJECT_MATERIAL_DEFAULT, OnUpdateObjectMaterialRange)
44 
45   //RayTracing
46   ON_COMMAND(ID_OBJECT_RAY_TRACING,OnObjectRayTracing)
47   ON_COMMAND(ID_OBJECT_SHADOWS,OnObjectShadows)
48   ON_COMMAND(ID_OBJECT_REFLECTIONS,OnObjectReflections)
49   ON_COMMAND(ID_OBJECT_ANTI_ALIASING,OnObjectAntiAliasing)
50 
51   ON_UPDATE_COMMAND_UI(ID_OBJECT_RAY_TRACING, OnUpdateV3dButtons)
52   ON_UPDATE_COMMAND_UI(ID_OBJECT_SHADOWS, OnUpdateV3dButtons)
53   ON_UPDATE_COMMAND_UI(ID_OBJECT_REFLECTIONS, OnUpdateV3dButtons)
54   ON_UPDATE_COMMAND_UI(ID_OBJECT_ANTI_ALIASING, OnUpdateV3dButtons)
55 END_MESSAGE_MAP()
56 
57 
58 //////////////////////////////////////////////////////////////////////
59 // Construction/Destruction
60 //////////////////////////////////////////////////////////////////////
61 
62 OCC_3dBaseDoc::OCC_3dBaseDoc()
63 :myPopupMenuNumber(0)
64 {
65   AfxInitRichEdit();
66 
67   Handle(Graphic3d_GraphicDriver) aGraphicDriver = ((OCC_App*)AfxGetApp())->GetGraphicDriver();
68 
69   myViewer = new V3d_Viewer (aGraphicDriver);
70   myViewer->SetDefaultLights();
71   myViewer->SetLightOn();
72   myAISContext = new AIS_InteractiveContext (myViewer);
73 
74   myRayTracingIsOn            = false;
75   myRaytracedShadowsIsOn      = true;
76   myRaytracedReflectionsIsOn  = false;
77   myRaytracedAntialiasingIsOn = false;
78 }
79 
~OCC_3dBaseDoc()80 OCC_3dBaseDoc::~OCC_3dBaseDoc()
81 {
82 }
83 
84 //-----------------------------------------------------------------------------------------
85 //
86 //-----------------------------------------------------------------------------------------
DragEvent(const Standard_Integer theMouseX,const Standard_Integer theMouseY,const Standard_Integer theState,const Handle (V3d_View)& theView)87 void OCC_3dBaseDoc::DragEvent (const Standard_Integer theMouseX,
88                                const Standard_Integer theMouseY,
89                                const Standard_Integer theState,
90                                const Handle(V3d_View)& theView)
91 {
92   // TheState == -1  button down
93   // TheState ==  0  move
94   // TheState ==  1  button up
95 
96   static Standard_Integer aStartDragX = 0;
97   static Standard_Integer aStartDragY = 0;
98 
99   switch (theState)
100   {
101   case -1:
102     {
103       aStartDragX = theMouseX;
104       aStartDragY = theMouseY;
105       break;
106     }
107   case 0:
108     {
109       myAISContext->UpdateCurrentViewer();
110       break;
111     }
112   case 1:
113     {
114       myAISContext->SelectRectangle (Graphic3d_Vec2i (aStartDragX, aStartDragY),
115                                      Graphic3d_Vec2i (theMouseX, theMouseY),
116                                      theView);
117       myAISContext->UpdateCurrentViewer();
118       break;
119     }
120   };
121 }
122 
123 //-----------------------------------------------------------------------------------------
124 //
125 //-----------------------------------------------------------------------------------------
InputEvent(const Standard_Integer theMouseX,const Standard_Integer theMouseY,const Handle (V3d_View)& theView)126 void OCC_3dBaseDoc::InputEvent (const Standard_Integer theMouseX,
127                                 const Standard_Integer theMouseY,
128                                 const Handle(V3d_View)& theView)
129 {
130   myAISContext->MoveTo (theMouseX, theMouseY, theView, Standard_False);
131   myAISContext->SelectDetected();
132   myAISContext->UpdateCurrentViewer();
133 }
134 
135 //-----------------------------------------------------------------------------------------
136 //
137 //-----------------------------------------------------------------------------------------
MoveEvent(const Standard_Integer theMouseX,const Standard_Integer theMouseY,const Handle (V3d_View)& theView)138 void OCC_3dBaseDoc::MoveEvent (const Standard_Integer theMouseX,
139                                const Standard_Integer theMouseY,
140                                const Handle(V3d_View)& theView)
141 {
142   myAISContext->MoveTo (theMouseX, theMouseY, theView, Standard_True);
143 }
144 
145 //-----------------------------------------------------------------------------------------
146 //
147 //-----------------------------------------------------------------------------------------
ShiftMoveEvent(const Standard_Integer theMouseX,const Standard_Integer theMouseY,const Handle (V3d_View)& theView)148 void OCC_3dBaseDoc::ShiftMoveEvent (const Standard_Integer theMouseX,
149                                     const Standard_Integer theMouseY,
150                                     const Handle(V3d_View)& theView)
151 {
152   myAISContext->MoveTo (theMouseX, theMouseY, theView, Standard_True);
153 }
154 
155 //-----------------------------------------------------------------------------------------
156 //
157 //-----------------------------------------------------------------------------------------
ShiftDragEvent(const Standard_Integer theMouseX,const Standard_Integer theMouseY,const Standard_Integer theState,const Handle (V3d_View)& theView)158 void OCC_3dBaseDoc::ShiftDragEvent (const Standard_Integer theMouseX,
159                                     const Standard_Integer theMouseY,
160                                     const Standard_Integer theState,
161                                     const Handle(V3d_View)& theView)
162 {
163   // TheState == -1  button down
164   // TheState ==  0  move
165   // TheState ==  1  button up
166 
167   static Standard_Integer aStartDragX = 0;
168   static Standard_Integer aStartDragY = 0;
169 
170   if (theState == -1)
171   {
172     // button down
173     aStartDragX = theMouseX;
174     aStartDragY = theMouseY;
175   }
176 
177   if (theState == 0)
178   {
179     // button up
180     myAISContext->SelectRectangle (Graphic3d_Vec2i (aStartDragX, aStartDragY),
181                                    Graphic3d_Vec2i (theMouseX, theMouseY),
182                                    theView, AIS_SelectionScheme_XOR);
183     myAISContext->UpdateCurrentViewer();
184   }
185 }
186 
187 //-----------------------------------------------------------------------------------------
188 //
189 //-----------------------------------------------------------------------------------------
ShiftInputEvent(const Standard_Integer,const Standard_Integer,const Handle (V3d_View)&)190 void OCC_3dBaseDoc::ShiftInputEvent (const Standard_Integer /*theMouseX*/,
191                                      const Standard_Integer /*theMouseY*/,
192                                      const Handle(V3d_View)& /*theView*/)
193 {
194   myAISContext->SelectDetected (AIS_SelectionScheme_XOR);
195   myAISContext->UpdateCurrentViewer();
196 }
197 
198 //-----------------------------------------------------------------------------------------
199 //
200 //-----------------------------------------------------------------------------------------
Popup(const Standard_Integer theMouseX,const Standard_Integer theMouseY,const Handle (V3d_View)& theView)201 void  OCC_3dBaseDoc::Popup (const Standard_Integer theMouseX,
202                             const Standard_Integer theMouseY,
203                             const Handle(V3d_View)& theView)
204 {
205   // Base check which context menu to call
206   if (!myPopupMenuNumber)
207   {
208     myAISContext->InitSelected();
209     if (myAISContext->MoreSelected())
210       myPopupMenuNumber=1;
211   }
212 
213   CMenu menu;
214   VERIFY(menu.LoadMenu(IDR_Popup3D));
215   CMenu* pPopup = menu.GetSubMenu(myPopupMenuNumber);
216 
217   ASSERT(pPopup != NULL);
218    if (myPopupMenuNumber == 1) // more than 1 object.
219   {
220     bool OneOrMoreInShading = false;
221 	for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
222     if (myAISContext->IsDisplayed(myAISContext->SelectedInteractive(),1)) OneOrMoreInShading=true;
223 	if(!OneOrMoreInShading)
224    	pPopup->EnableMenuItem(5, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);
225    }
226 
227   POINT winCoord = { theMouseX , theMouseY };
228   ClientToScreen ((HWND )theView->Window()->NativeHandle(), &winCoord);
229   pPopup->TrackPopupMenu (TPM_LEFTALIGN | TPM_RIGHTBUTTON,
230                           winCoord.x,
231                           winCoord.y,
232                           AfxGetMainWnd());
233 }
234 
Fit()235 void OCC_3dBaseDoc::Fit()
236 {
237 	CMDIFrameWnd *pFrame =  (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
238 	CMDIChildWnd *pChild =  (CMDIChildWnd *) pFrame->GetActiveFrame();
239 	OCC_3dView *pView = (OCC_3dView *) pChild->GetActiveView();
240 	pView->FitAll();
241 }
242 
OnFileImportBrep_WithInitDir(const wchar_t *)243 int OCC_3dBaseDoc::OnFileImportBrep_WithInitDir (const wchar_t* )
244 {
245   if (CImportExport::ReadBREP (myAISContext) == 1)
246     return 1;
247   Fit();
248   return 0;
249 }
250 
OnFileImportBrep()251 void OCC_3dBaseDoc::OnFileImportBrep()
252 {
253   OnFileImportBrep_WithInitDir (NULL);
254 }
255 
OnFileExportBrep()256 void OCC_3dBaseDoc::OnFileExportBrep()
257 {   CImportExport::SaveBREP(myAISContext);}
258 
OnObjectColor()259 void OCC_3dBaseDoc::OnObjectColor()
260 {
261 	Handle(AIS_InteractiveObject) Current ;
262 	COLORREF MSColor ;
263 
264 	myAISContext->InitSelected();
265     Current = myAISContext->SelectedInteractive();
266 	if ( Current->HasColor () ) {
267       Quantity_Color CSFColor;
268       myAISContext->Color (Current, CSFColor);
269       MSColor = RGB (CSFColor.Red()*255.,CSFColor.Green()*255.,CSFColor.Blue()*255.);
270 	}
271 	else {
272 	  MSColor = RGB (255,255,255) ;
273 	}
274 
275 	CColorDialog dlgColor(MSColor);
276 	if (dlgColor.DoModal() == IDOK)
277 	{
278 	  MSColor = dlgColor.GetColor();
279 	  Quantity_Color CSFColor (GetRValue(MSColor)/255., GetGValue(MSColor)/255., GetBValue(MSColor)/255., Quantity_TOC_RGB);
280 	  for (;myAISContext->MoreSelected ();myAISContext->NextSelected ())
281       myAISContext->SetColor (myAISContext->SelectedInteractive(), CSFColor, Standard_False);
282     myAISContext->UpdateCurrentViewer();
283 	}
284 }
OnUpdateObjectColor(CCmdUI * pCmdUI)285 void OCC_3dBaseDoc::OnUpdateObjectColor(CCmdUI* pCmdUI)
286 {
287   bool OneOrMoreIsShadingOrWireframe = false;
288   for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
289     if (myAISContext->IsDisplayed(myAISContext->SelectedInteractive(),0)
290 		||myAISContext->IsDisplayed(myAISContext->SelectedInteractive(),1))
291 		OneOrMoreIsShadingOrWireframe=true;
292   pCmdUI->Enable (OneOrMoreIsShadingOrWireframe);
293 }
294 
OnObjectErase()295 void OCC_3dBaseDoc::OnObjectErase()
296 {
297   myAISContext->EraseSelected (Standard_True);
298 }
OnUpdateObjectErase(CCmdUI * pCmdUI)299 void OCC_3dBaseDoc::OnUpdateObjectErase(CCmdUI* pCmdUI)
300 {
301   bool OneOrMoreIsDisplayed = false;
302   for (myAISContext->InitSelected(); myAISContext->MoreSelected(); myAISContext->NextSelected())
303   {
304     if (myAISContext->IsDisplayed (myAISContext->SelectedInteractive()))
305       OneOrMoreIsDisplayed = true;
306   }
307   pCmdUI->Enable (OneOrMoreIsDisplayed);
308 }
309 
OnObjectWireframe()310 void OCC_3dBaseDoc::OnObjectWireframe()
311 {
312   for(myAISContext->InitSelected();myAISContext->MoreSelected();myAISContext->NextSelected())
313         myAISContext->SetDisplayMode (myAISContext->SelectedInteractive(), 0, Standard_False);
314   myAISContext->UpdateCurrentViewer();
315 }
OnUpdateObjectWireframe(CCmdUI * pCmdUI)316 void OCC_3dBaseDoc::OnUpdateObjectWireframe(CCmdUI* pCmdUI)
317 {
318   bool OneOrMoreInShading = false;
319   for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
320     if (myAISContext->IsDisplayed(myAISContext->SelectedInteractive(),1)) OneOrMoreInShading=true;
321 	pCmdUI->Enable (OneOrMoreInShading);
322 }
323 
OnObjectShading()324 void OCC_3dBaseDoc::OnObjectShading()
325 {
326   for(myAISContext->InitSelected();myAISContext->MoreSelected();myAISContext->NextSelected())
327       myAISContext->SetDisplayMode (myAISContext->SelectedInteractive(), 1, Standard_False);
328   myAISContext->UpdateCurrentViewer();
329 }
330 
OnUpdateObjectShading(CCmdUI * pCmdUI)331 void OCC_3dBaseDoc::OnUpdateObjectShading(CCmdUI* pCmdUI)
332 {
333   bool OneOrMoreInWireframe = false;
334   for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
335     if (myAISContext->IsDisplayed(myAISContext->SelectedInteractive(),0)) OneOrMoreInWireframe=true;
336 	pCmdUI->Enable (OneOrMoreInWireframe);
337 }
338 
OnObjectMaterial()339 void OCC_3dBaseDoc::OnObjectMaterial()
340 {
341   CDialogMaterial DialBox(myAISContext);
342   DialBox.DoModal();
343   //CMDIFrameWnd *pFrame =  (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
344   //CMDIChildWnd *pChild =  (CMDIChildWnd *) pFrame->GetActiveFrame();
345   //OCC_3dView *pView = (OCC_3dView *) pChild->GetActiveView();
346 }
347 
OnUpdateObjectMaterial(CCmdUI * pCmdUI)348 void OCC_3dBaseDoc::OnUpdateObjectMaterial(CCmdUI* pCmdUI)
349 {
350   bool OneOrMoreInShading = false;
351   for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
352     if (myAISContext->IsDisplayed(myAISContext->SelectedInteractive(),1)) OneOrMoreInShading=true;
353 	pCmdUI->Enable (OneOrMoreInShading);
354 }
355 
OnObjectMaterialRange(UINT nID)356 BOOL OCC_3dBaseDoc::OnObjectMaterialRange(UINT nID)
357 {
358   // the range ID_OBJECT_MATERIAL_BRASS to ID_OBJECT_MATERIAL_SILVER is
359   // continue with the same values as enumeration Type Of Material
360   Standard_Real aTransparency;
361 
362   for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ()){
363     aTransparency = myAISContext->SelectedInteractive()->Transparency();
364     myAISContext->SetMaterial (myAISContext->SelectedInteractive(),(Graphic3d_NameOfMaterial)(nID-ID_OBJECT_MATERIAL_BRASS), Standard_False);
365     myAISContext->SetTransparency (myAISContext->SelectedInteractive(),aTransparency, Standard_False);
366   }
367   myAISContext->UpdateCurrentViewer();
368   return true;
369 
370 }
371 
OnUpdateObjectMaterialRange(CCmdUI * pCmdUI)372 void OCC_3dBaseDoc::OnUpdateObjectMaterialRange(CCmdUI* pCmdUI)
373 {
374   bool OneOrMoreInShading = false;
375   for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
376     if (myAISContext->IsDisplayed(myAISContext->SelectedInteractive(),1)) OneOrMoreInShading=true;
377 	pCmdUI->Enable (OneOrMoreInShading);
378   for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
379     if (myAISContext->SelectedInteractive()->Material() - (pCmdUI->m_nID - ID_OBJECT_MATERIAL_BRASS) == 0)
380 		pCmdUI->SetCheck(1);
381 }
382 
383 
OnObjectTransparency()384 void OCC_3dBaseDoc::OnObjectTransparency()
385 {
386 	CDialogTransparency DialBox(myAISContext);
387 	DialBox.DoModal();
388 	//CMDIFrameWnd *pFrame =  (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
389 	//CMDIChildWnd *pChild =  (CMDIChildWnd *) pFrame->GetActiveFrame();
390 	//OCC_3dView *pView = (OCC_3dView *) pChild->GetActiveView();
391 //	pView->Redraw();
392 }
393 
OnUpdateObjectTransparency(CCmdUI * pCmdUI)394 void OCC_3dBaseDoc::OnUpdateObjectTransparency(CCmdUI* pCmdUI)
395 {
396   bool OneOrMoreInShading = false;
397   for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
398     if (myAISContext->IsDisplayed(myAISContext->SelectedInteractive(),1)) OneOrMoreInShading=true;
399 	pCmdUI->Enable (OneOrMoreInShading);
400 }
401 
402 
OnObjectDisplayall()403 void OCC_3dBaseDoc::OnObjectDisplayall()
404 {
405 	myAISContext->DisplayAll (Standard_True);
406 }
407 
OnUpdateObjectDisplayall(CCmdUI * pCmdUI)408 void OCC_3dBaseDoc::OnUpdateObjectDisplayall(CCmdUI* pCmdUI)
409 {
410   AIS_ListOfInteractive aList;
411   myAISContext->ObjectsInside (aList);
412   for (AIS_ListIteratorOfListOfInteractive aLI (aList);aLI.More();aLI.Next())
413   {
414     if (!myAISContext->IsDisplayed (aLI.Value()))
415     {
416       pCmdUI->Enable (true);
417       return;
418     }
419   }
420   pCmdUI->Enable (false);
421 }
422 
OnObjectRemove()423 void OCC_3dBaseDoc::OnObjectRemove()
424 {
425 	for(myAISContext->InitSelected();myAISContext->MoreSelected();myAISContext->InitSelected())
426         myAISContext->Remove(myAISContext->SelectedInteractive(),Standard_True);
427 }
428 
OnUpdateObjectRemove(CCmdUI * pCmdUI)429 void OCC_3dBaseDoc::OnUpdateObjectRemove(CCmdUI* pCmdUI)
430 {
431   bool OneOrMoreIsDisplayed = false;
432   for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
433     if (myAISContext->IsDisplayed(myAISContext->SelectedInteractive())) OneOrMoreIsDisplayed=true;
434   pCmdUI->Enable (OneOrMoreIsDisplayed);
435 }
436 
SetMaterial(Graphic3d_NameOfMaterial Material)437 void OCC_3dBaseDoc::SetMaterial(Graphic3d_NameOfMaterial Material)
438 {
439   for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
440     myAISContext->SetMaterial (myAISContext->SelectedInteractive(),
441     (Graphic3d_NameOfMaterial)(Material), Standard_False);
442   myAISContext->UpdateCurrentViewer();
443 }
444 
445 
446 // RayTracing
OnObjectRayTracing()447 void OCC_3dBaseDoc::OnObjectRayTracing()
448 {
449   myRayTracingIsOn = !myRayTracingIsOn;
450   if(!myRayTracingIsOn)
451   {
452     myRaytracedShadowsIsOn = false;
453     myRaytracedReflectionsIsOn = false;
454     myRaytracedAntialiasingIsOn = false;
455   }
456   OnObjectRayTracingAction();
457 }
458 // Shadows
OnObjectShadows()459 void OCC_3dBaseDoc::OnObjectShadows()
460 {
461   myRaytracedShadowsIsOn = !myRaytracedShadowsIsOn;
462   OnObjectRayTracingAction();
463 }
464 // Reflections
OnObjectReflections()465 void OCC_3dBaseDoc::OnObjectReflections()
466 {
467   myRaytracedReflectionsIsOn = !myRaytracedReflectionsIsOn;
468   OnObjectRayTracingAction();
469 }
470 // Anti-aliasing
OnObjectAntiAliasing()471 void OCC_3dBaseDoc::OnObjectAntiAliasing()
472 {
473   myRaytracedAntialiasingIsOn = !myRaytracedAntialiasingIsOn;
474   OnObjectRayTracingAction();
475 }
OnUpdateV3dButtons(CCmdUI * pCmdUI)476 void OCC_3dBaseDoc::OnUpdateV3dButtons (CCmdUI* pCmdUI)
477 {
478   if (pCmdUI->m_nID == ID_OBJECT_RAY_TRACING)
479   {
480     pCmdUI->SetCheck(myRayTracingIsOn);
481   } else {
482     pCmdUI->Enable(myRayTracingIsOn);
483     if (pCmdUI->m_nID == ID_OBJECT_SHADOWS)
484       pCmdUI->SetCheck(myRaytracedShadowsIsOn);
485     if (pCmdUI->m_nID == ID_OBJECT_REFLECTIONS)
486       pCmdUI->SetCheck(myRaytracedReflectionsIsOn);
487     if (pCmdUI->m_nID == ID_OBJECT_ANTI_ALIASING)
488       pCmdUI->SetCheck(myRaytracedAntialiasingIsOn);
489   }
490 }
491 // Common function to change raytracing params and redraw view
OnObjectRayTracingAction()492 void OCC_3dBaseDoc::OnObjectRayTracingAction()
493 {
494   Handle(V3d_View) aView = myAISContext->CurrentViewer()->ActiveViews().First();
495   Graphic3d_RenderingParams& aParams = aView->ChangeRenderingParams();
496   if (myRayTracingIsOn)
497     aParams.Method = Graphic3d_RM_RAYTRACING;
498   else
499     aParams.Method = Graphic3d_RM_RASTERIZATION;
500   aParams.IsShadowEnabled = myRaytracedShadowsIsOn;
501   aParams.IsReflectionEnabled = myRaytracedReflectionsIsOn;
502   aParams.IsAntialiasingEnabled = myRaytracedAntialiasingIsOn;
503   myAISContext->UpdateCurrentViewer();
504 }
505