mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-24 13:50:49 +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:
@@ -399,6 +399,7 @@ Handle(SelectMgr_BaseFrustum) SelectMgr_RectangularFrustum::ScaleAndTransform (c
|
||||
cacheVertexProjections (aRes.get());
|
||||
|
||||
aRes->myViewClipRange = myViewClipRange;
|
||||
aRes->myIsViewClipEnabled = myIsViewClipEnabled;
|
||||
aRes->myMousePos = myMousePos;
|
||||
|
||||
return aRes;
|
||||
@@ -716,16 +717,17 @@ Standard_Boolean SelectMgr_RectangularFrustum::IsClipped (const Graphic3d_Sequen
|
||||
// function : SetViewClipping
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
void SelectMgr_RectangularFrustum::SetViewClipping (const Graphic3d_SequenceOfHClipPlane& thePlanes)
|
||||
void SelectMgr_RectangularFrustum::SetViewClipping (const Handle(Graphic3d_SequenceOfHClipPlane)& thePlanes)
|
||||
{
|
||||
if (thePlanes.Size() == 0)
|
||||
if (thePlanes.IsNull()
|
||||
|| thePlanes->IsEmpty())
|
||||
{
|
||||
myViewClipRange.Clear();
|
||||
return;
|
||||
}
|
||||
|
||||
Standard_Real aMaxDepth, aMinDepth;
|
||||
computeClippingRange (thePlanes, aMinDepth, aMaxDepth);
|
||||
computeClippingRange (*thePlanes, aMinDepth, aMaxDepth);
|
||||
myViewClipRange.Set (aMinDepth, aMaxDepth);
|
||||
}
|
||||
|
||||
@@ -735,8 +737,11 @@ void SelectMgr_RectangularFrustum::SetViewClipping (const Graphic3d_SequenceOfHC
|
||||
// =======================================================================
|
||||
Standard_Boolean SelectMgr_RectangularFrustum::isViewClippingOk (const Standard_Real theDepth) const
|
||||
{
|
||||
if (!myViewClipRange.IsValid())
|
||||
if (!myViewClipRange.IsValid()
|
||||
|| !myIsViewClipEnabled)
|
||||
{
|
||||
return Standard_True;
|
||||
}
|
||||
|
||||
return myViewClipRange.MaxDepth() > theDepth
|
||||
&& myViewClipRange.MinDepth() < theDepth;
|
||||
|
Reference in New Issue
Block a user