1 // ParamsFacesPage.cpp : implementation file
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>
12 // CParamsFacesPage dialog
14 IMPLEMENT_DYNAMIC(CParamsFacesPage, CDialog)
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)
25 CParamsFacesPage::~CParamsFacesPage()
29 void CParamsFacesPage::DoDataExchange(CDataExchange* pDX)
31 CDialog::DoDataExchange(pDX);
35 BEGIN_MESSAGE_MAP(CParamsFacesPage, CDialog)
36 ON_BN_CLICKED(IDC_FacesBtn1, &CParamsFacesPage::OnBnClickedFacesbtn1)
37 ON_BN_CLICKED(IDC_FacesBtn2, &CParamsFacesPage::OnBnClickedFacesbtn2)
41 // CParamsFacesPage message handlers
43 void CParamsFacesPage::OnBnClickedFacesbtn1()
45 // Check if face is selected
46 myAISContext->LocalContext()->InitSelected();
47 if (!myAISContext->LocalContext()->MoreSelected())
49 AfxMessageBox(_T("Choose the face and press the button again"),
50 MB_ICONINFORMATION | MB_OK);
54 // Workaround for AIS_LocalContext::SelectedShape()
55 myFirstFace = TopoDS::Face (CDimensionDlg::SelectedShape());
56 //myFirstFace = TopoDS::Face (myAISContext->LocalContext()->SelectedShape());
58 myAISContext->LocalContext()->ClearSelected();
61 void CParamsFacesPage::OnBnClickedFacesbtn2()
63 // Check if face is selected
64 myAISContext->LocalContext()->InitSelected();
65 if (!myAISContext->LocalContext()->MoreSelected())
67 AfxMessageBox(_T("Choose the face and press the button again"),
68 MB_ICONINFORMATION | MB_OK);
72 // Workaround for AIS_LocalContext::SelectedShape()
73 mySecondFace = TopoDS::Face (CDimensionDlg::SelectedShape());
74 //mySecondFace = TopoDS::Face (myAISContext->LocalContext()->SelectedShape());
75 myAISContext->LocalContext()->ClearSelected();
77 CDimensionDlg *aDimDlg = (CDimensionDlg*)(GetParentOwner());
79 myAISContext->CloseAllContexts();
81 Handle(Prs3d_DimensionAspect) anAspect = new Prs3d_DimensionAspect();
82 anAspect->MakeArrows3d (Standard_False);
83 anAspect->MakeText3d (aDimDlg->GetTextType());
84 anAspect->TextAspect()->SetHeight (aDimDlg->GetFontHeight());
85 anAspect->MakeTextShaded (aDimDlg->IsText3dShaded());
86 anAspect->SetCommonColor (aDimDlg->GetDimensionColor());
87 anAspect->MakeUnitsDisplayed (aDimDlg->IsUnitsDisplayed());
88 if (myIsAngleDimension)
90 // Build an angle dimension between two non-parallel edges
91 Handle(AIS_AngleDimension) anAngleDim = new AIS_AngleDimension (myFirstFace, mySecondFace);
92 anAngleDim->SetDimensionAspect (anAspect);
94 if (aDimDlg->IsUnitsDisplayed())
96 anAngleDim->SetDisplayUnits (aDimDlg->GetUnits ());
97 if ((anAngleDim->GetDisplayUnits().IsEqual (TCollection_AsciiString ("deg"))))
99 anAngleDim->DimensionAspect()->MakeUnitsDisplayed (Standard_False);
103 anAngleDim->SetDisplaySpecialSymbol (AIS_DSS_No);
107 anAngleDim->SetFlyout (aDimDlg->GetFlyout());
108 myAISContext->Display (anAngleDim);
112 Handle(AIS_LengthDimension) aLenDim = new AIS_LengthDimension (myFirstFace, mySecondFace);
113 aLenDim->SetDimensionAspect (anAspect);
115 if (aLenDim->DimensionAspect()->IsUnitsDisplayed())
117 aLenDim->SetFlyout (aDimDlg->GetFlyout());
118 aLenDim->SetDisplayUnits (aDimDlg->GetUnits());
121 myAISContext->Display (aLenDim);
124 myAISContext->OpenLocalContext();
125 myAISContext->ActivateStandardMode (TopAbs_FACE);