c5d0292a75b33e04feba54c73287a5b009db516c
[occt.git] / src / InterfaceGraphic / InterfaceGraphic_telem.hxx
1 /*
2 File: InterfaceGraphic_telem.h
3
4 16/06/2000 : ATS : G005 : Copied from OpenGl_telem.h to support required 
5 for InterfaceGraphic_Parray.hxx definitions
6
7 22/03/2004 : SAN : OCC4895 High-level interface for controlling polygon offsets
8
9 20/05/2005 : SAN : OCC8854 Number of color components increased to include alpha value
10
11 */
12
13 #ifndef  INTERFACEGRAPHIC_TELEM_H
14 #define  INTERFACEGRAPHIC_TELEM_H
15
16 #include <Standard.hxx>
17 #include <InterfaceGraphic_tgl_all.hxx>
18 #include <stdlib.h>
19
20 //if SUN compiler
21 #if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x530) && ! defined(typename)
22 #define IMPLEMENT_MEMORY_OPERATORS \
23   void* operator new (size_t size) {\
24   void* p = malloc( size );\
25   memset(p, 0, size);\
26   return p;\
27   }\
28   void operator delete(void* p) {\
29   free( p );\
30   }
31 #else
32 //if other
33 #define IMPLEMENT_MEMORY_OPERATORS \
34   void* operator new (size_t size) {\
35   void* p = malloc( size );\
36   memset(p, 0, size);\
37   return p;\
38   }\
39   void* operator new[] (size_t size) {\
40   void* p = malloc( size );\
41   memset(p, 0, size);\
42   return p;\
43   }\
44   void operator delete(void* p) { \
45   free( p );\
46   }\
47   void operator delete[](void* p) {\
48   free( p );\
49   }
50 #endif
51
52 struct TEL_TEXTURE_COORD
53 {
54   float xy[2];
55   IMPLEMENT_MEMORY_OPERATORS
56 };
57
58 typedef TEL_TEXTURE_COORD* tel_texture_coord;
59
60 struct TEL_POINT
61 {
62   float  xyz[3];
63   IMPLEMENT_MEMORY_OPERATORS
64     /*void* operator new (size_t size) {
65     void* p = malloc( size );
66     memset(p, 0, size);
67     return p;
68     }
69     void* operator new[] (size_t size) {
70     void* p = malloc( size );
71     memset(p, 0, size);
72     return p;
73     }
74     void operator delete(void* p) {
75     free( p );
76     }
77     void operator delete[](void* p) {
78     free( p );
79     }*/
80 };
81 typedef TEL_POINT* tel_point;
82
83 struct TEL_COLOUR
84 {
85   /* OCC8854: san -- number of color components increased to include alpha value */
86   float    rgb[4];
87   IMPLEMENT_MEMORY_OPERATORS
88 };
89 typedef TEL_COLOUR* tel_colour;
90
91 struct TEL_POINT_DATA
92 {
93   int      num;
94   TEL_POINT* data;
95   IMPLEMENT_MEMORY_OPERATORS
96 };
97 typedef TEL_POINT_DATA* tel_point_data;
98
99 struct TEL_TINT_DATA
100 {
101   int   num;
102   int*  data;
103   IMPLEMENT_MEMORY_OPERATORS
104 };
105 typedef TEL_TINT_DATA* tel_tint_data;
106
107 struct TEL_MATRIX3_DATA
108 {
109   TComposeType  mode;
110   Tmatrix3      mat;
111   IMPLEMENT_MEMORY_OPERATORS
112 };
113 typedef TEL_MATRIX3_DATA* tel_matrix3_data;
114
115 struct TEL_TEXT_DATA
116 {
117   TEL_POINT  attach_pt;
118   Tint       length;
119   Tchar*     data;
120   IMPLEMENT_MEMORY_OPERATORS
121 };
122 typedef TEL_TEXT_DATA* tel_text_data;
123
124 struct TEL_ALIGN_DATA
125 {
126   Tint Hmode;
127   Tint Vmode;
128   IMPLEMENT_MEMORY_OPERATORS
129 };
130 typedef TEL_ALIGN_DATA* tel_align_data;
131
132 typedef  enum
133 {
134   TLightAmbient, 
135   TLightDirectional, 
136   TLightPositional, 
137   TLightSpot
138 } TLightType;
139
140 typedef  enum
141 {
142   TelHLColour, 
143   TelHLForcedColour
144 } THighlightType;
145
146 typedef  enum
147 {
148   TelDCSuppressed, 
149   TelDCAllowed
150 } TDepthCueType;
151
152 /* Proprietes materiels */
153 struct  TEL_SURF_PROP
154 {
155   float     amb, diff, spec, emsv; 
156   float     trans, shine;
157   float     env_reflexion;
158   int       isamb, isdiff, isspec, isemsv;
159   int       isphysic; 
160   TEL_COLOUR speccol, difcol, ambcol, emscol, matcol;
161   IMPLEMENT_MEMORY_OPERATORS
162 };
163 typedef TEL_SURF_PROP* tel_surf_prop;
164
165 typedef  enum
166 {
167   TelCullNone, 
168   TelCullFront, 
169   TelCullBack
170 } TelCullMode;
171
172 /* Interior Styles */
173 #define TSM_SOLID  1
174 #define TSM_HOLLOW 2
175 #define TSM_EMPTY  3
176 #define TSM_HATCH  4
177 #define TSM_POINT  5
178 #define TSM_HIDDENLINE  6
179
180 /* Standard Line Styles */
181 #define TEL_LS_SOLID           0
182 #define TEL_LS_DOT             2
183 #define TEL_LS_DASH_DOT        3
184 #define TEL_LS_DASH            1
185 #define TEL_LS_DOUBLE_DOT_DASH 4
186
187 #define TEL_LS_USER_DEF_START  10
188
189 /* Standard Hatch Styles */
190 #define  TEL_HS_SOLID              0
191 #define  TEL_HS_CROSS              1
192 #define  TEL_HS_CROSS_SPARSE       2
193 #define  TEL_HS_GRID               3
194 #define  TEL_HS_GRID_SPARSE        4
195 #define  TEL_HS_DIAG_45            5
196 #define  TEL_HS_DIAG_135           6
197 #define  TEL_HS_HORIZONTAL         7
198 #define  TEL_HS_VERTICAL           8
199 #define  TEL_HS_DIAG_45_SPARSE     9
200 #define  TEL_HS_DIAG_135_SPARSE    10
201 #define  TEL_HS_HORIZONTAL_SPARSE  11
202 #define  TEL_HS_VERTICAL_SPARSE    12
203
204 #define TEL_HS_USER_DEF_START      15
205
206 #define  TEL_SHAPE_UNKNOWN         1
207 #define  TEL_SHAPE_COMPLEX         2
208 #define  TEL_SHAPE_CONCAVE         3
209 #define  TEL_SHAPE_CONVEX          4
210
211 /* Key ids for area type primitives */
212 #define NUM_FACETS_ID         1   /* key.data.ldata contains no. of facets */
213 #define FNORMALS_ID           2   /* key.data.pdata is array of TEL_POINT */
214 #define FACET_COLOUR_VALS_ID  3   /* key.data.pdata is array of TSM_COLOUR */
215 #define VERTICES_ID           4   /* key.data.pdata is array of TEL_POINT */
216 #define VERTEX_COLOUR_VALS_ID 5   /* key.data.pdata is array of TSM_COLOUR */
217 #define VNORMALS_ID           6   /* key.data.pdata is array of TEL_POINT */
218 #define NUM_VERTICES_ID       7   /* key.data.ldata is num of vertices */
219 #define SHAPE_FLAG_ID         8   /* key.data.ldata is shape flag */
220 #define EDGE_DATA_ID          9   /* key.data.pdata is edge data (Tint*) */
221 #define CONNECTIVITY_ID       10  /* key.data.pdata is conn data  (Tint*) */
222 #define BOUNDS_DATA_ID        11  /* key.data.pdata is bounds data  (Tint*) */
223 #define NUM_LINES_ID          12  /* key.data.ldata is number of lines */
224 #define NUM_ROWS_ID           13  /* key.data.ldata is number of rows */
225 #define NUM_COLUMNS_ID        14  /* key.data.ldata is number of columns */
226 #define VTEXTURECOORD_ID      15  /* key.data.pdata is array of TEL_TEXTURE_COORD */
227
228 #define PARRAY_ID       16  /* key.data.pdata is a primitive array */
229
230 /* Key ids for text primitives */
231 #define TEXT_ATTACH_PT_ID     1   /* key.data.pdata contains tel_point */
232 #define TEXT_STRING_ID        2   /* key.data.pdata contains Tchar *   */
233
234
235 /* Key ids for curve primitives */
236 #define CURVE_TYPE_ID         1   /* key.data.ldata is curve type */
237 /* TelCurveType :
238 * Bezier
239 * Cardinal
240 * BSpline
241 */
242 #define CURVE_NUM_POINTS_ID   2   /* key.data.ldata is num of points */
243 #define CURVE_VERTICES_ID     3   /* key.data.pdata is array of TEL_POINT */
244
245
246 /* Polymarker Types */
247 #define TEL_PM_PLUS        0
248 #define TEL_PM_STAR        1
249 #define TEL_PM_CROSS       2
250 #define TEL_PM_CIRC        3
251 #define TEL_PM_DOT         4
252 #define TEL_PM_USERDEFINED 5
253
254 #define TEL_PM_USER_DEF_START 7
255
256 #define TEL_SD_SHADING 0
257 #define TEL_SD_TEXTURE 1
258
259 #define TEL_SM_FLAT    1
260 #define TEL_SM_GOURAUD 2
261
262 #define TEL_POLYMARKER_FONT (short)1
263
264 /* Standard Lighting Models */
265 #define  TEL_FRONT_BACK_LM  1
266
267 /* Standard Materials */
268 #define  TEL_FRONT_MATERIAL  1
269 #define  TEL_BACK_MATERIAL   2
270
271 /* facet flags */
272 #define TEL_FAFLAG_NONE         1
273 #define TEL_FAFLAG_NORMAL       2
274 #define TEL_FAFLAG_COLOUR       3
275 #define TEL_FAFLAG_COLOURNORMAL 4
276
277 /* internal use */
278 #define TEL_FA_NONE   TEL_FAFLAG_NONE
279 #define TEL_FA_NORMAL TEL_FAFLAG_NORMAL
280
281 /* vertex flags */
282 #define TEL_VTFLAG_NONE         1
283 #define TEL_VTFLAG_NORMAL       2
284 #define TEL_VTFLAG_COLOUR       3
285 #define TEL_VTFLAG_COLOURNORMAL 4
286
287 /* internal use */
288 #define TEL_VT_NONE   TEL_VTFLAG_NONE
289 #define TEL_VT_NORMAL TEL_VTFLAG_NORMAL
290
291 /* Defbasis identifier */
292 #define TEL_BEZIER   1
293 #define TEL_CARDINAL 2
294 #define TEL_BSPLINE  3
295
296 typedef  enum
297 {
298   TelBezierCurve   = TEL_BEZIER,
299   TelCardinalCurve = TEL_CARDINAL,
300   TelBSplineCurve  = TEL_BSPLINE
301 } TelCurveType;
302
303 typedef enum
304 {
305   TelHLHSRNone, 
306   TelHLHSRZBuff
307
308 } TelHLHSRId;
309
310 /* OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets */
311 struct  TEL_POFFSET_PARAM
312 {
313   int   mode;
314   float factor;
315   float units;
316   IMPLEMENT_MEMORY_OPERATORS
317 };
318 typedef TEL_POFFSET_PARAM* tel_poffset_param;
319 /* OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets */
320
321 /* ABD 29/10/04  Transform Persistence of Presentation( pan, zoom, rotate ) */
322 struct TEL_TRANSFORM_PERSISTENCE
323 {
324   int       mode;
325   float     pointX;
326   float     pointY;
327   float     pointZ;
328   IMPLEMENT_MEMORY_OPERATORS
329 };
330 typedef TEL_TRANSFORM_PERSISTENCE* tel_transform_persistence;
331 /* ABD 29/10/04  Transform Persistence of Presentation( pan, zoom, rotate ) */
332
333 #endif /* INTERFACEGRAPHIC_TELEM_H */