// Created on: 2011-08-05
// Created by: Sergey ZERCHANINOV
-// Copyright (c) 2011-2012 OPEN CASCADE SAS
+// Copyright (c) 2011-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 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_Element_Header
#define OpenGl_Element_Header
#include <Handle_OpenGl_Context.hxx>
#include <Handle_OpenGl_Workspace.hxx>
+#include <OpenGl_RenderFilter.hxx>
+//! Base interface for drawable elements.
class OpenGl_Element
{
public:
- OpenGl_Element() {}
+ Standard_EXPORT OpenGl_Element();
virtual void Render (const Handle(OpenGl_Workspace)& theWorkspace) const = 0;
theElement = NULL;
}
+public:
+
+ //! Render element if it passes the filtering procedure. This method should
+ //! be used for elements which can be used in scope of rendering algorithms.
+ //! E.g. elements of groups during recursive rendering.
+ //! If render filter is null, pure rendering is performed.
+ //! @param theWorkspace [in] the rendering workspace.
+ //! @param theFilter [in] the rendering filter to check whether the element
+ //! should be rendered or not.
+ //! @return True if element passes the filering check and is rendered.
+ inline Standard_Boolean
+ RenderFiltered (const Handle(OpenGl_Workspace)& theWorkspace,
+ const Handle(OpenGl_RenderFilter)& theFilter) const
+ {
+ if (!theFilter.IsNull() && !theFilter->CanRender (this))
+ {
+ return Standard_False;
+ }
+
+ Render (theWorkspace);
+
+ return Standard_True;
+ }
+
protected:
- virtual ~OpenGl_Element() {}
+ Standard_EXPORT virtual ~OpenGl_Element();
public:
};
-#endif //OpenGl_Element_Header
+#endif // OpenGl_Element_Header