1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

0027816: Visualization - provide an API for overriding clipping planes list

Graphic3d_SequenceOfHClipPlane now inherits Standard_Transient.
PrsMgr_PresentableObject, Graphic3d_Structure, Graphic3d_CStructure,
V3d_View, OpenGl_View now manages the plane list by Handle.
The getters ::GetClipPlanes() has been removed,
setters taking non-handle ::SetClipPlanes() has been marked deprecated.

OpenGl_Structure::Render() and SelectMgr_ViewerSelector::checkOverlap()
now disable global (view) clipping planes for objects
with flags Graphic3d_TMF_TriedronPers and Graphic3d_TMF_2d
or with new flag Graphic3d_SequenceOfHClipPlane::ToOverrideGlobal().

OpenGl_Clipping now implements interface for managing clipping planes
without copying the sequences.
The filtering of duplicates is no more performed by OpenGl_Clipping
- application is responsible to not do this.
OpenGl_Clipping tries avoiding unnecessary allocations for managing
list of active planes.

MFC sample has been updated to use V3d_View::ClipPlanes() method.
This commit is contained in:
kgv
2016-09-14 13:44:47 +03:00
committed by bugmaster
parent ef444297f5
commit 3202bf1e9e
27 changed files with 691 additions and 606 deletions

View File

@@ -121,13 +121,16 @@ BOOL CModelClippingDlg::OnInitDialog()
{
// register and activate clipping plane
Standard_Boolean toAddPlane = Standard_True;
Graphic3d_SequenceOfHClipPlane::Iterator aPlaneIt (myView->GetClipPlanes());
for (; aPlaneIt.More(); aPlaneIt.Next())
Handle(Graphic3d_SequenceOfHClipPlane) aPlanes = myView->ClipPlanes();
if (!aPlanes.IsNull())
{
if (aPlaneIt.Value() == myClippingPlane)
for (Graphic3d_SequenceOfHClipPlane::Iterator aPlaneIt (*aPlanes); aPlaneIt.More(); aPlaneIt.Next())
{
toAddPlane = Standard_False;
break;
if (aPlaneIt.Value() == myClippingPlane)
{
toAddPlane = Standard_False;
break;
}
}
}
@@ -200,13 +203,16 @@ void CModelClippingDlg::OnCheckModelclippingonoff()
{
// register and activate clipping plane
Standard_Boolean toAddPlane = Standard_True;
Graphic3d_SequenceOfHClipPlane::Iterator aPlaneIt (myView->GetClipPlanes());
for (; aPlaneIt.More(); aPlaneIt.Next())
Handle(Graphic3d_SequenceOfHClipPlane) aPlanes = myView->ClipPlanes();
if (!aPlanes.IsNull())
{
if (aPlaneIt.Value() == myClippingPlane)
for (Graphic3d_SequenceOfHClipPlane::Iterator aPlaneIt (*aPlanes); aPlaneIt.More(); aPlaneIt.Next())
{
toAddPlane = Standard_False;
break;
if (aPlaneIt.Value() == myClippingPlane)
{
toAddPlane = Standard_False;
break;
}
}
}
@@ -233,7 +239,7 @@ void CModelClippingDlg::OnCheckModelclippingonoff()
EOL "if (...)"
EOL "{"
EOL " // register and activate clipping plane"
EOL " if (!myView->GetClipPlanes().Contains (myClippingPlane))"
EOL " if (!myView->ClipPlanes()->Contains (myClippingPlane))"
EOL " {"
EOL " myView->AddClipPlane (myClippingPlane);"
EOL " }"