0024133: Development of improvement of dimensions implementation; new length, radius...
[occt.git] / samples / mfc / standard / Common / LengthParamsEdgePage.cpp
1 // LengthParamsEdgePage.cpp : implementation file
2 //
3
4 #include "stdafx.h"
5 #include "LengthParamsEdgePage.h"
6 #include "DimensionDlg.h"
7
8 #include <Standard_Macro.hxx>
9 #include <AIS_InteractiveContext.hxx>
10 #include <AIS_LocalContext.hxx>
11 #include <AIS_LengthDimension.hxx>
12 #include <GC_MakePlane.hxx>
13 #include <TopExp.hxx>
14
15 // CLengthParamsEdgePage dialog
16
17 IMPLEMENT_DYNAMIC(CLengthParamsEdgePage, CDialog)
18
19 //=======================================================================
20 //function : CLengthParamsEdgePage
21 //purpose  :
22 //=======================================================================
23
24 CLengthParamsEdgePage::CLengthParamsEdgePage (Handle(AIS_InteractiveContext) theContext,CWnd* pParent /*=NULL*/)
25 : CDialog (CLengthParamsEdgePage::IDD, pParent)
26 {
27   myAISContext = theContext;
28 }
29
30 //=======================================================================
31 //function : ~CLengthParamsEdgePage
32 //purpose  :
33 //=======================================================================
34
35 CLengthParamsEdgePage::~CLengthParamsEdgePage()
36 {
37 }
38
39 //=======================================================================
40 //function : DoDataExchange
41 //purpose  :
42 //=======================================================================
43
44 void CLengthParamsEdgePage::DoDataExchange (CDataExchange* pDX)
45 {
46   CDialog::DoDataExchange(pDX);
47 }
48
49 BEGIN_MESSAGE_MAP (CLengthParamsEdgePage, CDialog)
50   ON_BN_CLICKED (IDC_ChooseEdgeBtn, &CLengthParamsEdgePage::OnBnClickedChooseEdgeBtn)
51 END_MESSAGE_MAP()
52
53 //=======================================================================
54 //function : GetButton
55 //purpose  :
56 //=======================================================================
57
58 CButton* CLengthParamsEdgePage::GetButton()
59 {
60   return (CButton*)GetDlgItem (IDC_ChooseEdgeBtn);
61 }
62
63 //=======================================================================
64 //function : OnBnClickedChooseEdgeBtn
65 //purpose  :
66 //=======================================================================
67
68 void CLengthParamsEdgePage::OnBnClickedChooseEdgeBtn()
69 {
70   myAISContext->LocalContext()->InitSelected();
71
72   if (!myAISContext->LocalContext()->MoreSelected())
73   {
74     AfxMessageBox ( _T("Choose the vertex and press the button again"), MB_ICONINFORMATION | MB_OK);
75     return;
76   }
77
78   TopoDS_Edge anEdge = TopoDS::Edge(myAISContext->LocalContext()->SelectedShape());
79   myAISContext->LocalContext()->ClearSelected();
80   TopoDS_Vertex aFirstVertex, aSecondVertex;
81   TopExp::Vertices (anEdge, aFirstVertex, aSecondVertex);
82
83   gp_Pnt aP1=BRep_Tool::Pnt (aFirstVertex);
84   gp_Pnt aP2=BRep_Tool::Pnt (aSecondVertex);
85   gp_Pnt aP3(aP2.X()+10, aP2.Y()+10, aP2.Z()+10);
86
87   GC_MakePlane aMkPlane (aP1,aP2,aP3);
88   Handle(Geom_Plane) aPlane = aMkPlane.Value ();
89
90   CDimensionDlg *aDimDlg = (CDimensionDlg*)(GetParentOwner());
91
92   Handle(AIS_LengthDimension) aLenDim = new AIS_LengthDimension (anEdge, aPlane->Pln());
93   Handle(Prs3d_DimensionAspect) anAspect = new Prs3d_DimensionAspect();
94   anAspect->MakeArrows3d (Standard_False);
95   anAspect->MakeText3d (aDimDlg->GetTextType());
96   anAspect->TextAspect()->SetHeight (aDimDlg->GetFontHeight());
97   anAspect->MakeTextShaded (aDimDlg->IsText3dShaded());
98   anAspect->SetCommonColor (aDimDlg->GetDimensionColor());
99   aLenDim->MakeUnitsDisplayed (aDimDlg->IsUnitsDisplayed());
100   if (aLenDim->IsUnitsDisplayed())
101   {
102     aLenDim->SetDisplayUnits (aDimDlg->GetUnits());
103   }
104
105   aLenDim->SetDimensionAspect (anAspect);
106   aLenDim->SetFlyout (aDimDlg->GetFlyout());
107
108   myAISContext->CloseAllContexts();
109   myAISContext->Display (aLenDim);
110   myAISContext->OpenLocalContext();
111   myAISContext->ActivateStandardMode(TopAbs_EDGE);
112 }