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 <Quantity_Color.hxx>
20 BEGIN_MESSAGE_MAP(CDimensionDlg, CDialog)
21 ON_BN_CLICKED(IDOK, &CDimensionDlg::OnBnClickedOk)
22 ON_BN_CLICKED(IDC_DimLength, &CDimensionDlg::OnBnClickedDimLength)
23 ON_BN_CLICKED(IDC_DimAngle, &CDimensionDlg::OnBnClickedDimAngle)
24 ON_BN_CLICKED(IDC_DimRadius, &CDimensionDlg::OnBnClickedDimRadius)
25 ON_NOTIFY(TCN_SELCHANGE, IDC_LengthTab, &CDimensionDlg::OnTcnSelChangeLengthTab)
26 ON_NOTIFY(TCN_SELCHANGING, IDC_LengthTab, &CDimensionDlg::OnTcnSelChangingLengthTab)
28 ON_NOTIFY(TCN_SELCHANGE, IDC_AngleTab, &CDimensionDlg::OnTcnSelChangeAngleTab)
29 ON_NOTIFY(TCN_SELCHANGING, IDC_AngleTab, &CDimensionDlg::OnTcnSelChangingAngleTab)
30 ON_BN_CLICKED(IDC_DimDiameter, &CDimensionDlg::OnBnClickedDimDiameter)
31 ON_BN_CLICKED(IDC_2DText, &CDimensionDlg::OnBnClicked2dText)
32 ON_BN_CLICKED(IDC_3DText, &CDimensionDlg::OnBnClicked3dText)
33 ON_BN_CLICKED(IDC_DimensionColor, &CDimensionDlg::OnBnClickedDimensionColor)
37 //=======================================================================
38 //function : CDimensionDlg
40 //=======================================================================
42 CDimensionDlg::CDimensionDlg(CWnd* pParent /*=NULL*/)
43 : CDialog(CDimensionDlg::IDD, pParent),
46 myDimensionColor (Quantity_NOC_LAWNGREEN)
50 //=======================================================================
51 //function : CDimensionDlg
53 //=======================================================================
55 CDimensionDlg::CDimensionDlg (Handle(AIS_InteractiveContext) &theAISContext,
57 : CDialog(CDimensionDlg::IDD, pParent),
60 myDimensionColor (Quantity_NOC_LAWNGREEN)
62 myAISContext = theAISContext;
65 //=======================================================================
66 //function : ~CDimensionDlg
68 //=======================================================================
70 CDimensionDlg::~CDimensionDlg()
74 //=======================================================================
75 //function : SetContext
77 //=======================================================================
79 void CDimensionDlg::SetContext (const Handle(AIS_InteractiveContext) theContext)
81 myAISContext = theContext;
84 //=======================================================================
85 //function : OnInitDialog
86 //purpose : Initialization of dialog fields and parameters
87 //=======================================================================
89 BOOL CDimensionDlg::OnInitDialog()
91 CDialog::OnInitDialog();
93 myLengthParams = (CTabCtrl*) GetDlgItem (IDC_LengthTab);
94 myAngleParams = (CTabCtrl*) GetDlgItem (IDC_AngleTab);
95 myRadiusParams = (CTabCtrl*) GetDlgItem (IDC_RadiusTab);
96 myDiameterParams = (CTabCtrl*) GetDlgItem (IDC_DiameterTab);
98 CreateLengthParamsTab();
99 CreateAngleParamsTab();
100 CreateRadiusParamsTab();
101 CreateDiameterParamsTab( );
103 myLengthParams->ShowWindow (SW_SHOW);
104 myAngleParams->ShowWindow (SW_HIDE);
105 myRadiusParams->ShowWindow (SW_HIDE);
106 myDiameterParams->ShowWindow (SW_HIDE);
108 // Setting default values
109 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetRange (-30,30,true);
110 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (15);
111 UpdateUnitsListForLength ();
112 ((CComboBox*)GetDlgItem (IDC_DisplayUnits))->SetCurSel (1);
113 CheckRadioButton (IDC_2DText, IDC_3DText, IDC_2DText);
114 SetTextModeControlsVisible (false);
115 CComboBox* aCombo =(CComboBox* )GetDlgItem (IDC_FontSize);
116 aCombo->SelectString (0, L"10");
120 return TRUE; // return TRUE unless you set the focus to a control
121 // EXCEPTION: OCX Property Pages should return FALSE
124 //=======================================================================
125 //function : DoDataExchange
126 //purpose : Updating of dialog data if it's needed
127 //=======================================================================
129 void CDimensionDlg::DoDataExchange (CDataExchange* pDX)
131 CDialog::DoDataExchange (pDX);
133 DDX_Radio (pDX, IDC_DimLength, mySelectedDimType);
136 //=======================================================================
137 //function : OnBnClickedOk
138 //purpose : Reset all local contexts and close the dimension dialog
139 //=======================================================================
141 void CDimensionDlg::OnBnClickedOk()
143 if (myAISContext->HasOpenedContext())
145 myAISContext->CloseAllContexts();
151 //=======================================================================
152 //function : GetFlyout
153 //purpose : Only for length dimensions! Gets flyout value
154 //=======================================================================
156 const Standard_Real CDimensionDlg::GetFlyout() const
158 return ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->GetPos();
161 //=======================================================================
162 //function : CreateLengthParamsTab
163 //purpose : Fill tab control for length dimensions
164 //=======================================================================
166 void CDimensionDlg::CreateLengthParamsTab()
169 aTabItem.mask = TCIF_TEXT;
170 aTabItem.pszText = L"Edge";
171 myLengthParams->InsertItem (0, &aTabItem);
172 aTabItem.pszText = L"Vertices";
173 myLengthParams->InsertItem (1, &aTabItem);
174 aTabItem.pszText = L"Parallel edges";
175 myLengthParams->InsertItem (2, &aTabItem);
176 aTabItem.pszText = L"Parallel faces";
177 myLengthParams->InsertItem (3, &aTabItem);
179 CLengthParamsEdgePage *aPage1 = new CLengthParamsEdgePage (myAISContext);
180 aTabItem.mask = TCIF_PARAM;
181 aTabItem.lParam = (LPARAM)aPage1;
182 myLengthParams->SetItem (0, &aTabItem);
183 VERIFY (aPage1->Create (CLengthParamsEdgePage::IDD,myLengthParams));
184 aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
185 aPage1->ShowWindow (SW_SHOW);
187 CLengthParamsVerticesPage *aPage2 = new CLengthParamsVerticesPage (myAISContext);
188 aTabItem.mask = TCIF_PARAM;
189 aTabItem.lParam = (LPARAM)aPage2;
190 myLengthParams->SetItem (1, &aTabItem);
191 VERIFY (aPage2->Create (CLengthParamsVerticesPage::IDD,myLengthParams));
192 aPage2->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
193 aPage2->ShowWindow (SW_HIDE);
195 CLengthParamsEdgesPage *aPage3 = new CLengthParamsEdgesPage (myAISContext);
196 aTabItem.mask = TCIF_PARAM;
197 aTabItem.lParam = (LPARAM)aPage3;
198 myLengthParams->SetItem (2, &aTabItem);
199 VERIFY (aPage3->Create (CLengthParamsEdgesPage::IDD,myLengthParams));
200 aPage3->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
201 aPage3->ShowWindow (SW_HIDE);
203 CParamsFacesPage *aPage4 = new CParamsFacesPage (myAISContext);
204 aTabItem.mask = TCIF_PARAM;
205 aTabItem.lParam = (LPARAM)aPage4;
206 myLengthParams->SetItem (3, &aTabItem);
207 VERIFY (aPage4->Create (CParamsFacesPage::IDD,myLengthParams));
208 aPage4->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
209 aPage4->ShowWindow (SW_HIDE);
212 //=======================================================================
213 //function : CreateAngleParamsTab
214 //purpose : Fill tab control for angle dimensions
215 //=======================================================================
217 void CDimensionDlg::CreateAngleParamsTab()
220 aTabItem.mask = TCIF_TEXT;
221 aTabItem.pszText = L"Two edges";
222 myAngleParams->InsertItem (0, &aTabItem);
223 aTabItem.pszText = L"Three vertices";
224 myAngleParams->InsertItem (1, &aTabItem);
225 aTabItem.pszText = L"Two faces";
226 myAngleParams->InsertItem (2, &aTabItem);
228 CLengthParamsEdgesPage *aPage1 = new CLengthParamsEdgesPage (myAISContext, true);
229 aTabItem.mask = TCIF_PARAM;
230 aTabItem.lParam = (LPARAM)aPage1;
231 myAngleParams->SetItem (0, &aTabItem);
232 VERIFY (aPage1->Create (CLengthParamsEdgesPage::IDD,myAngleParams));
233 aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
234 aPage1->ShowWindow (SW_SHOW);
236 CAngleParamsVerticesPage *aPage2 = new CAngleParamsVerticesPage (myAISContext);
237 aTabItem.mask = TCIF_PARAM;
238 aTabItem.lParam = (LPARAM)aPage2;
239 myAngleParams->SetItem (1, &aTabItem);
240 VERIFY (aPage2->Create (CAngleParamsVerticesPage::IDD,myAngleParams));
241 aPage2->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
242 aPage2->ShowWindow (SW_HIDE);
244 CParamsFacesPage *aPage3 = new CParamsFacesPage (myAISContext, true);
245 aTabItem.mask = TCIF_PARAM;
246 aTabItem.lParam = (LPARAM)aPage3;
247 myAngleParams->SetItem (2, &aTabItem);
248 VERIFY (aPage3->Create (CParamsFacesPage::IDD,myAngleParams));
249 aPage3->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
250 aPage3->ShowWindow (SW_HIDE);
253 //=======================================================================
254 //function : CreateRadiusParamsTab
255 //purpose : Fill tab control for radius dimensions
256 //=======================================================================
258 void CDimensionDlg::CreateRadiusParamsTab()
261 aTabItem.mask = TCIF_TEXT;
262 aTabItem.pszText = L"Circle or arc";
263 myRadiusParams->InsertItem (0, &aTabItem);
264 CRadiusParamsPage *aPage1 = new CRadiusParamsPage (myAISContext);
265 aTabItem.mask = TCIF_PARAM;
266 aTabItem.lParam = (LPARAM)aPage1;
267 myRadiusParams->SetItem (0, &aTabItem);
268 VERIFY (aPage1->Create (CRadiusParamsPage::IDD,myRadiusParams));
269 aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
270 aPage1->ShowWindow (SW_SHOW);
273 //=======================================================================
274 //function : CreateDiameterParamsTab
275 //purpose : Fill tab control for diameter dimensions
276 //=======================================================================
278 void CDimensionDlg::CreateDiameterParamsTab()
281 aTabItem.mask = TCIF_TEXT;
282 aTabItem.pszText = L"Circle or arc";
283 myDiameterParams->InsertItem (0, &aTabItem);
284 CRadiusParamsPage *aPage1 = new CRadiusParamsPage (myAISContext,Standard_True);
285 aTabItem.mask = TCIF_PARAM;
286 aTabItem.lParam = (LPARAM)aPage1;
287 myRadiusParams->SetItem (0, &aTabItem);
288 VERIFY (aPage1->Create (CRadiusParamsPage::IDD,myDiameterParams));
289 aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
290 aPage1->ShowWindow (SW_SHOW);
293 //=======================================================================
294 //function : UpdateStandardModeForAngle
296 //=======================================================================
298 void CDimensionDlg::UpdateStandardModeForAngle()
300 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetCurSel();
301 myAISContext->CloseAllContexts();
302 myAISContext->OpenLocalContext();
303 TopAbs_ShapeEnum aMode;
307 aMode = TopAbs_VERTEX;
309 else if (aTabNum == 2)
318 myAISContext->ActivateStandardMode (aMode);
321 //=======================================================================
322 //function : UpdateStandardModeForLength
324 //=======================================================================
326 void CDimensionDlg::UpdateStandardModeForLength()
328 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetCurSel();
329 myAISContext->CloseAllContexts();
330 myAISContext->OpenLocalContext();
331 TopAbs_ShapeEnum aMode;
335 aMode = TopAbs_VERTEX;
337 else if (aTabNum == 3)
345 myAISContext->ActivateStandardMode (aMode);
348 //=======================================================================
349 //function : UpdateStandardModeForLength
351 //=======================================================================
353 void CDimensionDlg::UpdateStandardMode()
355 int aCurIndex = GetCheckedRadioButton (IDC_DimLength, IDC_DimDiameter);
359 UpdateStandardModeForLength();
362 UpdateStandardModeForAngle();
365 case IDC_DimDiameter:
367 myAISContext->OpenLocalContext();
368 myAISContext->ActivateStandardMode (TopAbs_EDGE);
374 //=======================================================================
375 //function : OnBnClickedDimLength
376 //purpose : it is called when <Length> radio button is chosen
377 //=======================================================================
379 void CDimensionDlg::OnBnClickedDimLength()
382 UpdateStandardModeForLength ();
383 (CTabCtrl*) GetDlgItem (IDC_LengthTab)->ShowWindow (SW_SHOW);
384 (CTabCtrl*) GetDlgItem (IDC_AngleTab)->ShowWindow (SW_HIDE);
385 (CTabCtrl*) GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_HIDE);
386 (CTabCtrl*) GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_HIDE);
388 UpdateUnitsListForLength ();
389 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (15);
392 //=======================================================================
393 //function : OnBnClickedDimAngle
394 //purpose : it is called when <Angle> radio button is chosen
395 //=======================================================================
397 void CDimensionDlg::OnBnClickedDimAngle()
400 UpdateStandardModeForAngle();
401 (CTabCtrl*) GetDlgItem (IDC_LengthTab)->ShowWindow (SW_HIDE);
402 (CTabCtrl*) GetDlgItem (IDC_AngleTab)->ShowWindow (SW_SHOW);
403 (CTabCtrl*) GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_HIDE);
404 (CTabCtrl*) GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_HIDE);
406 UpdateUnitsListForAngle();
407 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (15);
410 //=======================================================================
411 //function : OnBnClickedDimDiameter
412 //purpose : it is called when <Diameter> radio button is chosen
413 //=======================================================================
415 void CDimensionDlg::OnBnClickedDimDiameter()
418 myAISContext->CloseAllContexts();
419 myAISContext->OpenLocalContext();
420 myAISContext->ActivateStandardMode (TopAbs_EDGE);
422 (CTabCtrl*) GetDlgItem (IDC_LengthTab)->ShowWindow (SW_HIDE);
423 (CTabCtrl*) GetDlgItem (IDC_AngleTab)->ShowWindow (SW_HIDE);
424 (CTabCtrl*) GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_HIDE);
425 (CTabCtrl*) GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_SHOW);
427 UpdateUnitsListForLength();
428 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (0);
431 //=======================================================================
432 //function : OnBnClickedDimRadius
433 //purpose : it is called when <Radius> radio button is chosen
434 //=======================================================================
436 void CDimensionDlg::OnBnClickedDimRadius()
439 myAISContext->CloseAllContexts();
440 myAISContext->OpenLocalContext();
441 myAISContext->ActivateStandardMode (TopAbs_EDGE);
442 (CTabCtrl*) GetDlgItem (IDC_LengthTab)->ShowWindow (SW_HIDE);
443 (CTabCtrl*) GetDlgItem (IDC_AngleTab)->ShowWindow (SW_HIDE);
444 (CTabCtrl*) GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_SHOW);
445 (CTabCtrl*) GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_HIDE);
447 UpdateUnitsListForLength();
448 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (0);
451 //=======================================================================
452 //function : OnTcnSelChangeLengthTab
453 //purpose : it is called when in Length tab control current tab was changed
454 //=======================================================================
456 void CDimensionDlg::OnTcnSelChangeLengthTab (NMHDR * /*pNMHDR*/, LRESULT *pResult)
458 // Show this chosen tab page
459 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetCurSel();
461 anItem.mask = TCIF_PARAM;
462 ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetItem (aTabNum, &anItem);
463 ASSERT(anItem.lParam);
464 CWnd *aWnd = (CWnd*)anItem.lParam;
465 aWnd->ShowWindow (SW_SHOW);
466 UpdateStandardModeForLength();
470 //=======================================================================
471 //function : OnTcnSelChangingLengthTab
472 //purpose : it is called when in Length tab control current tab
474 // It is used to hide the current tab here to prevent collisions.
475 //=======================================================================
477 void CDimensionDlg::OnTcnSelChangingLengthTab (NMHDR * /*pNMHDR*/, LRESULT *pResult)
479 // Hide current tab page
480 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetCurSel();
482 anItem.mask = TCIF_PARAM;
483 ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetItem (aTabNum, &anItem);
484 ASSERT (anItem.lParam);
485 CWnd *aWnd = (CWnd*)anItem.lParam;
486 aWnd->ShowWindow (SW_HIDE);
490 //=======================================================================
491 //function : OnTcnSelChangeAngleTab
492 //purpose : it is called when in Angle tab control current tab was changed
493 //=======================================================================
495 void CDimensionDlg::OnTcnSelChangeAngleTab (NMHDR * /*pNMHDR*/, LRESULT *pResult)
497 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetCurSel();
499 anItem.mask = TCIF_PARAM;
500 ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetItem (aTabNum, &anItem);
501 ASSERT (anItem.lParam);
502 CWnd *aWnd = (CWnd*)anItem.lParam;
503 aWnd->ShowWindow (SW_SHOW);
504 UpdateStandardModeForAngle();
508 //=======================================================================
509 //function : OnTcnSelChangingAngleTab
510 //purpose : it is called when in Angle tab control current tab
512 // It is used to hide the current tab here to prevent collisions.
513 //=======================================================================
515 void CDimensionDlg::OnTcnSelChangingAngleTab (NMHDR * /*pNMHDR*/, LRESULT *pResult)
517 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetCurSel();
519 anItem.mask = TCIF_PARAM;
520 ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetItem (aTabNum, &anItem);
521 ASSERT (anItem.lParam);
522 CWnd *aWnd = (CWnd*)anItem.lParam;
523 aWnd->ShowWindow (SW_HIDE);
527 //=======================================================================
528 //function : DeactivateAllStandardModes
530 //=======================================================================
532 void CDimensionDlg::DeactivateAllStandardModes()
534 if (myAISContext->HasOpenedContext())
536 myAISContext->CloseAllContexts();
537 for (TColStd_ListIteratorOfListOfInteger anIt (myAISContext->LocalContext()->StandardModes());
541 myAISContext->LocalContext()->DeactivateStandardMode ((TopAbs_ShapeEnum)anIt.Value());
546 //=======================================================================
547 //function : OnDestroy
549 //=======================================================================
551 void CDimensionDlg::OnDestroy()
553 if (myAISContext->HasOpenedContext())
555 myAISContext->CloseAllContexts();
559 anItem.mask = TCIF_PARAM;
561 // Destroy length tab
562 for (int i = 3; i >= 0; --i)
564 ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetItem (i, &anItem);
565 ASSERT (anItem.lParam);
566 aWnd = (CWnd*) anItem.lParam;
567 aWnd->DestroyWindow();
571 for (int i = 2; i >= 0; --i)
573 ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetItem (i, &anItem);
574 ASSERT(anItem.lParam);
575 aWnd = (CWnd*) anItem.lParam;
576 aWnd->DestroyWindow();
580 // Destroy radius tab
581 ((CTabCtrl*) GetDlgItem (IDC_RadiusTab))->GetItem (0, &anItem);
582 ASSERT(anItem.lParam);
583 aWnd = (CWnd*) anItem.lParam;
584 aWnd->DestroyWindow();
587 // Destroy diameter tab
588 ((CTabCtrl*) GetDlgItem (IDC_DiameterTab))->GetItem (0, &anItem);
589 ASSERT(anItem.lParam);
590 aWnd = (CWnd*) anItem.lParam;
591 aWnd->DestroyWindow();
594 CDialog::OnDestroy();
597 //=======================================================================
598 //function : GetTextType
599 //purpose : Returns true if 3d text is to be used
600 // and false in the case of 2d text.
601 //=======================================================================
603 const Standard_Boolean CDimensionDlg::GetTextType() const
605 CButton* a3DButton = (CButton*)GetDlgItem (IDC_3DText);
606 return a3DButton->GetCheck();
609 //=======================================================================
610 //function : GetFontHeight
611 //purpose : Returns font height
612 //=======================================================================
614 const Standard_Real CDimensionDlg::GetFontHeight() const
616 CComboBox *aComboBox = (CComboBox*)GetDlgItem (IDC_FontSize);
618 aComboBox->GetWindowText (aStr);
622 //=======================================================================
623 //function : IsText3dShaded
624 //purpose : Only for 3d text; returns true if shaded 3d text is to be used
625 //=======================================================================
627 const Standard_Boolean CDimensionDlg::IsText3dShaded() const
629 CComboBox *aComboBox = (CComboBox*)GetDlgItem (IDC_TextDisplayMode);
630 int aCurIndex = aComboBox->GetCurSel();
631 return aCurIndex == 0 ? Standard_False : Standard_True;
634 //=======================================================================
635 //function : SetTextModeControlsVisible
636 //purpose : for the dialog updating
637 //=======================================================================
639 void CDimensionDlg::SetTextModeControlsVisible (bool isVisible)
641 GetDlgItem (IDC_TextDisplayMode)->ShowWindow (isVisible ? SW_SHOW : SW_HIDE);
642 GetDlgItem (IDC_TextDisplayModeStatic)->ShowWindow (isVisible ? SW_SHOW : SW_HIDE);
645 //=======================================================================
646 //function : OnBnClicked2dText
647 //purpose : for the dialog updating when 2d text radio button was chosen
648 //=======================================================================
650 void CDimensionDlg::OnBnClicked2dText()
652 SetTextModeControlsVisible (false);
655 //=======================================================================
656 //function : OnBnClicked3dText
657 //purpose : for the dialog updating when 3d text radio button was chosen
658 //=======================================================================
660 void CDimensionDlg::OnBnClicked3dText()
662 SetTextModeControlsVisible (true);
665 //=======================================================================
666 //function : UpdateUnitsListForLength
667 //purpose : for the dialog updating when 3d text radio button was chosen
668 //=======================================================================
670 void CDimensionDlg::UpdateUnitsListForLength()
672 CComboBox *aCombo = (CComboBox*)GetDlgItem (IDC_DisplayUnits);
673 aCombo->ResetContent();
674 aCombo->AddString (L"No");
675 aCombo->AddString (L"m");
676 aCombo->AddString (L"mm");
677 aCombo->AddString (L"in");
678 aCombo->SetCurSel (1);
681 //=======================================================================
682 //function : UpdateUnitsListForAngle
683 //purpose : for the dialog updating when 3d text radio button was chosen
684 //=======================================================================
686 void CDimensionDlg::UpdateUnitsListForAngle()
688 CComboBox *aCombo = (CComboBox*)GetDlgItem (IDC_DisplayUnits);
689 aCombo->ResetContent();
690 aCombo->AddString (L"No");
691 aCombo->AddString (L"deg");
692 aCombo->AddString (L"rad");
693 aCombo->SetCurSel (1);
696 //=======================================================================
697 //function : IsUnitsDisplayed
698 //purpose : returns true if the units is to be displayed
699 //=======================================================================
701 const Standard_Boolean CDimensionDlg::IsUnitsDisplayed() const
704 GetDlgItem (IDC_DisplayUnits)->GetWindowText (aStr);
705 return !aStr.IsEmpty() && aStr != "No";
708 //=======================================================================
709 //function : GetUnits
710 //purpose : returns display quantity units for current dimension
711 //=======================================================================
713 const TCollection_AsciiString CDimensionDlg::GetUnits() const
715 if (!IsUnitsDisplayed())
716 return TCollection_AsciiString();
718 GetDlgItem (IDC_DisplayUnits)->GetWindowText (aStr);
719 TCollection_ExtendedString aCharsW ((Standard_ExtString )(const wchar_t* )aStr);
720 return TCollection_AsciiString (aCharsW, '?');
723 //=======================================================================
724 //function : OnBnClickedDimensionColor
725 //purpose : returns display quantity units for current dimension
726 //=======================================================================
728 void CDimensionDlg::OnBnClickedDimensionColor()
733 myDimensionColor.Values (aR,aG,aB, Quantity_TOC_RGB);
734 COLORREF aColor = RGB (aR*255, aG*255, aB*255);
736 CColorDialog aDlgColor (aColor);
737 if (aDlgColor.DoModal() == IDOK)
739 aColor = aDlgColor.GetColor();
740 aR = GetRValue(aColor) / 255.0;
741 aG = GetGValue(aColor) / 255.0;
742 aB = GetBValue(aColor) / 255.0;
743 myDimensionColor = Quantity_Color (aR, aG, aB, Quantity_TOC_RGB);
747 //=======================================================================
748 //function : GetDimensionColor
749 //purpose : returns current dimension color
750 //=======================================================================
752 const Quantity_Color CDimensionDlg::GetDimensionColor() const
754 return myDimensionColor;
757 void CDimensionDlg::OnClose()
759 if (myAISContext->HasOpenedContext())
761 myAISContext->CloseAllContexts();