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 <TColStd_ListIteratorOfListOfInteger.hxx>
15 #include <TColStd_ListOfInteger.hxx>
16 #include <AIS_LocalContext.hxx>
17 #include <Quantity_Color.hxx>
19 BEGIN_MESSAGE_MAP(CDimensionDlg, CDialog)
20 ON_BN_CLICKED(IDOK, &CDimensionDlg::OnBnClickedOk)
21 ON_BN_CLICKED(IDC_DimLength, &CDimensionDlg::OnBnClickedDimLength)
22 ON_BN_CLICKED(IDC_DimAngle, &CDimensionDlg::OnBnClickedDimAngle)
23 ON_BN_CLICKED(IDC_DimRadius, &CDimensionDlg::OnBnClickedDimRadius)
24 ON_NOTIFY(TCN_SELCHANGE, IDC_LengthTab, &CDimensionDlg::OnTcnSelChangeLengthTab)
25 ON_NOTIFY(TCN_SELCHANGING, IDC_LengthTab, &CDimensionDlg::OnTcnSelChangingLengthTab)
27 ON_NOTIFY(TCN_SELCHANGE, IDC_AngleTab, &CDimensionDlg::OnTcnSelChangeAngleTab)
28 ON_NOTIFY(TCN_SELCHANGING, IDC_AngleTab, &CDimensionDlg::OnTcnSelChangingAngleTab)
29 ON_BN_CLICKED(IDC_DimDiameter, &CDimensionDlg::OnBnClickedDimDiameter)
30 ON_BN_CLICKED(IDC_2DText, &CDimensionDlg::OnBnClicked2dText)
31 ON_BN_CLICKED(IDC_3DText, &CDimensionDlg::OnBnClicked3dText)
32 ON_BN_CLICKED(IDC_DimensionColor, &CDimensionDlg::OnBnClickedDimensionColor)
36 //=======================================================================
37 //function : CDimensionDlg
39 //=======================================================================
41 CDimensionDlg::CDimensionDlg(CWnd* pParent /*=NULL*/)
42 : CDialog(CDimensionDlg::IDD, pParent),
45 myDimensionColor (Quantity_NOC_LAWNGREEN)
49 //=======================================================================
50 //function : CDimensionDlg
52 //=======================================================================
54 CDimensionDlg::CDimensionDlg (Handle(AIS_InteractiveContext) &theAISContext,
56 : CDialog(CDimensionDlg::IDD, pParent),
59 myDimensionColor (Quantity_NOC_LAWNGREEN)
61 myAISContext = theAISContext;
64 //=======================================================================
65 //function : ~CDimensionDlg
67 //=======================================================================
69 CDimensionDlg::~CDimensionDlg()
73 //=======================================================================
74 //function : SetContext
76 //=======================================================================
78 void CDimensionDlg::SetContext (const Handle(AIS_InteractiveContext) theContext)
80 myAISContext = theContext;
83 //=======================================================================
84 //function : OnInitDialog
85 //purpose : Initialization of dialog fields and parameters
86 //=======================================================================
88 BOOL CDimensionDlg::OnInitDialog()
90 CDialog::OnInitDialog();
92 myLengthParams = (CTabCtrl*) GetDlgItem (IDC_LengthTab);
93 myAngleParams = (CTabCtrl*) GetDlgItem (IDC_AngleTab);
94 myRadiusParams = (CTabCtrl*) GetDlgItem (IDC_RadiusTab);
95 myDiameterParams = (CTabCtrl*) GetDlgItem (IDC_DiameterTab);
97 CreateLengthParamsTab();
98 CreateAngleParamsTab();
99 CreateRadiusParamsTab();
100 CreateDiameterParamsTab( );
102 myLengthParams->ShowWindow (SW_SHOW);
103 myAngleParams->ShowWindow (SW_HIDE);
104 myRadiusParams->ShowWindow (SW_HIDE);
105 myDiameterParams->ShowWindow (SW_HIDE);
107 // Setting default values
108 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetRange (-30,30,true);
109 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (15);
110 UpdateUnitsListForLength ();
111 ((CComboBox*)GetDlgItem (IDC_DisplayUnits))->SetCurSel (1);
112 CheckRadioButton (IDC_2DText, IDC_3DText, IDC_2DText);
113 SetTextModeControlsVisible (false);
114 CComboBox* aCombo =(CComboBox* )GetDlgItem (IDC_FontSize);
115 aCombo->SelectString (0, L"10");
119 return TRUE; // return TRUE unless you set the focus to a control
120 // EXCEPTION: OCX Property Pages should return FALSE
123 //=======================================================================
124 //function : DoDataExchange
125 //purpose : Updating of dialog data if it's needed
126 //=======================================================================
128 void CDimensionDlg::DoDataExchange (CDataExchange* pDX)
130 CDialog::DoDataExchange (pDX);
132 DDX_Radio (pDX, IDC_DimLength, mySelectedDimType);
135 //=======================================================================
136 //function : OnBnClickedOk
137 //purpose : Reset all local contexts and close the dimension dialog
138 //=======================================================================
140 void CDimensionDlg::OnBnClickedOk()
142 if (myAISContext->HasOpenedContext())
144 myAISContext->CloseAllContexts();
150 //=======================================================================
151 //function : GetFlyout
152 //purpose : Only for length dimensions! Gets flyout value
153 //=======================================================================
155 const Standard_Real CDimensionDlg::GetFlyout() const
157 return ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->GetPos();
160 //=======================================================================
161 //function : CreateLengthParamsTab
162 //purpose : Fill tab control for length dimensions
163 //=======================================================================
165 void CDimensionDlg::CreateLengthParamsTab()
168 aTabItem.mask = TCIF_TEXT;
169 aTabItem.pszText = L"Edge";
170 myLengthParams->InsertItem (0, &aTabItem);
171 aTabItem.pszText = L"Vertices";
172 myLengthParams->InsertItem (1, &aTabItem);
173 aTabItem.pszText = L"Parallel edges";
174 myLengthParams->InsertItem (2, &aTabItem);
175 aTabItem.pszText = L"Parallel faces";
176 myLengthParams->InsertItem (3, &aTabItem);
178 CLengthParamsEdgePage *aPage1 = new CLengthParamsEdgePage (myAISContext);
179 aTabItem.mask = TCIF_PARAM;
180 aTabItem.lParam = (LPARAM)aPage1;
181 myLengthParams->SetItem (0, &aTabItem);
182 VERIFY (aPage1->Create (CLengthParamsEdgePage::IDD,myLengthParams));
183 aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
184 aPage1->ShowWindow (SW_SHOW);
186 CLengthParamsVerticesPage *aPage2 = new CLengthParamsVerticesPage (myAISContext);
187 aTabItem.mask = TCIF_PARAM;
188 aTabItem.lParam = (LPARAM)aPage2;
189 myLengthParams->SetItem (1, &aTabItem);
190 VERIFY (aPage2->Create (CLengthParamsVerticesPage::IDD,myLengthParams));
191 aPage2->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
192 aPage2->ShowWindow (SW_HIDE);
194 CLengthParamsEdgesPage *aPage3 = new CLengthParamsEdgesPage (myAISContext);
195 aTabItem.mask = TCIF_PARAM;
196 aTabItem.lParam = (LPARAM)aPage3;
197 myLengthParams->SetItem (2, &aTabItem);
198 VERIFY (aPage3->Create (CLengthParamsEdgesPage::IDD,myLengthParams));
199 aPage3->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
200 aPage3->ShowWindow (SW_HIDE);
202 CParamsFacesPage *aPage4 = new CParamsFacesPage (myAISContext);
203 aTabItem.mask = TCIF_PARAM;
204 aTabItem.lParam = (LPARAM)aPage4;
205 myLengthParams->SetItem (3, &aTabItem);
206 VERIFY (aPage4->Create (CParamsFacesPage::IDD,myLengthParams));
207 aPage4->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
208 aPage4->ShowWindow (SW_HIDE);
211 //=======================================================================
212 //function : CreateAngleParamsTab
213 //purpose : Fill tab control for angle dimensions
214 //=======================================================================
216 void CDimensionDlg::CreateAngleParamsTab()
219 aTabItem.mask = TCIF_TEXT;
220 aTabItem.pszText = L"Two edges";
221 myAngleParams->InsertItem (0, &aTabItem);
222 aTabItem.pszText = L"Three vertices";
223 myAngleParams->InsertItem (1, &aTabItem);
224 aTabItem.pszText = L"Two faces";
225 myAngleParams->InsertItem (2, &aTabItem);
227 CLengthParamsEdgesPage *aPage1 = new CLengthParamsEdgesPage (myAISContext, true);
228 aTabItem.mask = TCIF_PARAM;
229 aTabItem.lParam = (LPARAM)aPage1;
230 myAngleParams->SetItem (0, &aTabItem);
231 VERIFY (aPage1->Create (CLengthParamsEdgesPage::IDD,myAngleParams));
232 aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
233 aPage1->ShowWindow (SW_SHOW);
235 CAngleParamsVerticesPage *aPage2 = new CAngleParamsVerticesPage (myAISContext);
236 aTabItem.mask = TCIF_PARAM;
237 aTabItem.lParam = (LPARAM)aPage2;
238 myAngleParams->SetItem (1, &aTabItem);
239 VERIFY (aPage2->Create (CAngleParamsVerticesPage::IDD,myAngleParams));
240 aPage2->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
241 aPage2->ShowWindow (SW_HIDE);
243 CParamsFacesPage *aPage3 = new CParamsFacesPage (myAISContext, true);
244 aTabItem.mask = TCIF_PARAM;
245 aTabItem.lParam = (LPARAM)aPage3;
246 myAngleParams->SetItem (2, &aTabItem);
247 VERIFY (aPage3->Create (CParamsFacesPage::IDD,myAngleParams));
248 aPage3->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
249 aPage3->ShowWindow (SW_HIDE);
252 //=======================================================================
253 //function : CreateRadiusParamsTab
254 //purpose : Fill tab control for radius dimensions
255 //=======================================================================
257 void CDimensionDlg::CreateRadiusParamsTab()
260 aTabItem.mask = TCIF_TEXT;
261 aTabItem.pszText = L"Circle or arc";
262 myRadiusParams->InsertItem (0, &aTabItem);
263 CRadiusParamsPage *aPage1 = new CRadiusParamsPage (myAISContext);
264 aTabItem.mask = TCIF_PARAM;
265 aTabItem.lParam = (LPARAM)aPage1;
266 myRadiusParams->SetItem (0, &aTabItem);
267 VERIFY (aPage1->Create (CRadiusParamsPage::IDD,myRadiusParams));
268 aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
269 aPage1->ShowWindow (SW_SHOW);
272 //=======================================================================
273 //function : CreateDiameterParamsTab
274 //purpose : Fill tab control for diameter dimensions
275 //=======================================================================
277 void CDimensionDlg::CreateDiameterParamsTab()
280 aTabItem.mask = TCIF_TEXT;
281 aTabItem.pszText = L"Circle or arc";
282 myDiameterParams->InsertItem (0, &aTabItem);
283 CRadiusParamsPage *aPage1 = new CRadiusParamsPage (myAISContext,Standard_True);
284 aTabItem.mask = TCIF_PARAM;
285 aTabItem.lParam = (LPARAM)aPage1;
286 myRadiusParams->SetItem (0, &aTabItem);
287 VERIFY (aPage1->Create (CRadiusParamsPage::IDD,myDiameterParams));
288 aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
289 aPage1->ShowWindow (SW_SHOW);
292 //=======================================================================
293 //function : UpdateStandardModeForAngle
295 //=======================================================================
297 void CDimensionDlg::UpdateStandardModeForAngle()
299 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetCurSel();
300 myAISContext->CloseAllContexts();
301 myAISContext->OpenLocalContext();
302 TopAbs_ShapeEnum aMode;
306 aMode = TopAbs_VERTEX;
308 else if (aTabNum == 2)
317 myAISContext->ActivateStandardMode (aMode);
320 //=======================================================================
321 //function : UpdateStandardModeForLength
323 //=======================================================================
325 void CDimensionDlg::UpdateStandardModeForLength()
327 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetCurSel();
328 myAISContext->CloseAllContexts();
329 myAISContext->OpenLocalContext();
330 TopAbs_ShapeEnum aMode;
334 aMode = TopAbs_VERTEX;
336 else if (aTabNum == 3)
344 myAISContext->ActivateStandardMode (aMode);
347 //=======================================================================
348 //function : UpdateStandardModeForLength
350 //=======================================================================
352 void CDimensionDlg::UpdateStandardMode()
354 int aCurIndex = GetCheckedRadioButton (IDC_DimLength, IDC_DimDiameter);
358 UpdateStandardModeForLength();
361 UpdateStandardModeForAngle();
364 case IDC_DimDiameter:
366 myAISContext->OpenLocalContext();
367 myAISContext->ActivateStandardMode (TopAbs_EDGE);
373 //=======================================================================
374 //function : OnBnClickedDimLength
375 //purpose : it is called when <Length> radio button is chosen
376 //=======================================================================
378 void CDimensionDlg::OnBnClickedDimLength()
381 UpdateStandardModeForLength ();
382 GetDlgItem (IDC_LengthTab)->ShowWindow (SW_SHOW);
383 GetDlgItem (IDC_AngleTab)->ShowWindow (SW_HIDE);
384 GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_HIDE);
385 GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_HIDE);
387 UpdateUnitsListForLength ();
388 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (15);
391 //=======================================================================
392 //function : OnBnClickedDimAngle
393 //purpose : it is called when <Angle> radio button is chosen
394 //=======================================================================
396 void CDimensionDlg::OnBnClickedDimAngle()
399 UpdateStandardModeForAngle();
400 GetDlgItem (IDC_LengthTab)->ShowWindow (SW_HIDE);
401 GetDlgItem (IDC_AngleTab)->ShowWindow (SW_SHOW);
402 GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_HIDE);
403 GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_HIDE);
405 UpdateUnitsListForAngle();
406 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (15);
409 //=======================================================================
410 //function : OnBnClickedDimDiameter
411 //purpose : it is called when <Diameter> radio button is chosen
412 //=======================================================================
414 void CDimensionDlg::OnBnClickedDimDiameter()
417 myAISContext->CloseAllContexts();
418 myAISContext->OpenLocalContext();
419 myAISContext->ActivateStandardMode (TopAbs_EDGE);
421 GetDlgItem (IDC_LengthTab)->ShowWindow (SW_HIDE);
422 GetDlgItem (IDC_AngleTab)->ShowWindow (SW_HIDE);
423 GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_HIDE);
424 GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_SHOW);
426 UpdateUnitsListForLength();
427 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (0);
430 //=======================================================================
431 //function : OnBnClickedDimRadius
432 //purpose : it is called when <Radius> radio button is chosen
433 //=======================================================================
435 void CDimensionDlg::OnBnClickedDimRadius()
438 myAISContext->CloseAllContexts();
439 myAISContext->OpenLocalContext();
440 myAISContext->ActivateStandardMode (TopAbs_EDGE);
441 GetDlgItem (IDC_LengthTab)->ShowWindow (SW_HIDE);
442 GetDlgItem (IDC_AngleTab)->ShowWindow (SW_HIDE);
443 GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_SHOW);
444 GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_HIDE);
446 UpdateUnitsListForLength();
447 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (0);
450 //=======================================================================
451 //function : OnTcnSelChangeLengthTab
452 //purpose : it is called when in Length tab control current tab was changed
453 //=======================================================================
455 void CDimensionDlg::OnTcnSelChangeLengthTab (NMHDR * /*pNMHDR*/, LRESULT *pResult)
457 // Show this chosen tab page
458 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetCurSel();
460 anItem.mask = TCIF_PARAM;
461 ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetItem (aTabNum, &anItem);
462 ASSERT(anItem.lParam);
463 CWnd *aWnd = (CWnd*)anItem.lParam;
464 aWnd->ShowWindow (SW_SHOW);
465 UpdateStandardModeForLength();
469 //=======================================================================
470 //function : OnTcnSelChangingLengthTab
471 //purpose : it is called when in Length tab control current tab
473 // It is used to hide the current tab here to prevent collisions.
474 //=======================================================================
476 void CDimensionDlg::OnTcnSelChangingLengthTab (NMHDR * /*pNMHDR*/, LRESULT *pResult)
478 // Hide current tab page
479 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetCurSel();
481 anItem.mask = TCIF_PARAM;
482 ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetItem (aTabNum, &anItem);
483 ASSERT (anItem.lParam);
484 CWnd *aWnd = (CWnd*)anItem.lParam;
485 aWnd->ShowWindow (SW_HIDE);
489 //=======================================================================
490 //function : OnTcnSelChangeAngleTab
491 //purpose : it is called when in Angle tab control current tab was changed
492 //=======================================================================
494 void CDimensionDlg::OnTcnSelChangeAngleTab (NMHDR * /*pNMHDR*/, LRESULT *pResult)
496 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetCurSel();
498 anItem.mask = TCIF_PARAM;
499 ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetItem (aTabNum, &anItem);
500 ASSERT (anItem.lParam);
501 CWnd *aWnd = (CWnd*)anItem.lParam;
502 aWnd->ShowWindow (SW_SHOW);
503 UpdateStandardModeForAngle();
507 //=======================================================================
508 //function : OnTcnSelChangingAngleTab
509 //purpose : it is called when in Angle tab control current tab
511 // It is used to hide the current tab here to prevent collisions.
512 //=======================================================================
514 void CDimensionDlg::OnTcnSelChangingAngleTab (NMHDR * /*pNMHDR*/, LRESULT *pResult)
516 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetCurSel();
518 anItem.mask = TCIF_PARAM;
519 ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetItem (aTabNum, &anItem);
520 ASSERT (anItem.lParam);
521 CWnd *aWnd = (CWnd*)anItem.lParam;
522 aWnd->ShowWindow (SW_HIDE);
526 //=======================================================================
527 //function : DeactivateAllStandardModes
529 //=======================================================================
531 void CDimensionDlg::DeactivateAllStandardModes()
533 if (myAISContext->HasOpenedContext())
535 myAISContext->CloseAllContexts();
536 for (TColStd_ListIteratorOfListOfInteger anIt (myAISContext->LocalContext()->StandardModes());
540 myAISContext->LocalContext()->DeactivateStandardMode ((TopAbs_ShapeEnum)anIt.Value());
545 //=======================================================================
546 //function : OnDestroy
548 //=======================================================================
550 void CDimensionDlg::OnDestroy()
552 if (myAISContext->HasOpenedContext())
554 myAISContext->CloseAllContexts();
558 anItem.mask = TCIF_PARAM;
560 // Destroy length tab
561 for (int i = 3; i >= 0; --i)
563 ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetItem (i, &anItem);
564 ASSERT (anItem.lParam);
565 aWnd = (CWnd*) anItem.lParam;
566 aWnd->DestroyWindow();
570 for (int i = 2; i >= 0; --i)
572 ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetItem (i, &anItem);
573 ASSERT(anItem.lParam);
574 aWnd = (CWnd*) anItem.lParam;
575 aWnd->DestroyWindow();
579 // Destroy radius tab
580 ((CTabCtrl*) GetDlgItem (IDC_RadiusTab))->GetItem (0, &anItem);
581 ASSERT(anItem.lParam);
582 aWnd = (CWnd*) anItem.lParam;
583 aWnd->DestroyWindow();
586 // Destroy diameter tab
587 ((CTabCtrl*) GetDlgItem (IDC_DiameterTab))->GetItem (0, &anItem);
588 ASSERT(anItem.lParam);
589 aWnd = (CWnd*) anItem.lParam;
590 aWnd->DestroyWindow();
593 CDialog::OnDestroy();
596 //=======================================================================
597 //function : GetTextType
598 //purpose : Returns true if 3d text is to be used
599 // and false in the case of 2d text.
600 //=======================================================================
602 const Standard_Boolean CDimensionDlg::GetTextType() const
604 CButton* a3DButton = (CButton*)GetDlgItem (IDC_3DText);
605 return a3DButton->GetCheck();
608 //=======================================================================
609 //function : GetFontHeight
610 //purpose : Returns font height
611 //=======================================================================
613 const Standard_Real CDimensionDlg::GetFontHeight() const
615 CComboBox *aComboBox = (CComboBox*)GetDlgItem (IDC_FontSize);
617 aComboBox->GetWindowText (aStr);
621 //=======================================================================
622 //function : IsText3dShaded
623 //purpose : Only for 3d text; returns true if shaded 3d text is to be used
624 //=======================================================================
626 const Standard_Boolean CDimensionDlg::IsText3dShaded() const
628 CComboBox *aComboBox = (CComboBox*)GetDlgItem (IDC_TextDisplayMode);
629 int aCurIndex = aComboBox->GetCurSel();
630 return aCurIndex == 0 ? Standard_False : Standard_True;
633 //=======================================================================
634 //function : SetTextModeControlsVisible
635 //purpose : for the dialog updating
636 //=======================================================================
638 void CDimensionDlg::SetTextModeControlsVisible (bool isVisible)
640 GetDlgItem (IDC_TextDisplayMode)->ShowWindow (isVisible ? SW_SHOW : SW_HIDE);
641 GetDlgItem (IDC_TextDisplayModeStatic)->ShowWindow (isVisible ? SW_SHOW : SW_HIDE);
644 //=======================================================================
645 //function : OnBnClicked2dText
646 //purpose : for the dialog updating when 2d text radio button was chosen
647 //=======================================================================
649 void CDimensionDlg::OnBnClicked2dText()
651 SetTextModeControlsVisible (false);
654 //=======================================================================
655 //function : OnBnClicked3dText
656 //purpose : for the dialog updating when 3d text radio button was chosen
657 //=======================================================================
659 void CDimensionDlg::OnBnClicked3dText()
661 SetTextModeControlsVisible (true);
664 //=======================================================================
665 //function : UpdateUnitsListForLength
666 //purpose : for the dialog updating when 3d text radio button was chosen
667 //=======================================================================
669 void CDimensionDlg::UpdateUnitsListForLength()
671 CComboBox *aCombo = (CComboBox*)GetDlgItem (IDC_DisplayUnits);
672 aCombo->ResetContent();
673 aCombo->AddString (L"No");
674 aCombo->AddString (L"m");
675 aCombo->AddString (L"mm");
676 aCombo->AddString (L"in");
677 aCombo->SetCurSel (1);
680 //=======================================================================
681 //function : UpdateUnitsListForAngle
682 //purpose : for the dialog updating when 3d text radio button was chosen
683 //=======================================================================
685 void CDimensionDlg::UpdateUnitsListForAngle()
687 CComboBox *aCombo = (CComboBox*)GetDlgItem (IDC_DisplayUnits);
688 aCombo->ResetContent();
689 aCombo->AddString (L"No");
690 aCombo->AddString (L"deg");
691 aCombo->AddString (L"rad");
692 aCombo->SetCurSel (1);
695 //=======================================================================
696 //function : IsUnitsDisplayed
697 //purpose : returns true if the units is to be displayed
698 //=======================================================================
700 const Standard_Boolean CDimensionDlg::IsUnitsDisplayed() const
703 GetDlgItem (IDC_DisplayUnits)->GetWindowText (aStr);
704 return !aStr.IsEmpty() && aStr != "No";
707 //=======================================================================
708 //function : GetUnits
709 //purpose : returns display quantity units for current dimension
710 //=======================================================================
712 const TCollection_AsciiString CDimensionDlg::GetUnits() const
714 if (!IsUnitsDisplayed())
715 return TCollection_AsciiString();
717 GetDlgItem (IDC_DisplayUnits)->GetWindowText (aStr);
718 TCollection_ExtendedString aCharsW ((Standard_ExtString )(const wchar_t* )aStr);
719 return TCollection_AsciiString (aCharsW, '?');
722 //=======================================================================
723 //function : OnBnClickedDimensionColor
724 //purpose : returns display quantity units for current dimension
725 //=======================================================================
727 void CDimensionDlg::OnBnClickedDimensionColor()
732 myDimensionColor.Values (aR,aG,aB, Quantity_TOC_RGB);
733 COLORREF aColor = RGB (aR*255, aG*255, aB*255);
735 CColorDialog aDlgColor (aColor);
736 if (aDlgColor.DoModal() == IDOK)
738 aColor = aDlgColor.GetColor();
739 aR = GetRValue(aColor) / 255.0;
740 aG = GetGValue(aColor) / 255.0;
741 aB = GetBValue(aColor) / 255.0;
742 myDimensionColor = Quantity_Color (aR, aG, aB, Quantity_TOC_RGB);
746 //=======================================================================
747 //function : GetDimensionColor
748 //purpose : returns current dimension color
749 //=======================================================================
751 const Quantity_Color CDimensionDlg::GetDimensionColor() const
753 return myDimensionColor;
756 void CDimensionDlg::OnClose()
758 if (myAISContext->HasOpenedContext())
760 myAISContext->CloseAllContexts();