mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-04 18:06:22 +03:00
299 lines
8.3 KiB
C++
Executable File
299 lines
8.3 KiB
C++
Executable File
// ModelClippingDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "Viewer3dApp.h"
|
|
#include "ModelClippingDlg.h"
|
|
#include "Viewer3dDoc.h"
|
|
#include "offsetdlg.h" // Added by ClassView
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
#define EOL "\n"
|
|
|
|
// =======================================================================
|
|
// function : CModelClippingDlg
|
|
// purpose :
|
|
// =======================================================================
|
|
CModelClippingDlg::CModelClippingDlg (Handle(V3d_View) theView,
|
|
Handle(AIS_Shape) theShape,
|
|
Handle(Graphic3d_ClipPlane) theClippingPlane,
|
|
CViewer3dDoc* theDoc,
|
|
CWnd* theParent)
|
|
: CDialog(CModelClippingDlg::IDD, theParent),
|
|
m_ModelClipping_Z (0.0),
|
|
myModelClipping_Z (0.0),
|
|
m_ModelClippingONOFF (FALSE),
|
|
myView (theView),
|
|
myShape (theShape),
|
|
myClippingPlane (theClippingPlane),
|
|
myDoc (theDoc)
|
|
{}
|
|
|
|
// =======================================================================
|
|
// function : DoDataExchange
|
|
// purpose :
|
|
// =======================================================================
|
|
void CModelClippingDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CModelClippingDlg)
|
|
DDX_Control(pDX, IDC_SLIDER_MODELCLIPPING_Z, m_ModelClippingZSlidCtrl);
|
|
DDX_Text(pDX, IDC_EDIT_MODELCLIPPING_Z, m_ModelClipping_Z);
|
|
DDX_Check(pDX, IDC_CHECK_MODELCLIPPINGONOFF, m_ModelClippingONOFF);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CModelClippingDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CModelClippingDlg)
|
|
ON_WM_HSCROLL()
|
|
ON_EN_CHANGE(IDC_EDIT_MODELCLIPPING_Z, OnChangeEditModelclippingZ)
|
|
ON_BN_CLICKED(IDC_CHECK_MODELCLIPPINGONOFF, OnCheckModelclippingonoff)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
// =======================================================================
|
|
// function : OnHScroll
|
|
// purpose :
|
|
// =======================================================================
|
|
void CModelClippingDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
m_ModelClipping_Z = m_ModelClippingZSlidCtrl.GetPos();
|
|
|
|
UpdateData(FALSE);
|
|
|
|
// Setting the ZClipping depth at m_ZClippingDepth value
|
|
gp_Pln aPlane (gp_Pnt (-m_ModelClipping_Z, 0.0, 0.0), gp_Dir(1.0, 0.0, 0.0));
|
|
|
|
myClippingPlane->SetEquation (aPlane);
|
|
|
|
gp_Trsf myTrsf;
|
|
myTrsf.SetTranslation (gp_Pnt (m_ModelClipping_Z, 0.0, 0.0), gp_Pnt(myModelClipping_Z, 0.0, 0.0));
|
|
|
|
// transform presentation shape
|
|
if (m_ModelClippingONOFF)
|
|
{
|
|
myDoc->GetAISContext()->SetLocation (myShape, TopLoc_Location (myTrsf));
|
|
myDoc->GetAISContext()->Redisplay (myShape, Standard_True);
|
|
myView->Update();
|
|
}
|
|
else
|
|
{
|
|
myShape->SetLocalTransformation (myTrsf);
|
|
}
|
|
|
|
TCollection_AsciiString aMessage (
|
|
EOL "gp_Pln aPlane (gp_Pnt (-m_ModelClipping_Z, 0.0, 0.0), gp_Dir(1.0, 0.0, 0.0));"
|
|
EOL
|
|
EOL "myClippingPlane->SetEquation (aPlane);\n" );
|
|
|
|
// Update The Result Message Dialog
|
|
myDoc->UpdateResultMessageDlg ("Change clipping plane", aMessage);
|
|
|
|
CDialog::OnHScroll (nSBCode, nPos, pScrollBar);
|
|
}
|
|
|
|
// =======================================================================
|
|
// function : OnInitDialog
|
|
// purpose :
|
|
// =======================================================================
|
|
BOOL CModelClippingDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
const Graphic3d_ClipPlane::Equation aPlaneEquation = myClippingPlane->GetEquation();
|
|
|
|
// m_ModelClipping_Z = D (plane coefficient)
|
|
m_ModelClipping_Z = aPlaneEquation[3];
|
|
m_ModelClippingZSlidCtrl.SetRange (-750, 750, TRUE);
|
|
m_ModelClippingZSlidCtrl.SetPos ((int)floor (m_ModelClipping_Z));
|
|
|
|
m_ModelClippingONOFF = myClippingPlane->IsOn();
|
|
|
|
if (m_ModelClippingONOFF)
|
|
{
|
|
// register and activate clipping plane
|
|
Standard_Boolean toAddPlane = Standard_True;
|
|
Handle(Graphic3d_SequenceOfHClipPlane) aPlanes = myView->ClipPlanes();
|
|
if (!aPlanes.IsNull())
|
|
{
|
|
for (Graphic3d_SequenceOfHClipPlane::Iterator aPlaneIt (*aPlanes); aPlaneIt.More(); aPlaneIt.Next())
|
|
{
|
|
if (aPlaneIt.Value() == myClippingPlane)
|
|
{
|
|
toAddPlane = Standard_False;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (toAddPlane)
|
|
{
|
|
myView->AddClipPlane (myClippingPlane);
|
|
}
|
|
|
|
myClippingPlane->SetOn (Standard_True);
|
|
|
|
myDoc->GetAISContext()->Display (myShape, Standard_True);
|
|
}
|
|
|
|
UpdateData (FALSE);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
// =======================================================================
|
|
// function : OnChangeEditModelclippingZ
|
|
// purpose :
|
|
// =======================================================================
|
|
void CModelClippingDlg::OnChangeEditModelclippingZ()
|
|
{
|
|
UpdateData (TRUE);
|
|
|
|
m_ModelClippingZSlidCtrl.SetPos ((int)floor (m_ModelClipping_Z));
|
|
|
|
// Change clipping plane
|
|
gp_Pln aPlane (gp_Pnt (-m_ModelClipping_Z, 0.0, 0.0), gp_Dir (1.0, 0.0, 0.0));
|
|
|
|
myClippingPlane->SetEquation (aPlane);
|
|
|
|
// transform presentation shape
|
|
gp_Trsf myTrsf;
|
|
myTrsf.SetTranslation ( gp_Pnt (m_ModelClipping_Z, 0.0, 0.0), gp_Pnt (myModelClipping_Z, 0.0, 0.0));
|
|
|
|
// transform presentation shape
|
|
if (m_ModelClippingONOFF)
|
|
{
|
|
myDoc->GetAISContext()->SetLocation (myShape, TopLoc_Location (myTrsf));
|
|
myDoc->GetAISContext()->Redisplay (myShape, Standard_False);
|
|
myView->Update();
|
|
}
|
|
else
|
|
{
|
|
myShape->SetLocalTransformation (myTrsf);
|
|
}
|
|
|
|
myModelClipping_Z = m_ModelClipping_Z;
|
|
|
|
TCollection_AsciiString aMessage (
|
|
EOL "gp_Pln aPlane (gp_Pnt (-m_ModelClipping_Z, 0.0, 0.0), gp_Dir(1.0, 0.0, 0.0));"
|
|
EOL
|
|
EOL "myClippingPlane->SetEquation (aPlane);\n" );
|
|
|
|
// Update The Result Message Dialog
|
|
myDoc->UpdateResultMessageDlg ("Change clipping plane", aMessage);
|
|
}
|
|
|
|
// =======================================================================
|
|
// function : OnCheckModelclippingonoff
|
|
// purpose :
|
|
// =======================================================================
|
|
void CModelClippingDlg::OnCheckModelclippingonoff()
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
if (m_ModelClippingONOFF)
|
|
{
|
|
// register and activate clipping plane
|
|
Standard_Boolean toAddPlane = Standard_True;
|
|
Handle(Graphic3d_SequenceOfHClipPlane) aPlanes = myView->ClipPlanes();
|
|
if (!aPlanes.IsNull())
|
|
{
|
|
for (Graphic3d_SequenceOfHClipPlane::Iterator aPlaneIt (*aPlanes); aPlaneIt.More(); aPlaneIt.Next())
|
|
{
|
|
if (aPlaneIt.Value() == myClippingPlane)
|
|
{
|
|
toAddPlane = Standard_False;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (toAddPlane)
|
|
{
|
|
myView->AddClipPlane (myClippingPlane);
|
|
}
|
|
|
|
myClippingPlane->SetOn (Standard_True);
|
|
|
|
myDoc->GetAISContext()->Display (myShape, Standard_False);
|
|
}
|
|
else
|
|
{
|
|
// deactivate clipping plane
|
|
myClippingPlane->SetOn (Standard_False);
|
|
|
|
myDoc->GetAISContext()->Remove (myShape, Standard_False);
|
|
}
|
|
|
|
myView->Update();
|
|
|
|
TCollection_AsciiString aMessage (
|
|
EOL "if (...)"
|
|
EOL "{"
|
|
EOL " // register and activate clipping plane"
|
|
EOL " if (!myView->ClipPlanes()->Contains (myClippingPlane))"
|
|
EOL " {"
|
|
EOL " myView->AddClipPlane (myClippingPlane);"
|
|
EOL " }"
|
|
EOL
|
|
EOL " myClippingPlane->SetOn (Standard_True);"
|
|
EOL "}"
|
|
EOL "else"
|
|
EOL "{"
|
|
EOL " // deactivate clipping plane"
|
|
EOL " myClippingPlane->SetOn (Standard_False);"
|
|
EOL "}" );
|
|
|
|
myDoc->UpdateResultMessageDlg ("Switch clipping on/off", aMessage);
|
|
}
|
|
|
|
// =======================================================================
|
|
// function : OnCancel
|
|
// purpose :
|
|
// =======================================================================
|
|
void CModelClippingDlg::OnCancel()
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
if (m_ModelClippingONOFF)
|
|
{
|
|
// remove and deactivate clipping plane
|
|
myView->RemoveClipPlane (myClippingPlane);
|
|
|
|
myClippingPlane->SetOn (Standard_False);
|
|
}
|
|
|
|
m_ModelClippingONOFF=FALSE;
|
|
|
|
if (!myShape.IsNull())
|
|
{
|
|
myDoc->GetAISContext()->Remove (myShape, Standard_False);
|
|
}
|
|
|
|
myView->Update();
|
|
|
|
CDialog::OnCancel();
|
|
}
|
|
|
|
// =======================================================================
|
|
// function : OnOK
|
|
// purpose :
|
|
// =======================================================================
|
|
void CModelClippingDlg::OnOK()
|
|
{
|
|
if (!myShape.IsNull())
|
|
{
|
|
myDoc->GetAISContext()->Remove (myShape, Standard_True);
|
|
}
|
|
|
|
CDialog::OnOK();
|
|
}
|