mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-03 17:56:21 +03:00
The following MFC samples have been updated to use AIS_ViewController: Geometry, HLR, ImportExport, Modeling, OCAF, Triangulation, Viewer2D.
300 lines
9.1 KiB
C++
Executable File
300 lines
9.1 KiB
C++
Executable File
// OCC_2dView.cpp: implementation of the OCC_2dView class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
#include "stdafx.h"
|
|
|
|
#include "OCC_2dView.h"
|
|
|
|
#include "OCC_App.h"
|
|
#include "OCC_2dDoc.h"
|
|
#include "resource2d\RectangularGrid.h"
|
|
#include "resource2d\CircularGrid.h"
|
|
|
|
#include "Quantity_Color.hxx"
|
|
#include "Quantity_NameOfColor.hxx"
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// OCC_2dView
|
|
|
|
IMPLEMENT_DYNCREATE(OCC_2dView, OCC_BaseView)
|
|
|
|
BEGIN_MESSAGE_MAP(OCC_2dView, OCC_BaseView)
|
|
//{{AFX_MSG_MAP(OCC_2dView)
|
|
// NOTE - the ClassWizard will add and remove mapping macros here.
|
|
// DO NOT EDIT what you see in these blocks of generated code!
|
|
ON_COMMAND(ID_FILE_EXPORT_IMAGE, OnFileExportImage)
|
|
ON_COMMAND(ID_BUTTON2DGridRectLines, OnBUTTONGridRectLines)
|
|
ON_COMMAND(ID_BUTTON2DGridRectPoints, OnBUTTONGridRectPoints)
|
|
ON_COMMAND(ID_BUTTON2DGridCircLines, OnBUTTONGridCircLines)
|
|
ON_COMMAND(ID_BUTTON2DGridCircPoints, OnBUTTONGridCircPoints)
|
|
ON_COMMAND(ID_BUTTON2DGridValues, OnBUTTONGridValues)
|
|
ON_UPDATE_COMMAND_UI(ID_BUTTON2DGridValues, OnUpdateBUTTONGridValues)
|
|
ON_COMMAND(ID_BUTTON2DGridCancel, OnBUTTONGridCancel)
|
|
ON_UPDATE_COMMAND_UI(ID_BUTTON2DGridCancel, OnUpdateBUTTONGridCancel)
|
|
ON_WM_SIZE()
|
|
ON_COMMAND(ID_BUTTON2DFitAll, OnBUTTONFitAll)
|
|
ON_COMMAND(ID_BUTTON2DGlobPanning, OnBUTTONGlobPanning)
|
|
ON_COMMAND(ID_BUTTON2DPanning, OnBUTTONPanning)
|
|
ON_COMMAND(ID_BUTTON2DZoomProg, OnBUTTONZoomProg)
|
|
ON_COMMAND(ID_BUTTON2DZoomWin, OnBUTTONZoomWin)
|
|
ON_UPDATE_COMMAND_UI(ID_BUTTON2DGlobPanning, OnUpdateBUTTON2DGlobPanning)
|
|
ON_UPDATE_COMMAND_UI(ID_BUTTON2DPanning, OnUpdateBUTTON2DPanning)
|
|
ON_UPDATE_COMMAND_UI(ID_BUTTON2DZoomProg, OnUpdateBUTTON2DZoomProg)
|
|
ON_UPDATE_COMMAND_UI(ID_BUTTON2DZoomWin, OnUpdateBUTTON2DZoomWin)
|
|
ON_COMMAND(ID_Modify_ChangeBackground ,OnChangeBackground)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// OCC_2dView construction/destruction
|
|
|
|
OCC_2dView::OCC_2dView()
|
|
{
|
|
myToAllowRotation = false;
|
|
myDefaultGestures.Bind (Aspect_VKeyMouse_LeftButton, AIS_MouseGesture_SelectRectangle);
|
|
myMouseGestureMap = myDefaultGestures;
|
|
}
|
|
|
|
OCC_2dView::~OCC_2dView()
|
|
{
|
|
//
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// OCC_2dView drawing
|
|
|
|
void OCC_2dView::OnInitialUpdate()
|
|
{
|
|
OCC_BaseView::OnInitialUpdate();
|
|
|
|
// initialize the grids dialogs
|
|
TheRectangularGridDialog.Create(CRectangularGrid::IDD, NULL);
|
|
TheCircularGridDialog.Create(CCircularGrid::IDD, NULL);
|
|
TheRectangularGridDialog.SetViewer (myView->Viewer());
|
|
TheCircularGridDialog.SetViewer (myView->Viewer());
|
|
}
|
|
|
|
void OCC_2dView::OnFileExportImage()
|
|
{
|
|
GetDocument()->ExportView (myView);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// OCC_2dView diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void OCC_2dView::AssertValid() const
|
|
{
|
|
CView::AssertValid();
|
|
}
|
|
|
|
void OCC_2dView::Dump(CDumpContext& dc) const
|
|
{
|
|
CView::Dump(dc);
|
|
}
|
|
|
|
OCC_2dDoc* OCC_2dView::GetDocument() // non-debug version is inline
|
|
{
|
|
//ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(OCC_2dDoc)));
|
|
return (OCC_2dDoc*)m_pDocument;
|
|
}
|
|
#endif //_DEBUG
|
|
void OCC_2dView::OnBUTTONGridRectLines()
|
|
{
|
|
Handle(V3d_Viewer) aViewer = myView->Viewer();
|
|
Handle(Graphic3d_AspectMarker3d) aGridAspect = new Graphic3d_AspectMarker3d(Aspect_TOM_RING1,Quantity_NOC_WHITE,2);
|
|
aViewer->SetGridEcho(aGridAspect);
|
|
Standard_Integer aWidth=0, aHeight=0, anOffset=0;
|
|
myView->Window()->Size(aWidth,aHeight);
|
|
aViewer->SetRectangularGridGraphicValues(aWidth,aHeight,anOffset);
|
|
aViewer->ActivateGrid(Aspect_GT_Rectangular, Aspect_GDM_Lines);
|
|
FitAll();
|
|
|
|
if (TheCircularGridDialog.IsWindowVisible())
|
|
{
|
|
TheCircularGridDialog.ShowWindow(SW_HIDE);
|
|
TheRectangularGridDialog.UpdateValues();
|
|
TheRectangularGridDialog.ShowWindow(SW_SHOW);
|
|
}
|
|
}
|
|
|
|
void OCC_2dView::OnBUTTONGridRectPoints()
|
|
{
|
|
Handle(V3d_Viewer) aViewer = myView->Viewer();
|
|
Handle(Graphic3d_AspectMarker3d) aGridAspect = new Graphic3d_AspectMarker3d(Aspect_TOM_RING1,Quantity_NOC_WHITE,2);
|
|
aViewer->SetGridEcho(aGridAspect);
|
|
Standard_Integer aWidth=0, aHeight=0, anOffset=0;
|
|
myView->Window()->Size(aWidth,aHeight);
|
|
aViewer->SetRectangularGridGraphicValues(aWidth,aHeight,anOffset);
|
|
aViewer->ActivateGrid(Aspect_GT_Rectangular, Aspect_GDM_Points);
|
|
FitAll();
|
|
|
|
if (TheCircularGridDialog.IsWindowVisible())
|
|
{
|
|
TheCircularGridDialog.ShowWindow(SW_HIDE);
|
|
TheRectangularGridDialog.UpdateValues();
|
|
TheRectangularGridDialog.ShowWindow(SW_SHOW);
|
|
}
|
|
}
|
|
|
|
void OCC_2dView::OnBUTTONGridCircLines()
|
|
{
|
|
Handle(V3d_Viewer) aViewer = myView->Viewer();
|
|
Handle(Graphic3d_AspectMarker3d) aGridAspect = new Graphic3d_AspectMarker3d(Aspect_TOM_RING1,Quantity_NOC_WHITE,2);
|
|
aViewer->SetGridEcho(aGridAspect);
|
|
Standard_Integer aWidth=0, aHeight=0, anOffset=0;
|
|
myView->Window()->Size(aWidth,aHeight);
|
|
aViewer->SetCircularGridGraphicValues(aWidth>aHeight?aWidth:aHeight,anOffset);
|
|
aViewer->ActivateGrid(Aspect_GT_Circular, Aspect_GDM_Lines);
|
|
FitAll();
|
|
|
|
|
|
if (TheRectangularGridDialog.IsWindowVisible())
|
|
{
|
|
TheRectangularGridDialog.ShowWindow(SW_HIDE);
|
|
TheCircularGridDialog.UpdateValues();
|
|
TheCircularGridDialog.ShowWindow(SW_SHOW);
|
|
}
|
|
}
|
|
|
|
void OCC_2dView::OnBUTTONGridCircPoints()
|
|
{
|
|
Handle(V3d_Viewer) aViewer = myView->Viewer();
|
|
Handle(Graphic3d_AspectMarker3d) aGridAspect = new Graphic3d_AspectMarker3d(Aspect_TOM_RING1,Quantity_NOC_WHITE,2);
|
|
aViewer->SetGridEcho(aGridAspect);
|
|
Standard_Integer aWidth=0, aHeight=0, anOffset=0;
|
|
myView->Window()->Size(aWidth,aHeight);
|
|
aViewer->SetCircularGridGraphicValues(aWidth>aHeight?aWidth:aHeight,anOffset);
|
|
aViewer->ActivateGrid(Aspect_GT_Circular, Aspect_GDM_Points);
|
|
FitAll();
|
|
if (TheRectangularGridDialog.IsWindowVisible())
|
|
{
|
|
TheRectangularGridDialog.ShowWindow(SW_HIDE);
|
|
TheCircularGridDialog.UpdateValues();
|
|
TheCircularGridDialog.ShowWindow(SW_SHOW);
|
|
}
|
|
}
|
|
|
|
void OCC_2dView::OnBUTTONGridValues()
|
|
{
|
|
Handle(V3d_Viewer) aViewer = myView->Viewer();
|
|
Aspect_GridType TheGridtype = aViewer->GridType();
|
|
|
|
switch( TheGridtype )
|
|
{
|
|
case Aspect_GT_Rectangular:
|
|
TheRectangularGridDialog.UpdateValues();
|
|
TheRectangularGridDialog.ShowWindow(SW_SHOW);
|
|
break;
|
|
case Aspect_GT_Circular:
|
|
TheCircularGridDialog.UpdateValues();
|
|
TheCircularGridDialog.ShowWindow(SW_SHOW);
|
|
break;
|
|
default :
|
|
throw Standard_Failure("invalid Aspect_GridType");
|
|
}
|
|
}
|
|
void OCC_2dView::OnUpdateBUTTONGridValues(CCmdUI* pCmdUI)
|
|
{
|
|
Handle(V3d_Viewer) aViewer = myView->Viewer();
|
|
pCmdUI-> Enable( aViewer->IsActive() );
|
|
}
|
|
|
|
void OCC_2dView::OnBUTTONGridCancel()
|
|
{
|
|
Handle(V3d_Viewer) aViewer = myView->Viewer();
|
|
aViewer->DeactivateGrid();
|
|
TheRectangularGridDialog.ShowWindow(SW_HIDE);
|
|
TheCircularGridDialog.ShowWindow(SW_HIDE);
|
|
aViewer->Update();
|
|
}
|
|
void OCC_2dView::OnUpdateBUTTONGridCancel(CCmdUI* pCmdUI)
|
|
{
|
|
Handle(V3d_Viewer) aViewer = myView->Viewer();
|
|
pCmdUI-> Enable( aViewer->IsActive() );
|
|
}
|
|
|
|
void OCC_2dView::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
OCC_BaseView::OnSize (nType, cx, cy);
|
|
// Take care : This fonction is call before OnInitialUpdate
|
|
if (!myView.IsNull())
|
|
myView->MustBeResized();
|
|
}
|
|
|
|
void OCC_2dView::OnBUTTONFitAll()
|
|
{
|
|
myView->FitAll();
|
|
}
|
|
|
|
void OCC_2dView::OnBUTTONGlobPanning()
|
|
{
|
|
//save the current zoom value
|
|
myCurZoom = myView->Scale();
|
|
|
|
// Do a Global Zoom
|
|
myView->FitAll();
|
|
|
|
// Set the mode
|
|
setCurrentAction (CurAction3d_GlobalPanning);
|
|
}
|
|
void OCC_2dView::OnBUTTONPanning()
|
|
{
|
|
setCurrentAction (CurAction3d_DynamicPanning);
|
|
}
|
|
void OCC_2dView::OnBUTTONZoomProg()
|
|
{
|
|
setCurrentAction (CurAction3d_DynamicZooming);
|
|
}
|
|
void OCC_2dView::OnBUTTONZoomWin()
|
|
{
|
|
setCurrentAction (CurAction3d_WindowZooming);
|
|
}
|
|
void OCC_2dView::OnChangeBackground()
|
|
{
|
|
Standard_Real R1, G1, B1;
|
|
Handle(Aspect_Window) aWindow = myView->Window();
|
|
Aspect_Background ABack = aWindow->Background();
|
|
Quantity_Color aColor = ABack.Color();
|
|
aColor.Values(R1,G1,B1,Quantity_TOC_RGB);
|
|
COLORREF m_clr ;
|
|
m_clr = RGB(R1*255,G1*255,B1*255);
|
|
|
|
CColorDialog dlgColor(m_clr);
|
|
if (dlgColor.DoModal() == IDOK)
|
|
{
|
|
m_clr = dlgColor.GetColor();
|
|
R1 = GetRValue(m_clr)/255.;
|
|
G1 = GetGValue(m_clr)/255.;
|
|
B1 = GetBValue(m_clr)/255.;
|
|
aColor.SetValues(R1,G1,B1,Quantity_TOC_RGB);
|
|
myView->SetBackgroundColor(aColor);
|
|
myView->Update();
|
|
}
|
|
}
|
|
|
|
|
|
void OCC_2dView::OnUpdateBUTTON2DGlobPanning(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck (getCurrentAction() == CurAction3d_GlobalPanning);
|
|
pCmdUI->Enable (getCurrentAction() != CurAction3d_GlobalPanning);
|
|
}
|
|
|
|
void OCC_2dView::OnUpdateBUTTON2DPanning(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck (getCurrentAction() == CurAction3d_DynamicPanning);
|
|
pCmdUI->Enable (getCurrentAction() != CurAction3d_DynamicPanning);
|
|
}
|
|
|
|
void OCC_2dView::OnUpdateBUTTON2DZoomProg(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck (getCurrentAction() == CurAction3d_DynamicZooming);
|
|
pCmdUI->Enable (getCurrentAction() != CurAction3d_DynamicZooming);
|
|
}
|
|
|
|
void OCC_2dView::OnUpdateBUTTON2DZoomWin(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck (getCurrentAction() == CurAction3d_WindowZooming);
|
|
pCmdUI->Enable (getCurrentAction() != CurAction3d_WindowZooming);
|
|
}
|