1 // CDimensionDlg.cpp : implementation file
6 #include "DimensionDlg.h"
7 #include "LengthParamsEdgePage.h"
8 #include "LengthParamsVerticesPage.h"
9 #include "LengthParamsEdgesPage.h"
10 #include "AngleParamsVerticesPage.h"
11 #include "RadiusParamsPage.h"
12 #include "ParamsFacesPage.h"
13 #include <Standard_Macro.hxx>
14 #include <AIS_InteractiveContext.hxx>
15 #include <TColStd_ListIteratorOfListOfInteger.hxx>
16 #include <TColStd_ListOfInteger.hxx>
17 #include <AIS_LocalContext.hxx>
18 #include <AIS_Selection.hxx>
19 #include <Quantity_Color.hxx>
21 BEGIN_MESSAGE_MAP(CDimensionDlg, CDialog)
22 ON_BN_CLICKED(IDOK, &CDimensionDlg::OnBnClickedOk)
23 ON_BN_CLICKED(IDC_DimLength, &CDimensionDlg::OnBnClickedDimLength)
24 ON_BN_CLICKED(IDC_DimAngle, &CDimensionDlg::OnBnClickedDimAngle)
25 ON_BN_CLICKED(IDC_DimRadius, &CDimensionDlg::OnBnClickedDimRadius)
26 ON_NOTIFY(TCN_SELCHANGE, IDC_LengthTab, &CDimensionDlg::OnTcnSelChangeLengthTab)
27 ON_NOTIFY(TCN_SELCHANGING, IDC_LengthTab, &CDimensionDlg::OnTcnSelChangingLengthTab)
29 ON_NOTIFY(TCN_SELCHANGE, IDC_AngleTab, &CDimensionDlg::OnTcnSelChangeAngleTab)
30 ON_NOTIFY(TCN_SELCHANGING, IDC_AngleTab, &CDimensionDlg::OnTcnSelChangingAngleTab)
31 ON_BN_CLICKED(IDC_DimDiameter, &CDimensionDlg::OnBnClickedDimDiameter)
32 ON_BN_CLICKED(IDC_2DText, &CDimensionDlg::OnBnClicked2dText)
33 ON_BN_CLICKED(IDC_3DText, &CDimensionDlg::OnBnClicked3dText)
34 ON_BN_CLICKED(IDC_DimensionColor, &CDimensionDlg::OnBnClickedDimensionColor)
38 //=======================================================================
39 //function : CDimensionDlg
41 //=======================================================================
43 CDimensionDlg::CDimensionDlg(CWnd* pParent /*=NULL*/)
44 : CDialog(CDimensionDlg::IDD, pParent),
47 myDimensionColor (Quantity_NOC_LAWNGREEN)
51 //=======================================================================
52 //function : CDimensionDlg
54 //=======================================================================
56 CDimensionDlg::CDimensionDlg (Handle(AIS_InteractiveContext) &theAISContext,
58 : CDialog(CDimensionDlg::IDD, pParent),
61 myDimensionColor (Quantity_NOC_LAWNGREEN)
63 myAISContext = theAISContext;
66 //=======================================================================
67 //function : ~CDimensionDlg
69 //=======================================================================
71 CDimensionDlg::~CDimensionDlg()
75 //=======================================================================
76 //function : SetContext
78 //=======================================================================
80 void CDimensionDlg::SetContext (const Handle(AIS_InteractiveContext) theContext)
82 myAISContext = theContext;
85 //=======================================================================
86 //function : OnInitDialog
87 //purpose : Initialization of dialog fields and parameters
88 //=======================================================================
90 BOOL CDimensionDlg::OnInitDialog()
92 CDialog::OnInitDialog();
94 myLengthParams = (CTabCtrl*) GetDlgItem (IDC_LengthTab);
95 myAngleParams = (CTabCtrl*) GetDlgItem (IDC_AngleTab);
96 myRadiusParams = (CTabCtrl*) GetDlgItem (IDC_RadiusTab);
97 myDiameterParams = (CTabCtrl*) GetDlgItem (IDC_DiameterTab);
99 CreateLengthParamsTab();
100 CreateAngleParamsTab();
101 CreateRadiusParamsTab();
102 CreateDiameterParamsTab( );
104 myLengthParams->ShowWindow (SW_SHOW);
105 myAngleParams->ShowWindow (SW_HIDE);
106 myRadiusParams->ShowWindow (SW_HIDE);
107 myDiameterParams->ShowWindow (SW_HIDE);
109 // Setting default values
110 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetRange (-30,30,true);
111 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (15);
112 UpdateUnitsListForLength ();
113 ((CComboBox*)GetDlgItem (IDC_DisplayUnits))->SetCurSel (1);
114 CheckRadioButton (IDC_2DText, IDC_3DText, IDC_2DText);
115 SetTextModeControlsVisible (false);
116 CComboBox* aCombo =(CComboBox* )GetDlgItem (IDC_FontSize);
117 aCombo->SelectString (0, L"10");
121 return TRUE; // return TRUE unless you set the focus to a control
122 // EXCEPTION: OCX Property Pages should return FALSE
125 //=======================================================================
126 //function : DoDataExchange
127 //purpose : Updating of dialog data if it's needed
128 //=======================================================================
130 void CDimensionDlg::DoDataExchange (CDataExchange* pDX)
132 CDialog::DoDataExchange (pDX);
134 DDX_Radio (pDX, IDC_DimLength, mySelectedDimType);
137 //=======================================================================
138 //function : OnBnClickedOk
139 //purpose : Reset all local contexts and close the dimension dialog
140 //=======================================================================
142 void CDimensionDlg::OnBnClickedOk()
144 if (myAISContext->HasOpenedContext())
146 myAISContext->CloseAllContexts();
152 //=======================================================================
153 //function : GetFlyout
154 //purpose : Only for length dimensions! Gets flyout value
155 //=======================================================================
157 const Standard_Real CDimensionDlg::GetFlyout() const
159 return ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->GetPos();
162 //=======================================================================
163 //function : CreateLengthParamsTab
164 //purpose : Fill tab control for length dimensions
165 //=======================================================================
167 void CDimensionDlg::CreateLengthParamsTab()
170 aTabItem.mask = TCIF_TEXT;
171 aTabItem.pszText = L"Edge";
172 myLengthParams->InsertItem (0, &aTabItem);
173 aTabItem.pszText = L"Vertices";
174 myLengthParams->InsertItem (1, &aTabItem);
175 aTabItem.pszText = L"Parallel edges";
176 myLengthParams->InsertItem (2, &aTabItem);
177 aTabItem.pszText = L"Parallel faces";
178 myLengthParams->InsertItem (3, &aTabItem);
180 CLengthParamsEdgePage *aPage1 = new CLengthParamsEdgePage (myAISContext);
181 aTabItem.mask = TCIF_PARAM;
182 aTabItem.lParam = (LPARAM)aPage1;
183 myLengthParams->SetItem (0, &aTabItem);
184 VERIFY (aPage1->Create (CLengthParamsEdgePage::IDD,myLengthParams));
185 aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
186 aPage1->ShowWindow (SW_SHOW);
188 CLengthParamsVerticesPage *aPage2 = new CLengthParamsVerticesPage (myAISContext);
189 aTabItem.mask = TCIF_PARAM;
190 aTabItem.lParam = (LPARAM)aPage2;
191 myLengthParams->SetItem (1, &aTabItem);
192 VERIFY (aPage2->Create (CLengthParamsVerticesPage::IDD,myLengthParams));
193 aPage2->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
194 aPage2->ShowWindow (SW_HIDE);
196 CLengthParamsEdgesPage *aPage3 = new CLengthParamsEdgesPage (myAISContext);
197 aTabItem.mask = TCIF_PARAM;
198 aTabItem.lParam = (LPARAM)aPage3;
199 myLengthParams->SetItem (2, &aTabItem);
200 VERIFY (aPage3->Create (CLengthParamsEdgesPage::IDD,myLengthParams));
201 aPage3->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
202 aPage3->ShowWindow (SW_HIDE);
204 CParamsFacesPage *aPage4 = new CParamsFacesPage (myAISContext);
205 aTabItem.mask = TCIF_PARAM;
206 aTabItem.lParam = (LPARAM)aPage4;
207 myLengthParams->SetItem (3, &aTabItem);
208 VERIFY (aPage4->Create (CParamsFacesPage::IDD,myLengthParams));
209 aPage4->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
210 aPage4->ShowWindow (SW_HIDE);
213 //=======================================================================
214 //function : CreateAngleParamsTab
215 //purpose : Fill tab control for angle dimensions
216 //=======================================================================
218 void CDimensionDlg::CreateAngleParamsTab()
221 aTabItem.mask = TCIF_TEXT;
222 aTabItem.pszText = L"Two edges";
223 myAngleParams->InsertItem (0, &aTabItem);
224 aTabItem.pszText = L"Three vertices";
225 myAngleParams->InsertItem (1, &aTabItem);
226 aTabItem.pszText = L"Two faces";
227 myAngleParams->InsertItem (2, &aTabItem);
229 CLengthParamsEdgesPage *aPage1 = new CLengthParamsEdgesPage (myAISContext, true);
230 aTabItem.mask = TCIF_PARAM;
231 aTabItem.lParam = (LPARAM)aPage1;
232 myAngleParams->SetItem (0, &aTabItem);
233 VERIFY (aPage1->Create (CLengthParamsEdgesPage::IDD,myAngleParams));
234 aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
235 aPage1->ShowWindow (SW_SHOW);
237 CAngleParamsVerticesPage *aPage2 = new CAngleParamsVerticesPage (myAISContext);
238 aTabItem.mask = TCIF_PARAM;
239 aTabItem.lParam = (LPARAM)aPage2;
240 myAngleParams->SetItem (1, &aTabItem);
241 VERIFY (aPage2->Create (CAngleParamsVerticesPage::IDD,myAngleParams));
242 aPage2->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
243 aPage2->ShowWindow (SW_HIDE);
245 CParamsFacesPage *aPage3 = new CParamsFacesPage (myAISContext, true);
246 aTabItem.mask = TCIF_PARAM;
247 aTabItem.lParam = (LPARAM)aPage3;
248 myAngleParams->SetItem (2, &aTabItem);
249 VERIFY (aPage3->Create (CParamsFacesPage::IDD,myAngleParams));
250 aPage3->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
251 aPage3->ShowWindow (SW_HIDE);
254 //=======================================================================
255 //function : CreateRadiusParamsTab
256 //purpose : Fill tab control for radius dimensions
257 //=======================================================================
259 void CDimensionDlg::CreateRadiusParamsTab()
262 aTabItem.mask = TCIF_TEXT;
263 aTabItem.pszText = L"Circle or arc";
264 myRadiusParams->InsertItem (0, &aTabItem);
265 CRadiusParamsPage *aPage1 = new CRadiusParamsPage (myAISContext);
266 aTabItem.mask = TCIF_PARAM;
267 aTabItem.lParam = (LPARAM)aPage1;
268 myRadiusParams->SetItem (0, &aTabItem);
269 VERIFY (aPage1->Create (CRadiusParamsPage::IDD,myRadiusParams));
270 aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
271 aPage1->ShowWindow (SW_SHOW);
274 //=======================================================================
275 //function : CreateDiameterParamsTab
276 //purpose : Fill tab control for diameter dimensions
277 //=======================================================================
279 void CDimensionDlg::CreateDiameterParamsTab()
282 aTabItem.mask = TCIF_TEXT;
283 aTabItem.pszText = L"Circle or arc";
284 myDiameterParams->InsertItem (0, &aTabItem);
285 CRadiusParamsPage *aPage1 = new CRadiusParamsPage (myAISContext,Standard_True);
286 aTabItem.mask = TCIF_PARAM;
287 aTabItem.lParam = (LPARAM)aPage1;
288 myRadiusParams->SetItem (0, &aTabItem);
289 VERIFY (aPage1->Create (CRadiusParamsPage::IDD,myDiameterParams));
290 aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
291 aPage1->ShowWindow (SW_SHOW);
294 //=======================================================================
295 //function : UpdateStandardModeForAngle
297 //=======================================================================
299 void CDimensionDlg::UpdateStandardModeForAngle()
301 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetCurSel();
302 myAISContext->CloseAllContexts();
303 myAISContext->OpenLocalContext();
304 TopAbs_ShapeEnum aMode;
308 aMode = TopAbs_VERTEX;
310 else if (aTabNum == 2)
319 myAISContext->ActivateStandardMode (aMode);
322 //=======================================================================
323 //function : UpdateStandardModeForLength
325 //=======================================================================
327 void CDimensionDlg::UpdateStandardModeForLength()
329 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetCurSel();
330 myAISContext->CloseAllContexts();
331 myAISContext->OpenLocalContext();
332 TopAbs_ShapeEnum aMode;
336 aMode = TopAbs_VERTEX;
338 else if (aTabNum == 3)
346 myAISContext->ActivateStandardMode (aMode);
349 //=======================================================================
350 //function : UpdateStandardModeForLength
352 //=======================================================================
354 void CDimensionDlg::UpdateStandardMode()
356 int aCurIndex = GetCheckedRadioButton (IDC_DimLength, IDC_DimDiameter);
360 UpdateStandardModeForLength();
363 UpdateStandardModeForAngle();
366 case IDC_DimDiameter:
368 myAISContext->OpenLocalContext();
369 myAISContext->ActivateStandardMode (TopAbs_EDGE);
375 //=======================================================================
376 //function : OnBnClickedDimLength
377 //purpose : it is called when <Length> radio button is chosen
378 //=======================================================================
380 void CDimensionDlg::OnBnClickedDimLength()
383 UpdateStandardModeForLength ();
384 GetDlgItem (IDC_LengthTab)->ShowWindow (SW_SHOW);
385 GetDlgItem (IDC_AngleTab)->ShowWindow (SW_HIDE);
386 GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_HIDE);
387 GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_HIDE);
389 UpdateUnitsListForLength ();
390 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (15);
393 //=======================================================================
394 //function : OnBnClickedDimAngle
395 //purpose : it is called when <Angle> radio button is chosen
396 //=======================================================================
398 void CDimensionDlg::OnBnClickedDimAngle()
401 UpdateStandardModeForAngle();
402 GetDlgItem (IDC_LengthTab)->ShowWindow (SW_HIDE);
403 GetDlgItem (IDC_AngleTab)->ShowWindow (SW_SHOW);
404 GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_HIDE);
405 GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_HIDE);
407 UpdateUnitsListForAngle();
408 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (15);
411 //=======================================================================
412 //function : OnBnClickedDimDiameter
413 //purpose : it is called when <Diameter> radio button is chosen
414 //=======================================================================
416 void CDimensionDlg::OnBnClickedDimDiameter()
419 myAISContext->CloseAllContexts();
420 myAISContext->OpenLocalContext();
421 myAISContext->ActivateStandardMode (TopAbs_EDGE);
423 GetDlgItem (IDC_LengthTab)->ShowWindow (SW_HIDE);
424 GetDlgItem (IDC_AngleTab)->ShowWindow (SW_HIDE);
425 GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_HIDE);
426 GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_SHOW);
428 UpdateUnitsListForLength();
429 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (0);
432 //=======================================================================
433 //function : OnBnClickedDimRadius
434 //purpose : it is called when <Radius> radio button is chosen
435 //=======================================================================
437 void CDimensionDlg::OnBnClickedDimRadius()
440 myAISContext->CloseAllContexts();
441 myAISContext->OpenLocalContext();
442 myAISContext->ActivateStandardMode (TopAbs_EDGE);
443 GetDlgItem (IDC_LengthTab)->ShowWindow (SW_HIDE);
444 GetDlgItem (IDC_AngleTab)->ShowWindow (SW_HIDE);
445 GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_SHOW);
446 GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_HIDE);
448 UpdateUnitsListForLength();
449 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (0);
452 //=======================================================================
453 //function : OnTcnSelChangeLengthTab
454 //purpose : it is called when in Length tab control current tab was changed
455 //=======================================================================
457 void CDimensionDlg::OnTcnSelChangeLengthTab (NMHDR * /*pNMHDR*/, LRESULT *pResult)
459 // Show this chosen tab page
460 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetCurSel();
462 anItem.mask = TCIF_PARAM;
463 ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetItem (aTabNum, &anItem);
464 ASSERT(anItem.lParam);
465 CWnd *aWnd = (CWnd*)anItem.lParam;
466 aWnd->ShowWindow (SW_SHOW);
467 UpdateStandardModeForLength();
471 //=======================================================================
472 //function : OnTcnSelChangingLengthTab
473 //purpose : it is called when in Length tab control current tab
475 // It is used to hide the current tab here to prevent collisions.
476 //=======================================================================
478 void CDimensionDlg::OnTcnSelChangingLengthTab (NMHDR * /*pNMHDR*/, LRESULT *pResult)
480 // Hide current tab page
481 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetCurSel();
483 anItem.mask = TCIF_PARAM;
484 ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetItem (aTabNum, &anItem);
485 ASSERT (anItem.lParam);
486 CWnd *aWnd = (CWnd*)anItem.lParam;
487 aWnd->ShowWindow (SW_HIDE);
491 //=======================================================================
492 //function : OnTcnSelChangeAngleTab
493 //purpose : it is called when in Angle tab control current tab was changed
494 //=======================================================================
496 void CDimensionDlg::OnTcnSelChangeAngleTab (NMHDR * /*pNMHDR*/, LRESULT *pResult)
498 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetCurSel();
500 anItem.mask = TCIF_PARAM;
501 ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetItem (aTabNum, &anItem);
502 ASSERT (anItem.lParam);
503 CWnd *aWnd = (CWnd*)anItem.lParam;
504 aWnd->ShowWindow (SW_SHOW);
505 UpdateStandardModeForAngle();
509 //=======================================================================
510 //function : OnTcnSelChangingAngleTab
511 //purpose : it is called when in Angle tab control current tab
513 // It is used to hide the current tab here to prevent collisions.
514 //=======================================================================
516 void CDimensionDlg::OnTcnSelChangingAngleTab (NMHDR * /*pNMHDR*/, LRESULT *pResult)
518 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetCurSel();
520 anItem.mask = TCIF_PARAM;
521 ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetItem (aTabNum, &anItem);
522 ASSERT (anItem.lParam);
523 CWnd *aWnd = (CWnd*)anItem.lParam;
524 aWnd->ShowWindow (SW_HIDE);
528 //=======================================================================
529 //function : DeactivateAllStandardModes
531 //=======================================================================
533 void CDimensionDlg::DeactivateAllStandardModes()
535 if (myAISContext->HasOpenedContext())
537 myAISContext->CloseAllContexts();
538 for (TColStd_ListIteratorOfListOfInteger anIt (myAISContext->LocalContext()->StandardModes());
542 myAISContext->LocalContext()->DeactivateStandardMode ((TopAbs_ShapeEnum)anIt.Value());
547 //=======================================================================
548 //function : OnDestroy
550 //=======================================================================
552 void CDimensionDlg::OnDestroy()
554 if (myAISContext->HasOpenedContext())
556 myAISContext->CloseAllContexts();
560 anItem.mask = TCIF_PARAM;
562 // Destroy length tab
563 for (int i = 3; i >= 0; --i)
565 ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetItem (i, &anItem);
566 ASSERT (anItem.lParam);
567 aWnd = (CWnd*) anItem.lParam;
568 aWnd->DestroyWindow();
572 for (int i = 2; i >= 0; --i)
574 ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetItem (i, &anItem);
575 ASSERT(anItem.lParam);
576 aWnd = (CWnd*) anItem.lParam;
577 aWnd->DestroyWindow();
581 // Destroy radius tab
582 ((CTabCtrl*) GetDlgItem (IDC_RadiusTab))->GetItem (0, &anItem);
583 ASSERT(anItem.lParam);
584 aWnd = (CWnd*) anItem.lParam;
585 aWnd->DestroyWindow();
588 // Destroy diameter tab
589 ((CTabCtrl*) GetDlgItem (IDC_DiameterTab))->GetItem (0, &anItem);
590 ASSERT(anItem.lParam);
591 aWnd = (CWnd*) anItem.lParam;
592 aWnd->DestroyWindow();
595 CDialog::OnDestroy();
598 //=======================================================================
599 //function : GetTextType
600 //purpose : Returns true if 3d text is to be used
601 // and false in the case of 2d text.
602 //=======================================================================
604 const Standard_Boolean CDimensionDlg::GetTextType() const
606 CButton* a3DButton = (CButton*)GetDlgItem (IDC_3DText);
607 return a3DButton->GetCheck();
610 //=======================================================================
611 //function : GetFontHeight
612 //purpose : Returns font height
613 //=======================================================================
615 const Standard_Real CDimensionDlg::GetFontHeight() const
617 CComboBox *aComboBox = (CComboBox*)GetDlgItem (IDC_FontSize);
619 aComboBox->GetWindowText (aStr);
623 //=======================================================================
624 //function : IsText3dShaded
625 //purpose : Only for 3d text; returns true if shaded 3d text is to be used
626 //=======================================================================
628 const Standard_Boolean CDimensionDlg::IsText3dShaded() const
630 CComboBox *aComboBox = (CComboBox*)GetDlgItem (IDC_TextDisplayMode);
631 int aCurIndex = aComboBox->GetCurSel();
632 return aCurIndex == 0 ? Standard_False : Standard_True;
635 //=======================================================================
636 //function : SetTextModeControlsVisible
637 //purpose : for the dialog updating
638 //=======================================================================
640 void CDimensionDlg::SetTextModeControlsVisible (bool isVisible)
642 GetDlgItem (IDC_TextDisplayMode)->ShowWindow (isVisible ? SW_SHOW : SW_HIDE);
643 GetDlgItem (IDC_TextDisplayModeStatic)->ShowWindow (isVisible ? SW_SHOW : SW_HIDE);
646 //=======================================================================
647 //function : OnBnClicked2dText
648 //purpose : for the dialog updating when 2d text radio button was chosen
649 //=======================================================================
651 void CDimensionDlg::OnBnClicked2dText()
653 SetTextModeControlsVisible (false);
656 //=======================================================================
657 //function : OnBnClicked3dText
658 //purpose : for the dialog updating when 3d text radio button was chosen
659 //=======================================================================
661 void CDimensionDlg::OnBnClicked3dText()
663 SetTextModeControlsVisible (true);
666 //=======================================================================
667 //function : UpdateUnitsListForLength
668 //purpose : for the dialog updating when 3d text radio button was chosen
669 //=======================================================================
671 void CDimensionDlg::UpdateUnitsListForLength()
673 CComboBox *aCombo = (CComboBox*)GetDlgItem (IDC_DisplayUnits);
674 aCombo->ResetContent();
675 aCombo->AddString (L"No");
676 aCombo->AddString (L"m");
677 aCombo->AddString (L"mm");
678 aCombo->AddString (L"in");
679 aCombo->SetCurSel (1);
682 //=======================================================================
683 //function : UpdateUnitsListForAngle
684 //purpose : for the dialog updating when 3d text radio button was chosen
685 //=======================================================================
687 void CDimensionDlg::UpdateUnitsListForAngle()
689 CComboBox *aCombo = (CComboBox*)GetDlgItem (IDC_DisplayUnits);
690 aCombo->ResetContent();
691 aCombo->AddString (L"No");
692 aCombo->AddString (L"deg");
693 aCombo->AddString (L"rad");
694 aCombo->SetCurSel (1);
697 //=======================================================================
698 //function : IsUnitsDisplayed
699 //purpose : returns true if the units is to be displayed
700 //=======================================================================
702 const Standard_Boolean CDimensionDlg::IsUnitsDisplayed() const
705 GetDlgItem (IDC_DisplayUnits)->GetWindowText (aStr);
706 return !aStr.IsEmpty() && aStr != "No";
709 //=======================================================================
710 //function : GetUnits
711 //purpose : returns display quantity units for current dimension
712 //=======================================================================
714 const TCollection_AsciiString CDimensionDlg::GetUnits() const
716 if (!IsUnitsDisplayed())
717 return TCollection_AsciiString();
719 GetDlgItem (IDC_DisplayUnits)->GetWindowText (aStr);
720 TCollection_ExtendedString aCharsW ((Standard_ExtString )(const wchar_t* )aStr);
721 return TCollection_AsciiString (aCharsW, '?');
724 //=======================================================================
725 //function : OnBnClickedDimensionColor
726 //purpose : returns display quantity units for current dimension
727 //=======================================================================
729 void CDimensionDlg::OnBnClickedDimensionColor()
734 myDimensionColor.Values (aR,aG,aB, Quantity_TOC_RGB);
735 COLORREF aColor = RGB (aR*255, aG*255, aB*255);
737 CColorDialog aDlgColor (aColor);
738 if (aDlgColor.DoModal() == IDOK)
740 aColor = aDlgColor.GetColor();
741 aR = GetRValue(aColor) / 255.0;
742 aG = GetGValue(aColor) / 255.0;
743 aB = GetBValue(aColor) / 255.0;
744 myDimensionColor = Quantity_Color (aR, aG, aB, Quantity_TOC_RGB);
748 //=======================================================================
749 //function : GetDimensionColor
750 //purpose : returns current dimension color
751 //=======================================================================
753 const Quantity_Color CDimensionDlg::GetDimensionColor() const
755 return myDimensionColor;
758 void CDimensionDlg::OnClose()
760 if (myAISContext->HasOpenedContext())
762 myAISContext->CloseAllContexts();
767 TopoDS_Shape CDimensionDlg::SelectedShape()
769 Handle(Standard_Transient) aSelection = AIS_Selection::CurrentSelection()->Value();
770 Handle(SelectMgr_EntityOwner) anOwner = Handle(SelectMgr_EntityOwner)::DownCast (aSelection);
771 Handle(StdSelect_BRepOwner) aBrepOwner = Handle(StdSelect_BRepOwner)::DownCast(anOwner);
772 return aBrepOwner->Shape().Located (aBrepOwner->Location() * aBrepOwner->Shape().Location());