1 /* Copyright (C) 1992-1998 The Geometry Center
2  * Copyright (C) 1998-2000 Stuart Levy, Tamara Munzner, Mark Phillips
3  *
4  * This file is part of Geomview.
5  *
6  * Geomview is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License as published
8  * by the Free Software Foundation; either version 2, or (at your option)
9  * any later version.
10  *
11  * Geomview is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with Geomview; see the file COPYING.  If not, write
18  * to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,
19  * USA, or visit http://www.gnu.org.
20  */
21 
22 #if HAVE_CONFIG_H
23 # include "config.h"
24 #endif
25 
26 #if 0
27 static char copyright[] = "Copyright (C) 1992-1998 The Geometry Center\n\
28 Copyright (C) 1998-2000 Stuart Levy, Tamara Munzner, Mark Phillips";
29 #endif
30 
31 
32 /* Authors: Charlie Gunn, Stuart Levy, Tamara Munzner, Mark Phillips */
33 
34 #include "meshP.h"
35 
36 Mesh *
MeshDice(m,proc)37 MeshDice(m, proc)
38     Mesh           *m;
39     int             (*proc) ();
40 {
41 	int             u, v;
42 	int             nu, nv;
43 	float           umin, umax, vmin, vmax;
44 	float           fu, fv;
45 	Point3          *n;
46 	HPoint3		*p;
47 
48 	if (m && proc)
49 	{
50 		umin = m->umin;
51 		umax = m->umax;
52 		vmin = m->vmin;
53 		vmax = m->vmax;
54 		nu = m->nu;
55 		nv = m->nv;
56 		p = m->p;
57 		n = m->n;
58 		for (v = 0; v < nv; v++)
59 		{
60 			for (u = 0; u < nu; u++)
61 			{
62 				fu = umin + ((umax - umin) * u) / (nu - 1);
63 				fv = vmin + ((vmax - vmin) * v) / (nv - 1);
64 				(*proc) (fu, fv, p, n);
65 				if (n)
66 					n++;
67 				p++;
68 			}
69 		}
70 	}
71 	return m;
72 }
73