301{
302 float qp[2][5];
303 int ns = __t->getNumberOfPoints(), nt = __t->getNumberOfCells();
304 femTriangle *tr = __t->tr;
305 femPoint *rp = __t->rp;
306 float xln, fm, xf, xfm, fi, fj, xlam;
307 int im, i, j, k, l, ik, jk;
308
309 Init (rp, ns, "o");
310 contour (ng, 11);
311 couleur (2);
312
313 fm = f[0];
314 xfm = fm;
315 for (i = 1; i <= ns; i++)
316 {
317 if (f[i - 1] > fm)
318 fm = f[i - 1];
319 if (f[i - 1] < xfm)
320 xfm = f[i - 1];
321 }
322 if ((float) fabs (fm - xfm) < 1.0e-15)
323 nl = 1;
324 for (l = 1; l <= nl; l++)
325 {
326 if (nl == 1)
327 xln = 0.5F;
328 else
329 xln = (l - 1.0F) / (nl - 1.0F);
330 xf = xfm + (fm - xfm) * xln;
331 for (k = 1; k <= nt; k++)
332 {
333 im = 0;
334 for (i = 0; i <= 2; i++)
335 {
336 j = ((i + 1) == 3 ? 0 : i + 1);
337 ik = tr[k - 1][i];
338 jk = tr[k - 1][j];
339 fi = realpart (f[ik]);
340 fj = realpart (f[jk]);
341 if (((fi <= xf) && (fj >= xf)) || ((fi >= xf) && (fj <= xf)))
342 {
343 if ((float) fabs (fi - fj) <= 0.1e-10)
344 {
345 rmoveto (rp[ik][0], rp[ik][1]);
346 rlineto (rp[jk][0], rp[jk][1]);
347 }
348 else
349 {
350 xlam = (fi - xf) / (fi - fj);
351 im = im + 1;
352 qp[0][im] = rp[ik][0] * (1.0F - xlam) + rp[jk][0] * xlam;
353 qp[1][im] = rp[ik][1] * (1.0F - xlam) + rp[jk][1] * xlam;
354 }
355 }
356 }
357 if (im >= 2)
358 {
359 rmoveto (qp[0][1], qp[1][1]);
360 rlineto (qp[0][2], qp[1][2]);
361 }
362 }
363 }
364 xfmin = xfm;
365 xfmax = fm;
366
367 contour (ng, 11);
368 rattente (waitm, xfmin, xfmax);
369}