// Created on: 2012-02-02
// Created by: Anton POLETAEV
-// Copyright (c) -1999 Matra Datavision
-// Copyright (c) 2012-2012 OPEN CASCADE SAS
+// Copyright (c) 2012-2014 OPEN CASCADE SAS
//
-// The content of this file is subject to the Open CASCADE Technology Public
-// License Version 6.5 (the "License"). You may not use the content of this file
-// except in compliance with the License. Please obtain a copy of the License
-// at http://www.opencascade.org and read it completely before using this file.
+// This file is part of Open CASCADE Technology software library.
//
-// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
-// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
//
-// The Original Code and all software distributed under the License is
-// distributed on an "AS IS" basis, without warranty of any kind, and the
-// Initial Developer hereby disclaims all such warranties, including without
-// limitation, any warranties of merchantability, fitness for a particular
-// purpose or non-infringement. Please see the License for the specific terms
-// and conditions governing the rights and limitations under the License.
-
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
#ifndef _OpenGl_LayerList_Header
#define _OpenGl_LayerList_Header
-#include <OpenGl_PriorityList.hxx>
+#include <OpenGl_Layer.hxx>
+#include <OpenGl_LayerFilter.hxx>
#include <InterfaceGraphic_telem.hxx>
class OpenGl_Structure;
class Handle(OpenGl_Workspace);
-typedef NCollection_Sequence<OpenGl_PriorityList> OpenGl_SequenceOfLayers;
+typedef NCollection_Sequence<OpenGl_Layer> OpenGl_SequenceOfLayers;
typedef NCollection_DataMap<int, int> OpenGl_LayerSeqIds;
class OpenGl_LayerList
{
- public:
-
+public:
+
//! Constructor
OpenGl_LayerList (const Standard_Integer theNbPriorities = 11);
-
+
//! Destructor
- virtual ~OpenGl_LayerList ();
-
+ virtual ~OpenGl_LayerList();
+
//! Method returns the number of available priorities
- Standard_Integer NbPriorities () const;
+ Standard_Integer NbPriorities() const { return myNbPriorities; }
//! Number of displayed structures
- Standard_Integer NbStructures () const;
+ Standard_Integer NbStructures() const { return myNbStructures; }
+
+ //! Return number of structures within immediate layers
+ Standard_Integer NbImmediateStructures() const { return myImmediateNbStructures; }
//! Insert a new layer with id.
- void AddLayer (const Standard_Integer theLayerId);
-
- //! Check whether the layer with given id is already created.
- Standard_Boolean HasLayer (const Standard_Integer theLayerId) const;
-
+ void AddLayer (const Graphic3d_ZLayerId theLayerId);
+
//! Remove layer by its id.
- void RemoveLayer (const Standard_Integer theLayerId);
-
+ void RemoveLayer (const Graphic3d_ZLayerId theLayerId);
+
//! Add structure to list with given priority. The structure will be inserted
//! to specified layer. If the layer isn't found, the structure will be put
//! to default bottom-level layer.
- void AddStructure (const OpenGl_Structure *theStructure,
- const Standard_Integer theLayerId,
- const Standard_Integer thePriority);
-
+ void AddStructure (const OpenGl_Structure* theStruct,
+ const Graphic3d_ZLayerId theLayerId,
+ const Standard_Integer thePriority,
+ Standard_Boolean isForChangePriority = Standard_False);
+
//! Remove structure from structure list and return its previous priority
- void RemoveStructure (const OpenGl_Structure *theStructure,
- const Standard_Integer theZLayerId);
-
+ void RemoveStructure (const Handle(Graphic3d_Structure)& theStructure);
+
//! Change structure z layer
//! If the new layer is not presented, the structure will be displayed
//! in default z layer
- void ChangeLayer (const OpenGl_Structure *theStructure,
- const Standard_Integer theOldLayerId,
- const Standard_Integer theNewLayerId);
-
+ void ChangeLayer (const OpenGl_Structure* theStructure,
+ const Graphic3d_ZLayerId theOldLayerId,
+ const Graphic3d_ZLayerId theNewLayerId);
+
+ //! Changes structure priority within its ZLayer
+ void ChangePriority (const OpenGl_Structure* theStructure,
+ const Graphic3d_ZLayerId theLayerId,
+ const Standard_Integer theNewPriority);
+
+ //! Returns reference to the layer with given ID.
+ OpenGl_Layer& Layer (const Graphic3d_ZLayerId theLayerId);
+
+ //! Returns reference to the layer with given ID.
+ const OpenGl_Layer& Layer (const Graphic3d_ZLayerId theLayerId) const;
+
+ //! Assign new settings to the layer.
+ void SetLayerSettings (const Graphic3d_ZLayerId theLayerId,
+ const Graphic3d_ZLayerSettings& theSettings);
+
//! Render this element
- void Render (const Handle(OpenGl_Workspace) &theWorkspace) const;
-
- private:
-
- //! Get default layer
- OpenGl_PriorityList& defaultLayer ();
-
- protected:
+ void Render (const Handle(OpenGl_Workspace)& theWorkspace,
+ const Standard_Boolean theToDrawImmediate,
+ const OpenGl_LayerFilter theLayersToProcess) const;
+
+ //! Returns the set of OpenGL Z-layers.
+ const OpenGl_SequenceOfLayers& Layers() const { return myLayers; }
+
+ //! Marks BVH tree for given priority list as dirty and
+ //! marks primitive set for rebuild.
+ void InvalidateBVHData (const Graphic3d_ZLayerId theLayerId);
+
+ //! Returns structure modification state (for ray-tracing).
+ Standard_Size ModificationState() const { return myModificationState; }
+
+protected:
// number of structures temporary put to default layer
OpenGl_SequenceOfLayers myLayers;
OpenGl_LayerSeqIds myLayerIds;
+
Standard_Integer myNbPriorities;
Standard_Integer myNbStructures;
+ Standard_Integer myImmediateNbStructures; //!< number of structures within immediate layers
+
+ mutable Standard_Size myModificationState;
+
+public:
- public:
DEFINE_STANDARD_ALLOC
+
};
#endif //_OpenGl_LayerList_Header