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