// Created on: 2011-09-20
// 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 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_View_Header
#define _OpenGl_View_Header
#include <Graphic3d_CView.hxx>
#include <Graphic3d_CGraduatedTrihedron.hxx>
-#include <Graphic3d_SetOfHClipPlane.hxx>
+#include <Graphic3d_SequenceOfHClipPlane.hxx>
+#include <Graphic3d_ZLayerSettings.hxx>
#include <Visual3d_TypeOfSurfaceDetail.hxx>
+#include <Visual3d_TypeOfModel.hxx>
-#include <OpenGl_telem_view.hxx>
+#include <OpenGl_BVHTreeSelector.hxx>
#include <OpenGl_LayerList.hxx>
#include <OpenGl_Light.hxx>
+#include <OpenGl_LineAttributes.hxx>
#include <Handle_OpenGl_Context.hxx>
-#include <Handle_OpenGl_Display.hxx>
+#include <Handle_OpenGl_GraphicDriver.hxx>
#include <Handle_OpenGl_Workspace.hxx>
#include <Handle_OpenGl_View.hxx>
#include <Handle_OpenGl_Texture.hxx>
Aspect_GradientFillMethod type;
};
-struct OPENGL_EXTRA_REP
-{
- Tfloat vrp[3];
- Tfloat vpn[3];
- Tfloat vup[3];
- TEL_VIEW_MAPPING map;
- Tfloat scaleFactors[3];
-};
-
struct OPENGL_ZCLIP
{
struct {
TEL_COLOUR Color;
};
+struct OpenGl_Matrix;
class OpenGl_GraduatedTrihedron;
class OpenGl_Structure;
class OpenGl_Trihedron;
class Handle(OpenGl_PrinterContext);
+class OpenGl_StateCounter;
class OpenGl_View : public MMgt_TShared
{
public:
- OpenGl_View (const CALL_DEF_VIEWCONTEXT &AContext);
+ OpenGl_View (const CALL_DEF_VIEWCONTEXT &AContext, OpenGl_StateCounter* theCounter);
virtual ~OpenGl_View ();
void ReleaseGlResources (const Handle(OpenGl_Context)& theCtx);
void SetTextureEnv (const Handle(OpenGl_Context)& theCtx,
const Handle(Graphic3d_TextureEnv)& theTexture);
- void SetSurfaceDetail (const Visual3d_TypeOfSurfaceDetail AMode) { mySurfaceDetail = AMode; }
+ void SetSurfaceDetail (const Visual3d_TypeOfSurfaceDetail AMode);
void SetBackfacing (const Standard_Integer AMode);
void SetLights (const CALL_DEF_VIEWCONTEXT &AContext);
void SetAntiAliasing (const Standard_Boolean AMode) { myAntiAliasing = AMode; }
- void SetClipPlanes (const Graphic3d_SetOfHClipPlane &thePlanes) { myClipPlanes = thePlanes; }
+ void SetClipPlanes (const Graphic3d_SequenceOfHClipPlane &thePlanes) { myClipPlanes = thePlanes; }
void SetVisualisation (const CALL_DEF_VIEWCONTEXT &AContext);
+ const Handle(Graphic3d_Camera)& Camera() { return myCamera; }
+ void SetCamera (const Handle(Graphic3d_Camera)& theCamera) { myCamera = theCamera; }
+
void SetClipLimit (const Graphic3d_CView& theCView);
- void SetMapping (const Handle(OpenGl_Display)& theGlDisplay, const Graphic3d_CView& theCView);
- void SetOrientation (const Graphic3d_CView& theCView);
void SetFog (const Graphic3d_CView& theCView, const Standard_Boolean theFlag);
const Graphic3d_CGraduatedTrihedron& theCubic);
void GraduatedTrihedronErase (const Handle(OpenGl_Context)& theCtx);
- Standard_Boolean ProjectObjectToRaster (const Standard_Integer w, const Standard_Integer h,
- const Standard_ShortReal x, const Standard_ShortReal y, const Standard_ShortReal z,
- Standard_ShortReal &xr, Standard_ShortReal &yr);
- Standard_Boolean ProjectRasterToObject (const Standard_Integer w, const Standard_Integer h,
- const Standard_Integer xr, const Standard_Integer yr,
- Standard_ShortReal &x, Standard_ShortReal &y, Standard_ShortReal &z);
- Standard_Boolean ProjectRasterToObjectWithRay (const Standard_Integer w, const Standard_Integer h,
- const Standard_Integer xr, const Standard_Integer yr,
- Standard_ShortReal &x, Standard_ShortReal &y, Standard_ShortReal &z,
- Standard_ShortReal &dx, Standard_ShortReal &dy, Standard_ShortReal &dz);
- void GetMatrices (TColStd_Array2OfReal& theMatOrient,
- TColStd_Array2OfReal& theMatMapping,
- const Standard_Boolean theIsCustom) const;
-
- Standard_Real Height () const { return (myExtra.map.window.xmax - myExtra.map.window.xmin); }
- Standard_Real Width () const { return (myExtra.map.window.ymax - myExtra.map.window.ymin); }
+ Standard_Real Height () const { return myCamera->ViewDimensions().X(); }
+ Standard_Real Width () const { return myCamera->ViewDimensions().Y(); }
Standard_Integer Backfacing () const { return myBackfacing; }
- const TEL_TRANSFORM_PERSISTENCE * BeginTransformPersistence ( const TEL_TRANSFORM_PERSISTENCE *ATransPers );
- void EndTransformPersistence ();
+ const TEL_TRANSFORM_PERSISTENCE * BeginTransformPersistence (const Handle(OpenGl_Context)& theCtx,
+ const TEL_TRANSFORM_PERSISTENCE *theTransPers);
+ void EndTransformPersistence (const Handle(OpenGl_Context)& theCtx);
//! Add structure to display list with specified priority.
//! The structure will be added to associated with it z layer.
//! If the z layer is not presented in the view, the structure will
//! be displayed in default bottom-level z layer.
- void DisplayStructure (const OpenGl_Structure *theStructure,
+ void DisplayStructure (const OpenGl_Structure* theStructure,
const Standard_Integer thePriority);
//! Erase structure from display list.
- void EraseStructure (const OpenGl_Structure *theStructure);
+ void EraseStructure (const OpenGl_Structure* theStructure);
+
+ //! Add structure to the list of immediate structures.
+ void DisplayImmediateStructure (const OpenGl_Structure* theStructure);
+
+ //! Erase structure from display list.
+ void EraseImmediateStructure (const OpenGl_Structure* theStructure);
//! Insert a new top-level z layer with ID <theLayerId>
void AddZLayer (const Standard_Integer theLayerId);
void ChangeZLayer (const OpenGl_Structure *theStructure,
const Standard_Integer theNewLayerId);
+ //! Sets the settings for a single Z layer of specified view.
+ void SetZLayerSettings (const Standard_Integer theLayerId,
+ const Graphic3d_ZLayerSettings theSettings);
+
+ //! Changes the priority of a structure within its ZLayer
+ void ChangePriority (const OpenGl_Structure *theStructure,
+ const Standard_Integer theNewPriority);
+
void CreateBackgroundTexture (const Standard_CString AFileName, const Aspect_FillMethod AFillStyle);
void SetBackgroundTextureStyle (const Aspect_FillMethod FillStyle);
void SetBackgroundGradient (const Quantity_Color& AColor1, const Quantity_Color& AColor2, const Aspect_GradientFillMethod AType);
const Aspect_CLayer2d& theCUnderLayer,
const Aspect_CLayer2d& theCOverLayer);
-public:
- DEFINE_STANDARD_RTTI(OpenGl_View) // Type definition
+ void DrawBackground (OpenGl_Workspace& theWorkspace);
- protected:
+ //! Returns list of OpenGL Z-layers.
+ const OpenGl_LayerList& LayerList() const { return myZLayers; }
- void RenderStructs (const Handle(OpenGl_Workspace) &AWorkspace);
- void RedrawLayer2d (const Handle(OpenGl_PrinterContext)& thePrintContext,
- const Handle(OpenGl_Workspace)& theWorkspace,
- const Graphic3d_CView& theCView,
- const Aspect_CLayer2d& theCLayer);
+ //! Returns list of openGL light sources.
+ const OpenGl_ListOfLight& LightList() const { return myLights; }
+
+ //! Returns OpenGL environment map.
+ const Handle(OpenGl_Texture)& TextureEnv() const { return myTextureEnv; }
+
+ //! Returns visualization mode for objects in the view.
+ Visual3d_TypeOfSurfaceDetail SurfaceDetail() const { return mySurfaceDetail; }
+
+ //! Returns selector for BVH tree, providing a possibility to store information
+ //! about current view volume and to detect which objects are overlapping it.
+ OpenGl_BVHTreeSelector& BVHTreeSelector() { return myBVHSelector; }
+
+ //! Marks BVH tree for given priority list as dirty and
+ //! marks primitive set for rebuild.
+ void InvalidateBVHData (const Standard_Integer theLayerId);
- Handle(OpenGl_Texture) myTextureEnv;
- Visual3d_TypeOfSurfaceDetail mySurfaceDetail; //WSSurfaceDetail
- Standard_Integer myBackfacing; //WSBackfacing
+ //! Returns view-mapping and orientation matrices.
+ void GetMatrices (OpenGl_Mat4& theOrientation,
+ OpenGl_Mat4& theViewMapping) const;
- OPENGL_BG_TEXTURE myBgTexture; //WSBgTexture
- OPENGL_BG_GRADIENT myBgGradient; //WSBgGradient
+ //! Returns list of immediate structures rendered on top of main presentation
+ const OpenGl_SequenceOfStructure& ImmediateStructures() const
+ {
+ return myImmediateList;
+ }
- //{ myViewRep
- Tmatrix3 myOrientationMatrix;
- Tmatrix3 myMappingMatrix;
+ //! Returns modification state for ray-tracing.
+ Standard_Size ModificationState() const { return myModificationState; }
- //Tint shield_indicator;
- //TEL_COLOUR shield_colour;
- //Tint border_indicator;
- //TEL_COLOUR border_colour;
- //Tint active_status;
+protected:
+
+ void RenderStructs (const Handle(OpenGl_Workspace) &AWorkspace);
+ void RedrawLayer2d (const Handle(OpenGl_PrinterContext)& thePrintContext,
+ const Handle(OpenGl_Workspace) &theWorkspace,
+ const Graphic3d_CView& theCView,
+ const Aspect_CLayer2d& theCLayer);
+ void RedrawTrihedron (const Handle(OpenGl_Workspace) &theWorkspace);
+
+ //! Redraw contents of model scene: clipping planes,
+ //! lights, structures. The peculiar properties of "scene" is that
+ //! it requires empty Z-Buffer and uses projection and orientation
+ //! matrices supplied by 3d view.
+ //! @param thePrintCtx [in] printer context which facilitates tiled printing.
+ //! @param theWorkspace [in] rendering workspace.
+ //! @param theCView [in] view data.
+ //! @param theProjection [in] view projection matrix.
+ //! @param theOrientation [in] view orientation matrix.
+ void RedrawScene (const Handle(OpenGl_PrinterContext)& thePrintContext,
+ const Handle(OpenGl_Workspace)& theWorkspace);
+
+ Handle(OpenGl_LineAttributes) myLineAttribs;
+ Handle(OpenGl_Texture) myTextureEnv;
+ Visual3d_TypeOfSurfaceDetail mySurfaceDetail;
+ Standard_Integer myBackfacing;
+
+ OPENGL_BG_TEXTURE myBgTexture;
+ OPENGL_BG_GRADIENT myBgGradient;
OPENGL_ZCLIP myZClip;
- OPENGL_EXTRA_REP myExtra;
- //}
- Graphic3d_SetOfHClipPlane myClipPlanes;
+ Graphic3d_SequenceOfHClipPlane myClipPlanes;
+ Handle(Graphic3d_Camera) myCamera;
+
OPENGL_FOG myFog;
OpenGl_Trihedron* myTrihedron;
OpenGl_GraduatedTrihedron* myGraduatedTrihedron;
//View_LABViewContext
int myVisualization;
- int myIntShadingMethod;
+ Visual3d_TypeOfModel myShadingModel; //!< lighting shading model
//View_LABLight
OpenGl_ListOfLight myLights;
//View_LABDepthCueing - fixed index used
- OpenGl_LayerList myZLayers;
+ OpenGl_LayerList myZLayers; //!< main list of displayed structure, sorted by layers
+ OpenGl_SequenceOfStructure myImmediateList; //!< list of immediate structures rendered on top of main presentation
const TEL_TRANSFORM_PERSISTENCE *myTransPers;
Standard_Boolean myIsTransPers;
- public:
+ //! Modification state
+ Standard_Size myProjectionState;
+ Standard_Size myModelViewState;
+ OpenGl_StateCounter* myStateCounter;
+
+ Standard_Size myCurrLightSourceState;
+
+ typedef std::pair<Standard_Size, Standard_Size> StateInfo;
+
+ StateInfo myLastOrientationState;
+ StateInfo myLastViewMappingState;
+ StateInfo myLastLightSourceState;
+
+ //! Is needed for selection of overlapping objects and storage of the current view volume
+ OpenGl_BVHTreeSelector myBVHSelector;
+
+ Standard_Size myModificationState;
+
+public:
+
DEFINE_STANDARD_ALLOC
+ DEFINE_STANDARD_RTTI(OpenGl_View) // Type definition
+
+ friend class OpenGl_Workspace;
+
};
-#endif //_OpenGl_View_Header
+#endif // _OpenGl_View_Header