diff --git a/samples/mfc/standard/04_Viewer3d/src/Viewer3dView.cpp b/samples/mfc/standard/04_Viewer3d/src/Viewer3dView.cpp index 01da072c97..728f2d49a7 100755 --- a/samples/mfc/standard/04_Viewer3d/src/Viewer3dView.cpp +++ b/samples/mfc/standard/04_Viewer3d/src/Viewer3dView.cpp @@ -13,6 +13,7 @@ #include "ModelClippingDlg.h" #include "TrihedronDlg.h" +#include #include #include #include @@ -109,7 +110,7 @@ CViewer3dView::CViewer3dView() myCurZoom (0.0), NbActiveLights (2), // There are 2 default active lights myHlrModeIsOn (Standard_False), - m_Pen (NULL), + myRect (new AIS_RubberBand (Quantity_NOC_WHITE, Aspect_TOL_SOLID, 1.0)), myAxisKey (0), myScaleDirection (0) { @@ -120,7 +121,6 @@ CViewer3dView::CViewer3dView() CViewer3dView::~CViewer3dView() { myView->Remove(); - if (m_Pen) delete m_Pen; } BOOL CViewer3dView::PreCreateWindow(CREATESTRUCT& cs) @@ -646,7 +646,6 @@ void CViewer3dView::OnMouseMove(UINT nFlags, CPoint point) { case CurAction3d_Nothing : - DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_False); myXmax = point.x; myYmax = point.y; if (nFlags & MK_SHIFT) GetDocument()->ShiftDragEvent(myXmax,myYmax,0,myView); @@ -661,8 +660,7 @@ void CViewer3dView::OnMouseMove(UINT nFlags, CPoint point) break; case CurAction3d_WindowZooming : myXmax = point.x; myYmax = point.y; - DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_False,LongDash); - DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_True,LongDash); + DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_True, Aspect_TOL_DASH); break; case CurAction3d_DynamicPanning : @@ -799,60 +797,34 @@ void CViewer3dView::OnUpdateBUTTONRot(CCmdUI* pCmdUI) pCmdUI->Enable (myCurrentMode != CurAction3d_DynamicRotation); } -void CViewer3dView::DrawRectangle(const Standard_Integer MinX , - const Standard_Integer MinY , - const Standard_Integer MaxX , - const Standard_Integer MaxY , - const Standard_Boolean Draw , - const LineStyle aLineStyle) +void CViewer3dView::DrawRectangle (Standard_Integer theMinX, + Standard_Integer theMinY, + Standard_Integer theMaxX, + Standard_Integer theMaxY, + Standard_Boolean theToDraw, + Aspect_TypeOfLine theLineType) { - static int m_DrawMode; - if (!m_Pen && aLineStyle ==Solid ) - {m_Pen = new CPen(PS_SOLID, 1, RGB(0,0,0)); m_DrawMode = R2_MERGEPENNOT;} - else if (!m_Pen && aLineStyle ==Dot ) - {m_Pen = new CPen(PS_DOT, 1, RGB(0,0,0)); m_DrawMode = R2_XORPEN;} - else if (!m_Pen && aLineStyle == ShortDash) - {m_Pen = new CPen(PS_DASH, 1, RGB(255,0,0)); m_DrawMode = R2_XORPEN;} - else if (!m_Pen && aLineStyle == LongDash) - {m_Pen = new CPen(PS_DASH, 1, RGB(0,0,0)); m_DrawMode = R2_NOTXORPEN;} - else if (aLineStyle == Default) - { m_Pen = NULL; m_DrawMode = R2_MERGEPENNOT;} + const Handle(AIS_InteractiveContext)& aCtx = GetDocument()->GetAISContext(); + if (!theToDraw) + { + aCtx->Remove (myRect, false); + aCtx->CurrentViewer()->RedrawImmediate(); + return; + } - CPen* aOldPen = NULL; - CClientDC clientDC(this); - if (m_Pen) aOldPen = clientDC.SelectObject(m_Pen); - clientDC.SetROP2(m_DrawMode); - - static Standard_Integer StoredMinX, StoredMaxX, StoredMinY, StoredMaxY; - static Standard_Boolean m_IsVisible; - - if ( m_IsVisible && !Draw) // move or up : erase at the old position - { - clientDC.MoveTo(StoredMinX,StoredMinY); - clientDC.LineTo(StoredMinX,StoredMaxY); - clientDC.LineTo(StoredMaxX,StoredMaxY); - clientDC.LineTo(StoredMaxX,StoredMinY); - clientDC.LineTo(StoredMinX,StoredMinY); - m_IsVisible = false; - } - - StoredMinX = Min ( MinX, MaxX ); - StoredMinY = Min ( MinY, MaxY ); - StoredMaxX = Max ( MinX, MaxX ); - StoredMaxY = Max ( MinY, MaxY); - - if (Draw) // move : draw - { - clientDC.MoveTo(StoredMinX,StoredMinY); - clientDC.LineTo(StoredMinX,StoredMaxY); - clientDC.LineTo(StoredMaxX,StoredMaxY); - clientDC.LineTo(StoredMaxX,StoredMinY); - clientDC.LineTo(StoredMinX,StoredMinY); - m_IsVisible = true; - } - - if (m_Pen) - clientDC.SelectObject(aOldPen); + CRect aRect; + GetWindowRect (aRect); + myRect->SetLineType (theLineType); + myRect->SetRectangle (theMinX, aRect.Height() - theMinY, theMaxX, aRect.Height() - theMaxY); + if (!aCtx->IsDisplayed (myRect)) + { + aCtx->Display (myRect, false); + } + else + { + aCtx->Redisplay (myRect, false); + } + aCtx->CurrentViewer()->RedrawImmediate(); } void CViewer3dView::OnModifyChangeBackground() diff --git a/samples/mfc/standard/04_Viewer3d/src/Viewer3dView.h b/samples/mfc/standard/04_Viewer3d/src/Viewer3dView.h index 7d8f474c3c..1f2d3495df 100755 --- a/samples/mfc/standard/04_Viewer3d/src/Viewer3dView.h +++ b/samples/mfc/standard/04_Viewer3d/src/Viewer3dView.h @@ -33,6 +33,8 @@ enum View3D_CurrentAction { CurAction3d_EndDirectionalLight }; +class AIS_RubberBand; + class CViewer3dView : public CView { protected: // create from serialization only @@ -145,16 +147,13 @@ private: Handle(V3d_DirectionalLight) myCurrent_DirectionalLight; Handle(Graphic3d_ClipPlane) myClippingPlane; Handle(AIS_Shape) myShape; + Handle(AIS_RubberBand) myRect; //!< Rubber rectangle for selection private: - enum LineStyle { Solid, Dot, ShortDash, LongDash, Default }; - CPen* m_Pen; - virtual void DrawRectangle (const Standard_Integer MinX , - const Standard_Integer MinY , - const Standard_Integer MaxX , - const Standard_Integer MaxY , - const Standard_Boolean Draw , - const LineStyle aLineStyle = Default ); + + void DrawRectangle (Standard_Integer theMinX, Standard_Integer theMinY, Standard_Integer theMaxX, Standard_Integer theMaxY, + Standard_Boolean theToDraw, Aspect_TypeOfLine theLineType = Aspect_TOL_SOLID); + UINT myAxisKey; UINT myScaleDirection; void RedrawVisMode(); diff --git a/samples/mfc/standard/09_Animation/src/AnimationView3D.cpp b/samples/mfc/standard/09_Animation/src/AnimationView3D.cpp index 0ffae373b0..ad4f0d60bb 100755 --- a/samples/mfc/standard/09_Animation/src/AnimationView3D.cpp +++ b/samples/mfc/standard/09_Animation/src/AnimationView3D.cpp @@ -11,6 +11,8 @@ #include "Sensitivity.h" +#include + #ifdef _DEBUG //#define new DEBUG_NEW by CasCade #undef THIS_FILE @@ -92,7 +94,7 @@ CAnimationView3D::CAnimationView3D() myCurrentMode (CurrentAction3d_Nothing), m_FlySens (500.0), m_TurnSens (M_PI / 40.0), - m_Pen (NULL) + myRect (new AIS_RubberBand (Quantity_NOC_WHITE, Aspect_TOL_SOLID, 1.0)) { // TODO: add construction code here } @@ -100,7 +102,6 @@ CAnimationView3D::CAnimationView3D() CAnimationView3D::~CAnimationView3D() { myView->Remove(); - if (m_Pen) delete m_Pen; } BOOL CAnimationView3D::PreCreateWindow(CREATESTRUCT& cs) @@ -403,7 +404,7 @@ void CAnimationView3D::OnLButtonUp(UINT nFlags, CPoint point) break; case CurrentAction3d_WindowZooming : myXmax=point.x; myYmax=point.y; - DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_False,LongDash); + DrawRectangle (myXmin, myYmin, myXmax, myYmax, Standard_False, Aspect_TOL_DASH); if ((abs(myXmin-myXmax)>ValZWMin) || (abs(myYmin-myYmax)>ValZWMin)) // Test if the zoom window is greater than a minimale window. { @@ -503,7 +504,6 @@ void CAnimationView3D::OnMouseMove(UINT nFlags, CPoint point) { case CurrentAction3d_Nothing : myXmax = point.x; myYmax = point.y; - DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_False); if (nFlags & MK_SHIFT) GetDocument()->ShiftDragEvent(myXmax,myYmax,0,myView); else @@ -517,8 +517,7 @@ void CAnimationView3D::OnMouseMove(UINT nFlags, CPoint point) break; case CurrentAction3d_WindowZooming : myXmax = point.x; myYmax = point.y; - DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_False,LongDash); - DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_True,LongDash); + DrawRectangle (myXmin, myYmin, myXmax, myYmax, Standard_True, Aspect_TOL_DASH); break; case CurrentAction3d_DynamicPanning : myView->Pan(point.x-myXmax,myYmax-point.y); // Realize the panning @@ -652,57 +651,36 @@ void CAnimationView3D::OnChangeBackground() //----------------------------------------------------------------------------------------- // //----------------------------------------------------------------------------------------- -void CAnimationView3D::DrawRectangle(const Standard_Integer MinX , - const Standard_Integer MinY , - const Standard_Integer MaxX , - const Standard_Integer MaxY , - const Standard_Boolean Draw , - const LineStyle aLineStyle) +void CAnimationView3D::DrawRectangle (Standard_Integer theMinX, + Standard_Integer theMinY, + Standard_Integer theMaxX, + Standard_Integer theMaxY, + Standard_Boolean theToDraw, + Aspect_TypeOfLine theLineType) { - static int m_DrawMode; - if (!m_Pen && aLineStyle ==Solid ) - {m_Pen = new CPen(PS_SOLID, 1, RGB(0,0,0)); m_DrawMode = R2_MERGEPENNOT;} - else if (!m_Pen && aLineStyle ==Dot ) - {m_Pen = new CPen(PS_DOT, 1, RGB(0,0,0)); m_DrawMode = R2_XORPEN;} - else if (!m_Pen && aLineStyle == ShortDash) - {m_Pen = new CPen(PS_DASH, 1, RGB(255,0,0)); m_DrawMode = R2_XORPEN;} - else if (!m_Pen && aLineStyle == LongDash) - {m_Pen = new CPen(PS_DASH, 1, RGB(0,0,0)); m_DrawMode = R2_NOTXORPEN;} - else if (aLineStyle == Default) - { m_Pen = NULL; m_DrawMode = R2_MERGEPENNOT;} + const Handle(AIS_InteractiveContext)& aCtx = GetDocument()->GetAISContext(); + if (!theToDraw) + { + aCtx->Remove (myRect, false); + aCtx->CurrentViewer()->RedrawImmediate(); + return; + } - CPen* aOldPen = NULL; - CClientDC clientDC(this); - if (m_Pen) aOldPen = clientDC.SelectObject(m_Pen); - clientDC.SetROP2(m_DrawMode); - - static Standard_Integer StoredMinX, StoredMaxX, StoredMinY, StoredMaxY; - static Standard_Boolean m_IsVisible; - - if ( m_IsVisible && !Draw) // move or up : erase at the old position - { - clientDC.MoveTo(StoredMinX,StoredMinY); clientDC.LineTo(StoredMinX,StoredMaxY); - clientDC.LineTo(StoredMaxX,StoredMaxY); - clientDC.LineTo(StoredMaxX,StoredMinY); clientDC.LineTo(StoredMinX,StoredMinY); - m_IsVisible = false; - } - - StoredMinX = Min ( MinX, MaxX ); - StoredMinY = Min ( MinY, MaxY ); - StoredMaxX = Max ( MinX, MaxX ); - StoredMaxY = Max ( MinY, MaxY); - - if (Draw) // move : draw - { - clientDC.MoveTo(StoredMinX,StoredMinY); clientDC.LineTo(StoredMinX,StoredMaxY); - clientDC.LineTo(StoredMaxX,StoredMaxY); - clientDC.LineTo(StoredMaxX,StoredMinY); clientDC.LineTo(StoredMinX,StoredMinY); - m_IsVisible = true; - } - - if (m_Pen) - clientDC.SelectObject(aOldPen); + CRect aRect; + GetWindowRect (aRect); + myRect->SetLineType (theLineType); + myRect->SetRectangle (theMinX, aRect.Height() - theMinY, theMaxX, aRect.Height() - theMaxY); + if (!aCtx->IsDisplayed (myRect)) + { + aCtx->Display (myRect, false); + } + else + { + aCtx->Redisplay (myRect, false); + } + aCtx->CurrentViewer()->RedrawImmediate(); } + void CAnimationView3D::OnStop() { KillTimer(GetDocument()->myCount); diff --git a/samples/mfc/standard/09_Animation/src/AnimationView3D.h b/samples/mfc/standard/09_Animation/src/AnimationView3D.h index 2000eef9cd..fafdc33d89 100755 --- a/samples/mfc/standard/09_Animation/src/AnimationView3D.h +++ b/samples/mfc/standard/09_Animation/src/AnimationView3D.h @@ -13,6 +13,8 @@ #include "AnimationDoc.h" #include "..\..\Common\res\OCC_Resource.h" +class AIS_RubberBand; + enum View3D_CurrentAction { CurrentAction3d_Nothing, CurrentAction3d_DynamicZooming, @@ -146,14 +148,9 @@ private: double m_Focus ; private: - enum LineStyle { Solid, Dot, ShortDash, LongDash, Default }; - CPen* m_Pen; - virtual void DrawRectangle (const Standard_Integer MinX , - const Standard_Integer MinY , - const Standard_Integer MaxX , - const Standard_Integer MaxY , - const Standard_Boolean Draw , - const LineStyle aLineStyle = Default ); + Handle(AIS_RubberBand) myRect; //!< Rubber rectangle for selection + void DrawRectangle (Standard_Integer theMinX, Standard_Integer theMinY, Standard_Integer theMaxX, Standard_Integer theMaxY, + Standard_Boolean theToDraw, Aspect_TypeOfLine theLineType = Aspect_TOL_SOLID); }; #ifndef _DEBUG // debug version in AnimationView.cpp diff --git a/samples/mfc/standard/10_Convert/src/WNT/OCCDemoView.cpp b/samples/mfc/standard/10_Convert/src/WNT/OCCDemoView.cpp index 2c8dd369bc..e16f537eba 100755 --- a/samples/mfc/standard/10_Convert/src/WNT/OCCDemoView.cpp +++ b/samples/mfc/standard/10_Convert/src/WNT/OCCDemoView.cpp @@ -7,6 +7,7 @@ #include "OCCDemoDoc.h" #include "OCCDemoView.h" +#include #include #define ValZWMin 1 @@ -69,7 +70,7 @@ COCCDemoView::COCCDemoView() myCurZoom=0; myCurrentMode = CurAction3d_Nothing; myVisMode = VIS_SHADE; - m_Pen = NULL; + myRect = new AIS_RubberBand (Quantity_NOC_WHITE, Aspect_TOL_SOLID, 1.0); myGraphicDriver = ((COCCDemoApp*)AfxGetApp())->GetGraphicDriver(); } @@ -77,8 +78,6 @@ COCCDemoView::~COCCDemoView() { if (!myView.IsNull()) myView->Remove(); - if (m_Pen) - delete m_Pen; } BOOL COCCDemoView::PreCreateWindow(CREATESTRUCT& cs) @@ -336,8 +335,7 @@ void COCCDemoView::OnMouseMove(UINT nFlags, CPoint point) break; case CurAction3d_WindowZooming : myXmax = point.x; myYmax = point.y; - DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_False,LongDash); - DrawRectangle(myXmin,myYmin,myXmax,myYmax,Standard_True,LongDash); + DrawRectangle (myXmin, myYmin, myXmax, myYmax, Standard_True, Aspect_TOL_DASH); break; case CurAction3d_DynamicPanning : myView->Pan(point.x-myXmax,myYmax-point.y); // Realize the panning @@ -407,67 +405,34 @@ void COCCDemoView::OnUpdateBUTTONRot(CCmdUI* pCmdUI) pCmdUI->Enable (myCurrentMode != CurAction3d_DynamicRotation); } -void COCCDemoView::DrawRectangle(const Standard_Integer MinX, - const Standard_Integer MinY, - const Standard_Integer MaxX, - const Standard_Integer MaxY, - const Standard_Boolean Draw, - const LineStyle aLineStyle) +void COCCDemoView::DrawRectangle (Standard_Integer theMinX, + Standard_Integer theMinY, + Standard_Integer theMaxX, + Standard_Integer theMaxY, + Standard_Boolean theToDraw, + Aspect_TypeOfLine theLineType) { - static int m_DrawMode; - if (!m_Pen && aLineStyle ==Solid ) + const Handle(AIS_InteractiveContext)& aCtx = GetDocument()->GetAISContext(); + if (!theToDraw) { - m_Pen = new CPen(PS_SOLID, 1, RGB(0,0,0)); m_DrawMode = R2_MERGEPENNOT; - } - else if (!m_Pen && aLineStyle ==Dot ) - { - m_Pen = new CPen(PS_DOT, 1, RGB(0,0,0)); m_DrawMode = R2_XORPEN; - } - else if (!m_Pen && aLineStyle == ShortDash) - { - m_Pen = new CPen(PS_DASH, 1, RGB(255,0,0)); m_DrawMode = R2_XORPEN; - } - else if (!m_Pen && aLineStyle == LongDash) - { - m_Pen = new CPen(PS_DASH, 1, RGB(0,0,0)); m_DrawMode = R2_NOTXORPEN; - } - else if (aLineStyle == Default) - { - m_Pen = NULL; m_DrawMode = R2_MERGEPENNOT; + aCtx->Remove (myRect, false); + aCtx->CurrentViewer()->RedrawImmediate(); + return; } - CPen* aOldPen = NULL; - CClientDC clientDC(this); - if (m_Pen) - aOldPen = clientDC.SelectObject(m_Pen); - clientDC.SetROP2(m_DrawMode); - - static Standard_Integer StoredMinX, StoredMaxX, StoredMinY, StoredMaxY; - static Standard_Boolean m_IsVisible = Standard_False; - - if ( m_IsVisible && !Draw) // move or up : erase at the old position + CRect aRect; + GetWindowRect (aRect); + myRect->SetLineType (theLineType); + myRect->SetRectangle (theMinX, aRect.Height() - theMinY, theMaxX, aRect.Height() - theMaxY); + if (!aCtx->IsDisplayed (myRect)) { - clientDC.MoveTo(StoredMinX,StoredMinY); clientDC.LineTo(StoredMinX,StoredMaxY); - clientDC.LineTo(StoredMaxX,StoredMaxY); - clientDC.LineTo(StoredMaxX,StoredMinY); clientDC.LineTo(StoredMinX,StoredMinY); - m_IsVisible = false; + aCtx->Display (myRect, false); } - - StoredMinX = Min ( MinX, MaxX ); - StoredMinY = Min ( MinY, MaxY ); - StoredMaxX = Max ( MinX, MaxX ); - StoredMaxY = Max ( MinY, MaxY); - - if (Draw) // move : draw + else { - clientDC.MoveTo(StoredMinX,StoredMinY); clientDC.LineTo(StoredMinX,StoredMaxY); - clientDC.LineTo(StoredMaxX,StoredMaxY); - clientDC.LineTo(StoredMaxX,StoredMinY); clientDC.LineTo(StoredMinX,StoredMinY); - m_IsVisible = true; + aCtx->Redisplay (myRect, false); } - - if (m_Pen) - clientDC.SelectObject(aOldPen); + aCtx->CurrentViewer()->RedrawImmediate(); } void COCCDemoView::InitButtons() diff --git a/samples/mfc/standard/10_Convert/src/WNT/OCCDemoView.h b/samples/mfc/standard/10_Convert/src/WNT/OCCDemoView.h index ab626b19bf..d8379b6bb5 100755 --- a/samples/mfc/standard/10_Convert/src/WNT/OCCDemoView.h +++ b/samples/mfc/standard/10_Convert/src/WNT/OCCDemoView.h @@ -18,6 +18,8 @@ enum View3D_CurrentAction { CurAction3d_DynamicRotation }; +class AIS_RubberBand; + class COCCDemoView : public CView { protected: // create from serialization only @@ -119,14 +121,13 @@ private: Standard_Real myCurZoom; private: - enum LineStyle { Solid, Dot, ShortDash, LongDash, Default }; - CPen* m_Pen; + Handle(AIS_RubberBand) myRect; //!< Rubber rectangle for selection virtual void DrawRectangle (const Standard_Integer MinX , const Standard_Integer MinY , const Standard_Integer MaxX , const Standard_Integer MaxY , const Standard_Boolean Draw , - const LineStyle aLineStyle = Default ); + Aspect_TypeOfLine theLineType = Aspect_TOL_SOLID); };