1 // ParamsFacesPage.cpp : implementation file
5 #include "ParamsFacesPage.h"
6 #include "DimensionDlg.h"
7 #include <AIS_InteractiveContext.hxx>
8 #include <PrsDim_LengthDimension.hxx>
9 #include <PrsDim_AngleDimension.hxx>
11 // CParamsFacesPage dialog
13 IMPLEMENT_DYNAMIC(CParamsFacesPage, CDialog)
15 CParamsFacesPage::CParamsFacesPage (Handle(AIS_InteractiveContext) theAISContext,
16 bool isAngleDimension /*= false*/,
17 CWnd* pParent /*=NULL*/)
18 : CDialog(CParamsFacesPage::IDD, pParent),
19 myAISContext (theAISContext),
20 myIsAngleDimension (isAngleDimension)
24 CParamsFacesPage::~CParamsFacesPage()
28 void CParamsFacesPage::DoDataExchange(CDataExchange* pDX)
30 CDialog::DoDataExchange(pDX);
34 BEGIN_MESSAGE_MAP(CParamsFacesPage, CDialog)
35 ON_BN_CLICKED(IDC_FacesBtn1, &CParamsFacesPage::OnBnClickedFacesbtn1)
36 ON_BN_CLICKED(IDC_FacesBtn2, &CParamsFacesPage::OnBnClickedFacesbtn2)
40 // CParamsFacesPage message handlers
42 void CParamsFacesPage::OnBnClickedFacesbtn1()
44 // Check if face is selected
45 myAISContext->InitSelected();
46 if (!myAISContext->MoreSelected() ||
47 myAISContext->SelectedShape().ShapeType() != TopAbs_FACE)
49 AfxMessageBox(_T("Choose the face and press the button again"),
50 MB_ICONINFORMATION | MB_OK);
54 myFirstFace = TopoDS::Face (myAISContext->SelectedShape());
56 myAISContext->ClearSelected (Standard_True);
59 void CParamsFacesPage::OnBnClickedFacesbtn2()
61 const Standard_Integer aSelectionMode = AIS_Shape::SelectionMode (TopAbs_FACE);
63 // Check if face is selected
64 myAISContext->InitSelected();
65 if (!myAISContext->MoreSelected() ||
66 myAISContext->SelectedShape().ShapeType() != TopAbs_FACE)
68 AfxMessageBox(_T("Choose the face and press the button again"),
69 MB_ICONINFORMATION | MB_OK);
73 mySecondFace = TopoDS::Face (myAISContext->SelectedShape());
74 myAISContext->ClearSelected (Standard_False);
76 CDimensionDlg *aDimDlg = (CDimensionDlg*)(GetParentOwner());
78 myAISContext->Deactivate (aSelectionMode);
80 Handle(Prs3d_DimensionAspect) anAspect = new Prs3d_DimensionAspect();
81 anAspect->MakeArrows3d (Standard_False);
82 anAspect->MakeText3d (aDimDlg->GetTextType());
83 anAspect->TextAspect()->SetHeight (aDimDlg->GetFontHeight());
84 anAspect->MakeTextShaded (aDimDlg->IsText3dShaded());
85 anAspect->SetCommonColor (aDimDlg->GetDimensionColor());
86 anAspect->MakeUnitsDisplayed (aDimDlg->IsUnitsDisplayed());
87 if (myIsAngleDimension)
89 // Build an angle dimension between two non-parallel edges
90 Handle(PrsDim_AngleDimension) anAngleDim = new PrsDim_AngleDimension (myFirstFace, mySecondFace);
91 anAngleDim->SetDimensionAspect (anAspect);
93 if (aDimDlg->IsUnitsDisplayed())
95 anAngleDim->SetDisplayUnits (aDimDlg->GetUnits ());
96 if ((anAngleDim->GetDisplayUnits().IsEqual (TCollection_AsciiString ("deg"))))
98 anAngleDim->DimensionAspect()->MakeUnitsDisplayed (Standard_False);
102 anAngleDim->SetDisplaySpecialSymbol (PrsDim_DisplaySpecialSymbol_No);
106 anAngleDim->SetFlyout (aDimDlg->GetFlyout());
107 myAISContext->Display (anAngleDim, Standard_True);
111 Handle(PrsDim_LengthDimension) aLenDim = new PrsDim_LengthDimension (myFirstFace, mySecondFace);
112 aLenDim->SetDimensionAspect (anAspect);
114 if (aLenDim->DimensionAspect()->IsUnitsDisplayed())
116 aLenDim->SetFlyout (aDimDlg->GetFlyout());
117 aLenDim->SetDisplayUnits (aDimDlg->GetUnits());
120 myAISContext->Display (aLenDim, Standard_True);
123 myAISContext->Activate (aSelectionMode);