Integration of OCCT 6.5.0 from SVN
[occt.git] / samples / mfc / standard / 04_Viewer3d / src / ModelClippingDlg.cpp
CommitLineData
7fd59977 1// ModelClippingDlg.cpp : implementation file
2//
3
4#include "stdafx.h"
5#include "Viewer3dApp.h"
6#include "ModelClippingDlg.h"
7#include "Viewer3dDoc.h"
8#include "offsetdlg.h" // Added by ClassView
9
10#ifdef _DEBUG
11#define new DEBUG_NEW
12#undef THIS_FILE
13static char THIS_FILE[] = __FILE__;
14#endif
15
16
17/////////////////////////////////////////////////////////////////////////////
18// CModelClippingDlg dialog
19
20
21CModelClippingDlg::CModelClippingDlg(Handle(V3d_View) aView, Handle(V3d_Plane) aPlane,
22 Handle(AIS_Shape) aShape, CViewer3dDoc* pDoc, CWnd* pParent /*=NULL*/)
23 : CDialog(CModelClippingDlg::IDD, pParent)
24{
25 //{{AFX_DATA_INIT(CModelClippingDlg)
26 m_ModelClipping_Z = 0.0;
27 myView=aView;
28 myPlane=aPlane;
29 myShape=aShape;
30 myDoc=pDoc;
31 m_ModelClippingONOFF = FALSE;
32 //}}AFX_DATA_INIT
33}
34
35
36void CModelClippingDlg::DoDataExchange(CDataExchange* pDX)
37{
38 CDialog::DoDataExchange(pDX);
39 //{{AFX_DATA_MAP(CModelClippingDlg)
40 DDX_Control(pDX, IDC_SLIDER_MODELCLIPPING_Z, m_ModelClippingZSlidCtrl);
41 DDX_Text(pDX, IDC_EDIT_MODELCLIPPING_Z, m_ModelClipping_Z);
42 DDX_Check(pDX, IDC_CHECK_MODELCLIPPINGONOFF, m_ModelClippingONOFF);
43 //}}AFX_DATA_MAP
44}
45
46
47BEGIN_MESSAGE_MAP(CModelClippingDlg, CDialog)
48 //{{AFX_MSG_MAP(CModelClippingDlg)
49 ON_WM_HSCROLL()
50 ON_EN_CHANGE(IDC_EDIT_MODELCLIPPING_Z, OnChangeEditModelclippingZ)
51 ON_BN_CLICKED(IDC_CHECK_MODELCLIPPINGONOFF, OnCheckModelclippingonoff)
52 //}}AFX_MSG_MAP
53END_MESSAGE_MAP()
54
55/////////////////////////////////////////////////////////////////////////////
56// CModelClippingDlg message handlers
57
58void CModelClippingDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
59{
60 UpdateData(TRUE);
61
62 m_ModelClipping_Z = m_ModelClippingZSlidCtrl.GetPos();
63
64 UpdateData(FALSE);
65
66// Setting the ZClipping depth at m_ZClippingDepth value
67 gp_Pln clipPln(gp_Pnt(-m_ModelClipping_Z,0,0),gp_Dir(1,0,0));
68 Standard_Real A,B,C,D;
69 clipPln.Coefficients(A,B,C,D);
70 myPlane->SetPlane(A,B,C,D);
71 if(m_ModelClippingONOFF)
72 myView->SetPlaneOn(myPlane);
73 gp_Trsf myTrsf;
74 myTrsf.SetTranslation(gp_Pnt(m_ModelClipping_Z,0,0), gp_Pnt(myModelClipping_Z,0,0));
75 myDoc->GetAISContext()->SetLocation(myShape,TopLoc_Location(myTrsf)) ;
76 myDoc->GetAISContext()->Redisplay(myShape);
77 myView->Update();
78
79 TCollection_AsciiString Message("\
80gp_Pln clipPln(gp_Pnt(-m_ModelClippingZSlidCtrl.GetPos(),0,0),gp_Dir(1,0,0));\n\
81Standard_Real A,B,C,D;\n\
82clipPln.Coefficients(A,B,C,D);\n\
83myPlane->SetPlane(A,B,C,D);\n\
84myView->SetPlaneOn(myPlane); \n\
85 ");
86
87 // Update The Result Message Dialog
88 myDoc->UpdateResultMessageDlg("SetPlaneOn",Message);
89
90 CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
91}
92
93BOOL CModelClippingDlg::OnInitDialog()
94{
95 CDialog::OnInitDialog();
96
97 Standard_Real A,B,C,D;
98 myPlane->Plane(A,B,C,D);
99 m_ModelClipping_Z = D;
100 m_ModelClippingZSlidCtrl.SetRange(-750, 750, TRUE);
101 m_ModelClippingZSlidCtrl.SetPos( (int) floor(m_ModelClipping_Z));
102
103 Handle(V3d_Plane) thePlane;
104 for( myView->InitActivePlanes() ;
105 myView->MoreActivePlanes() ; myView->NextActivePlanes() ) {
106 thePlane = myView->ActivePlane() ;
107 if( thePlane == myPlane ) m_ModelClippingONOFF = TRUE;
108 }
109 if(m_ModelClippingONOFF)
110 if(!myShape.IsNull())
111 myDoc->GetAISContext()->Display(myShape);
112
113 UpdateData(FALSE);
114
115 return TRUE; // return TRUE unless you set the focus to a control
116 // EXCEPTION: OCX Property Pages should return FALSE
117} //V3d_Plane.hxx
118
119void CModelClippingDlg::OnChangeEditModelclippingZ()
120{
121 UpdateData(TRUE);
122
123// Setting the m_ZClippingDepthSlidCtrl position at floor(m_ZClippingDepth) value (because slider position is an integer)
124 m_ModelClippingZSlidCtrl.SetPos( (int) floor(m_ModelClipping_Z));
125// Setting the ZClipping depth at m_ZClippingDepth value
126 gp_Pln clipPln(gp_Pnt(-m_ModelClipping_Z,0,0),gp_Dir(1,0,0));
127 Standard_Real A,B,C,D;
128 clipPln.Coefficients(A,B,C,D);
129 myPlane->SetPlane(A,B,C,D);
130 if(m_ModelClippingONOFF)
131 myView->SetPlaneOn(myPlane);
132 gp_Trsf myTrsf;
133 myTrsf.SetTranslation(gp_Pnt(m_ModelClipping_Z,0,0), gp_Pnt(myModelClipping_Z,0,0));
134 myDoc->GetAISContext()->SetLocation(myShape,TopLoc_Location(myTrsf)) ;
135 myDoc->GetAISContext()->Redisplay(myShape);
136 myView->Update();
137
138 myModelClipping_Z = m_ModelClipping_Z;
139
140 TCollection_AsciiString Message("\
141gp_Pln clipPln(gp_Pnt(-m_ModelClipping_Z,0,0),gp_Dir(1,0,0));\n\
142Standard_Real A,B,C,D;\n\
143clipPln.Coefficients(A,B,C,D);\n\
144myPlane->SetPlane(A,B,C,D);\n\
145myView->SetPlaneOn(myPlane); \n\
146 ");
147
148 // Update The Result Message Dialog
149 myDoc->UpdateResultMessageDlg("SetPlaneOn",Message);
150}
151
152void CModelClippingDlg::OnCheckModelclippingonoff()
153{
154 UpdateData(TRUE);
155
156//activate the plane
157 if(m_ModelClippingONOFF)
158 {
159//activate the plane
160 myView->SetPlaneOn(myPlane);
161 myDoc->GetAISContext()->Display(myShape);
162 }
163 else
164//deactivate the plane
165 {
166 myView->SetPlaneOff(myPlane);
167 myDoc->GetAISContext()->Erase(myShape);
168 }
169
170 myView->Update();
171
172 TCollection_AsciiString Message("\
173gp_Pln clipPln(gp_Pnt(-m_ModelClippingZSlidCtrl.GetPos(),0,0),gp_Dir(1,0,0));\n\
174Standard_Real A,B,C,D;\n\
175clipPln.Coefficients(A,B,C,D);\n\
176myPlane->SetPlane(A,B,C,D);\n\
177if(m_ModelClippingONOFF) \n\
178 myView->SetPlaneOn(myPlane); \n\
179else \n\
180 myView->SetPlaneOff(myPlane); \n\
181 ");
182
183 // Update The Result Message Dialog
184 myDoc->UpdateResultMessageDlg("SetPlaneOn",Message);
185}
186
187void CModelClippingDlg::OnCancel()
188{
189 UpdateData(TRUE);
190 if(m_ModelClippingONOFF)
191//deactivate the plane
192 myView->SetPlaneOff(myPlane);
193
194 m_ModelClippingONOFF=FALSE;
195
196 if(!myShape.IsNull())
197 myDoc->GetAISContext()->Erase(myShape);
198
199 myView->Update();
200
201 CDialog::OnCancel();
202}
203
204void CModelClippingDlg::OnOK()
205{
206 if(!myShape.IsNull())
207 myDoc->GetAISContext()->Erase(myShape);
208
209 CDialog::OnOK();
210}