1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-04 13:13:25 +03:00

0024548: Ray Tracing mode not available in MFC samples

Ray tracing functionality was added to OCCT MFC samples.
This commit is contained in:
ski
2014-10-30 16:03:24 +03:00
committed by bugmaster
parent a806787bd6
commit 2c5b6d9c12
15 changed files with 140 additions and 1 deletions

View File

@@ -42,6 +42,17 @@ BEGIN_MESSAGE_MAP(OCC_3dBaseDoc, OCC_BaseDoc)
//}}AFX_MSG_MAP
ON_COMMAND_EX_RANGE(ID_OBJECT_MATERIAL_BRASS,ID_OBJECT_MATERIAL_DEFAULT, OnObjectMaterialRange)
ON_UPDATE_COMMAND_UI_RANGE(ID_OBJECT_MATERIAL_BRASS,ID_OBJECT_MATERIAL_DEFAULT, OnUpdateObjectMaterialRange)
//RayTracing
ON_COMMAND(ID_OBJECT_RAY_TRACING,OnObjectRayTracing)
ON_COMMAND(ID_OBJECT_SHADOWS,OnObjectShadows)
ON_COMMAND(ID_OBJECT_REFLECTIONS,OnObjectReflections)
ON_COMMAND(ID_OBJECT_ANTI_ALIASING,OnObjectAntiAliasing)
ON_UPDATE_COMMAND_UI(ID_OBJECT_RAY_TRACING, OnUpdateV3dButtons)
ON_UPDATE_COMMAND_UI(ID_OBJECT_SHADOWS, OnUpdateV3dButtons)
ON_UPDATE_COMMAND_UI(ID_OBJECT_REFLECTIONS, OnUpdateV3dButtons)
ON_UPDATE_COMMAND_UI(ID_OBJECT_ANTI_ALIASING, OnUpdateV3dButtons)
END_MESSAGE_MAP()
@@ -60,6 +71,11 @@ OCC_3dBaseDoc::OCC_3dBaseDoc()
myViewer->SetDefaultLights();
myViewer->SetLightOn();
myAISContext = new AIS_InteractiveContext (myViewer);
myRayTracingIsOn = false;
myRaytracedShadowsIsOn = true;
myRaytracedReflectionsIsOn = false;
myRaytracedAntialiasingIsOn = false;
}
OCC_3dBaseDoc::~OCC_3dBaseDoc()
@@ -424,3 +440,65 @@ void OCC_3dBaseDoc::SetMaterial(Graphic3d_NameOfMaterial Material)
myAISContext->SetMaterial (myAISContext->Current(),
(Graphic3d_NameOfMaterial)(Material));
}
// RayTracing
void OCC_3dBaseDoc::OnObjectRayTracing()
{
myRayTracingIsOn = !myRayTracingIsOn;
if(!myRayTracingIsOn)
{
myRaytracedShadowsIsOn = false;
myRaytracedReflectionsIsOn = false;
myRaytracedAntialiasingIsOn = false;
}
OnObjectRayTracingAction();
}
// Shadows
void OCC_3dBaseDoc::OnObjectShadows()
{
myRaytracedShadowsIsOn = !myRaytracedShadowsIsOn;
OnObjectRayTracingAction();
}
// Reflections
void OCC_3dBaseDoc::OnObjectReflections()
{
myRaytracedReflectionsIsOn = !myRaytracedReflectionsIsOn;
OnObjectRayTracingAction();
}
// Anti-aliasing
void OCC_3dBaseDoc::OnObjectAntiAliasing()
{
myRaytracedAntialiasingIsOn = !myRaytracedAntialiasingIsOn;
OnObjectRayTracingAction();
}
void OCC_3dBaseDoc::OnUpdateV3dButtons (CCmdUI* pCmdUI)
{
if (pCmdUI->m_nID == ID_OBJECT_RAY_TRACING)
{
pCmdUI->SetCheck(myRayTracingIsOn);
} else {
pCmdUI->Enable(myRayTracingIsOn);
if (pCmdUI->m_nID == ID_OBJECT_SHADOWS)
pCmdUI->SetCheck(myRaytracedShadowsIsOn);
if (pCmdUI->m_nID == ID_OBJECT_REFLECTIONS)
pCmdUI->SetCheck(myRaytracedReflectionsIsOn);
if (pCmdUI->m_nID == ID_OBJECT_ANTI_ALIASING)
pCmdUI->SetCheck(myRaytracedAntialiasingIsOn);
}
}
// Common function to change raytracing params and redraw view
void OCC_3dBaseDoc::OnObjectRayTracingAction()
{
myAISContext->CurrentViewer()->InitActiveViews();
Handle(V3d_View) aView = myAISContext->CurrentViewer()->ActiveView();
Graphic3d_RenderingParams& aParams = aView->ChangeRenderingParams();
if (myRayTracingIsOn)
aParams.Method = Graphic3d_RM_RAYTRACING;
else
aParams.Method = Graphic3d_RM_RASTERIZATION;
aParams.IsShadowEnabled = myRaytracedShadowsIsOn;
aParams.IsReflectionEnabled = myRaytracedReflectionsIsOn;
aParams.IsAntialiasingEnabled = myRaytracedAntialiasingIsOn;
myAISContext->UpdateCurrentViewer();
}