1 // ModelClippingDlg.cpp : implementation file
5 #include "Viewer3dApp.h"
6 #include "ModelClippingDlg.h"
7 #include "Viewer3dDoc.h"
8 #include "offsetdlg.h" // Added by ClassView
13 static char THIS_FILE[] = __FILE__;
18 // =======================================================================
19 // function : CModelClippingDlg
21 // =======================================================================
22 CModelClippingDlg::CModelClippingDlg (Handle(V3d_View) theView,
23 Handle(AIS_Shape) theShape,
24 Handle(Graphic3d_ClipPlane) theClippingPlane,
27 : CDialog(CModelClippingDlg::IDD, theParent),
28 m_ModelClipping_Z (0.0),
29 myModelClipping_Z (0.0),
30 m_ModelClippingONOFF (FALSE),
33 myClippingPlane (theClippingPlane),
37 // =======================================================================
38 // function : DoDataExchange
40 // =======================================================================
41 void CModelClippingDlg::DoDataExchange(CDataExchange* pDX)
43 CDialog::DoDataExchange(pDX);
44 //{{AFX_DATA_MAP(CModelClippingDlg)
45 DDX_Control(pDX, IDC_SLIDER_MODELCLIPPING_Z, m_ModelClippingZSlidCtrl);
46 DDX_Text(pDX, IDC_EDIT_MODELCLIPPING_Z, m_ModelClipping_Z);
47 DDX_Check(pDX, IDC_CHECK_MODELCLIPPINGONOFF, m_ModelClippingONOFF);
52 BEGIN_MESSAGE_MAP(CModelClippingDlg, CDialog)
53 //{{AFX_MSG_MAP(CModelClippingDlg)
55 ON_EN_CHANGE(IDC_EDIT_MODELCLIPPING_Z, OnChangeEditModelclippingZ)
56 ON_BN_CLICKED(IDC_CHECK_MODELCLIPPINGONOFF, OnCheckModelclippingonoff)
60 // =======================================================================
61 // function : OnHScroll
63 // =======================================================================
64 void CModelClippingDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
68 m_ModelClipping_Z = m_ModelClippingZSlidCtrl.GetPos();
72 // Setting the ZClipping depth at m_ZClippingDepth value
73 gp_Pln aPlane (gp_Pnt (-m_ModelClipping_Z, 0.0, 0.0), gp_Dir(1.0, 0.0, 0.0));
75 myClippingPlane->SetEquation (aPlane);
78 myTrsf.SetTranslation (gp_Pnt (m_ModelClipping_Z, 0.0, 0.0), gp_Pnt(myModelClipping_Z, 0.0, 0.0));
80 // transform presentation shape
81 if (m_ModelClippingONOFF)
83 myDoc->GetAISContext()->SetLocation (myShape, TopLoc_Location (myTrsf));
84 myDoc->GetAISContext()->Redisplay (myShape);
89 myShape->SetLocation (TopLoc_Location (myTrsf));
92 TCollection_AsciiString aMessage (
93 EOL "gp_Pln aPlane (gp_Pnt (-m_ModelClipping_Z, 0.0, 0.0), gp_Dir(1.0, 0.0, 0.0));"
95 EOL "myClippingPlane->SetEquation (aPlane);\n" );
97 // Update The Result Message Dialog
98 myDoc->UpdateResultMessageDlg ("Change clipping plane", aMessage);
100 CDialog::OnHScroll (nSBCode, nPos, pScrollBar);
103 // =======================================================================
104 // function : OnInitDialog
106 // =======================================================================
107 BOOL CModelClippingDlg::OnInitDialog()
109 CDialog::OnInitDialog();
111 const Graphic3d_ClipPlane::Equation aPlaneEquation = myClippingPlane->GetEquation();
113 // m_ModelClipping_Z = D (plane coefficient)
114 m_ModelClipping_Z = aPlaneEquation[3];
115 m_ModelClippingZSlidCtrl.SetRange (-750, 750, TRUE);
116 m_ModelClippingZSlidCtrl.SetPos ((int)floor (m_ModelClipping_Z));
118 m_ModelClippingONOFF = myClippingPlane->IsOn();
120 if (m_ModelClippingONOFF)
122 // register and activate clipping plane
123 Standard_Boolean toAddPlane = Standard_True;
124 Graphic3d_SequenceOfHClipPlane::Iterator aPlaneIt (myView->GetClipPlanes());
125 for (; aPlaneIt.More(); aPlaneIt.Next())
127 if (aPlaneIt.Value() == myClippingPlane)
129 toAddPlane = Standard_False;
136 myView->AddClipPlane (myClippingPlane);
139 myClippingPlane->SetOn (Standard_True);
141 myDoc->GetAISContext()->Display (myShape);
149 // =======================================================================
150 // function : OnChangeEditModelclippingZ
152 // =======================================================================
153 void CModelClippingDlg::OnChangeEditModelclippingZ()
157 m_ModelClippingZSlidCtrl.SetPos ((int)floor (m_ModelClipping_Z));
159 // Change clipping plane
160 gp_Pln aPlane (gp_Pnt (-m_ModelClipping_Z, 0.0, 0.0), gp_Dir (1.0, 0.0, 0.0));
162 myClippingPlane->SetEquation (aPlane);
164 // transform presentation shape
166 myTrsf.SetTranslation ( gp_Pnt (m_ModelClipping_Z, 0.0, 0.0), gp_Pnt (myModelClipping_Z, 0.0, 0.0));
168 // transform presentation shape
169 if (m_ModelClippingONOFF)
171 myDoc->GetAISContext()->SetLocation (myShape, TopLoc_Location (myTrsf));
172 myDoc->GetAISContext()->Redisplay (myShape);
177 myShape->SetLocation (TopLoc_Location (myTrsf));
180 myModelClipping_Z = m_ModelClipping_Z;
182 TCollection_AsciiString aMessage (
183 EOL "gp_Pln aPlane (gp_Pnt (-m_ModelClipping_Z, 0.0, 0.0), gp_Dir(1.0, 0.0, 0.0));"
185 EOL "myClippingPlane->SetEquation (aPlane);\n" );
187 // Update The Result Message Dialog
188 myDoc->UpdateResultMessageDlg ("Change clipping plane", aMessage);
191 // =======================================================================
192 // function : OnCheckModelclippingonoff
194 // =======================================================================
195 void CModelClippingDlg::OnCheckModelclippingonoff()
199 if (m_ModelClippingONOFF)
201 // register and activate clipping plane
202 Standard_Boolean toAddPlane = Standard_True;
203 Graphic3d_SequenceOfHClipPlane::Iterator aPlaneIt (myView->GetClipPlanes());
204 for (; aPlaneIt.More(); aPlaneIt.Next())
206 if (aPlaneIt.Value() == myClippingPlane)
208 toAddPlane = Standard_False;
215 myView->AddClipPlane (myClippingPlane);
218 myClippingPlane->SetOn (Standard_True);
220 myDoc->GetAISContext()->Display (myShape);
224 // deactivate clipping plane
225 myClippingPlane->SetOn (Standard_False);
227 myDoc->GetAISContext()->Remove (myShape);
232 TCollection_AsciiString aMessage (
235 EOL " // register and activate clipping plane"
236 EOL " if (!myView->GetClipPlanes().Contains (myClippingPlane))"
238 EOL " myView->AddClipPlane (myClippingPlane);"
241 EOL " myClippingPlane->SetOn (Standard_True);"
245 EOL " // deactivate clipping plane"
246 EOL " myClippingPlane->SetOn (Standard_False);"
249 myDoc->UpdateResultMessageDlg ("Switch clipping on/off", aMessage);
252 // =======================================================================
253 // function : OnCancel
255 // =======================================================================
256 void CModelClippingDlg::OnCancel()
260 if (m_ModelClippingONOFF)
262 // remove and deactivate clipping plane
263 myView->RemoveClipPlane (myClippingPlane);
265 myClippingPlane->SetOn (Standard_False);
268 m_ModelClippingONOFF=FALSE;
270 if (!myShape.IsNull())
272 myDoc->GetAISContext()->Remove (myShape);
280 // =======================================================================
283 // =======================================================================
284 void CModelClippingDlg::OnOK()
286 if (!myShape.IsNull())
288 myDoc->GetAISContext()->Remove (myShape);