1 // Copyright (c) 1995-1999 Matra Datavision
2 // Copyright (c) 1999-2014 OPEN CASCADE SAS
4 // This file is part of Open CASCADE Technology software library.
6 // This library is free software; you can redistribute it and/or modify it under
7 // the terms of the GNU Lesser General Public License version 2.1 as published
8 // by the Free Software Foundation, with special exception defined in the file
9 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10 // distribution for complete text of the license and disclaimer of any warranty.
12 // Alternatively, this file may be used under the terms of Open CASCADE
13 // commercial license or contractual agreement.
15 /***********************************************************************
19 File Include OpenGl_telem_util :
26 HISTORIQUE DES MODIFICATIONS :
27 --------------------------------
28 xx-xx-xx : xxx ; Creation.
29 22-04-96 : FMN ; Ajout TelReadImage TelDrawImage
30 23-12-96 : CAL ; Probleme dans la macro vecmag
31 12-02-97 : FMN ; Suppression TelEnquireFacilities()
32 07-10-97 : FMN ; Simplification WNT
33 23-12-97 : FMN ; Suppression TelBackInteriorStyle, TelBackInteriorStyleIndex
35 ************************************************************************/
37 #ifndef OPENGL_TELEM_UTIL_H
38 #define OPENGL_TELEM_UTIL_H
40 #include <InterfaceGraphic_telem.hxx>
44 * ShortRealLast () = 3.40282346638528860e+38
45 * ShortRealFirst () = 3.40282346638528860e+38
47 #define shortreallast() (3.e+38)
48 #define shortrealfirst() (-3.e+38)
50 /* vector manipulation macros */
51 #define square(a) ((a)*(a))
54 #define vecadd(a,b,c) { (a)[0]=(b)[0]+(c)[0]; \
55 (a)[1]=(b)[1]+(c)[1]; \
56 (a)[2]=(b)[2]+(c)[2]; }
59 #define vecsub(a,b,c) { (a)[0]=(b)[0]-(c)[0]; \
60 (a)[1]=(b)[1]-(c)[1]; \
61 (a)[2]=(b)[2]-(c)[2]; }
64 #define vecdot(a,b) ((a)[0]*(b)[0]+(a)[1]*(b)[1]+(a)[2]*(b)[2])
67 #define veccrs(a,b,c) { Tfloat x, y, z; \
68 x = (b)[1]*(c)[2] - (b)[2]*(c)[1]; \
69 y = (b)[2]*(c)[0] - (b)[0]*(c)[2]; \
70 z = (b)[0]*(c)[1] - (b)[1]*(c)[0]; \
75 #define vecscl(a,b) { (b)[0] *= (a); (b)[1] *= (a); (b)[2] *= (a); }
77 /* magnitude square */
78 #define vecmg2(a) (square((a)[0])+square((a)[1])+square((a)[2]))
81 #define vecmag(a) (std::sqrt((double)vecmg2(a)))
84 #define vecnrmd(a,d) ( d = (Tfloat)vecmag(a), \
85 ( d > 1e-10 ? (a[0] /= d, a[1] /= d, a[2] /= d, d) : (Tfloat)0. ) )
86 #define vecnrm(a) { Tfloat d; vecnrmd(a,d); }
88 /* angle between two vectors */
89 #define vecang(a,b,d) { d = (Tfloat)(vecmag(a)*vecmag(b)); \
91 d = d < -1.0F ? -1.0F : d > 1.0F ? 1.0F : d; \
92 d = ( Tfloat )acos(d); }
94 /* point along a vector at a distance */
95 #define vecgnd(a,b,c,d) { Tfloat w; w = d/vecmag(c); \
96 (a)[0] = (b)[0]+(c)[0]*w; \
97 (a)[1] = (b)[1]+(c)[1]*w; \
98 (a)[2] = (b)[2]+(c)[2]*w; }
100 #define veccpy(a,b) ((a)[0]=(b)[0],(a)[1]=(b)[1],(a)[2]=(b)[2])
102 /* end vector macros */
110 #define matcpy(d,s) { *((Tmatrix3Struct*)(d)) = *((Tmatrix3Struct*)(s)); }
112 (d)[0][0]=(s)[0][0],(d)[0][1]=(s)[0][1],(d)[0][2]=(s)[0][2],(d)[0][3]=(s)[0][3],
113 (d)[1][0]=(s)[1][0],(d)[1][1]=(s)[1][1],(d)[1][2]=(s)[1][2],(d)[1][3]=(s)[1][3],
114 (d)[2][0]=(s)[2][0],(d)[2][1]=(s)[2][1],(d)[2][2]=(s)[2][2],(d)[2][3]=(s)[2][3],
115 (d)[3][0]=(s)[3][0],(d)[3][1]=(s)[3][1],(d)[3][2]=(s)[3][2],(d)[3][3]=(s)[3][3]
118 #define matdump(m) { \
120 for (i=0; i<4; i++) {\
122 for (j=0; j<4; j++) \
123 printf ("%f ", m[i][j]); \
128 extern int TelGetPolygonNormal( tel_point, Tint*, Tint, Tfloat* );
129 extern int TelGetNormal( Tfloat*, Tfloat*, Tfloat*, Tfloat* );
130 extern void TelMultiplymat3( Tmatrix3, Tmatrix3, Tmatrix3 );