c22e5822185cc38435503c4943b8c9123c4b13cf
[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->LocalContext()->SelectedShape());
55   myAISContext->LocalContext()->ClearSelected();
56 }
57
58 void CParamsFacesPage::OnBnClickedFacesbtn2()
59 {
60   // Check if face is selected
61   myAISContext->LocalContext()->InitSelected();
62   if (!myAISContext->LocalContext()->MoreSelected())
63   {
64     AfxMessageBox(_T("Choose the face and press the button again"),
65                     MB_ICONINFORMATION | MB_OK);
66     return;
67   }
68
69   mySecondFace = TopoDS::Face (myAISContext->LocalContext()->SelectedShape());
70   myAISContext->LocalContext()->ClearSelected();
71
72   CDimensionDlg *aDimDlg = (CDimensionDlg*)(GetParentOwner());
73
74   myAISContext->CloseAllContexts();
75
76   Handle(Prs3d_DimensionAspect) anAspect = new Prs3d_DimensionAspect();
77   anAspect->MakeArrows3d (Standard_False);
78   anAspect->MakeText3d (aDimDlg->GetTextType());
79   anAspect->TextAspect()->SetHeight (aDimDlg->GetFontHeight());
80   anAspect->MakeTextShaded (aDimDlg->IsText3dShaded());
81   anAspect->SetCommonColor (aDimDlg->GetDimensionColor());
82   if (myIsAngleDimension)
83   {
84     // Build an angle dimension between two non-parallel edges
85     Handle(AIS_AngleDimension) anAngleDim = new AIS_AngleDimension (myFirstFace, mySecondFace);
86     anAngleDim->SetDimensionAspect (anAspect);
87     anAngleDim->DimensionAspect()->MakeUnitsDisplayed (aDimDlg->IsUnitsDisplayed());
88     if (aDimDlg->IsUnitsDisplayed())
89     {
90       anAngleDim->SetDisplayUnits (aDimDlg->GetUnits ());
91       if ((anAngleDim->GetDisplayUnits().IsEqual (TCollection_AsciiString ("deg"))))
92       {
93         anAngleDim->DimensionAspect()->MakeUnitsDisplayed (Standard_False);
94       }
95       else
96       {
97         anAngleDim->SetDisplaySpecialSymbol (AIS_DSS_No);
98       }
99     }
100
101     anAngleDim->SetFlyout (aDimDlg->GetFlyout());
102     myAISContext->Display (anAngleDim);
103   }
104   else
105   {
106     Handle(AIS_LengthDimension) aLenDim = new AIS_LengthDimension (myFirstFace, mySecondFace);
107     aLenDim->SetDimensionAspect (anAspect);
108     aLenDim->DimensionAspect()->MakeUnitsDisplayed (aDimDlg->IsUnitsDisplayed());
109     if (aLenDim->DimensionAspect()->IsUnitsDisplayed())
110     {
111       aLenDim->SetFlyout (aDimDlg->GetFlyout());
112       aLenDim->SetDisplayUnits (aDimDlg->GetUnits());
113     }
114
115     myAISContext->Display (aLenDim);
116   }
117
118   myAISContext->OpenLocalContext();
119   myAISContext->ActivateStandardMode (TopAbs_FACE);
120 }