OCC22108 Cutting plane unpredictable behaviour in V3d_View
[occt.git] / src / OpenGl / OpenGl_polylwid.cxx
1
2 #include <OpenGl_tgl_all.hxx>
3
4 #include <stddef.h>
5 #include <stdio.h>
6 #include <GL/gl.h>
7 #include <GL/glu.h>
8
9 #include <OpenGl_cmn_varargs.hxx>
10 #include <OpenGl_telem_attri.hxx>
11 #include <OpenGl_tsm.hxx>
12 #include <OpenGl_telem.hxx>
13 #include <OpenGl_telem_inquire.hxx>
14 #include <OpenGl_Memory.hxx>
15
16 static  TStatus  PolylineWidthDisplay( TSM_ELEM_DATA, Tint, cmn_key* );
17 static  TStatus  PolylineWidthAdd( TSM_ELEM_DATA, Tint, cmn_key* );
18 static  TStatus  PolylineWidthDelete( TSM_ELEM_DATA, Tint, cmn_key* );
19 static  TStatus  PolylineWidthPrint( TSM_ELEM_DATA, Tint, cmn_key* );
20 static  TStatus  PolylineWidthInquire( TSM_ELEM_DATA, Tint, cmn_key* );
21
22 static  TStatus  (*MtdTbl[])( TSM_ELEM_DATA, Tint, cmn_key* ) =
23 {
24   0,             /* PickTraverse */
25   PolylineWidthDisplay,
26   PolylineWidthAdd,
27   PolylineWidthDelete,
28   PolylineWidthPrint,
29   PolylineWidthInquire
30 };
31
32
33 MtblPtr
34 TelPolylineWidthInitClass( TelType *el )
35 {
36   *el = TelPolylineWidth;
37   return MtdTbl;
38 }
39
40 static  TStatus
41 PolylineWidthAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
42 {
43   Tfloat *data = new Tfloat();
44
45   if( !data )
46     return TFailure;
47
48   *data = k[0]->data.fdata;
49
50   ((tsm_elem_data)(d.pdata))->pdata = data;
51
52   return TSuccess;
53 }
54
55
56 static  TStatus
57 PolylineWidthDisplay( TSM_ELEM_DATA data, Tint n, cmn_key *k )
58 {
59   CMN_KEY     key;
60
61   key.id = TelPolylineWidth;
62   key.data.fdata = *(Tfloat*)(data.pdata);
63   TsmSetAttri( 1, &key );
64
65   return TSuccess;
66 }
67
68
69 static  TStatus
70 PolylineWidthDelete( TSM_ELEM_DATA data, Tint n, cmn_key *k )
71 {
72   if (data.pdata)
73     delete data.pdata;
74   return TSuccess;
75 }
76
77
78 static  TStatus
79 PolylineWidthPrint( TSM_ELEM_DATA data, Tint n, cmn_key *k )
80 {
81   fprintf( stdout, "TelPolylineWidth. Value = %g\n", *(Tfloat *)(data.pdata));
82   fprintf( stdout, "\n" );
83
84   return TSuccess;
85 }
86
87
88 static TStatus
89 PolylineWidthInquire( TSM_ELEM_DATA data, Tint n, cmn_key *k )
90 {
91   Tint    i;
92   Tfloat *f = (Tfloat *)data.pdata;
93
94   for( i = 0; i < n; i++ )
95   {
96     switch( k[i]->id )
97     {
98     case INQ_GET_SIZE_ID:
99       {
100         k[i]->data.ldata = sizeof( Tint );
101         break;
102       }
103     case INQ_GET_CONTENT_ID:
104       {
105         TEL_INQ_CONTENT *c;
106         Teldata         *w;
107
108         c = (tel_inq_content)k[i]->data.pdata;
109         w = c->data;
110         c->act_size = 0;
111         w->fdata = *f;
112         break;
113       }
114     }
115   }
116
117   return TSuccess;
118 }