Commit | Line | Data |
---|---|---|
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 | ||
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 | IMPLEMENT_MEMORY_OPERATORS | |
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 | IMPLEMENT_MEMORY_OPERATORS | |
76 | }; | |
77 | ||
78 | #endif //OpenGl_Mesh_Header |