0022815: Missing delete operator for placement new
[occt.git] / src / OpenGl / OpenGl_Mesh.hxx
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
21 struct 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   DEFINE_STANDARD_ALLOC
37 };
38
39 class 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   DEFINE_STANDARD_ALLOC
76 };
77
78 #endif //OpenGl_Mesh_Header