2 #include <OpenGl_tgl_all.hxx>
7 #include <OpenGl_cmn_varargs.hxx>
8 #include <OpenGl_telem_attri.hxx>
9 #include <OpenGl_telem_highlight.hxx>
10 #include <OpenGl_tsm.hxx>
11 #include <OpenGl_telem.hxx>
12 #include <OpenGl_telem_inquire.hxx>
14 static TStatus CurveDisplay( TSM_ELEM_DATA, Tint, cmn_key* );
15 static TStatus CurveAdd( TSM_ELEM_DATA, Tint, cmn_key* );
16 static TStatus CurveDelete( TSM_ELEM_DATA, Tint, cmn_key* );
17 static TStatus CurvePrint( TSM_ELEM_DATA, Tint, cmn_key* );
18 static TStatus CurveInquire( TSM_ELEM_DATA, Tint, cmn_key* );
20 static TStatus (*MtdTbl[])( TSM_ELEM_DATA, Tint, cmn_key* ) =
32 TelCurveType type; /* curve type : Bezier, Cardinal, BSpline */
34 TEL_POINT vertices[4]; /* vertices array */
35 IMPLEMENT_MEMORY_OPERATORS
38 typedef TEL_CURVE_DATA* tel_curve_data;
41 TelCurveInitClass( TelType* el )
48 CurveAdd( TSM_ELEM_DATA d, Tint n, cmn_key *k )
49 /* accepts the keys CURVE_TYPE_ID,
55 /* Recherche du type de la courbe. Presence obligatoire. */
56 for( i = 0; i < n; i++ )
58 if( k[i]->id == CURVE_TYPE_ID )
62 /* Type de la courbe non fourni. */
66 /* Recherche du nombre de points par courbe. Presence obligatoire. */
67 for( j = 0; j < n; j++ )
69 if( k[j]->id == CURVE_NUM_POINTS_ID )
73 /* Nombre de points par courbe non fourni. */
77 /* Nombre de points par courbe ridicule */
78 if( k[j]->data.ldata < 2 )
81 //cmn_memreserve( p, 1, 1 );
82 p = new TEL_CURVE_DATA();
83 p->type = (TelCurveType)k[i]->data.ldata;
84 p->num_points = (TelCurveType)k[j]->data.ldata;
86 for( i = 0; i < n; i++ )
90 case CURVE_VERTICES_ID:
91 //cmn_memcpy<TEL_POINT>(p->vertices, k[i]->data.pdata, 4);
92 memcpy(p->vertices, k[i]->data.pdata, 4*sizeof(TEL_POINT));
97 ((tsm_elem_data)(d.pdata))->pdata = p;
104 CurveDisplay( TSM_ELEM_DATA data, Tint n, cmn_key *k )
110 GLfloat reseau[4][3];
112 d = (tel_curve_data)data.pdata;
114 /* Mode highlight en cours */
115 if( k[0]->id == TOn )
116 { /* Use highlight colours */
119 key.id = TelHighlightIndex;
120 TsmGetAttri( 1, &key );
121 if( TelGetHighlightRep( TglActiveWs, key.data.ldata, &hrep )
126 TelGetHighlightRep( TglActiveWs, 0, &hrep );
132 key.id = TelPolylineColour;
133 key.data.pdata = &colour;
134 TsmGetAttri( 1, &key );
137 /* Recopie des points du reseau : Pb prototypage en c ansi */
138 for( i = 0; i < 4; i++ )
139 for( j = 0; i < 3; i++ )
140 reseau[i][j] = d->vertices[i].xyz[j];
142 /* Determination du type de courbe */
146 /* OGLXXX curvebasis: see man pages
147 glMap1();glMap2();glMapGrid();
150 case TelCardinalCurve:
151 /* OGLXXX curvebasis: see man pages
152 glMap1();glMap2();glMapGrid();
155 case TelBSplineCurve:
156 /* OGLXXX curvebasis: see man pages
157 glMap1();glMap2();glMapGrid();
161 printf( "\n\tCurveDisplay : INVALID KEY" );
165 /* Determination du type de courbe */
166 /* OGLXXX curveprecision:see man pages
167 glMap1();glMap2();glMapGrid();
171 glColor3fv( colour.rgb );
172 /* OGLXXX replace u with domain coordinate
181 CurveDelete( TSM_ELEM_DATA data, Tint n, cmn_key *k )
183 tel_curve_data p = (tel_curve_data)data.pdata;
194 CurvePrint( TSM_ELEM_DATA data, Tint n, cmn_key *k )
197 tel_curve_data p = (tel_curve_data)data.pdata;
199 fprintf( stdout, "TelCurve. \n" );
201 fprintf( stdout, "\n\t\tVertices : " );
202 for( i = 0; i < 4; i++ )
203 fprintf( stdout, "\n\t\t v[%d] = %g %g %g", i, p->vertices[i].xyz[0],
204 p->vertices[i].xyz[1],
205 p->vertices[i].xyz[2] );
207 fprintf( stdout, "\n" );
213 CurveInquire( TSM_ELEM_DATA data, Tint n, cmn_key *k )
218 TStatus status = TSuccess;
220 d = (tel_curve_data)data.pdata;
222 size_reqd = sizeof( TEL_CURVE_DATA );
224 for( i = 0; i < n; i++ )
228 case INQ_GET_SIZE_ID:
230 k[i]->data.ldata = size_reqd;
234 case INQ_GET_CONTENT_ID:
239 c = (tel_inq_content)k[i]->data.pdata;
240 c->act_size = size_reqd;
243 if( c->size >= size_reqd )
245 w->pts3 = (tel_point) c->buf;
246 //cmn_memcpy<TEL_POINT>( w->pts3, d->vertices, 4 );
247 memcpy( w->pts3, d->vertices, 4*sizeof(TEL_POINT) );