0026886: Visualization, TKV3d - eliminate global variables
[occt.git] / samples / mfc / standard / Common / ParamsFacesPage.cpp
1 // ParamsFacesPage.cpp : implementation file
2 //
3
4 #include "stdafx.h"
5 #include "ParamsFacesPage.h"
6 #include "DimensionDlg.h"
7 #include <AIS_InteractiveContext.hxx>
8 #include <AIS_LocalContext.hxx>
9 #include <AIS_LengthDimension.hxx>
10 #include <AIS_AngleDimension.hxx>
11
12 // CParamsFacesPage dialog
13
14 IMPLEMENT_DYNAMIC(CParamsFacesPage, CDialog)
15
16 CParamsFacesPage::CParamsFacesPage (Handle(AIS_InteractiveContext) theAISContext,
17                                     bool isAngleDimension /*= false*/,
18                                     CWnd* pParent         /*=NULL*/)
19  : CDialog(CParamsFacesPage::IDD, pParent),
20    myAISContext (theAISContext),
21    myIsAngleDimension (isAngleDimension)
22 {
23 }
24
25 CParamsFacesPage::~CParamsFacesPage()
26 {
27 }
28
29 void CParamsFacesPage::DoDataExchange(CDataExchange* pDX)
30 {
31   CDialog::DoDataExchange(pDX);
32 }
33
34
35 BEGIN_MESSAGE_MAP(CParamsFacesPage, CDialog)
36   ON_BN_CLICKED(IDC_FacesBtn1, &CParamsFacesPage::OnBnClickedFacesbtn1)
37   ON_BN_CLICKED(IDC_FacesBtn2, &CParamsFacesPage::OnBnClickedFacesbtn2)
38 END_MESSAGE_MAP()
39
40
41 // CParamsFacesPage message handlers
42
43 void CParamsFacesPage::OnBnClickedFacesbtn1()
44 {
45   // Check if face is selected
46   myAISContext->LocalContext()->InitSelected();
47   if (!myAISContext->LocalContext()->MoreSelected())
48   {
49     AfxMessageBox(_T("Choose the face and press the button again"),
50                     MB_ICONINFORMATION | MB_OK);
51     return;
52   }
53
54   myFirstFace = TopoDS::Face (myAISContext->SelectedShape());
55
56   myAISContext->LocalContext()->ClearSelected();
57 }
58
59 void CParamsFacesPage::OnBnClickedFacesbtn2()
60 {
61   // Check if face is selected
62   myAISContext->LocalContext()->InitSelected();
63   if (!myAISContext->LocalContext()->MoreSelected())
64   {
65     AfxMessageBox(_T("Choose the face and press the button again"),
66                     MB_ICONINFORMATION | MB_OK);
67     return;
68   }
69
70   mySecondFace = TopoDS::Face (myAISContext->SelectedShape());
71
72   myAISContext->LocalContext()->ClearSelected();
73
74   CDimensionDlg *aDimDlg = (CDimensionDlg*)(GetParentOwner());
75
76   myAISContext->CloseAllContexts();
77
78   Handle(Prs3d_DimensionAspect) anAspect = new Prs3d_DimensionAspect();
79   anAspect->MakeArrows3d (Standard_False);
80   anAspect->MakeText3d (aDimDlg->GetTextType());
81   anAspect->TextAspect()->SetHeight (aDimDlg->GetFontHeight());
82   anAspect->MakeTextShaded (aDimDlg->IsText3dShaded());
83   anAspect->SetCommonColor (aDimDlg->GetDimensionColor());
84   anAspect->MakeUnitsDisplayed (aDimDlg->IsUnitsDisplayed());
85   if (myIsAngleDimension)
86   {
87     // Build an angle dimension between two non-parallel edges
88     Handle(AIS_AngleDimension) anAngleDim = new AIS_AngleDimension (myFirstFace, mySecondFace);
89     anAngleDim->SetDimensionAspect (anAspect);
90
91     if (aDimDlg->IsUnitsDisplayed())
92     {
93       anAngleDim->SetDisplayUnits (aDimDlg->GetUnits ());
94       if ((anAngleDim->GetDisplayUnits().IsEqual (TCollection_AsciiString ("deg"))))
95       {
96         anAngleDim->DimensionAspect()->MakeUnitsDisplayed (Standard_False);
97       }
98       else
99       {
100         anAngleDim->SetDisplaySpecialSymbol (AIS_DSS_No);
101       }
102     }
103
104     anAngleDim->SetFlyout (aDimDlg->GetFlyout());
105     myAISContext->Display (anAngleDim);
106   }
107   else
108   {
109     Handle(AIS_LengthDimension) aLenDim = new AIS_LengthDimension (myFirstFace, mySecondFace);
110     aLenDim->SetDimensionAspect (anAspect);
111
112     if (aLenDim->DimensionAspect()->IsUnitsDisplayed())
113     {
114       aLenDim->SetFlyout (aDimDlg->GetFlyout());
115       aLenDim->SetDisplayUnits (aDimDlg->GetUnits());
116     }
117
118     myAISContext->Display (aLenDim);
119   }
120
121   myAISContext->OpenLocalContext();
122   myAISContext->ActivateStandardMode (TopAbs_FACE);
123 }