#include <res\OCC_Resource.h>
#include "ImportExport/ImportExport.h"
#include "AISDialogs.h"
-#include <AIS_LocalContext.hxx>
#include <AIS_ListOfInteractive.hxx>
#include <AIS_ListIteratorOfListOfInteractive.hxx>
#include <TColStd_ListIteratorOfListOfInteger.hxx>
ON_UPDATE_COMMAND_UI(ID_OBJECT_DISPLAYALL, OnUpdateObjectDisplayall)
ON_COMMAND(ID_OBJECT_REMOVE, OnObjectRemove)
ON_UPDATE_COMMAND_UI(ID_OBJECT_REMOVE, OnUpdateObjectRemove)
- ON_COMMAND(ID_OBJECT_DIM, OnObjectAddDimensions)
- ON_UPDATE_COMMAND_UI(ID_OBJECT_DIM, OnUpdateObjectAddDimensions)
//}}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()
//////////////////////////////////////////////////////////////////////
OCC_3dBaseDoc::OCC_3dBaseDoc()
-:myPopupMenuNumber(0),
- myDimensionDlg()
+:myPopupMenuNumber(0)
{
AfxInitRichEdit();
- Handle(Graphic3d_GraphicDriver) aGraphicDriver =
- ((OCC_App*)AfxGetApp())->GetGraphicDriver();
+ Handle(Graphic3d_GraphicDriver) aGraphicDriver = ((OCC_App*)AfxGetApp())->GetGraphicDriver();
- myViewer = new V3d_Viewer (aGraphicDriver, Standard_ExtString("Visu3D") );
+ myViewer = new V3d_Viewer (aGraphicDriver);
myViewer->SetDefaultLights();
myViewer->SetLightOn();
myAISContext = new AIS_InteractiveContext (myViewer);
- myDimensionDlg.SetContext (myAISContext);
- myDimensionDlg.Create(CDimensionDlg::IDD, NULL);
+
+ myRayTracingIsOn = false;
+ myRaytracedShadowsIsOn = true;
+ myRaytracedReflectionsIsOn = false;
+ myRaytracedAntialiasingIsOn = false;
}
OCC_3dBaseDoc::~OCC_3dBaseDoc()
static Standard_Integer aStartDragX = 0;
static Standard_Integer aStartDragY = 0;
- if (theState == -1)
- {
- // button down
- aStartDragX = theMouseX;
- aStartDragY = theMouseY;
- }
-
- if (theState == 1)
+ switch (theState)
{
- // button up
- myAISContext->Select (aStartDragX, aStartDragY,
- theMouseX, theMouseY,
- theView);
- }
+ case -1:
+ {
+ aStartDragX = theMouseX;
+ aStartDragY = theMouseY;
+ break;
+ }
+ case 0:
+ {
+ myAISContext->UpdateCurrentViewer();
+ break;
+ }
+ case 1:
+ {
+ myAISContext->Select (aStartDragX, aStartDragY,
+ theMouseX, theMouseY,
+ theView, Standard_True);
+ break;
+ }
+ };
}
//-----------------------------------------------------------------------------------------
const Standard_Integer theMouseY,
const Handle(V3d_View)& theView)
{
- myAISContext->MoveTo (theMouseX, theMouseY, theView);
- myAISContext->Select();
+ myAISContext->MoveTo (theMouseX, theMouseY, theView, Standard_False);
+ myAISContext->Select (Standard_True);
}
//-----------------------------------------------------------------------------------------
const Standard_Integer theMouseY,
const Handle(V3d_View)& theView)
{
- myAISContext->MoveTo (theMouseX, theMouseY, theView);
+ myAISContext->MoveTo (theMouseX, theMouseY, theView, Standard_True);
}
//-----------------------------------------------------------------------------------------
const Standard_Integer theMouseY,
const Handle(V3d_View)& theView)
{
- myAISContext->MoveTo (theMouseX, theMouseY, theView);
+ myAISContext->MoveTo (theMouseX, theMouseY, theView, Standard_True);
}
//-----------------------------------------------------------------------------------------
// button up
myAISContext->ShiftSelect (aStartDragX, aStartDragY,
theMouseX, theMouseY,
- theView);
+ theView, Standard_True);
}
}
const Standard_Integer /*theMouseY*/,
const Handle(V3d_View)& /*theView*/)
{
- myAISContext->ShiftSelect();
+ myAISContext->ShiftSelect (Standard_True);
}
//-----------------------------------------------------------------------------------------
// Base check which context menu to call
if (!myPopupMenuNumber)
{
- myAISContext->InitCurrent();
- if (myAISContext->MoreCurrent())
+ myAISContext->InitSelected();
+ if (myAISContext->MoreSelected())
myPopupMenuNumber=1;
}
if (myPopupMenuNumber == 1) // more than 1 object.
{
bool OneOrMoreInShading = false;
- for (myAISContext->InitCurrent();myAISContext->MoreCurrent ();myAISContext->NextCurrent ())
- if (myAISContext->IsDisplayed(myAISContext->Current(),1)) OneOrMoreInShading=true;
+ for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
+ if (myAISContext->IsDisplayed(myAISContext->SelectedInteractive(),1)) OneOrMoreInShading=true;
if(!OneOrMoreInShading)
pPopup->EnableMenuItem(5, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);
}
void OCC_3dBaseDoc::OnObjectColor()
{
- Handle_AIS_InteractiveObject Current ;
+ Handle(AIS_InteractiveObject) Current ;
COLORREF MSColor ;
- Quantity_Color CSFColor ;
- myAISContext->InitCurrent();
- Current = myAISContext->Current();
+ myAISContext->InitSelected();
+ Current = myAISContext->SelectedInteractive();
if ( Current->HasColor () ) {
- CSFColor = myAISContext->Color(myAISContext->Current());
+ Quantity_Color CSFColor;
+ myAISContext->Color (Current, CSFColor);
MSColor = RGB (CSFColor.Red()*255.,CSFColor.Green()*255.,CSFColor.Blue()*255.);
}
else {
if (dlgColor.DoModal() == IDOK)
{
MSColor = dlgColor.GetColor();
- CSFColor = Quantity_Color (GetRValue(MSColor)/255.,GetGValue(MSColor)/255.,
- GetBValue(MSColor)/255.,Quantity_TOC_RGB);
- for (;myAISContext->MoreCurrent ();myAISContext->NextCurrent ())
- myAISContext->SetColor (myAISContext->Current(),CSFColor.Name());
+ Quantity_Color CSFColor (GetRValue(MSColor)/255., GetGValue(MSColor)/255., GetBValue(MSColor)/255., Quantity_TOC_RGB);
+ for (;myAISContext->MoreSelected ();myAISContext->NextSelected ())
+ myAISContext->SetColor (myAISContext->SelectedInteractive(), CSFColor, Standard_False);
+ myAISContext->UpdateCurrentViewer();
}
}
void OCC_3dBaseDoc::OnUpdateObjectColor(CCmdUI* pCmdUI)
{
bool OneOrMoreIsShadingOrWireframe = false;
- for (myAISContext->InitCurrent();myAISContext->MoreCurrent ();myAISContext->NextCurrent ())
- if (myAISContext->IsDisplayed(myAISContext->Current(),0)
- ||myAISContext->IsDisplayed(myAISContext->Current(),1))
+ for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
+ if (myAISContext->IsDisplayed(myAISContext->SelectedInteractive(),0)
+ ||myAISContext->IsDisplayed(myAISContext->SelectedInteractive(),1))
OneOrMoreIsShadingOrWireframe=true;
pCmdUI->Enable (OneOrMoreIsShadingOrWireframe);
}
void OCC_3dBaseDoc::OnObjectErase()
{
- for (myAISContext->InitCurrent(); myAISContext->MoreCurrent(); myAISContext->NextCurrent())
- {
- myAISContext->Erase (myAISContext->Current(), Standard_True);
- }
- myAISContext->ClearCurrents();
+ myAISContext->EraseSelected (Standard_True);
}
void OCC_3dBaseDoc::OnUpdateObjectErase(CCmdUI* pCmdUI)
{
bool OneOrMoreIsDisplayed = false;
- for (myAISContext->InitCurrent(); myAISContext->MoreCurrent(); myAISContext->NextCurrent())
+ for (myAISContext->InitSelected(); myAISContext->MoreSelected(); myAISContext->NextSelected())
{
- if (myAISContext->IsDisplayed (myAISContext->Current()))
+ if (myAISContext->IsDisplayed (myAISContext->SelectedInteractive()))
OneOrMoreIsDisplayed = true;
}
pCmdUI->Enable (OneOrMoreIsDisplayed);
void OCC_3dBaseDoc::OnObjectWireframe()
{
- for(myAISContext->InitCurrent();myAISContext->MoreCurrent();myAISContext->NextCurrent())
- myAISContext->SetDisplayMode(myAISContext->Current(),0);
+ for(myAISContext->InitSelected();myAISContext->MoreSelected();myAISContext->NextSelected())
+ myAISContext->SetDisplayMode (myAISContext->SelectedInteractive(), 0, Standard_False);
+ myAISContext->UpdateCurrentViewer();
}
void OCC_3dBaseDoc::OnUpdateObjectWireframe(CCmdUI* pCmdUI)
{
bool OneOrMoreInShading = false;
- for (myAISContext->InitCurrent();myAISContext->MoreCurrent ();myAISContext->NextCurrent ())
- if (myAISContext->IsDisplayed(myAISContext->Current(),1)) OneOrMoreInShading=true;
+ for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
+ if (myAISContext->IsDisplayed(myAISContext->SelectedInteractive(),1)) OneOrMoreInShading=true;
pCmdUI->Enable (OneOrMoreInShading);
}
void OCC_3dBaseDoc::OnObjectShading()
{
- for(myAISContext->InitCurrent();myAISContext->MoreCurrent();myAISContext->NextCurrent())
- myAISContext->SetDisplayMode(myAISContext->Current(),1);
+ for(myAISContext->InitSelected();myAISContext->MoreSelected();myAISContext->NextSelected())
+ myAISContext->SetDisplayMode (myAISContext->SelectedInteractive(), 1, Standard_False);
+ myAISContext->UpdateCurrentViewer();
}
void OCC_3dBaseDoc::OnUpdateObjectShading(CCmdUI* pCmdUI)
{
bool OneOrMoreInWireframe = false;
- for (myAISContext->InitCurrent();myAISContext->MoreCurrent ();myAISContext->NextCurrent ())
- if (myAISContext->IsDisplayed(myAISContext->Current(),0)) OneOrMoreInWireframe=true;
+ for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
+ if (myAISContext->IsDisplayed(myAISContext->SelectedInteractive(),0)) OneOrMoreInWireframe=true;
pCmdUI->Enable (OneOrMoreInWireframe);
}
void OCC_3dBaseDoc::OnUpdateObjectMaterial(CCmdUI* pCmdUI)
{
bool OneOrMoreInShading = false;
- for (myAISContext->InitCurrent();myAISContext->MoreCurrent ();myAISContext->NextCurrent ())
- if (myAISContext->IsDisplayed(myAISContext->Current(),1)) OneOrMoreInShading=true;
+ for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
+ if (myAISContext->IsDisplayed(myAISContext->SelectedInteractive(),1)) OneOrMoreInShading=true;
pCmdUI->Enable (OneOrMoreInShading);
}
// continue with the same values as enumeration Type Of Material
Standard_Real aTransparency;
- for (myAISContext->InitCurrent();myAISContext->MoreCurrent ();myAISContext->NextCurrent ()){
- aTransparency = myAISContext->Current()->Transparency();
- myAISContext->SetMaterial (myAISContext->Current(),(Graphic3d_NameOfMaterial)(nID-ID_OBJECT_MATERIAL_BRASS));
- myAISContext->SetTransparency (myAISContext->Current(),aTransparency);
+ for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ()){
+ aTransparency = myAISContext->SelectedInteractive()->Transparency();
+ myAISContext->SetMaterial (myAISContext->SelectedInteractive(),(Graphic3d_NameOfMaterial)(nID-ID_OBJECT_MATERIAL_BRASS), Standard_False);
+ myAISContext->SetTransparency (myAISContext->SelectedInteractive(),aTransparency, Standard_False);
}
+ myAISContext->UpdateCurrentViewer();
return true;
}
void OCC_3dBaseDoc::OnUpdateObjectMaterialRange(CCmdUI* pCmdUI)
{
bool OneOrMoreInShading = false;
- for (myAISContext->InitCurrent();myAISContext->MoreCurrent ();myAISContext->NextCurrent ())
- if (myAISContext->IsDisplayed(myAISContext->Current(),1)) OneOrMoreInShading=true;
+ for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
+ if (myAISContext->IsDisplayed(myAISContext->SelectedInteractive(),1)) OneOrMoreInShading=true;
pCmdUI->Enable (OneOrMoreInShading);
- for (myAISContext->InitCurrent();myAISContext->MoreCurrent ();myAISContext->NextCurrent ())
- if (myAISContext->Current()->Material() - (pCmdUI->m_nID - ID_OBJECT_MATERIAL_BRASS) == 0)
+ for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
+ if (myAISContext->SelectedInteractive()->Material() - (pCmdUI->m_nID - ID_OBJECT_MATERIAL_BRASS) == 0)
pCmdUI->SetCheck(1);
}
void OCC_3dBaseDoc::OnUpdateObjectTransparency(CCmdUI* pCmdUI)
{
bool OneOrMoreInShading = false;
- for (myAISContext->InitCurrent();myAISContext->MoreCurrent ();myAISContext->NextCurrent ())
- if (myAISContext->IsDisplayed(myAISContext->Current(),1)) OneOrMoreInShading=true;
+ for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
+ if (myAISContext->IsDisplayed(myAISContext->SelectedInteractive(),1)) OneOrMoreInShading=true;
pCmdUI->Enable (OneOrMoreInShading);
}
void OCC_3dBaseDoc::OnObjectDisplayall()
{
- myAISContext->DisplayAll();
+ myAISContext->DisplayAll (Standard_True);
}
void OCC_3dBaseDoc::OnUpdateObjectDisplayall(CCmdUI* pCmdUI)
{
-
- AIS_ListOfInteractive aList;
- myAISContext->ObjectsInside(aList,AIS_KOI_Shape);
- AIS_ListIteratorOfListOfInteractive aLI;
- Standard_Boolean IS_ANY_OBJECT_ERASED=FALSE;
- for (aLI.Initialize(aList);aLI.More();aLI.Next()){
- if(!myAISContext->IsDisplayed(aLI.Value()))
- IS_ANY_OBJECT_ERASED=TRUE;
- }
- pCmdUI->Enable (IS_ANY_OBJECT_ERASED);
-
+ AIS_ListOfInteractive aList;
+ myAISContext->ObjectsInside (aList);
+ for (AIS_ListIteratorOfListOfInteractive aLI (aList);aLI.More();aLI.Next())
+ {
+ if (!myAISContext->IsDisplayed (aLI.Value()))
+ {
+ pCmdUI->Enable (true);
+ return;
+ }
+ }
+ pCmdUI->Enable (false);
}
void OCC_3dBaseDoc::OnObjectRemove()
{
- for(myAISContext->InitCurrent();myAISContext->MoreCurrent();myAISContext->InitCurrent())
- myAISContext->Remove(myAISContext->Current(),Standard_True);
+ for(myAISContext->InitSelected();myAISContext->MoreSelected();myAISContext->InitSelected())
+ myAISContext->Remove(myAISContext->SelectedInteractive(),Standard_True);
}
void OCC_3dBaseDoc::OnUpdateObjectRemove(CCmdUI* pCmdUI)
{
bool OneOrMoreIsDisplayed = false;
- for (myAISContext->InitCurrent();myAISContext->MoreCurrent ();myAISContext->NextCurrent ())
- if (myAISContext->IsDisplayed(myAISContext->Current())) OneOrMoreIsDisplayed=true;
+ for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
+ if (myAISContext->IsDisplayed(myAISContext->SelectedInteractive())) OneOrMoreIsDisplayed=true;
pCmdUI->Enable (OneOrMoreIsDisplayed);
}
void OCC_3dBaseDoc::SetMaterial(Graphic3d_NameOfMaterial Material)
{
- for (myAISContext->InitCurrent();myAISContext->MoreCurrent ();myAISContext->NextCurrent ())
- myAISContext->SetMaterial (myAISContext->Current(),
- (Graphic3d_NameOfMaterial)(Material));
+ for (myAISContext->InitSelected();myAISContext->MoreSelected ();myAISContext->NextSelected ())
+ myAISContext->SetMaterial (myAISContext->SelectedInteractive(),
+ (Graphic3d_NameOfMaterial)(Material), Standard_False);
+ myAISContext->UpdateCurrentViewer();
}
-void OCC_3dBaseDoc::OnObjectAddDimensions()
+
+// RayTracing
+void OCC_3dBaseDoc::OnObjectRayTracing()
{
- //Add dimentions dialog is opened here
- myDimensionDlg.ShowWindow(SW_SHOW);
- myDimensionDlg.UpdateStandardMode ();
+ myRayTracingIsOn = !myRayTracingIsOn;
+ if(!myRayTracingIsOn)
+ {
+ myRaytracedShadowsIsOn = false;
+ myRaytracedReflectionsIsOn = false;
+ myRaytracedAntialiasingIsOn = false;
+ }
+ OnObjectRayTracingAction();
}
-
-void OCC_3dBaseDoc::OnUpdateObjectAddDimensions(CCmdUI* /*pCmdUI*/)
+// Shadows
+void OCC_3dBaseDoc::OnObjectShadows()
{
- // Check if local context is opened
- //pCmdUI->Enable (myAISContext->HasOpenedContext());
+ 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()
+{
+ Handle(V3d_View) aView = myAISContext->CurrentViewer()->ActiveViews().First();
+ 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();
}
-
-