0022819: Redesign of OpenGl driver
[occt.git] / src / OpenGl / OpenGl_Mesh.hxx
CommitLineData
2166f0fa
SK
1// File: OpenGl_Mesh.hxx
2// Created: 13 July 2011
3// Author: Sergey ZERCHANINOV
4// Copyright: OPEN CASCADE 2011
5
6#ifndef OpenGl_Mesh_Header
7#define OpenGl_Mesh_Header
8
9#include <InterfaceGraphic_telem.hxx>
10#include <Graphic3d_Array1OfVertex.hxx>
11#include <Graphic3d_Array1OfVertexN.hxx>
12#include <Graphic3d_Array1OfVertexC.hxx>
13#include <Graphic3d_Array1OfVertexNC.hxx>
14#include <Graphic3d_Array1OfVertexNT.hxx>
15#include <Aspect_Array1OfEdge.hxx>
16#include <Aspect_InteriorStyle.hxx>
17
18#include <OpenGl_Element.hxx>
19#include <OpenGl_AspectFace.hxx>
20
21struct TEL_INDEXPOLY_DATA
22{
23 Tint num_vertices; /* Number of vertices */
24 Tint num_facets; /* Number of facets (triangles, quadrangles or polygons) */
25 Tint num_bounds; /* Number of bounds in a facet (3, 4 or more) */
26 Tint facet_flag; /* TEL_FA_NONE or TEL_FA_NORMAL */
27 Tint vertex_flag; /* TEL_VT_NONE or TEL_VT_NORMAL */
28 Tint *edge_vis; /* Edge visibility indicators for each edge */
29 Tint *indices; /* Connectivity array */
30 tel_point fnormals; /* Facet normals */
31 tel_colour fcolours; /* Facet colour values */
32 tel_point vertices; /* Vertices */
33 tel_colour vcolours; /* Vertex colour values */
34 tel_point vnormals; /* Vertex normals */
35 tel_texture_coord vtexturecoord; /* Texture Coordinates */
36 IMPLEMENT_MEMORY_OPERATORS
37};
38
39class OpenGl_Mesh : public OpenGl_Element
40{
41 public:
42
43 OpenGl_Mesh (const Graphic3d_Array1OfVertex& AListVertex, const Aspect_Array1OfEdge& AListEdge);
44 OpenGl_Mesh (const Graphic3d_Array1OfVertexN& AListVertex, const Aspect_Array1OfEdge& AListEdge);
45 OpenGl_Mesh (const Graphic3d_Array1OfVertexC& AListVertex, const Aspect_Array1OfEdge& AListEdge);
46 OpenGl_Mesh (const Graphic3d_Array1OfVertexNC& AListVertex, const Aspect_Array1OfEdge& AListEdge);
47 OpenGl_Mesh (const Graphic3d_Array1OfVertexNT& AListVertex, const Aspect_Array1OfEdge& AListEdge);
48
49 virtual ~OpenGl_Mesh ();
50
51 virtual void Render (const Handle(OpenGl_Workspace) &AWorkspace) const;
52
53 protected:
54
55 void Init (const Tint ANbVertices, tel_point AVertices,
56 tel_point AVNormals, tel_colour AVColors, tel_texture_coord ATCoords,
57 const Aspect_Array1OfEdge& AListEdge, const Tint ANbBounds);
58
59 void draw_indexpoly (const Tint, /* front_lighting_model, */
60 const Aspect_InteriorStyle, /* interior_style, */
61 const TEL_COLOUR *, /* edge_colour, */
62 const OPENGL_SURF_PROP *,
63 const Handle(OpenGl_Workspace) &) const;
64
65 void draw_degenerates_as_points (const float) const;
66
67 void draw_degenerates_as_bboxs () const;
68
69 void draw_edges (const TEL_COLOUR *, const Aspect_InteriorStyle, Tint, const Handle(OpenGl_Workspace) &) const;
70
71 TEL_INDEXPOLY_DATA myData;
72 DS_INTERNAL *myDS;
73
74 public:
75 IMPLEMENT_MEMORY_OPERATORS
76};
77
78#endif //OpenGl_Mesh_Header