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:
@@ -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 " }"
|
||||
|
Reference in New Issue
Block a user