1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00
Files
occt/src/OpenGl/OpenGl_GraduatedTrihedron.hxx
apl c357e42610 0024776: Visualization - inherit OpenGl_View from Graphic3d_CView
Expose interface of OpenGl_View (OpenGL graphics rendering methods) to client code
and collecting all high-level API methods of application views in V3d_View class.

1) Exposing interface of OpenGl_View:

The OpenGl_View inherits from new class Graphic3d_CView.
Graphic3d_CView is an interface class that declares abstract methods for managing displayed structures,
display properties and a base layer code that implements computation
and management of HLR (or more broadly speaking view-depended) structures.

In new implementation it takes place of eliminated Visual3d_View.
As before the instance of Graphic3d_CView is still completely managed by V3d_View classes.
It can be accessed through V3d_View interface but normally this should not be required as all its methods are completely wrapped.

In more details, a concrete specialization of Graphic3d_CView is created and returned by graphical driver on request.
Right after creation the views is directly used for setting rendering properties and adding graphical structures to be displayed.

The rendering of graphics is possible after mapping a window and activating the view.
The direct setting of properties makes obsolete usage of intermediate structures with display parameter
like Visual3d_ContextView and etc (the whole package of Visual3d become redundant).

2) Collecting all high-level API methods of application views in V3d package:

The patch includes elimination of Visual3d layer.
All of its methods that could be previously used by application are now exposed and should be accessed on the level of V3d entities.
- Introduced new class Graphic3d_CView.
  This is a base class for render views.
  Made possible to specialize concrete instances of the class by graphical driver.
- Moved all methods managing rendering views into interface of Graphic3d_CView.
  The corresponding methods were removed from interface of graphical driver.

3) Eliminated Visual3d package:

- Logic of managing display of structures was put from Visual3d_ViewManager into Graphic3d_StructureManager.
- Removed Visual3d_View class. Logic of managing computed structures was put into base layer of Graphi3d_CView.
- Removed all intermediate structures for storing view parameters e.g. Visual3d_ContextView.
  All settings are kept by instances of Graphic3d_CView
- Removed Visual3d_Light intermediate class.
  All light properties are still stored in Graphic3d_CLight structure.
  The structure is directly access by instance of V3d_Light classes.
- Moved all needed enumerations into Graphic3d package.

4) Update package D3DHost to new changes.

5) Update code of OCCT samples to new changes.
2015-09-22 11:49:33 +03:00

245 lines
8.4 KiB
C++
Executable File

// Created on: 2011-09-20
// Created by: Sergey ZERCHANINOV
// Copyright (c) 2011-2013 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// 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.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#ifndef _OpenGl_GraduatedTrihedron_Header
#define _OpenGl_GraduatedTrihedron_Header
#include <Graphic3d_GraduatedTrihedron.hxx>
#include <gp_Ax1.hxx>
#include <gp_Pnt.hxx>
#include <gp_Dir.hxx>
#include <NCollection_Array1.hxx>
#include <OpenGl_AspectLine.hxx>
#include <OpenGl_Element.hxx>
#include <OpenGl_PrimitiveArray.hxx>
#include <OpenGl_Text.hxx>
class OpenGl_View;
//! This class allows to render Graduated Trihedron, i.e. trihedron with grid.
//! it is based on Graphic3d_GraduatedTrihedron parameters and support its customization
//! on construction level only.
//! @sa Graphic3d_GraduatedTrihedron
class OpenGl_GraduatedTrihedron : public OpenGl_Element
{
public:
DEFINE_STANDARD_ALLOC
public:
//! Default constructor.
OpenGl_GraduatedTrihedron();
//! Destructor.
virtual ~OpenGl_GraduatedTrihedron();
//! Draw the element.
virtual void Render (const Handle(OpenGl_Workspace)& theWorkspace) const;
//! Release OpenGL resources.
virtual void Release (OpenGl_Context* theCtx);
//! Setup configuration.
void SetValues (const Graphic3d_GraduatedTrihedron& theData);
//! Sets up-to-date values of scene bounding box.
//! Can be used in callback mechanism to get up-to-date values.
//! @sa Graphic3d_GraduatedTrihedron::CubicAxesCallback
void SetMinMax (const OpenGl_Vec3& theMin,
const OpenGl_Vec3& theMax);
private:
//! Axis of trihedron. It incapsulates geometry and style.
class Axis
{
public:
OpenGl_Vec3 Direction;
TEL_COLOUR NameColor;
OpenGl_AspectLine LineAspect;
mutable OpenGl_Text Label;
mutable OpenGl_PrimitiveArray Tickmark;
mutable OpenGl_PrimitiveArray Line;
mutable OpenGl_PrimitiveArray Arrow;
public:
Axis (const Graphic3d_AxisAspect& theAspect = Graphic3d_AxisAspect(),
const OpenGl_Vec3& theDirection = OpenGl_Vec3 (1.0f, 0.0f, 0.0f));
~Axis();
Axis& operator= (const Axis& theOther);
void InitArrow (const Handle(OpenGl_Context)& theContext,
const Standard_ShortReal theLength,
const OpenGl_Vec3& theNormal) const;
void InitTickmark (const Handle(OpenGl_Context)& theContext,
const OpenGl_Vec3& theDir) const;
void InitLine (const Handle(OpenGl_Context)& theContext,
const OpenGl_Vec3& theDir) const;
void Release (OpenGl_Context* theCtx);
};
private:
//! Struct for triple of orthonormal vectors
//! and origin point, and axes for tickmarks.
//! It may be not a right or left coordinate system.
struct GridAxes
{
public:
GridAxes()
: Origin (0, 0, 0)
{
Axes[0] = OpenGl_Vec3 (1.0f, 0.0f, 0.0f);
Axes[1] = OpenGl_Vec3 (0.0f, 1.0f, 0.0f);
Axes[2] = OpenGl_Vec3 (0.0f, 0.0f, 1.0f);
Ticks[0] = OpenGl_Vec3 (0.0f, 0.0f, 0.0f);
Ticks[1] = OpenGl_Vec3 (0.0f, 0.0f, 0.0f);
Ticks[2] = OpenGl_Vec3 (0.0f, 0.0f, 0.0f);
}
public: //! @name Main grid directions
OpenGl_Vec3 Origin;
OpenGl_Vec3 Axes[3];
public: //! @name Directions for tickmarks
OpenGl_Vec3 Ticks[3];
};
private:
//! Initialize or update GL resources for rendering trihedron.
//! @param theContext [in] the GL context.
void initGlResources (const Handle(OpenGl_Context)& theContext) const;
//! Gets normal of the view out of user.
//! @param theContext [in] OpenGL Context
//! @param theNormal [out] normal of the view out of user
//! @return distance corresponding to 1 pixel
Standard_ShortReal getNormal (const Handle(OpenGl_Context)& theContext,
OpenGl_Vec3& theNormal) const;
//! Gets distance to point (theX, theY, theZ) of bounding box along the normal
//! @param theNormal [in] normal of the view out of user
//! @param theCenter [in] geometry center of bounding box
//! @param theX [in] x of target point
//! @param theY [in] y of target point
//! @param theZ [in] z of terget point
Standard_ShortReal getDistanceToCorner (const OpenGl_Vec3& theNormal,
const OpenGl_Vec3& theCenter,
const Standard_ShortReal theX,
const Standard_ShortReal theY,
const Standard_ShortReal theZ) const;
//! Gets axes of grid
//! @param theCorners [in] the corners of grid
//! @param theGridAxes [out] grid axes, the base of graduated trihedron grid.
Standard_ExtCharacter getGridAxes (const Standard_ShortReal theCorners[8],
GridAxes& theGridAxes) const;
//! Render line from the transformed primitive array myLine
//! @param theWorkspace [in] the OpenGl Workspace
//! @param theMat [in] theMat that containes base transformation and is used for appling
//! translation and rotation
//! @param thaTx the X for vector of translation
//! @param thaTy the Y for vector of translation
//! @param thaTz the Z for vector of translation
void renderLine (const OpenGl_PrimitiveArray& theLine,
const Handle(OpenGl_Workspace)& theWorkspace,
const OpenGl_Mat4& theMat,
const Standard_ShortReal theXt,
const Standard_ShortReal theYt,
const Standard_ShortReal theZt) const;
//! Render grid lines perpendecular the axis of input index
//! @param theWorkspace [in] the OpenGl Workspace
//! @param theIndex [in] index of axis
//! @param theGridAxes [in] grid axes
//! @param theMat [in] theMat that containes base transformation and is used for appling
//! translation and rotation
void renderGridPlane (const Handle(OpenGl_Workspace)& theWorkspace,
const Standard_Integer& theIndex,
const GridAxes& theGridAxes,
OpenGl_Mat4& theMat) const;
//! Render the axis of input index
//! @param theWorkspace [in] the OpenGl Workspace
//! @param theIndex [in] index of axis
//! @param theMat [in] theMat that containes base transformation and is used for appling
//! translation and rotation
void renderAxis (const Handle(OpenGl_Workspace)& theWorkspace,
const Standard_Integer& theIndex,
const OpenGl_Mat4& theMat) const;
//! Render grid labels, tickmark lines and labels
//! @param theWorkspace [in] the OpenGl Workspace
//! @param theMat [in] theMat that containes base transformation and is used for appling
//! translation and rotation
//! @param theIndex [in] index of axis
//! @param theGridAxes [in] grid axes
//! @param theDpix [in] distance corresponding to 1 pixel
void renderTickmarkLabels (const Handle(OpenGl_Workspace)& theWorkspace,
const OpenGl_Mat4& theMat,
const Standard_Integer theIndex,
const GridAxes& theGridAxes,
const Standard_ShortReal theDpix) const;
protected: //! @name Scene bounding box values
OpenGl_Vec3 myMin;
OpenGl_Vec3 myMax;
protected:
mutable Axis myAxes[3]; //!< Axes for trihedron
mutable Graphic3d_GraduatedTrihedron myData;
mutable OpenGl_AspectLine myGridLineAspect; //!< Color grid properties
protected: //! @name Labels properties
mutable OpenGl_Text myLabelValues;
mutable OpenGl_AspectText myAspectLabels;
mutable OpenGl_AspectText myAspectValues;
private:
mutable Standard_Boolean myIsInitialized;
enum AxisFlags
{
XOO_XYO = 1 << 1,
XOO_XOZ = 1 << 2,
OYO_OYZ = 1 << 3,
OYO_XYO = 1 << 4,
OOZ_XOZ = 1 << 5,
OOZ_OYZ = 1 << 6,
OYZ_XYZ = 1 << 7,
XOZ_XYZ = 1 << 8,
XYO_XYZ = 1 << 9
};
};
#endif //_OpenGl_GraduatedTrihedron_Header