diff --git a/Adapt/Adapt.cpp b/Adapt/Adapt.cpp deleted file mode 100644 index bf7224fec9d6783a1a32fc2fe662b05113e57f7c..0000000000000000000000000000000000000000 --- a/Adapt/Adapt.cpp +++ /dev/null @@ -1,191 +0,0 @@ -// $Id: Adapt.cpp,v 1.7 2001-04-26 17:58:00 remacle Exp $ - -#include "Gmsh.h" -#include "Adapt.h" -#include "nrutil.h" - -#define TOL 1.e-08 -#define MAXDEG 999 - -static int NN ; -static double MINH , *ERR , *HH , *PP , E0, DIM ; - -/* ------------------------------------------------------------------------ */ -/* f XXX */ -/* ------------------------------------------------------------------------ */ - -/* h-type version 1 : minimize the number of elements while keeping a - given global error */ - -double fH1 (double l){ - int i; - double val1 = 0.0, val2 = 0.0; - - for(i = 1 ; i <= NN ; i++){ - val1 += pow(2.*l*DSQR(ERR[i])*PP[i]/DIM, DIM/(2.*PP[i]+DIM)); - val2 += DSQR(ERR[i]) * pow(2.*l*DSQR(ERR[i])*PP[i]/DIM, -2.*PP[i]/(2.*PP[i]+DIM)); - } - - return( -(val1 + l * (val2 - DSQR(E0))) ); -} - -/* h-type version 2 : minimize the error while keeping a given number - of elements */ - -double fH2 (double l){ - int i; - double val1 = 0.0, val2 = 0.0, qi; - - for(i = 1 ; i <= NN ; i++){ - qi = pow(DIM*l/(2.*PP[i]*DSQR(ERR[i])), -DIM/(DIM+2.*PP[i])); - val1 += DSQR(ERR[i]) * pow(qi, -2.*PP[i]/DIM); - val2 += qi; - } - - return( -(val1 + l * (val2 - E0)) ); -} - -/* p-type : minimize error by modifying the interpolation order vector */ - -double fP1 (double l){ - int i; - double val1 = 0.0, val2 = 0.0, qi, e; - - for(i = 1 ; i <= NN ; i++){ - e = ERR[i]; - if(e == 0.0) e=1.e-12; - qi = - log(2.*l*log(HH[i]/MINH)*DSQR(e)) / log(HH[i]/MINH); - val1 -= 0.5 * qi; - val2 += pow(HH[i]/MINH, qi) * DSQR(e); - } - - return( -(val1 + l * (val2 - DSQR(E0))) ); -} - - -/* ------------------------------------------------------------------------ */ -/* A d a p t */ -/* ------------------------------------------------------------------------ */ - -double min1d (int method, double (*funct)(double), double *xmin){ - double xx, fx, fb, fa, bx, ax; - double brent(double ax, double bx, double cx, - double (*f)(double), double tol, double *xmin); - void mnbrak(double *ax, double *bx, double *cx, double *fa, double *fb, - double *fc, double (*func)(double)); - - switch(method){ - case ADAPT_H1: - case ADAPT_P1: ax=1.e-12; xx=1.e2; break; - default: ax=1.e-15; xx=1.e-12; break; - } - mnbrak(&ax,&xx,&bx,&fa,&fx,&fb,funct); - - return( brent(ax,xx,bx,funct,TOL,xmin) ); -} - -/* Adapt return the constraint (N0 ou e0) for the optimzed problem */ - -double AdaptMesh (int N, /* Number of elements */ - int method, /* ADAPT_H1, ADAPT_H2, ADAPT_P1 or ADAPT_P2 */ - int dim, /* 2 or 3 */ - double *err, /* elementary errors */ - double *h, /* elementary mesh sizes */ - double *p, /* elementary exponents */ - double e0 /* prescribed error or number of elements */){ - int i; - double contr=0.0, pivrai, lambda, minf, qi, ri, pi, obj, obj2, minri, maxri; - double errmin, errmax; - - h[N+1] = 1.0; - p[N+1] = 1.0; - - NN = N; - ERR = err; - HH = h; - PP = p; - E0 = e0; - DIM = (double)dim; - - for(i = 1 ; i <= N ; i++){ - if(i == 1) - errmin = errmax = err[i]; - else{ - errmin = DMIN(errmin, err[i]); - errmax = DMAX(errmax, err[i]); - } - } - - switch (method) { - - case ADAPT_H1 : - minf = min1d (method, fH1, &lambda); - obj = 0.0; - for(i = 1 ; i <= N ; i++){ - qi = pow(2.*lambda*DSQR(err[i])*p[i]/DIM, DIM/(2.*p[i]+DIM)); - ri = pow(qi,1./DIM); - if(i==1) minri = maxri = ri; - if(err[i] == 0.0) ri = .5; - minri = DMIN(minri, ri); - maxri = DMAX(maxri, ri); - obj += DSQR(err[i]) * pow(ri, -2.*p[i]) ; - h[i] = sqrt(2.) * h[i]/ri; - p[i] = ri; - } - contr = fabs(minf); - - printf("H-Refinement 1, Error %g=>%g, Objective %g, Reduction Factor %g->%g", - e0, sqrt(obj), -minf, minri, maxri); - break; - - case ADAPT_H2 : - minf = min1d (method, fH2, &lambda); - obj = 0.0; - for(i = 1 ; i <= N ; i++){ - qi = pow((DIM*lambda)/(2.*DSQR(err[i])*p[i]), -DIM/(DIM+2.*p[i])); - ri = pow(qi, 1./DIM); - if(i == 1) minri = maxri = ri; - minri = DMIN(minri, ri); - maxri = DMAX(maxri, ri); - obj += pow(ri,DIM) ; - h[i] = h[i]/ri; - p[i] = p[i]; - } - contr = sqrt(fabs(minf)); - - printf( "H-Refinement 2, Elements %g=>%g, Objective %g, Reduction Factor %g->%g", - e0, obj, 100. * sqrt(fabs(minf)), minri, maxri); - break; - - case ADAPT_P1 : - MINH = h[1]; - for(i = 1 ; i <= N ; i++) MINH =DMIN(h[i], MINH); - MINH /= 2.; - - minf = min1d (method, fP1, &lambda); - obj = obj2 = 0.0; - for(i = 1 ; i <= N ; i++){ - qi = -log(2.*lambda*DSQR(err[i])*log(h[i]/MINH)) / log(h[i]/MINH); - pi = p[i] - .5 * qi; - pivrai = DMIN(DMAX(1., (double)(int)(pi+.99)), MAXDEG); - obj2 += pow(h[i]/MINH, 2.*(p[i]-pivrai)) * DSQR(err[i]); - obj += DSQR(err[i]) * pow(h[i]/MINH, qi); - h[i] = h[i]; - p[i] = pi; - } - contr = fabs(minf); - - printf("P-Refinement, Error %g=%g=>%g, Objective %g", - e0, sqrt(obj), sqrt(obj2), minf); - break; - - case ADAPT_P2 : - minf = min1d (method, fH1, &lambda); - break; - - default : - printf("Unknown Adaption Method"); - } - - return(contr) ; -} diff --git a/Adapt/Adapt.h b/Adapt/Adapt.h deleted file mode 100644 index d4885075d44088c640e7d4d589ed26e919aaa702..0000000000000000000000000000000000000000 --- a/Adapt/Adapt.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef _ADAPT_H_ -#define _ADAPT_H_ - -#define ADAPT_P1 1 -#define ADAPT_P2 2 -#define ADAPT_H1 3 -#define ADAPT_H2 4 - -double AdaptMesh (int N, /* Number of elements */ - int method, /* ADAPT_H1, ADAPT_H2, ADAPT_P1 or ADAPT_P2 */ - int dim, /* 2 or 3 */ - double *err, /* elementary errors */ - double *h, /* elementary mesh sizes */ - double *p, /* elementary exponents */ - double e0 /* prescribed error or number of elements */); - -#endif diff --git a/Adapt/Makefile b/Adapt/Makefile deleted file mode 100644 index 122567ca5bb993b1ce0d861c219bf9151830d5f2..0000000000000000000000000000000000000000 --- a/Adapt/Makefile +++ /dev/null @@ -1,74 +0,0 @@ -# $Id: Makefile,v 1.21 2001-08-11 23:32:15 geuzaine Exp $ -# -# Makefile for "libAdapt.a" -# - -.IGNORE: - -CC = c++ -AR = ar ruvs -RM = rm -RANLIB = ranlib - -LIB = ../lib/libAdapt.a -INCLUDE = -I../Common -I../DataStr - -C_FLAGS = -g -Wall -OS_FLAGS = -VERSION_FLAGS = - -RMFLAGS = -f -CFLAGS = $(C_FLAGS) $(OS_FLAGS) $(VERSION_FLAGS) $(INCLUDE) - -SRC = Adapt.cpp \ - mnbrak.cpp \ - brent.cpp \ - nrutil.cpp \ - dsvdcmp.cpp \ - newt.cpp \ - fmin.cpp \ - fdjac.cpp \ - lnsrch.cpp \ - lubksb.cpp \ - ludcmp.cpp - -OBJ = $(SRC:.cpp=.o) - -.SUFFIXES: .o .cpp - -$(LIB): $(OBJ) - $(AR) $(LIB) $(OBJ) - $(RANLIB) $(LIB) - -.cpp.o: - $(CC) $(CFLAGS) -c $< - -clean: - $(RM) $(RMFLAGS) *.o - -lint: - $(LINT) $(CFLAGS) $(SRC) - -depend: - (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ - $(CC) -MM $(CFLAGS) ${SRC} \ - ) >Makefile.new - cp Makefile Makefile.bak - cp Makefile.new Makefile - $(RM) $(RMFLAGS) Makefile.new - -# DO NOT DELETE THIS LINE -Adapt.o: Adapt.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h Adapt.h nrutil.h \ - ../Common/Numeric.h -mnbrak.o: mnbrak.cpp nrutil.h ../Common/Numeric.h -brent.o: brent.cpp nrutil.h ../Common/Numeric.h -nrutil.o: nrutil.cpp -dsvdcmp.o: dsvdcmp.cpp nrutil.h ../Common/Numeric.h -newt.o: newt.cpp nrutil.h ../Common/Numeric.h -fmin.o: fmin.cpp nrutil.h ../Common/Numeric.h -fdjac.o: fdjac.cpp nrutil.h ../Common/Numeric.h -lnsrch.o: lnsrch.cpp nrutil.h ../Common/Numeric.h -lubksb.o: lubksb.cpp -ludcmp.o: ludcmp.cpp nrutil.h ../Common/Numeric.h diff --git a/Adapt/brent.cpp b/Adapt/brent.cpp deleted file mode 100644 index 706d32781079a58085f47aa224e23000fe1eae3d..0000000000000000000000000000000000000000 --- a/Adapt/brent.cpp +++ /dev/null @@ -1,99 +0,0 @@ -// $Id: brent.cpp,v 1.4 2001-01-08 08:05:39 geuzaine Exp $ - - -#include <math.h> -#define NRANSI -#include "nrutil.h" -#define ITMAX 100 -#define CGOLD 0.3819660 -#define ZEPS 1.0e-10 -#define SHFT(a,b,c,d) (a)=(b);(b)=(c);(c)=(d); - -double -brent (double ax, double bx, double cx, double (*f) (double), double tol, - double *xmin) -{ - int iter; - double a, b, d=0.0, etemp, fu, fv, fw, fx, p, q, r, tol1, tol2, u, v, w, - x, xm; - double e = 0.0; - - a = (ax < cx ? ax : cx); - b = (ax > cx ? ax : cx); - x = w = v = bx; - fw = fv = fx = (*f) (x); - for (iter = 1; iter <= ITMAX; iter++) - { - xm = 0.5 * (a + b); - tol2 = 2.0 * (tol1 = tol * fabs (x) + ZEPS); - if (fabs (x - xm) <= (tol2 - 0.5 * (b - a))) - { - *xmin = x; - return fx; - } - if (fabs (e) > tol1) - { - r = (x - w) * (fx - fv); - q = (x - v) * (fx - fw); - p = (x - v) * q - (x - w) * r; - q = 2.0 * (q - r); - if (q > 0.0) - p = -p; - q = fabs (q); - etemp = e; - e = d; - if (fabs (p) >= fabs (0.5 * q * etemp) || p <= q * (a - x) || p >= q * (b - x)) - d = CGOLD * (e = (x >= xm ? a - x : b - x)); - else - { - d = p / q; - u = x + d; - if (u - a < tol2 || b - u < tol2) - d = SIGN (tol1, xm - x); - } - } - else - { - d = CGOLD * (e = (x >= xm ? a - x : b - x)); - } - u = (fabs (d) >= tol1 ? x + d : x + SIGN (tol1, d)); - fu = (*f) (u); - if (fu <= fx) - { - if (u >= x) - a = x; - else - b = x; - SHFT (v, w, x, u) - SHFT (fv, fw, fx, fu) - } - else - { - if (u < x) - a = u; - else - b = u; - if (fu <= fw || w == x) - { - v = w; - w = u; - fv = fw; - fw = fu; - } - else if (fu <= fv || v == x || v == w) - { - v = u; - fv = fu; - } - } - } - nrerror ("Too many iterations in brent"); - *xmin = x; - return fx; -} -#undef ITMAX -#undef CGOLD -#undef ZEPS -#undef SHFT -#undef NRANSI -/* (C) Copr. 1986-92 Numerical Recipes Software J!0. */ diff --git a/Adapt/dsvdcmp.cpp b/Adapt/dsvdcmp.cpp deleted file mode 100644 index d143484240e1132eef4259f6a4a8360b8bd018d9..0000000000000000000000000000000000000000 --- a/Adapt/dsvdcmp.cpp +++ /dev/null @@ -1,240 +0,0 @@ -// $Id: dsvdcmp.cpp,v 1.4 2001-01-08 08:05:39 geuzaine Exp $ -#include <math.h> - -#include "nrutil.h" - -double dpythag(double a, double b) -{ - double absa,absb; - absa=fabs(a); - absb=fabs(b); - if (absa > absb) return absa*sqrt(1.0+SQR(absb/absa)); - else return (absb == 0.0 ? 0.0 : absb*sqrt(1.0+SQR(absa/absb))); -} - -void dsvdcmp(double **a, int m, int n, double w[], double **v) -{ - double dpythag(double a, double b); - int flag,i,its,j,jj,k,l,nm; - double anorm,c,f,g,h,s,scale,x,y,z,*rv1; - - rv1=dvector(1,n); - g=scale=anorm=0.0; - for (i=1;i<=n;i++) { - l=i+1; - rv1[i]=scale*g; - g=s=scale=0.0; - if (i <= m) { - for (k=i;k<=m;k++) scale += fabs(a[k][i]); - if (scale) { - for (k=i;k<=m;k++) { - a[k][i] /= scale; - s += a[k][i]*a[k][i]; - } - f=a[i][i]; - g = -SIGN(sqrt(s),f); - h=f*g-s; - a[i][i]=f-g; - for (j=l;j<=n;j++) { - for (s=0.0,k=i;k<=m;k++) s += a[k][i]*a[k][j]; - f=s/h; - for (k=i;k<=m;k++) a[k][j] += f*a[k][i]; - } - for (k=i;k<=m;k++) a[k][i] *= scale; - } - } - w[i]=scale *g; - g=s=scale=0.0; - if (i <= m && i != n) { - for (k=l;k<=n;k++) scale += fabs(a[i][k]); - if (scale) { - for (k=l;k<=n;k++) { - a[i][k] /= scale; - s += a[i][k]*a[i][k]; - } - f=a[i][l]; - g = -SIGN(sqrt(s),f); - h=f*g-s; - a[i][l]=f-g; - for (k=l;k<=n;k++) rv1[k]=a[i][k]/h; - for (j=l;j<=m;j++) { - for (s=0.0,k=l;k<=n;k++) s += a[j][k]*a[i][k]; - for (k=l;k<=n;k++) a[j][k] += s*rv1[k]; - } - for (k=l;k<=n;k++) a[i][k] *= scale; - } - } - anorm=DMAX(anorm,(fabs(w[i])+fabs(rv1[i]))); - } - for (i=n;i>=1;i--) { - if (i < n) { - if (g) { - for (j=l;j<=n;j++) v[j][i]=(a[i][j]/a[i][l])/g; - for (j=l;j<=n;j++) { - for (s=0.0,k=l;k<=n;k++) s += a[i][k]*v[k][j]; - for (k=l;k<=n;k++) v[k][j] += s*v[k][i]; - } - } - for (j=l;j<=n;j++) v[i][j]=v[j][i]=0.0; - } - v[i][i]=1.0; - g=rv1[i]; - l=i; - } - for (i=IMIN(m,n);i>=1;i--) { - l=i+1; - g=w[i]; - for (j=l;j<=n;j++) a[i][j]=0.0; - if (g) { - g=1.0/g; - for (j=l;j<=n;j++) { - for (s=0.0,k=l;k<=m;k++) s += a[k][i]*a[k][j]; - f=(s/a[i][i])*g; - for (k=i;k<=m;k++) a[k][j] += f*a[k][i]; - } - for (j=i;j<=m;j++) a[j][i] *= g; - } else for (j=i;j<=m;j++) a[j][i]=0.0; - ++a[i][i]; - } - for (k=n;k>=1;k--) { - for (its=1;its<=30;its++) { - flag=1; - for (l=k;l>=1;l--) { - nm=l-1; - if ((double)(fabs(rv1[l])+anorm) == anorm) { - flag=0; - break; - } - if ((double)(fabs(w[nm])+anorm) == anorm) break; - } - if (flag) { - c=0.0; - s=1.0; - for (i=l;i<=k;i++) { - f=s*rv1[i]; - rv1[i]=c*rv1[i]; - if ((double)(fabs(f)+anorm) == anorm) break; - g=w[i]; - h=dpythag(f,g); - w[i]=h; - h=1.0/h; - c=g*h; - s = -f*h; - for (j=1;j<=m;j++) { - y=a[j][nm]; - z=a[j][i]; - a[j][nm]=y*c+z*s; - a[j][i]=z*c-y*s; - } - } - } - z=w[k]; - if (l == k) { - if (z < 0.0) { - w[k] = -z; - for (j=1;j<=n;j++) v[j][k] = -v[j][k]; - } - break; - } - if (its == 30) nrerror("no convergence in 30 dsvdcmp iterations"); - x=w[l]; - nm=k-1; - y=w[nm]; - g=rv1[nm]; - h=rv1[k]; - f=((y-z)*(y+z)+(g-h)*(g+h))/(2.0*h*y); - g=dpythag(f,1.0); - f=((x-z)*(x+z)+h*((y/(f+SIGN(g,f)))-h))/x; - c=s=1.0; - for (j=l;j<=nm;j++) { - i=j+1; - g=rv1[i]; - y=w[i]; - h=s*g; - g=c*g; - z=dpythag(f,h); - rv1[j]=z; - c=f/z; - s=h/z; - f=x*c+g*s; - g = g*c-x*s; - h=y*s; - y *= c; - for (jj=1;jj<=n;jj++) { - x=v[jj][j]; - z=v[jj][i]; - v[jj][j]=x*c+z*s; - v[jj][i]=z*c-x*s; - } - z=dpythag(f,h); - w[j]=z; - if (z) { - z=1.0/z; - c=f*z; - s=h*z; - } - f=c*g+s*y; - x=c*y-s*g; - for (jj=1;jj<=m;jj++) { - y=a[jj][j]; - z=a[jj][i]; - a[jj][j]=y*c+z*s; - a[jj][i]=z*c-y*s; - } - } - rv1[l]=0.0; - rv1[k]=f; - w[k]=x; - } - } - free_dvector(rv1,1,n); -} - - -/* cf. Numerical Recipes in C, p. 62 */ - -#define PREC 1.e-16 - -void invert_singular_matrix(double **M, int n, double **I){ - double **V, **T, *W; - int i, j, k; - - V = dmatrix(1,n,1,n); - T = dmatrix(1,n,1,n); - W = dvector(1,n); - - dsvdcmp(M, n, n, W, V); - - for(i=1 ; i<=n ; i++){ - for(j=1 ; j<=n ; j++){ - I[i][j] = 0.0 ; - T[i][j] = 0.0 ; - } - } - - for(i=1 ; i<=n ; i++){ - for(j=1 ; j<=n ; j++){ - if(fabs(W[i]) > PREC){ - T[i][j] += M[j][i] / W[i] ; - } - /* - else{ - T[i][j] += 0.0 ; - } - */ - } - } - for(i=1 ; i<=n ; i++){ - for(j=1 ; j<=n ; j++){ - for(k=1 ; k<=n ; k++){ - I[i][j] += V[i][k] * T[k][j] ; - } - } - } - - free_dmatrix(V,1,n,1,n); - free_dmatrix(T,1,n,1,n); - free_dvector(W,1,n); -} - -#undef PREC diff --git a/Adapt/fdjac.cpp b/Adapt/fdjac.cpp deleted file mode 100644 index 7a02e764987ec196c4b3f5426701a7e874c56571..0000000000000000000000000000000000000000 --- a/Adapt/fdjac.cpp +++ /dev/null @@ -1,31 +0,0 @@ -// $Id: fdjac.cpp,v 1.4 2001-01-08 08:05:39 geuzaine Exp $ -#include <math.h> -#define NRANSI -#include "nrutil.h" -#define EPS 1.0e-4 - -void -fdjac (int n, float x[], float fvec[], float **df, - void (*vecfunc) (int, float[], float[])) -{ - int i, j; - float h, temp, *f; - - f = vector (1, n); - for (j = 1; j <= n; j++) - { - temp = x[j]; - h = EPS * fabs (temp); - if (h == 0.0) - h = EPS; - x[j] = temp + h; - h = x[j] - temp; - (*vecfunc) (n, x, f); - x[j] = temp; - for (i = 1; i <= n; i++) - df[i][j] = (f[i] - fvec[i]) / h; - } - free_vector (f, 1, n); -} -#undef EPS -#undef NRANSI diff --git a/Adapt/fmin.cpp b/Adapt/fmin.cpp deleted file mode 100644 index a81d482a0829034d223bc56a7702730c087c2e4e..0000000000000000000000000000000000000000 --- a/Adapt/fmin.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// $Id: fmin.cpp,v 1.3 2001-01-08 08:05:40 geuzaine Exp $ -#define NRANSI -#include "nrutil.h" - -extern int nn; -extern float *fvec; -extern void (*nrfuncv) (int n, float v[], float f[]); - -float -fmin (float x[]) -{ - int i; - float sum; - - (*nrfuncv) (nn, x, fvec); - for (sum = 0.0, i = 1; i <= nn; i++) - sum += SQR (fvec[i]); - return 0.5 * sum; -} -#undef NRANSI diff --git a/Adapt/lnsrch.cpp b/Adapt/lnsrch.cpp deleted file mode 100644 index e45de2cdf0023706491657e6c9ffe64312815c43..0000000000000000000000000000000000000000 --- a/Adapt/lnsrch.cpp +++ /dev/null @@ -1,80 +0,0 @@ -// $Id: lnsrch.cpp,v 1.4 2001-01-08 08:05:40 geuzaine Exp $ -#include <math.h> -#define NRANSI -#include "nrutil.h" -#define ALF 1.0e-4 -#define TOLX 1.0e-7 - -void -lnsrch (int n, float xold[], float fold, float g[], float p[], float x[], - float *f, float stpmax, int *check, float (*func) (float[])) -{ - int i; - float a, alam, alam2, alamin, b, disc, f2, fold2, rhs1, rhs2, slope, - sum, temp, test, tmplam; - - *check = 0; - for (sum = 0.0, i = 1; i <= n; i++) - sum += p[i] * p[i]; - sum = sqrt (sum); - if (sum > stpmax) - for (i = 1; i <= n; i++) - p[i] *= stpmax / sum; - for (slope = 0.0, i = 1; i <= n; i++) - slope += g[i] * p[i]; - test = 0.0; - for (i = 1; i <= n; i++) - { - temp = fabs (p[i]) / FMAX (fabs (xold[i]), 1.0); - if (temp > test) - test = temp; - } - alamin = TOLX / test; - alam = 1.0; - for (;;) - { - for (i = 1; i <= n; i++) - x[i] = xold[i] + alam * p[i]; - *f = (*func) (x); - if (alam < alamin) - { - for (i = 1; i <= n; i++) - x[i] = xold[i]; - *check = 1; - return; - } - else if (*f <= fold + ALF * alam * slope) - return; - else - { - if (alam == 1.0) - tmplam = -slope / (2.0 * (*f - fold - slope)); - else - { - rhs1 = *f - fold - alam * slope; - rhs2 = f2 - fold2 - alam2 * slope; - a = (rhs1 / (alam * alam) - rhs2 / (alam2 * alam2)) / (alam - alam2); - b = (-alam2 * rhs1 / (alam * alam) + alam * rhs2 / (alam2 * alam2)) / (alam - alam2); - if (a == 0.0) - tmplam = -slope / (2.0 * b); - else - { - disc = b * b - 3.0 * a * slope; - if (disc < 0.0) - nrerror ("Roundoff problem in lnsrch."); - else - tmplam = (-b + sqrt (disc)) / (3.0 * a); - } - if (tmplam > 0.5 * alam) - tmplam = 0.5 * alam; - } - } - alam2 = alam; - f2 = *f; - fold2 = fold; - alam = FMAX (tmplam, 0.1 * alam); - } -} -#undef ALF -#undef TOLX -#undef NRANSI diff --git a/Adapt/lubksb.cpp b/Adapt/lubksb.cpp deleted file mode 100644 index 65d5dce895e4caf582bb38f675550fc280d7be60..0000000000000000000000000000000000000000 --- a/Adapt/lubksb.cpp +++ /dev/null @@ -1,27 +0,0 @@ -// $Id: lubksb.cpp,v 1.4 2001-01-08 08:05:40 geuzaine Exp $ -void -lubksb (float **a, int n, int *indx, float b[]) -{ - int i, ii = 0, ip, j; - float sum; - - for (i = 1; i <= n; i++) - { - ip = indx[i]; - sum = b[ip]; - b[ip] = b[i]; - if (ii) - for (j = ii; j <= i - 1; j++) - sum -= a[i][j] * b[j]; - else if (sum) - ii = i; - b[i] = sum; - } - for (i = n; i >= 1; i--) - { - sum = b[i]; - for (j = i + 1; j <= n; j++) - sum -= a[i][j] * b[j]; - b[i] = sum / a[i][i]; - } -} diff --git a/Adapt/ludcmp.cpp b/Adapt/ludcmp.cpp deleted file mode 100644 index c8a00772375dbc2fe1dee875351e367a8851b694..0000000000000000000000000000000000000000 --- a/Adapt/ludcmp.cpp +++ /dev/null @@ -1,72 +0,0 @@ -// $Id: ludcmp.cpp,v 1.4 2001-01-08 08:05:40 geuzaine Exp $ -#include <math.h> -#define NRANSI -#include "nrutil.h" -#define TINY 1.0e-20; - -void -ludcmp (float **a, int n, int *indx, float *d) -{ - int i, imax, j, k; - float big, dum, sum, temp; - float *vv; - - vv = vector (1, n); - *d = 1.0; - for (i = 1; i <= n; i++) - { - big = 0.0; - for (j = 1; j <= n; j++) - if ((temp = fabs (a[i][j])) > big) - big = temp; - if (big == 0.0) - nrerror ("Singular matrix in routine ludcmp"); - vv[i] = 1.0 / big; - } - for (j = 1; j <= n; j++) - { - for (i = 1; i < j; i++) - { - sum = a[i][j]; - for (k = 1; k < i; k++) - sum -= a[i][k] * a[k][j]; - a[i][j] = sum; - } - big = 0.0; - for (i = j; i <= n; i++) - { - sum = a[i][j]; - for (k = 1; k < j; k++) - sum -= a[i][k] * a[k][j]; - a[i][j] = sum; - if ((dum = vv[i] * fabs (sum)) >= big) - { - big = dum; - imax = i; - } - } - if (j != imax) - { - for (k = 1; k <= n; k++) - { - dum = a[imax][k]; - a[imax][k] = a[j][k]; - a[j][k] = dum; - } - *d = -(*d); - vv[imax] = vv[j]; - } - indx[j] = imax; - if (a[j][j] == 0.0) - a[j][j] = TINY; - if (j != n) - { - dum = 1.0 / (a[j][j]); - for (i = j + 1; i <= n; i++) - a[i][j] *= dum; - } - } - free_vector (vv, 1, n); -} -#undef TINY -#undef NRANSI diff --git a/Adapt/mnbrak.cpp b/Adapt/mnbrak.cpp deleted file mode 100644 index 5c3edaf06310c8aa45cb06b0b449f24d1049e0d0..0000000000000000000000000000000000000000 --- a/Adapt/mnbrak.cpp +++ /dev/null @@ -1,79 +0,0 @@ -// $Id: mnbrak.cpp,v 1.4 2001-01-08 08:05:40 geuzaine Exp $ -#include <math.h> -#define NRANSI -#include "nrutil.h" -#define GOLD 1.618034 -#define GLIMIT 100.0 -#define TINY 1.0e-20 -#define SHFT(a,b,c,d) (a)=(b);(b)=(c);(c)=(d); - -void -mnbrak (double *ax, double *bx, double *cx, double *fa, double *fb, double *fc, - double (*func) (double)) -{ - double ulim, u, r, q, fu, dum; - - *fa = (*func) (*ax); - *fb = (*func) (*bx); - if (*fb > *fa) - { - SHFT (dum, *ax, *bx, dum) - SHFT (dum, *fb, *fa, dum) - } - *cx = (*bx) + GOLD * (*bx - *ax); - *fc = (*func) (*cx); - while (*fb > *fc) - { - r = (*bx - *ax) * (*fb - *fc); - q = (*bx - *cx) * (*fb - *fa); - u = (*bx) - ((*bx - *cx) * q - (*bx - *ax) * r) / - (2.0 * SIGN (FMAX (fabs (q - r), TINY), q - r)); - ulim = (*bx) + GLIMIT * (*cx - *bx); - if ((*bx - u) * (u - *cx) > 0.0) - { - fu = (*func) (u); - if (fu < *fc) - { - *ax = (*bx); - *bx = u; - *fa = (*fb); - *fb = fu; - return; - } - else if (fu > *fb) - { - *cx = u; - *fc = fu; - return; - } - u = (*cx) + GOLD * (*cx - *bx); - fu = (*func) (u); - } - else if ((*cx - u) * (u - ulim) > 0.0) - { - fu = (*func) (u); - if (fu < *fc) - { - SHFT (*bx, *cx, u, *cx + GOLD * (*cx - *bx)) - SHFT (*fb, *fc, fu, (*func) (u)) - } - } - else if ((u - ulim) * (ulim - *cx) >= 0.0) - { - u = ulim; - fu = (*func) (u); - } - else - { - u = (*cx) + GOLD * (*cx - *bx); - fu = (*func) (u); - } - SHFT (*ax, *bx, *cx, u) - SHFT (*fa, *fb, *fc, fu) - } -} -#undef GOLD -#undef GLIMIT -#undef TINY -#undef SHFT -#undef NRANSI diff --git a/Adapt/newt.cpp b/Adapt/newt.cpp deleted file mode 100644 index f01cb9aed6cc40f82b23287dc7c3a19b63d2a5a3..0000000000000000000000000000000000000000 --- a/Adapt/newt.cpp +++ /dev/null @@ -1,107 +0,0 @@ -// $Id: newt.cpp,v 1.4 2001-01-08 08:05:40 geuzaine Exp $ -#include <math.h> -#define NRANSI -#include "nrutil.h" -#define MAXITS 200 -#define TOLF 1.0e-4 -#define TOLMIN 1.0e-6 -#define TOLX 1.0e-7 -#define STPMX 100.0 - -int nn; -float *fvec; -void (*nrfuncv) (int n, float v[], float f[]); -#define FREERETURN {free_vector(fvec,1,n);free_vector(xold,1,n);\ - free_vector(p,1,n);free_vector(g,1,n);free_matrix(fjac,1,n,1,n);\ - free_ivector(indx,1,n);return;} - -void -newt (float x[], int n, int *check, - void (*vecfunc) (int, float[], float[])) -{ - void fdjac (int n, float x[], float fvec[], float **df, - void (*vecfunc) (int, float[], float[])); - float fmin (float x[]); - void lnsrch (int n, float xold[], float fold, float g[], float p[], float x[], - float *f, float stpmax, int *check, float (*func) (float[])); - void lubksb (float **a, int n, int *indx, float b[]); - void ludcmp (float **a, int n, int *indx, float *d); - int i, its, j, *indx; - float d, den, f, fold, stpmax, sum, temp, test, **fjac, *g, *p, *xold; - - indx = ivector (1, n); - fjac = matrix (1, n, 1, n); - g = vector (1, n); - p = vector (1, n); - xold = vector (1, n); - fvec = vector (1, n); - nn = n; - nrfuncv = vecfunc; - f = fmin (x); - test = 0.0; - for (i = 1; i <= n; i++) - if (fabs (fvec[i]) > test) - test = fabs (fvec[i]); - if (test < 0.01 * TOLF) - FREERETURN - for (sum = 0.0, i = 1; i <= n; i++) - sum += SQR (x[i]); - stpmax = STPMX * FMAX (sqrt (sum), (float) n); - for (its = 1; its <= MAXITS; its++) - { - fdjac (n, x, fvec, fjac, vecfunc); - for (i = 1; i <= n; i++) - { - for (sum = 0.0, j = 1; j <= n; j++) - sum += fjac[j][i] * fvec[j]; - g[i] = sum; - } - for (i = 1; i <= n; i++) - xold[i] = x[i]; - fold = f; - for (i = 1; i <= n; i++) - p[i] = -fvec[i]; - ludcmp (fjac, n, indx, &d); - lubksb (fjac, n, indx, p); - lnsrch (n, xold, fold, g, p, x, &f, stpmax, check, fmin); - test = 0.0; - for (i = 1; i <= n; i++) - if (fabs (fvec[i]) > test) - test = fabs (fvec[i]); - if (test < TOLF) - { - *check = 0; - FREERETURN - } - if (*check) - { - test = 0.0; - den = FMAX (f, 0.5 * n); - for (i = 1; i <= n; i++) - { - temp = fabs (g[i]) * FMAX (fabs (x[i]), 1.0) / den; - if (temp > test) - test = temp; - } - *check = (test < TOLMIN ? 1 : 0); - FREERETURN - } - test = 0.0; - for (i = 1; i <= n; i++) - { - temp = (fabs (x[i] - xold[i])) / FMAX (fabs (x[i]), 1.0); - if (temp > test) - test = temp; - } - if (test < TOLX) - FREERETURN - } - nrerror ("MAXITS exceeded in newt"); - } -#undef MAXITS -#undef TOLF -#undef TOLMIN -#undef TOLX -#undef STPMX -#undef FREERETURN -#undef NRANSI diff --git a/Adapt/nrutil.cpp b/Adapt/nrutil.cpp deleted file mode 100644 index c4140f61126fbd2af0ee1484eb64e5c06921009f..0000000000000000000000000000000000000000 --- a/Adapt/nrutil.cpp +++ /dev/null @@ -1,291 +0,0 @@ -// $Id: nrutil.cpp,v 1.4 2001-01-08 08:05:40 geuzaine Exp $ -#include <stdio.h> -#include <stddef.h> -#include <stdlib.h> -#include <malloc.h> - - -#define NR_END 1 -#define FREE_ARG char* - -void nrerror(char error_text[]) -/* Numerical Recipes standard error handler */ -{ - fprintf(stderr,"Numerical Recipes run-time error...\n"); - fprintf(stderr,"%s\n",error_text); - fprintf(stderr,"...now exiting to system...\n"); - exit(1); -} - -float *vector(long nl, long nh) -/* allocate a float vector with subscript range v[nl..nh] */ -{ - float *v; - - v=(float *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(float))); - if (!v) nrerror("allocation failure in vector()"); - return v-nl+NR_END; -} - -int *ivector(long nl, long nh) -/* allocate an int vector with subscript range v[nl..nh] */ -{ - int *v; - - v=(int *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(int))); - if (!v) nrerror("allocation failure in ivector()"); - return v-nl+NR_END; -} - -unsigned char *cvector(long nl, long nh) -/* allocate an unsigned char vector with subscript range v[nl..nh] */ -{ - unsigned char *v; - - v=(unsigned char *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(unsigned char))); - if (!v) nrerror("allocation failure in cvector()"); - return v-nl+NR_END; -} - -unsigned long *lvector(long nl, long nh) -/* allocate an unsigned long vector with subscript range v[nl..nh] */ -{ - unsigned long *v; - - v=(unsigned long *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(long))); - if (!v) nrerror("allocation failure in lvector()"); - return v-nl+NR_END; -} - -double *dvector(long nl, long nh) -/* allocate a double vector with subscript range v[nl..nh] */ -{ - double *v; - - v=(double *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(double))); - if (!v) nrerror("allocation failure in dvector()"); - return v-nl+NR_END; -} - -float **matrix(long nrl, long nrh, long ncl, long nch) -/* allocate a float matrix with subscript range m[nrl..nrh][ncl..nch] */ -{ - long i, nrow=nrh-nrl+1,ncol=nch-ncl+1; - float **m; - - /* allocate pointers to rows */ - m=(float **) malloc((size_t)((nrow+NR_END)*sizeof(float*))); - if (!m) nrerror("allocation failure 1 in matrix()"); - m += NR_END; - m -= nrl; - - /* allocate rows and set pointers to them */ - m[nrl]=(float *) malloc((size_t)((nrow*ncol+NR_END)*sizeof(float))); - if (!m[nrl]) nrerror("allocation failure 2 in matrix()"); - m[nrl] += NR_END; - m[nrl] -= ncl; - - for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol; - - /* return pointer to array of pointers to rows */ - return m; -} - -double **dmatrix(long nrl, long nrh, long ncl, long nch) -/* allocate a double matrix with subscript range m[nrl..nrh][ncl..nch] */ -{ - long i, nrow=nrh-nrl+1,ncol=nch-ncl+1; - double **m; - - /* allocate pointers to rows */ - m=(double **) malloc((size_t)((nrow+NR_END)*sizeof(double*))); - if (!m) nrerror("allocation failure 1 in matrix()"); - m += NR_END; - m -= nrl; - - /* allocate rows and set pointers to them */ - m[nrl]=(double *) malloc((size_t)((nrow*ncol+NR_END)*sizeof(double))); - if (!m[nrl]) nrerror("allocation failure 2 in matrix()"); - m[nrl] += NR_END; - m[nrl] -= ncl; - - for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol; - - /* return pointer to array of pointers to rows */ - return m; -} - -int **imatrix(long nrl, long nrh, long ncl, long nch) -/* allocate a int matrix with subscript range m[nrl..nrh][ncl..nch] */ -{ - long i, nrow=nrh-nrl+1,ncol=nch-ncl+1; - int **m; - - /* allocate pointers to rows */ - m=(int **) malloc((size_t)((nrow+NR_END)*sizeof(int*))); - if (!m) nrerror("allocation failure 1 in matrix()"); - m += NR_END; - m -= nrl; - - - /* allocate rows and set pointers to them */ - m[nrl]=(int *) malloc((size_t)((nrow*ncol+NR_END)*sizeof(int))); - if (!m[nrl]) nrerror("allocation failure 2 in matrix()"); - m[nrl] += NR_END; - m[nrl] -= ncl; - - for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol; - - /* return pointer to array of pointers to rows */ - return m; -} - -float **submatrix(float **a, long oldrl, long oldrh, long oldcl, long oldch, - long newrl, long newcl) -/* point a submatrix [newrl..][newcl..] to a[oldrl..oldrh][oldcl..oldch] */ -{ - long i,j,nrow=oldrh-oldrl+1,ncol=oldcl-newcl; - float **m; - - /* allocate array of pointers to rows */ - m=(float **) malloc((size_t) ((nrow+NR_END)*sizeof(float*))); - if (!m) nrerror("allocation failure in submatrix()"); - m += NR_END; - m -= newrl; - - /* set pointers to rows */ - for(i=oldrl,j=newrl;i<=oldrh;i++,j++) m[j]=a[i]+ncol; - - /* return pointer to array of pointers to rows */ - return m; -} - -float **convert_matrix(float *a, long nrl, long nrh, long ncl, long nch) -/* allocate a float matrix m[nrl..nrh][ncl..nch] that points to the matrix -declared in the standard C manner as a[nrow][ncol], where nrow=nrh-nrl+1 -and ncol=nch-ncl+1. The routine should be called with the address -&a[0][0] as the first argument. */ -{ - long i,j,nrow=nrh-nrl+1,ncol=nch-ncl+1; - float **m; - - /* allocate pointers to rows */ - m=(float **) malloc((size_t) ((nrow+NR_END)*sizeof(float*))); - if (!m) nrerror("allocation failure in convert_matrix()"); - m += NR_END; - m -= nrl; - - /* set pointers to rows */ - m[nrl]=a-ncl; - for(i=1,j=nrl+1;i<nrow;i++,j++) m[j]=m[j-1]+ncol; - /* return pointer to array of pointers to rows */ - return m; -} - -float ***f3tensor(long nrl, long nrh, long ncl, long nch, long ndl, long ndh) -/* allocate a float 3tensor with range t[nrl..nrh][ncl..nch][ndl..ndh] */ -{ - long i,j,nrow=nrh-nrl+1,ncol=nch-ncl+1,ndep=ndh-ndl+1; - float ***t; - - /* allocate pointers to pointers to rows */ - t=(float ***) malloc((size_t)((nrow+NR_END)*sizeof(float**))); - if (!t) nrerror("allocation failure 1 in f3tensor()"); - t += NR_END; - t -= nrl; - - /* allocate pointers to rows and set pointers to them */ - t[nrl]=(float **) malloc((size_t)((nrow*ncol+NR_END)*sizeof(float*))); - if (!t[nrl]) nrerror("allocation failure 2 in f3tensor()"); - t[nrl] += NR_END; - t[nrl] -= ncl; - - /* allocate rows and set pointers to them */ - t[nrl][ncl]=(float *) malloc((size_t)((nrow*ncol*ndep+NR_END)*sizeof(float))); - if (!t[nrl][ncl]) nrerror("allocation failure 3 in f3tensor()"); - t[nrl][ncl] += NR_END; - t[nrl][ncl] -= ndl; - - for(j=ncl+1;j<=nch;j++) t[nrl][j]=t[nrl][j-1]+ndep; - for(i=nrl+1;i<=nrh;i++) { - t[i]=t[i-1]+ncol; - t[i][ncl]=t[i-1][ncl]+ncol*ndep; - for(j=ncl+1;j<=nch;j++) t[i][j]=t[i][j-1]+ndep; - } - - /* return pointer to array of pointers to rows */ - return t; -} - -void free_vector(float *v, long nl, long nh) -/* free a float vector allocated with vector() */ -{ - free((FREE_ARG) (v+nl-NR_END)); -} - -void free_ivector(int *v, long nl, long nh) -/* free an int vector allocated with ivector() */ -{ - free((FREE_ARG) (v+nl-NR_END)); -} - -void free_cvector(unsigned char *v, long nl, long nh) -/* free an unsigned char vector allocated with cvector() */ -{ - free((FREE_ARG) (v+nl-NR_END)); -} - -void free_lvector(unsigned long *v, long nl, long nh) -/* free an unsigned long vector allocated with lvector() */ -{ - free((FREE_ARG) (v+nl-NR_END)); -} - -void free_dvector(double *v, long nl, long nh) -/* free a double vector allocated with dvector() */ -{ - free((FREE_ARG) (v+nl-NR_END)); -} - -void free_matrix(float **m, long nrl, long nrh, long ncl, long nch) -/* free a float matrix allocated by matrix() */ -{ - free((FREE_ARG) (m[nrl]+ncl-NR_END)); - free((FREE_ARG) (m+nrl-NR_END)); -} - -void free_dmatrix(double **m, long nrl, long nrh, long ncl, long nch) -/* free a double matrix allocated by dmatrix() */ -{ - free((FREE_ARG) (m[nrl]+ncl-NR_END)); - free((FREE_ARG) (m+nrl-NR_END)); -} - -void free_imatrix(int **m, long nrl, long nrh, long ncl, long nch) -/* free an int matrix allocated by imatrix() */ -{ - free((FREE_ARG) (m[nrl]+ncl-NR_END)); - free((FREE_ARG) (m+nrl-NR_END)); -} - -void free_submatrix(float **b, long nrl, long nrh, long ncl, long nch) -/* free a submatrix allocated by submatrix() */ -{ - free((FREE_ARG) (b+nrl-NR_END)); -} - -void free_convert_matrix(float **b, long nrl, long nrh, long ncl, long nch) -/* free a matrix allocated by convert_matrix() */ -{ - free((FREE_ARG) (b+nrl-NR_END)); -} - -void free_f3tensor(float ***t, long nrl, long nrh, long ncl, long nch, - long ndl, long ndh) -/* free a float f3tensor allocated by f3tensor() */ -{ - free((FREE_ARG) (t[nrl][ncl]+ndl-NR_END)); - free((FREE_ARG) (t[nrl]+ncl-NR_END)); - free((FREE_ARG) (t+nrl-NR_END)); -} - diff --git a/Adapt/nrutil.h b/Adapt/nrutil.h deleted file mode 100644 index 191fc3528e8f13540eedf4f2cb2c706ec1262d69..0000000000000000000000000000000000000000 --- a/Adapt/nrutil.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef _NR_UTILS_H_ -#define _NR_UTILS_H_ - -#include "Numeric.h" - -#define SIGN(a,b) ((b) >= 0.0 ? fabs(a) : -fabs(a)) - -void nrerror (char error_text[]); -float *vector (long nl, long nh); -int *ivector (long nl, long nh); -unsigned char *cvector (long nl, long nh); -unsigned long *lvector (long nl, long nh); -double *dvector (long nl, long nh); -float **matrix (long nrl, long nrh, long ncl, long nch); -double **dmatrix (long nrl, long nrh, long ncl, long nch); -int **imatrix (long nrl, long nrh, long ncl, long nch); -float **submatrix (float **a, long oldrl, long oldrh, long oldcl, long oldch, - long newrl, long newcl); -float **convert_matrix (float *a, long nrl, long nrh, long ncl, long nch); -float ***f3tensor (long nrl, long nrh, long ncl, long nch, long ndl, long ndh); -void free_vector (float *v, long nl, long nh); -void free_ivector (int *v, long nl, long nh); -void free_cvector (unsigned char *v, long nl, long nh); -void free_lvector (unsigned long *v, long nl, long nh); -void free_dvector (double *v, long nl, long nh); -void free_matrix (float **m, long nrl, long nrh, long ncl, long nch); -void free_dmatrix (double **m, long nrl, long nrh, long ncl, long nch); -void free_imatrix (int **m, long nrl, long nrh, long ncl, long nch); -void free_submatrix (float **b, long nrl, long nrh, long ncl, long nch); -void free_convert_matrix (float **b, long nrl, long nrh, long ncl, long nch); -void free_f3tensor (float ***t, long nrl, long nrh, long ncl, long nch, - long ndl, long ndh); - - -#endif /* _NR_UTILS_H_ */ diff --git a/Box/Main.cpp b/Box/Main.cpp deleted file mode 100644 index 99ad8a4ec4eed7e1d3573a9896fb3a0849a3998c..0000000000000000000000000000000000000000 --- a/Box/Main.cpp +++ /dev/null @@ -1,270 +0,0 @@ -// $Id: Main.cpp,v 1.10 2001-08-11 23:28:31 geuzaine Exp $ - -#include <signal.h> -#include "ParUtil.h" - -#include <signal.h> -#if !defined(WIN32) || defined(__CYGWIN__) -#include <sys/resource.h> -#endif - -#include "PluginManager.h" -#include "Gmsh.h" -#include "GmshVersion.h" -#include "Numeric.h" -#include "Geo.h" -#include "Mesh.h" -#include "Views.h" -#include "Parser.h" -#include "Context.h" -#include "Options.h" -#include "OpenFile.h" -#include "GetOptions.h" -#include "MinMax.h" -#include "Static.h" - -/* dummy defs for link purposes */ - -void AddViewInUI(int, char *, int){} -void draw_polygon_2d (double, double, double, int, double *, double *, double *){} -void set_r(int, double){} -void Draw(void){} -void DrawUI(void){} -void Replot(void){} -void CreateOutputFile(char *, int){} - -/* ------------------------------------------------------------------------ */ -/* I n f o */ -/* ------------------------------------------------------------------------ */ - -void Info (int level, char *arg0){ - switch(level){ - case 0 : - if(ParUtil::Instance()->master()) - { - fprintf(stderr, "%s\n", gmsh_progname); - fprintf(stderr, "%s\n", gmsh_copyright); - Print_Usage(arg0); - } - ParUtil::Instance()->Exit(); - case 1: - if(ParUtil::Instance()->master()) - fprintf(stderr, "%.2f\n", GMSH_VERSION); - ParUtil::Instance()->Exit(); - case 2: - if(ParUtil::Instance()->master()) - { - fprintf(stderr, "%s%.2f\n", gmsh_version, GMSH_VERSION); - fprintf(stderr, "%s\n", gmsh_os); - fprintf(stderr, "%s\n", gmsh_date); - fprintf(stderr, "%s\n", gmsh_host); - fprintf(stderr, "%s\n", gmsh_packager); - fprintf(stderr, "%s\n", gmsh_url); - fprintf(stderr, "%s\n", gmsh_email); - } - ParUtil::Instance()->Exit(); - default : - break; - } -} - -/* ------------------------------------------------------------------------ */ -/* m a i n */ -/* ------------------------------------------------------------------------ */ - -int main(int argc, char *argv[]){ - int i, nbf; - - ParUtil::Instance()->init(argc,argv); - - if(argc < 2) Info(0,argv[0]); - - Init_Options(0); - - Get_Options(argc, argv, &nbf); - - M.Vertices = NULL ; - M.VertexEdges = NULL ; - M.Simplexes = NULL ; - M.Points = NULL ; - M.Curves = NULL ; - M.SurfaceLoops = NULL ; - M.EdgeLoops = NULL ; - M.Surfaces = NULL ; - M.Volumes = NULL ; - M.PhysicalGroups = NULL ; - M.Metric = NULL ; - - signal(SIGINT, Signal); - signal(SIGSEGV, Signal); - signal(SIGFPE, Signal); - - if(CTX.default_plugins) - GMSH_PluginManager::Instance()->RegisterDefaultPlugins(); - - OpenProblem(CTX.filename); - if(yyerrorstate) - ParUtil::Instance()->Abort(); - else{ - for(i=1;i<nbf;i++) MergeProblem(TheFileNameTab[i]); - if(TheBgmFileName){ - MergeProblem(TheBgmFileName); - if(List_Nbr(Post_ViewList)) - BGMWithView((Post_View*)List_Pointer(Post_ViewList, List_Nbr(Post_ViewList)-1)); - else - fprintf(stderr, ERROR_STR "Invalid background mesh (no view)\n"); exit(1); - } - if(CTX.batch > 0){ - mai3d(THEM, CTX.batch); - Print_Mesh(THEM,CTX.output_filename,CTX.mesh.format); - } - else - Print_Geo(THEM, CTX.output_filename); - if(CTX.mesh.histogram) - Print_Histogram(THEM->Histogram[0]); - ParUtil::Instance()->Barrier(__LINE__,__FILE__); - ParUtil::Instance()->Exit(); - return 1; - } - ParUtil::Instance()->Barrier(__LINE__,__FILE__); - ParUtil::Instance()->Exit(); - return 1; -} - - -/* ------------------------------------------------------------------------ */ -/* S i g n a l */ -/* ------------------------------------------------------------------------ */ - - -void Signal (int sig_num){ - - switch (sig_num){ - case SIGSEGV : Msg(FATAL, "Segmentation violation (invalid memory reference)"); break; - case SIGFPE : Msg(FATAL, "Floating point exception (division by zero?)"); break; - case SIGINT : Msg(FATAL, "Interrupt (generated from terminal special char)"); break; - default : Msg(FATAL, "Unknown signal"); break; - } -} - - -/* ------------------------------------------------------------------------ */ -/* M s g */ -/* ------------------------------------------------------------------------ */ - -void Msg(int level, char *fmt, ...){ - - va_list args; - int abort=0; - int nb, nbvis; - - va_start (args, fmt); - - switch(level){ - - case DIRECT : - if(ParUtil::Instance()->master()) - vfprintf(stdout, fmt, args); fprintf(stdout, "\n"); - break; - - case FATAL : - case FATAL1 : - case FATAL2 : - case FATAL3 : - fprintf(stderr,"On processor %d : ",ParUtil::Instance()->rank()); - fprintf(stderr, FATAL_STR); - vfprintf(stderr, fmt, args); fprintf(stderr, "\n"); - abort = 1 ; - break ; - - case GERROR : - case GERROR1 : - case GERROR2 : - case GERROR3 : - fprintf(stderr,"On processor %d : ",ParUtil::Instance()->rank()); - fprintf(stderr, ERROR_STR); - vfprintf(stderr, fmt, args); fprintf(stderr, "\n"); - abort = 1 ; - break ; - - case WARNING : - case WARNING1 : - case WARNING2 : - case WARNING3 : - fprintf(stderr,"On processor %d : ",ParUtil::Instance()->rank()); - fprintf(stderr, WARNING_STR); - vfprintf(stderr, fmt,args); fprintf(stderr, "\n"); - break; - - case PARSER_ERROR : - if(ParUtil::Instance()->master()) - { - fprintf(stderr, PARSER_ERROR_STR); - vfprintf(stderr, fmt, args); fprintf(stderr, "\n"); - } - break ; - - case PARSER_INFO : - if(CTX.verbosity == 5 && ParUtil::Instance()->master()){ - fprintf(stderr, PARSER_INFO_STR); - vfprintf(stderr, fmt, args); fprintf(stderr, "\n"); - } - break ; - - case DEBUG : - case DEBUG1 : - case DEBUG2 : - case DEBUG3 : - if(ParUtil::Instance()->master() && CTX.verbosity > 2){ - fprintf(stderr, DEBUG_STR); - vfprintf(stderr, fmt, args); fprintf(stderr, "\n"); - } - break; - - default : - if(ParUtil::Instance()->master() && CTX.verbosity > 0){ - fprintf(stderr, INFO_STR); - vfprintf(stderr, fmt, args); fprintf(stderr, "\n"); - } - break; - } - - va_end (args); - - if(abort) exit(1); - -} - -/* ------------------------------------------------------------------------ */ -/* C p u */ -/* ------------------------------------------------------------------------ */ - -void GetResources(long *s, long *us, long *mem){ -#if !defined(WIN32) || defined(__CYGWIN__) - static struct rusage r; - - getrusage(RUSAGE_SELF,&r); - *s = (long)r.ru_utime.tv_sec ; - *us = (long)r.ru_utime.tv_usec ; - *mem = (long)r.ru_maxrss ; -#else - *s = *us = *mem = 0; -#endif - -} - -double Cpu(void){ - long s, us, mem; - GetResources(&s, &us, &mem); - return (double)s + (double)us/1.e6 ; -} - -/* ------------------------------------------------------------------------ */ -/* P r o g r e s s */ -/* ------------------------------------------------------------------------ */ - -void Progress(int i){ -} - -void AddALineInTheEditGeometryForm (char* line){ -}; diff --git a/Box/Makefile b/Box/Makefile deleted file mode 100644 index 6560ce116bf5bbb6757171f06ad52d7b4acd44d3..0000000000000000000000000000000000000000 --- a/Box/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -# $Id: Makefile,v 1.10 2001-08-12 13:08:20 geuzaine Exp $ -# -# Makefile for "libBox.a" -# - -.IGNORE: - -CC = c++ -AR = ar ruvs -RM = rm -RANLIB = ranlib -LIB = ../lib/libBox.a -INCLUDE = -I../Common -I../DataStr -I../Geo\ - -I../Graphics -I../Mesh -I../Parser -I../Motif -I../Fltk -I../Plugin -I../Parallel - -C_FLAGS = -g -OS_FLAGS = -VERSION_FLAGS = - -RMFLAGS = -f -CFLAGS = $(C_FLAGS) $(OS_FLAGS) $(VERSION_FLAGS) $(INCLUDE) - -SRC = Main.cpp - -OBJ = $(SRC:.cpp=.o) - -.SUFFIXES: .o .cpp - -$(LIB): $(OBJ) - $(AR) $(LIB) $(OBJ) - $(RANLIB) $(LIB) - -.cpp.o: - $(CC) $(CFLAGS) -c $< - -clean: - $(RM) $(RMFLAGS) *.o - -lint: - $(LINT) $(CFLAGS) $(SRC) - -depend: - (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ - $(CC) -MM $(CFLAGS) ${SRC} \ - ) >Makefile.new - cp Makefile Makefile.bak - cp Makefile.new Makefile - $(RM) $(RMFLAGS) Makefile.new - -# DO NOT DELETE THIS LINE -Main.o: Main.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshVersion.h \ - ../Common/Numeric.h ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ - ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/Metric.h ../Common/Views.h ../Common/ColorTable.h \ - ../Parser/Parser.h ../Common/Context.h ../Parser/OpenFile.h \ - ../Common/GetOptions.h ../Geo/MinMax.h ../Common/Static.h diff --git a/Common/Bitmaps.h b/Common/Bitmaps.h deleted file mode 100644 index bb72a03dfbc78ad300c72b68c147113e52fa7be3..0000000000000000000000000000000000000000 --- a/Common/Bitmaps.h +++ /dev/null @@ -1,162 +0,0 @@ -#ifndef _BITMAPS_H_ -#define _BITMAPS_H_ - -// 'Gmsh' (Unix) icon - -#define g1_width 66 -#define g1_height 29 -static char g1_bits[] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x03,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xfc,0x00,0x00,0x00, - 0x00,0x00,0x00,0x80,0x03,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0xfc, - 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, - 0xe0,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xfc,0x00,0x00,0x00, - 0x00,0x00,0x10,0x30,0x00,0xfc,0x00,0x08,0x00,0x00,0x00,0x18,0x18,0x00,0xfc, - 0x00,0x0c,0x00,0x04,0x00,0x3c,0x08,0x06,0xfc,0xc0,0x0f,0x04,0x8f,0x01,0x3e, - 0x04,0x0f,0xfc,0x30,0x0e,0x8e,0xcf,0x03,0x7b,0x84,0x0f,0xfc,0x18,0x0e,0xcf, - 0xe7,0x83,0x70,0x42,0x0f,0xfc,0x1c,0x8e,0x2f,0x97,0x43,0x70,0x22,0x0e,0xfd, - 0x1e,0xcd,0x1e,0x8f,0x23,0x21,0x17,0x8e,0xfc,0xfe,0x68,0x8e,0x87,0x97,0x31, - 0x0f,0x4e,0xfc,0x7e,0x38,0x87,0x83,0x8f,0x1b,0x07,0x2e,0xfc,0x1c,0x1c,0x83, - 0x01,0x03,0x07,0x02,0x1e,0xfc,0x00,0x0e,0x00,0x00,0x00,0x00,0x00,0x0c,0xfc, - 0x00,0x07,0x00,0x00,0x00,0x04,0x01,0x00,0xfc,0x80,0x03,0x00,0x00,0x00,0x8c, - 0x01,0x00,0xfc,0xc0,0x03,0x00,0x00,0x00,0x8c,0x99,0x26,0xfd,0xe0,0x01,0x00, - 0x00,0x00,0x54,0xa5,0x29,0xfd,0xf0,0x01,0x00,0x00,0x00,0x54,0xbd,0x28,0xfd, - 0xf0,0x00,0x00,0x00,0x00,0x24,0x85,0x28,0xfd,0x78,0x00,0x00,0x00,0x00,0x24, - 0xa5,0x28,0xfd,0x30,0x00,0x00,0x00,0x00,0x24,0x99,0xc8,0xfd,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc}; - -// 'Gmsh Menu' (Unix) icon - -#define g2_width 66 -#define g2_height 29 -static char g2_bits[] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x03,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xfc,0x00,0x00,0x00, - 0x00,0x00,0x00,0x80,0x03,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0xfc, - 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, - 0xe0,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xfc,0x00,0x00,0x00, - 0x00,0x00,0x10,0x30,0x00,0xfc,0x00,0x08,0x00,0x00,0x00,0x18,0x18,0x00,0xfc, - 0x00,0x0c,0x00,0x04,0x00,0x3c,0x08,0x06,0xfc,0xc0,0x0f,0x04,0x8f,0x01,0x3e, - 0x04,0x0f,0xfc,0x30,0x0e,0x8e,0xcf,0x03,0x7b,0x84,0x0f,0xfc,0x18,0x0e,0xcf, - 0xe7,0x83,0x70,0x42,0x0f,0xfc,0x1c,0x8e,0x2f,0x97,0x43,0x70,0x22,0x0e,0xfd, - 0x1e,0xcd,0x1e,0x8f,0x23,0x21,0x17,0x8e,0xfc,0xfe,0x68,0x8e,0x87,0x97,0x31, - 0x0f,0x4e,0xfc,0x7e,0x38,0x87,0x83,0x8f,0x1b,0x07,0x2e,0xfc,0x1c,0x1c,0x83, - 0x01,0x03,0x07,0x02,0x1e,0xfc,0x00,0x0e,0x00,0x00,0x00,0x00,0x00,0x0c,0xfc, - 0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x80,0x03,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfc,0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xe0,0x01,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc,0xf0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, - 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x78,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0xfc,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc}; - -// 'Gmsh command' (Unix Motif) icon - -#ifdef _XMOTIF - -#define g3_width 66 -#define g3_height 29 -static char g3_bits[] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x03,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xfc,0x00,0x00,0x00, - 0x00,0x00,0x00,0x80,0x03,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0xfc, - 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0xfc,0x00,0x00,0x00,0x00,0x00,0x00, - 0xe0,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xfc,0x00,0x00,0x00, - 0x00,0x00,0x10,0x30,0x00,0xfc,0x00,0x08,0x00,0x00,0x00,0x18,0x18,0x00,0xfc, - 0x00,0x0c,0x00,0x04,0x00,0x3c,0x08,0x06,0xfc,0xc0,0x0f,0x04,0x8f,0x01,0x3e, - 0x04,0x0f,0xfc,0x30,0x0e,0x8e,0xcf,0x03,0x7b,0x84,0x0f,0xfc,0x18,0x0e,0xcf, - 0xe7,0x83,0x70,0x42,0x0f,0xfc,0x1c,0x8e,0x2f,0x97,0x43,0x70,0x22,0x0e,0xfd, - 0x1e,0xcd,0x1e,0x8f,0x23,0x21,0x17,0x8e,0xfc,0xfe,0x68,0x8e,0x87,0x97,0x31, - 0x0f,0x4e,0xfc,0x7e,0x38,0x87,0x83,0x8f,0x1b,0x07,0x2e,0xfc,0x1c,0x1c,0x83, - 0x01,0x03,0x07,0x02,0x1e,0xfc,0x00,0x0e,0x00,0x00,0x00,0x00,0x00,0x0c,0xfc, - 0x00,0x07,0xe0,0x01,0x00,0x00,0x00,0x00,0xfd,0x80,0x03,0x10,0x02,0x00,0x00, - 0x00,0x00,0xfd,0xc0,0x03,0x10,0x70,0x6e,0x6e,0x4e,0x63,0xfd,0xe0,0x01,0x10, - 0x88,0x92,0x92,0xd0,0x94,0xfd,0xf0,0x01,0x10,0x88,0x92,0x92,0x5c,0x14,0xfd, - 0xf0,0x00,0x10,0x88,0x92,0x92,0x52,0x14,0xfd,0x78,0x00,0x10,0x8a,0x92,0x92, - 0x52,0x94,0xfd,0x30,0x00,0xe0,0x71,0x92,0x92,0x6c,0x64,0xfd,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0xfc}; - -#endif - -// 'About Gmsh' bitmap - -#define about_width 49 -#define about_height 111 -static char about_bits[] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00, - 0x00,0x00,0x08,0x00,0x00,0xfe,0x00,0x00,0x00,0x10,0x00,0x00,0xfe,0x00,0x00, - 0x00,0x20,0x00,0x00,0xfe,0x00,0x00,0x00,0x40,0x00,0x00,0xfe,0x00,0x00,0x00, - 0xc0,0x00,0x00,0xfe,0x00,0x00,0x00,0xc0,0x01,0x00,0xfe,0x00,0x00,0x00,0xc0, - 0x01,0x00,0xfe,0x00,0x00,0x00,0xff,0x03,0x00,0xfe,0x00,0x00,0xf0,0xff,0x03, - 0x00,0xfe,0x00,0x00,0xf0,0xff,0x03,0x00,0xfe,0x70,0x00,0xf0,0xff,0x03,0x00, - 0xfe,0xfc,0x03,0xe0,0xff,0x00,0x00,0xfe,0xf8,0x0f,0xc0,0x01,0x00,0x00,0xfe, - 0xf0,0x3f,0xc0,0x00,0x00,0x00,0xfe,0xe0,0x7f,0x00,0x01,0x00,0x00,0xfe,0x80, - 0xff,0x00,0x01,0x00,0x00,0xfe,0x00,0xfe,0x01,0x02,0x00,0x00,0xfe,0x00,0xf8, - 0x03,0x0c,0x00,0x00,0xfe,0x00,0xf0,0x07,0x08,0x00,0x00,0xfe,0x00,0xc0,0x0f, - 0x10,0x00,0x00,0xfe,0x00,0x00,0x1f,0x70,0x00,0x00,0xfe,0x00,0x00,0x7c,0xf8, - 0x00,0x00,0xfe,0x00,0x00,0xf0,0xff,0x00,0x00,0xfe,0x00,0x00,0xc0,0xff,0x01, - 0x00,0xfe,0x00,0x00,0x00,0xfe,0x01,0x00,0xfe,0x00,0x00,0x00,0xf8,0x00,0x00, - 0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0xfe, - 0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00, - 0x00,0xe0,0x03,0x00,0x00,0xfe,0x00,0x00,0xf0,0x0f,0x00,0x00,0xfe,0x00,0x80, - 0xf8,0x1f,0x00,0x00,0xfe,0x00,0x00,0xff,0x21,0x00,0x00,0xfe,0x00,0x00,0xff, - 0x40,0x00,0x00,0xfe,0x00,0x00,0x7e,0x80,0x00,0x00,0xfe,0x00,0x00,0x3c,0x80, - 0x00,0x00,0xfe,0x00,0x00,0x38,0xc0,0x01,0x00,0xfe,0x00,0x00,0x20,0xf0,0x01, - 0x00,0xfe,0x00,0x00,0x40,0xf8,0x01,0x00,0xfe,0x00,0x00,0x80,0xf8,0x01,0x00, - 0xfe,0x00,0x00,0x00,0xf1,0x00,0x00,0xfe,0x00,0x00,0x00,0x04,0x00,0x00,0xfe, - 0x00,0x00,0x00,0x08,0x00,0x00,0xfe,0x00,0x00,0x00,0x08,0x00,0x00,0xfe,0x00, - 0x00,0x00,0x10,0x00,0x00,0xfe,0x00,0x00,0x00,0x30,0x00,0x00,0xfe,0x00,0x00, - 0x00,0x70,0x00,0x00,0xfe,0x00,0x00,0x00,0x70,0x00,0x00,0xfe,0x00,0x00,0x00, - 0xf8,0x00,0x00,0xfe,0x00,0x00,0xc0,0xff,0x01,0x00,0xfe,0x00,0x00,0xf0,0xff, - 0x01,0x00,0xfe,0x00,0x00,0xf0,0xff,0x01,0x00,0xfe,0x00,0x00,0xf0,0xff,0x00, - 0x00,0xfe,0x00,0x00,0xe0,0x1f,0x00,0x00,0xfe,0x00,0x00,0xc0,0x01,0x00,0x00, - 0xfe,0x00,0x00,0xc0,0x00,0x00,0x00,0xfe,0x00,0x00,0x80,0x00,0x00,0x00,0xfe, - 0x00,0x00,0x00,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x02,0x00,0x00,0xfe,0x00, - 0x00,0x00,0x04,0x00,0x00,0xfe,0x00,0x00,0x38,0x08,0x00,0x00,0xfe,0x00,0x00, - 0xf8,0x18,0x00,0x00,0xfe,0x00,0x00,0xf8,0x3f,0x00,0x00,0xfe,0x00,0x00,0xf8, - 0x7f,0x00,0x00,0xfe,0x00,0x00,0xf0,0xff,0x00,0x00,0xfe,0x00,0x00,0xf0,0xff, - 0x00,0x00,0xfe,0x00,0x00,0x60,0xfc,0x01,0x00,0xfe,0x00,0x00,0x40,0xf0,0x01, - 0x00,0xfe,0x00,0x00,0x80,0x00,0x00,0x00,0xfe,0x00,0x00,0x80,0x00,0x00,0x00, - 0xfe,0x00,0x00,0x00,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x02,0x00,0x00,0xfe, - 0x00,0x00,0x0c,0x06,0x00,0x00,0xfe,0x00,0x00,0x3c,0x04,0x00,0x00,0xfe,0x00, - 0x00,0xf8,0x08,0x00,0x00,0xfe,0x00,0x00,0xf8,0x1f,0x00,0x00,0xfe,0x00,0x00, - 0xf0,0x3f,0x00,0x00,0xfe,0x00,0x00,0xe0,0x7f,0x00,0x00,0xfe,0x00,0x00,0xc0, - 0xff,0x00,0x00,0xfe,0x00,0x00,0x00,0xff,0x00,0x00,0xfe,0x00,0x00,0x00,0xfc, - 0x00,0x00,0xfe,0x00,0x00,0x00,0x0c,0x00,0x00,0xfe,0x00,0x00,0x00,0x10,0x00, - 0x00,0xfe,0x00,0x00,0x00,0x10,0x00,0x00,0xfe,0x00,0x00,0x00,0x20,0x00,0x00, - 0xfe,0x00,0x00,0x00,0x60,0x00,0x00,0xfe,0x00,0x00,0x00,0xcf,0x00,0x00,0xfe, - 0x00,0x00,0xde,0xbf,0x01,0x00,0xfe,0x00,0x00,0xfe,0xff,0x03,0x00,0xfe,0x00, - 0x00,0xfe,0x1f,0x0f,0x00,0xfe,0x00,0x00,0xf8,0x07,0x1e,0x00,0xfe,0x00,0x00, - 0xf0,0x03,0x7e,0x00,0xfe,0x00,0x00,0xd0,0x07,0xfc,0x00,0xfe,0x00,0x00,0x10, - 0x08,0xf8,0x03,0xfe,0x00,0x00,0x10,0x18,0xf0,0x07,0xfe,0x00,0x00,0x10,0x30, - 0xe0,0x0f,0xfe,0x00,0x00,0x10,0x30,0xc0,0x1f,0xfe,0x00,0x00,0x10,0x70,0x80, - 0x3f,0xfe,0x00,0x00,0x20,0xf8,0x00,0x7f,0xfe,0x00,0x00,0x60,0xfc,0x00,0xfe, - 0xfe,0x00,0x00,0xc0,0xff,0x01,0xfc,0xfe,0x00,0x00,0xc0,0xff,0x01,0x78,0xfe, - 0x00,0x00,0x80,0xff,0x01,0x00,0xfe,0x00,0x00,0x00,0xff,0x01,0x00,0xfe,0x00, - 0x00,0x00,0xfc,0x01,0x00,0xfe,0x00,0x00,0x00,0xf8,0x00,0x00,0xfe,0x00,0x00, - 0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0xfe}; - -// 'Abort' bitmap - -#define abort_width 13 -#define abort_height 13 -static char abort_bits[] = { - 0x00,0xe0,0x40,0xe0,0x40,0xe0,0x50,0xe1,0x48,0xe2,0x44,0xe4,0x44,0xe4,0x44, - 0xe4,0x04,0xe4,0x04,0xe4,0x08,0xe2,0xf0,0xe1,0x00,0xe0}; - -// 'Play button' bitmap - -#define start_width 9 -#define start_height 13 -static char start_bits[] = { - 0x00,0xfe,0x06,0xfe,0x0a,0xfe,0x12,0xfe,0x22,0xfe,0x42,0xfe,0x82,0xfe,0x42, - 0xfe,0x22,0xfe,0x12,0xfe,0x0a,0xfe,0x06,0xfe,0x00,0xfe}; - -// 'Pause button' bitmap - -#define stop_width 9 -#define stop_height 13 -static char stop_bits[] = { - 0x00,0xfe,0xee,0xfe,0xaa,0xfe,0xaa,0xfe,0xaa,0xfe,0xaa,0xfe,0xaa,0xfe,0xaa, - 0xfe,0xaa,0xfe,0xaa,0xfe,0xaa,0xfe,0xee,0xfe,0x00,0xfe}; - -#endif diff --git a/Common/ColorTable.cpp b/Common/ColorTable.cpp deleted file mode 100644 index 061b7953cb6238366facf75fb644b20a6305d72f..0000000000000000000000000000000000000000 --- a/Common/ColorTable.cpp +++ /dev/null @@ -1,206 +0,0 @@ -// $Id: ColorTable.cpp,v 1.3 2001-02-12 17:38:02 geuzaine Exp $ - -#include "Gmsh.h" -#include "ColorTable.h" -#include "Context.h" - -extern Context_T CTX ; - -void ColorTable_InitParam(int number, ColorTable *ct, - int rgb_flag, int alpha_flag){ - - ct->ipar[COLORTABLE_NUMBER] = number; - - if(rgb_flag) { - ct->ipar[COLORTABLE_INVERT] = 0; - ct->ipar[COLORTABLE_SWAP] = 0; - ct->ipar[COLORTABLE_ROTATE] = 0; - - ct->fpar[COLORTABLE_CURVE] = 0.0; - ct->fpar[COLORTABLE_BIAS] = 0.0; - ct->fpar[COLORTABLE_BETA] = 0.0; - } - if(alpha_flag) { - ct->fpar[COLORTABLE_ALPHAPOW] = 2.; - ct->fpar[COLORTABLE_ALPHAVAL] = 255.; - } - -} - -void ColorTable_Recompute(ColorTable *ct, int rgb_flag, int alpha_flag){ - float curve, bias; - double gamma; - int i,r,g,b,a,rotate; - float s,t; - - ct->ipar[COLORTABLE_CHANGED] = 1 ; - - bias = ct->fpar[COLORTABLE_BIAS]; - curve = ct->fpar[COLORTABLE_CURVE]; - rotate = ct->ipar[COLORTABLE_ROTATE]; - - for (i=0 ; i<ct->size ; i++) { - - if(i+rotate<0) - s = (float) (i+rotate+ct->size) / (float) (ct->size-1); - else if(i+rotate>ct->size-1) - s = (float) (i+rotate-ct->size) / (float) (ct->size-1); - else - s = (float) (i+rotate) / (float) (ct->size-1); - - if(ct->ipar[COLORTABLE_SWAP]) s = 1.0 - s; - - if (rgb_flag) { - - switch(ct->ipar[COLORTABLE_NUMBER]){ - case 1 : /* vis5d */ - t = (curve+1.4) * (s - (1.+bias)/2.); - r = (int)( 128.0 + 127.0 * atan( 7.0*t ) / 1.57 ); - g = (int)( 128.0 + 127.0 * (2 * exp(-7*t*t) - 1) ); - b = (int)( 128.0 + 127.0 * atan( -7.0*t ) / 1.57 ); - break; - case 2: /* samcef */ - if (s-bias<=0.00){ - r = 0 ; g = 0 ; b = 255 ; - } - else if(s-bias<=0.40){ - r = 0 ; g = (int)((s-bias)*637.5) ; b = (int)(255.-(s-bias)*637.5) ; - } - else if(s-bias<=0.60){ - r = (int)(1275.*(s-bias-0.4)) ; g = 255 ; b = 0 ; - } - else if(s-bias<=1.00){ - r = 255 ; g = (int)(255.-637.5*(s-bias-0.6)) ; b = 0 ; - } - else { - r = 255 ; g = 0 ; b = 0 ; - } - break; - case 3: /* rainbow */ - if (s-bias<=0.00) { - r = 0 ; g = 0 ; b = 255 ; - } - else if(s-bias<=0.25+curve){ - r = 0 ; g = (int)((s-bias)*(255./(0.25+curve))) ; b = 255 ; - } - else if(s-bias<=0.50) { - r = 0 ; g = 255 ; b = (int)(255.-(255./(0.25-curve))*(s-bias-0.25-curve)); - } - else if(s-bias<=0.75-curve){ - r = (int)((s-bias-0.5)*(255./(0.25-curve))); g = 255 ; b = 0 ; - } - else if(s-bias<=1.00) { - r = 255; g = (int)(255.-(255./(0.25+curve))*(s-bias-0.75+curve)) ; b = 0 ; - } - else { - r = 255 ; g = 0 ; b = 0 ; - } - break; - case 4: /* blue-yellow-white */ -#define myfct(a,b,c,d) ((a)+\ - (b)*(s-bias)+\ - (c)*(s-bias)*(s-bias)+\ - (d)*(s-bias)*(s-bias)*(s-bias)) -#define clamp(x) x = (x)<0?0:((x)>255?255:(x)) - r = (int)(255. * myfct(-0.0506169, 2.81633, -1.87033, 0.0524573) ); - g = (int)(255. * myfct(0.0485868, -1.26109, 6.3074, -4.12498) ); - b = (int)(255. * myfct(0.364662, 1.50814, -7.36756, 6.51847 ) ); - clamp(r); clamp(g); clamp(b); -#undef myfct -#undef clamp - break; - case 5: /* grayscale */ - if (s-bias<=0.00){ r = g = b = 0 ; } - else if (s-bias<=1.00){ r = g = b = (int)(255*(s-bias)); } - else { r = g = b = 255 ; } - break; - case 6: /* monochrome */ - r = g = b = 0 ; - break; - default: /* grayscale without white */ - if (s-bias<=0.00){ r = g = b = 0 ; } - else if (s-bias<=1.00){ r = g = b = (int)(220*(s-bias)); } - else { r = g = b = 220 ; } - break; - } - - if(ct->fpar[COLORTABLE_BETA]){ - if(ct->fpar[COLORTABLE_BETA] > 0.0) - gamma = 1. - ct->fpar[COLORTABLE_BETA]; - else - gamma = 1./(1.001 + ct->fpar[COLORTABLE_BETA]); - r = (int)( 255. * pow((double)r/255.,gamma) ); - g = (int)( 255. * pow((double)g/255.,gamma) ); - b = (int)( 255. * pow((double)b/255.,gamma) ); - } - - if(ct->ipar[COLORTABLE_INVERT]){ - r = 255-r ; - g = 255-g ; - b = 255-b ; - } - - } - else { - r = UNPACK_RED( ct->table[i] ); - g = UNPACK_GREEN( ct->table[i] ); - b = UNPACK_BLUE( ct->table[i] ); - } - - if (alpha_flag) { - if (ct->fpar[COLORTABLE_ALPHAVAL]<0) { - a = (int)( 255.0 * pow( s, ct->fpar[COLORTABLE_ALPHAPOW] ) ); - } - else { - a = (int)( ct->fpar[COLORTABLE_ALPHAVAL] ); - } - } - else { - a = UNPACK_ALPHA( ct->table[i] ); - } - - ct->table[i] = PACK_COLOR( r, g, b, a ); - } - -} - -static ColorTable clip; - -void ColorTable_Copy(ColorTable *ct){ - clip.size = ct->size; - memcpy(clip.table, ct->table, ct->size * sizeof(unsigned int)); - memcpy(clip.ipar, ct->ipar, COLORTABLE_NBMAX_PARAM * sizeof(int)); - memcpy(clip.fpar, ct->fpar, COLORTABLE_NBMAX_PARAM * sizeof(float)); -} - -void ColorTable_Paste(ColorTable *ct){ - ct->size = clip.size; - memcpy(ct->table, clip.table, clip.size * sizeof(unsigned int)); - memcpy(ct->ipar, clip.ipar, COLORTABLE_NBMAX_PARAM * sizeof(int)); - memcpy(ct->fpar, clip.fpar, COLORTABLE_NBMAX_PARAM * sizeof(float)); -} - - -void ColorTable_Print(ColorTable *ct, FILE *fp){ - int i, r, g, b, a; - char tmp1[1024],tmp2[1024]; - - strcpy(tmp1, ""); - for (i=0;i<ct->size;i++) { - r = UNPACK_RED( ct->table[i] ); - g = UNPACK_GREEN( ct->table[i] ); - b = UNPACK_BLUE( ct->table[i] ); - a = UNPACK_ALPHA( ct->table[i] ); - if(i && !(i%4)){ - if(fp) fprintf(fp, "%s\n", tmp1); else Msg(DIRECT, tmp1); - strcpy(tmp1, ""); - } - sprintf(tmp2, "{%d, %d, %d, %d}", r, g, b, a); - strcat(tmp1, tmp2); - if(i!=ct->size-1) strcat(tmp1, ", "); - } - if(fp) fprintf(fp, "%s\n", tmp1); else Msg(DIRECT, tmp1); - -} - - diff --git a/Common/ColorTable.h b/Common/ColorTable.h deleted file mode 100644 index ac8f2cb77af03616eb0f4b8739e887122a3f1198..0000000000000000000000000000000000000000 --- a/Common/ColorTable.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef _COLORTABLE_H_ -#define _COLORTABLE_H_ - -#define COLORTABLE_NBMAX_PARAM 10 -#define COLORTABLE_NBMAX_COLOR 255 - -typedef struct{ - unsigned int table[COLORTABLE_NBMAX_COLOR]; - int size; - int ipar[COLORTABLE_NBMAX_PARAM]; - float fpar[COLORTABLE_NBMAX_PARAM]; -}ColorTable; - - -/* COLORTABLE_MODE */ - -#define COLORTABLE_RGB 1 -#define COLORTABLE_HSV 2 - - -/* integrer parameters indices */ - -#define COLORTABLE_NUMBER 0 /* predefined curve index */ -#define COLORTABLE_CHANGED 1 /* did the colortable change ? */ -#define COLORTABLE_INVERT 2 /* invert (rbg<->255-rgb) */ -#define COLORTABLE_SWAP 3 /* swap (min<->max) */ -#define COLORTABLE_ROTATE 4 /* rotate */ -#define COLORTABLE_MODE 5 /* mode (rgb, hsv) */ - -/* float parameters indices */ - -#define COLORTABLE_CURVE 0 /* curvature */ -#define COLORTABLE_BIAS 1 /* offset */ -#define COLORTABLE_ALPHAPOW 2 /* alpha channel power */ -#define COLORTABLE_ALPHAVAL 3 /* alpha channel value */ -#define COLORTABLE_BETA 4 /* beta coeff for brighten */ - -void ColorTable_InitParam (int number, ColorTable * ct, int rgb_flag, int alpha_flag); -void ColorTable_Recompute (ColorTable * ct, int rgb_flag, int alpha_flag); -void ColorTable_Copy(ColorTable *ct); -void ColorTable_Paste(ColorTable *ct); -void ColorTable_Print(ColorTable *ct, FILE *fp) ; - -#endif diff --git a/Common/Colors.h b/Common/Colors.h deleted file mode 100644 index 50266ba6bdb66973a0613e23554e170113597f0f..0000000000000000000000000000000000000000 --- a/Common/Colors.h +++ /dev/null @@ -1,671 +0,0 @@ -#ifndef _COLORS_H_ -#define _COLORS_H_ - -#include "Context.h" - -StringX4Int ColorString[] = { - { "Snow" , 255, 250, 250, 255 } , - { "GhostWhite" , 248, 248, 255, 255 } , - { "WhiteSmoke" , 245, 245, 245, 255 } , - { "Gainsboro" , 220, 220, 220, 255 } , - { "FloralWhite" , 255, 250, 240, 255 } , - { "OldLace" , 253, 245, 230, 255 } , - { "Linen" , 250, 240, 230, 255 } , - { "AntiqueWhite" , 250, 235, 215, 255 } , - { "PapayaWhip" , 255, 239, 213, 255 } , - { "BlanchedAlmond" , 255, 235, 205, 255 } , - { "Bisque" , 255, 228, 196, 255 } , - { "PeachPuff" , 255, 218, 185, 255 } , - { "NavajoWhite" , 255, 222, 173, 255 } , - { "Moccasin" , 255, 228, 181, 255 } , - { "Cornsilk" , 255, 248, 220, 255 } , - { "Ivory" , 255, 255, 240, 255 } , - { "LemonChiffon" , 255, 250, 205, 255 } , - { "Seashell" , 255, 245, 238, 255 } , - { "Honeydew" , 240, 255, 240, 255 } , - { "MintCream" , 245, 255, 250, 255 } , - { "Azure" , 240, 255, 255, 255 } , - { "AliceBlue" , 240, 248, 255, 255 } , - { "Lavender" , 230, 230, 250, 255 } , - { "LavenderBlush" , 255, 240, 245, 255 } , - { "MistyRose" , 255, 228, 225, 255 } , - { "White" , 255, 255, 255, 255 } , - { "Black" , 0, 0, 0, 255 } , - { "DarkSlateGray" , 47, 79, 79, 255 } , - { "DarkSlateGrey" , 47, 79, 79, 255 } , - { "DimGray" , 105, 105, 105, 255 } , - { "DimGrey" , 105, 105, 105, 255 } , - { "SlateGray" , 112, 128, 144, 255 } , - { "SlateGrey" , 112, 128, 144, 255 } , - { "LightSlateGray" , 119, 136, 153, 255 } , - { "LightSlateGrey" , 119, 136, 153, 255 } , - { "Gray" , 190, 190, 190, 255 } , - { "Grey" , 190, 190, 190, 255 } , - { "LightGrey" , 211, 211, 211, 255 } , - { "LightGray" , 211, 211, 211, 255 } , - { "MidnightBlue" , 25, 25, 112, 255 } , - { "Navy" , 0, 0, 128, 255 } , - { "NavyBlue" , 0, 0, 128, 255 } , - { "CornflowerBlue" , 100, 149, 237, 255 } , - { "DarkSlateBlue" , 72, 61, 139, 255 } , - { "SlateBlue" , 106, 90, 205, 255 } , - { "MediumSlateBlue" , 123, 104, 238, 255 } , - { "LightSlateBlue" , 132, 112, 255, 255 } , - { "MediumBlue" , 0, 0, 205, 255 } , - { "RoyalBlue" , 65, 105, 225, 255 } , - { "Blue" , 0, 0, 255, 255 } , - { "DodgerBlue" , 30, 144, 255, 255 } , - { "DeepSkyBlue" , 0, 191, 255, 255 } , - { "SkyBlue" , 135, 206, 235, 255 } , - { "LightSkyBlue" , 135, 206, 250, 255 } , - { "SteelBlue" , 70, 130, 180, 255 } , - { "LightSteelBlue" , 176, 196, 222, 255 } , - { "LightBlue" , 173, 216, 230, 255 } , - { "PowderBlue" , 176, 224, 230, 255 } , - { "PaleTurquoise" , 175, 238, 238, 255 } , - { "DarkTurquoise" , 0, 206, 209, 255 } , - { "MediumTurquoise" , 72, 209, 204, 255 } , - { "Turquoise" , 64, 224, 208, 255 } , - { "Cyan" , 0, 255, 255, 255 } , - { "LightCyan" , 224, 255, 255, 255 } , - { "CadetBlue" , 95, 158, 160, 255 } , - { "MediumAquamarine" , 102, 205, 170, 255 } , - { "Aquamarine" , 127, 255, 212, 255 } , - { "DarkGreen" , 0, 100, 0, 255 } , - { "DarkOliveGreen" , 85, 107, 47, 255 } , - { "DarkSeaGreen" , 143, 188, 143, 255 } , - { "SeaGreen" , 46, 139, 87, 255 } , - { "MediumSeaGreen" , 60, 179, 113, 255 } , - { "LightSeaGreen" , 32, 178, 170, 255 } , - { "PaleGreen" , 152, 251, 152, 255 } , - { "SpringGreen" , 0, 255, 127, 255 } , - { "LawnGreen" , 124, 252, 0, 255 } , - { "Green" , 0, 255, 0, 255 } , - { "chartreuse" , 127, 255, 0, 255 } , - { "MediumSpringGreen" , 0, 250, 154, 255 } , - { "GreenYellow" , 173, 255, 47, 255 } , - { "LimeGreen" , 50, 205, 50, 255 } , - { "YellowGreen" , 154, 205, 50, 255 } , - { "ForestGreen" , 34, 139, 34, 255 } , - { "OliveDrab" , 107, 142, 35, 255 } , - { "DarkKhaki" , 189, 183, 107, 255 } , - { "Khaki" , 240, 230, 140, 255 } , - { "PaleGoldenrod" , 238, 232, 170, 255 } , - { "LightGoldenrodYellow" , 250, 250, 210, 255 } , - { "LightYellow" , 255, 255, 224, 255 } , - { "Yellow" , 255, 255, 0, 255 } , - { "Gold" , 255, 215, 0, 255 } , - { "LightGoldenrod" , 238, 221, 130, 255 } , - { "Goldenrod" , 218, 165, 32, 255 } , - { "DarkGoldenrod" , 184, 134, 11, 255 } , - { "RosyBrown" , 188, 143, 143, 255 } , - { "IndianRed" , 205, 92, 92, 255 } , - { "SaddleBrown" , 139, 69, 19, 255 } , - { "Sienna" , 160, 82, 45, 255 } , - { "Peru" , 205, 133, 63, 255 } , - { "Burlywood" , 222, 184, 135, 255 } , - { "Beige" , 245, 245, 220, 255 } , - { "Wheat" , 245, 222, 179, 255 } , - { "SandyBrown" , 244, 164, 96, 255 } , - { "Tan" , 210, 180, 140, 255 } , - { "Chocolate" , 210, 105, 30, 255 } , - { "Firebrick" , 178, 34, 34, 255 } , - { "Brown" , 165, 42, 42, 255 } , - { "DarkSalmon" , 233, 150, 122, 255 } , - { "Salmon" , 250, 128, 114, 255 } , - { "LightSalmon" , 255, 160, 122, 255 } , - { "Orange" , 255, 165, 0, 255 } , - { "DarkOrange" , 255, 140, 0, 255 } , - { "Coral" , 255, 127, 80, 255 } , - { "LightCoral" , 240, 128, 128, 255 } , - { "Tomato" , 255, 99, 71, 255 } , - { "OrangeRed" , 255, 69, 0, 255 } , - { "Red" , 255, 0, 0, 255 } , - { "HotPink" , 255, 105, 180, 255 } , - { "DeepPink" , 255, 20, 147, 255 } , - { "Pink" , 255, 192, 203, 255 } , - { "LightPink" , 255, 182, 193, 255 } , - { "PaleVioletRed" , 219, 112, 147, 255 } , - { "Maroon" , 176, 48, 96, 255 } , - { "MediumVioletRed" , 199, 21, 133, 255 } , - { "VioletRed" , 208, 32, 144, 255 } , - { "Magenta" , 255, 0, 255, 255 } , - { "Violet" , 238, 130, 238, 255 } , - { "Plum" , 221, 160, 221, 255 } , - { "Orchid" , 218, 112, 214, 255 } , - { "MediumOrchid" , 186, 85, 211, 255 } , - { "DarkOrchid" , 153, 50, 204, 255 } , - { "DarkViolet" , 148, 0, 211, 255 } , - { "BlueViolet" , 138, 43, 226, 255 } , - { "Purple" , 160, 32, 240, 255 } , - { "MediumPurple" , 147, 112, 219, 255 } , - { "Thistle" , 216, 191, 216, 255 } , - { "Snow1" , 255, 250, 250, 255 } , - { "Snow2" , 238, 233, 233, 255 } , - { "Snow3" , 205, 201, 201, 255 } , - { "Snow4" , 139, 137, 137, 255 } , - { "Seashell1" , 255, 245, 238, 255 } , - { "Seashell2" , 238, 229, 222, 255 } , - { "Seashell3" , 205, 197, 191, 255 } , - { "Seashell4" , 139, 134, 130, 255 } , - { "AntiqueWhite1" , 255, 239, 219, 255 } , - { "AntiqueWhite2" , 238, 223, 204, 255 } , - { "AntiqueWhite3" , 205, 192, 176, 255 } , - { "AntiqueWhite4" , 139, 131, 120, 255 } , - { "Bisque1" , 255, 228, 196, 255 } , - { "Bisque2" , 238, 213, 183, 255 } , - { "Bisque3" , 205, 183, 158, 255 } , - { "Bisque4" , 139, 125, 107, 255 } , - { "PeachPuff1" , 255, 218, 185, 255 } , - { "PeachPuff2" , 238, 203, 173, 255 } , - { "PeachPuff3" , 205, 175, 149, 255 } , - { "PeachPuff4" , 139, 119, 101, 255 } , - { "NavajoWhite1" , 255, 222, 173, 255 } , - { "NavajoWhite2" , 238, 207, 161, 255 } , - { "NavajoWhite3" , 205, 179, 139, 255 } , - { "NavajoWhite4" , 139, 121, 94, 255 } , - { "LemonChiffon1" , 255, 250, 205, 255 } , - { "LemonChiffon2" , 238, 233, 191, 255 } , - { "LemonChiffon3" , 205, 201, 165, 255 } , - { "LemonChiffon4" , 139, 137, 112, 255 } , - { "Cornsilk1" , 255, 248, 220, 255 } , - { "Cornsilk2" , 238, 232, 205, 255 } , - { "Cornsilk3" , 205, 200, 177, 255 } , - { "Cornsilk4" , 139, 136, 120, 255 } , - { "Ivory1" , 255, 255, 240, 255 } , - { "Ivory2" , 238, 238, 224, 255 } , - { "Ivory3" , 205, 205, 193, 255 } , - { "Ivory4" , 139, 139, 131, 255 } , - { "Honeydew1" , 240, 255, 240, 255 } , - { "Honeydew2" , 224, 238, 224, 255 } , - { "Honeydew3" , 193, 205, 193, 255 } , - { "Honeydew4" , 131, 139, 131, 255 } , - { "LavenderBlush1" , 255, 240, 245, 255 } , - { "LavenderBlush2" , 238, 224, 229, 255 } , - { "LavenderBlush3" , 205, 193, 197, 255 } , - { "LavenderBlush4" , 139, 131, 134, 255 } , - { "MistyRose1" , 255, 228, 225, 255 } , - { "MistyRose2" , 238, 213, 210, 255 } , - { "MistyRose3" , 205, 183, 181, 255 } , - { "MistyRose4" , 139, 125, 123, 255 } , - { "Azure1" , 240, 255, 255, 255 } , - { "Azure2" , 224, 238, 238, 255 } , - { "Azure3" , 193, 205, 205, 255 } , - { "Azure4" , 131, 139, 139, 255 } , - { "SlateBlue1" , 131, 111, 255, 255 } , - { "SlateBlue2" , 122, 103, 238, 255 } , - { "SlateBlue3" , 105, 89, 205, 255 } , - { "SlateBlue4" , 71, 60, 139, 255 } , - { "RoyalBlue1" , 72, 118, 255, 255 } , - { "RoyalBlue2" , 67, 110, 238, 255 } , - { "RoyalBlue3" , 58, 95, 205, 255 } , - { "RoyalBlue4" , 39, 64, 139, 255 } , - { "Blue1" , 0, 0, 255, 255 } , - { "Blue2" , 0, 0, 238, 255 } , - { "Blue3" , 0, 0, 205, 255 } , - { "Blue4" , 0, 0, 139, 255 } , - { "DodgerBlue1" , 30, 144, 255, 255 } , - { "DodgerBlue2" , 28, 134, 238, 255 } , - { "DodgerBlue3" , 24, 116, 205, 255 } , - { "DodgerBlue4" , 16, 78, 139, 255 } , - { "SteelBlue1" , 99, 184, 255, 255 } , - { "SteelBlue2" , 92, 172, 238, 255 } , - { "SteelBlue3" , 79, 148, 205, 255 } , - { "SteelBlue4" , 54, 100, 139, 255 } , - { "DeepSkyBlue1" , 0, 191, 255, 255 } , - { "DeepSkyBlue2" , 0, 178, 238, 255 } , - { "DeepSkyBlue3" , 0, 154, 205, 255 } , - { "DeepSkyBlue4" , 0, 104, 139, 255 } , - { "SkyBlue1" , 135, 206, 255, 255 } , - { "SkyBlue2" , 126, 192, 238, 255 } , - { "SkyBlue3" , 108, 166, 205, 255 } , - { "SkyBlue4" , 74, 112, 139, 255 } , - { "LightSkyBlue1" , 176, 226, 255, 255 } , - { "LightSkyBlue2" , 164, 211, 238, 255 } , - { "LightSkyBlue3" , 141, 182, 205, 255 } , - { "LightSkyBlue4" , 96, 123, 139, 255 } , - { "SlateGray1" , 198, 226, 255, 255 } , - { "SlateGray2" , 185, 211, 238, 255 } , - { "SlateGray3" , 159, 182, 205, 255 } , - { "SlateGray4" , 108, 123, 139, 255 } , - { "LightSteelBlue1" , 202, 225, 255, 255 } , - { "LightSteelBlue2" , 188, 210, 238, 255 } , - { "LightSteelBlue3" , 162, 181, 205, 255 } , - { "LightSteelBlue4" , 110, 123, 139, 255 } , - { "LightBlue1" , 191, 239, 255, 255 } , - { "LightBlue2" , 178, 223, 238, 255 } , - { "LightBlue3" , 154, 192, 205, 255 } , - { "LightBlue4" , 104, 131, 139, 255 } , - { "LightCyan1" , 224, 255, 255, 255 } , - { "LightCyan2" , 209, 238, 238, 255 } , - { "LightCyan3" , 180, 205, 205, 255 } , - { "LightCyan4" , 122, 139, 139, 255 } , - { "PaleTurquoise1" , 187, 255, 255, 255 } , - { "PaleTurquoise2" , 174, 238, 238, 255 } , - { "PaleTurquoise3" , 150, 205, 205, 255 } , - { "PaleTurquoise4" , 102, 139, 139, 255 } , - { "CadetBlue1" , 152, 245, 255, 255 } , - { "CadetBlue2" , 142, 229, 238, 255 } , - { "CadetBlue3" , 122, 197, 205, 255 } , - { "CadetBlue4" , 83, 134, 139, 255 } , - { "Turquoise1" , 0, 245, 255, 255 } , - { "Turquoise2" , 0, 229, 238, 255 } , - { "Turquoise3" , 0, 197, 205, 255 } , - { "Turquoise4" , 0, 134, 139, 255 } , - { "Cyan1" , 0, 255, 255, 255 } , - { "Cyan2" , 0, 238, 238, 255 } , - { "Cyan3" , 0, 205, 205, 255 } , - { "Cyan4" , 0, 139, 139, 255 } , - { "DarkSlateGray1" , 151, 255, 255, 255 } , - { "DarkSlateGray2" , 141, 238, 238, 255 } , - { "DarkSlateGray3" , 121, 205, 205, 255 } , - { "DarkSlateGray4" , 82, 139, 139, 255 } , - { "Aquamarine1" , 127, 255, 212, 255 } , - { "Aquamarine2" , 118, 238, 198, 255 } , - { "Aquamarine3" , 102, 205, 170, 255 } , - { "Aquamarine4" , 69, 139, 116, 255 } , - { "DarkSeaGreen1" , 193, 255, 193, 255 } , - { "DarkSeaGreen2" , 180, 238, 180, 255 } , - { "DarkSeaGreen3" , 155, 205, 155, 255 } , - { "DarkSeaGreen4" , 105, 139, 105, 255 } , - { "SeaGreen1" , 84, 255, 159, 255 } , - { "SeaGreen2" , 78, 238, 148, 255 } , - { "SeaGreen3" , 67, 205, 128, 255 } , - { "SeaGreen4" , 46, 139, 87, 255 } , - { "PaleGreen1" , 154, 255, 154, 255 } , - { "PaleGreen2" , 144, 238, 144, 255 } , - { "PaleGreen3" , 124, 205, 124, 255 } , - { "PaleGreen4" , 84, 139, 84, 255 } , - { "SpringGreen1" , 0, 255, 127, 255 } , - { "SpringGreen2" , 0, 238, 118, 255 } , - { "SpringGreen3" , 0, 205, 102, 255 } , - { "SpringGreen4" , 0, 139, 69, 255 } , - { "Green1" , 0, 255, 0, 255 } , - { "Green2" , 0, 238, 0, 255 } , - { "Green3" , 0, 205, 0, 255 } , - { "Green4" , 0, 139, 0, 255 } , - { "Chartreuse1" , 127, 255, 0, 255 } , - { "Chartreuse2" , 118, 238, 0, 255 } , - { "Chartreuse3" , 102, 205, 0, 255 } , - { "Chartreuse4" , 69, 139, 0, 255 } , - { "OliveDrab1" , 192, 255, 62, 255 } , - { "OliveDrab2" , 179, 238, 58, 255 } , - { "OliveDrab3" , 154, 205, 50, 255 } , - { "OliveDrab4" , 105, 139, 34, 255 } , - { "DarkOliveGreen1" , 202, 255, 112, 255 } , - { "DarkOliveGreen2" , 188, 238, 104, 255 } , - { "DarkOliveGreen3" , 162, 205, 90, 255 } , - { "DarkOliveGreen4" , 110, 139, 61, 255 } , - { "Khaki1" , 255, 246, 143, 255 } , - { "Khaki2" , 238, 230, 133, 255 } , - { "Khaki3" , 205, 198, 115, 255 } , - { "Khaki4" , 139, 134, 78, 255 } , - { "LightGoldenrod1" , 255, 236, 139, 255 } , - { "LightGoldenrod2" , 238, 220, 130, 255 } , - { "LightGoldenrod3" , 205, 190, 112, 255 } , - { "LightGoldenrod4" , 139, 129, 76, 255 } , - { "LightYellow1" , 255, 255, 224, 255 } , - { "LightYellow2" , 238, 238, 209, 255 } , - { "LightYellow3" , 205, 205, 180, 255 } , - { "LightYellow4" , 139, 139, 122, 255 } , - { "Yellow1" , 255, 255, 0, 255 } , - { "Yellow2" , 238, 238, 0, 255 } , - { "Yellow3" , 205, 205, 0, 255 } , - { "Yellow4" , 139, 139, 0, 255 } , - { "Gold1" , 255, 215, 0, 255 } , - { "Gold2" , 238, 201, 0, 255 } , - { "Gold3" , 205, 173, 0, 255 } , - { "Gold4" , 139, 117, 0, 255 } , - { "Goldenrod1" , 255, 193, 37, 255 } , - { "Goldenrod2" , 238, 180, 34, 255 } , - { "Goldenrod3" , 205, 155, 29, 255 } , - { "Goldenrod4" , 139, 105, 20, 255 } , - { "DarkGoldenrod1" , 255, 185, 15, 255 } , - { "DarkGoldenrod2" , 238, 173, 14, 255 } , - { "DarkGoldenrod3" , 205, 149, 12, 255 } , - { "DarkGoldenrod4" , 139, 101, 8, 255 } , - { "RosyBrown1" , 255, 193, 193, 255 } , - { "RosyBrown2" , 238, 180, 180, 255 } , - { "RosyBrown3" , 205, 155, 155, 255 } , - { "RosyBrown4" , 139, 105, 105, 255 } , - { "IndianRed1" , 255, 106, 106, 255 } , - { "IndianRed2" , 238, 99, 99, 255 } , - { "IndianRed3" , 205, 85, 85, 255 } , - { "IndianRed4" , 139, 58, 58, 255 } , - { "Sienna1" , 255, 130, 71, 255 } , - { "Sienna2" , 238, 121, 66, 255 } , - { "Sienna3" , 205, 104, 57, 255 } , - { "Sienna4" , 139, 71, 38, 255 } , - { "Burlywood1" , 255, 211, 155, 255 } , - { "Burlywood2" , 238, 197, 145, 255 } , - { "Burlywood3" , 205, 170, 125, 255 } , - { "Burlywood4" , 139, 115, 85, 255 } , - { "Wheat1" , 255, 231, 186, 255 } , - { "Wheat2" , 238, 216, 174, 255 } , - { "Wheat3" , 205, 186, 150, 255 } , - { "Wheat4" , 139, 126, 102, 255 } , - { "Tan1" , 255, 165, 79, 255 } , - { "Tan2" , 238, 154, 73, 255 } , - { "Tan3" , 205, 133, 63, 255 } , - { "Tan4" , 139, 90, 43, 255 } , - { "Chocolate1" , 255, 127, 36, 255 } , - { "Chocolate2" , 238, 118, 33, 255 } , - { "Chocolate3" , 205, 102, 29, 255 } , - { "Chocolate4" , 139, 69, 19, 255 } , - { "Firebrick1" , 255, 48, 48, 255 } , - { "Firebrick2" , 238, 44, 44, 255 } , - { "Firebrick3" , 205, 38, 38, 255 } , - { "Firebrick4" , 139, 26, 26, 255 } , - { "Brown1" , 255, 64, 64, 255 } , - { "Brown2" , 238, 59, 59, 255 } , - { "Brown3" , 205, 51, 51, 255 } , - { "Brown4" , 139, 35, 35, 255 } , - { "Salmon1" , 255, 140, 105, 255 } , - { "Salmon2" , 238, 130, 98, 255 } , - { "Salmon3" , 205, 112, 84, 255 } , - { "Salmon4" , 139, 76, 57, 255 } , - { "LightSalmon1" , 255, 160, 122, 255 } , - { "LightSalmon2" , 238, 149, 114, 255 } , - { "LightSalmon3" , 205, 129, 98, 255 } , - { "LightSalmon4" , 139, 87, 66, 255 } , - { "Orange1" , 255, 165, 0, 255 } , - { "Orange2" , 238, 154, 0, 255 } , - { "Orange3" , 205, 133, 0, 255 } , - { "Orange4" , 139, 90, 0, 255 } , - { "DarkOrange1" , 255, 127, 0, 255 } , - { "DarkOrange2" , 238, 118, 0, 255 } , - { "DarkOrange3" , 205, 102, 0, 255 } , - { "DarkOrange4" , 139, 69, 0, 255 } , - { "Coral1" , 255, 114, 86, 255 } , - { "Coral2" , 238, 106, 80, 255 } , - { "Coral3" , 205, 91, 69, 255 } , - { "Coral4" , 139, 62, 47, 255 } , - { "Tomato1" , 255, 99, 71, 255 } , - { "Tomato2" , 238, 92, 66, 255 } , - { "Tomato3" , 205, 79, 57, 255 } , - { "Tomato4" , 139, 54, 38, 255 } , - { "OrangeRed1" , 255, 69, 0, 255 } , - { "OrangeRed2" , 238, 64, 0, 255 } , - { "OrangeRed3" , 205, 55, 0, 255 } , - { "OrangeRed4" , 139, 37, 0, 255 } , - { "Red1" , 255, 0, 0, 255 } , - { "Red2" , 238, 0, 0, 255 } , - { "Red3" , 205, 0, 0, 255 } , - { "Red4" , 139, 0, 0, 255 } , - { "DeepPink1" , 255, 20, 147, 255 } , - { "DeepPink2" , 238, 18, 137, 255 } , - { "DeepPink3" , 205, 16, 118, 255 } , - { "DeepPink4" , 139, 10, 80, 255 } , - { "HotPink1" , 255, 110, 180, 255 } , - { "HotPink2" , 238, 106, 167, 255 } , - { "HotPink3" , 205, 96, 144, 255 } , - { "HotPink4" , 139, 58, 98, 255 } , - { "Pink1" , 255, 181, 197, 255 } , - { "Pink2" , 238, 169, 184, 255 } , - { "Pink3" , 205, 145, 158, 255 } , - { "Pink4" , 139, 99, 108, 255 } , - { "LightPink1" , 255, 174, 185, 255 } , - { "LightPink2" , 238, 162, 173, 255 } , - { "LightPink3" , 205, 140, 149, 255 } , - { "LightPink4" , 139, 95, 101, 255 } , - { "PaleVioletRed1" , 255, 130, 171, 255 } , - { "PaleVioletRed2" , 238, 121, 159, 255 } , - { "PaleVioletRed3" , 205, 104, 137, 255 } , - { "PaleVioletRed4" , 139, 71, 93, 255 } , - { "Maroon1" , 255, 52, 179, 255 } , - { "Maroon2" , 238, 48, 167, 255 } , - { "Maroon3" , 205, 41, 144, 255 } , - { "Maroon4" , 139, 28, 98, 255 } , - { "VioletRed1" , 255, 62, 150, 255 } , - { "VioletRed2" , 238, 58, 140, 255 } , - { "VioletRed3" , 205, 50, 120, 255 } , - { "VioletRed4" , 139, 34, 82, 255 } , - { "Magenta1" , 255, 0, 255, 255 } , - { "Magenta2" , 238, 0, 238, 255 } , - { "Magenta3" , 205, 0, 205, 255 } , - { "Magenta4" , 139, 0, 139, 255 } , - { "Orchid1" , 255, 131, 250, 255 } , - { "Orchid2" , 238, 122, 233, 255 } , - { "Orchid3" , 205, 105, 201, 255 } , - { "Orchid4" , 139, 71, 137, 255 } , - { "Plum1" , 255, 187, 255, 255 } , - { "Plum2" , 238, 174, 238, 255 } , - { "Plum3" , 205, 150, 205, 255 } , - { "Plum4" , 139, 102, 139, 255 } , - { "MediumOrchid1" , 224, 102, 255, 255 } , - { "MediumOrchid2" , 209, 95, 238, 255 } , - { "MediumOrchid3" , 180, 82, 205, 255 } , - { "MediumOrchid4" , 122, 55, 139, 255 } , - { "DarkOrchid1" , 191, 62, 255, 255 } , - { "DarkOrchid2" , 178, 58, 238, 255 } , - { "DarkOrchid3" , 154, 50, 205, 255 } , - { "DarkOrchid4" , 104, 34, 139, 255 } , - { "purple1" , 155, 48, 255, 255 } , - { "purple2" , 145, 44, 238, 255 } , - { "purple3" , 125, 38, 205, 255 } , - { "purple4" , 85, 26, 139, 255 } , - { "MediumPurple1" , 171, 130, 255, 255 } , - { "MediumPurple2" , 159, 121, 238, 255 } , - { "MediumPurple3" , 137, 104, 205, 255 } , - { "MediumPurple4" , 93, 71, 139, 255 } , - { "Thistle1" , 255, 225, 255, 255 } , - { "Thistle2" , 238, 210, 238, 255 } , - { "Thistle3" , 205, 181, 205, 255 } , - { "Thistle4" , 139, 123, 139, 255 } , - { "Gray0" , 0, 0, 0, 255 } , - { "Grey0" , 0, 0, 0, 255 } , - { "Gray1" , 3, 3, 3, 255 } , - { "Grey1" , 3, 3, 3, 255 } , - { "Gray2" , 5, 5, 5, 255 } , - { "Grey2" , 5, 5, 5, 255 } , - { "Gray3" , 8, 8, 8, 255 } , - { "Grey3" , 8, 8, 8, 255 } , - { "Gray4" , 10, 10, 10, 255 } , - { "Grey4" , 10, 10, 10, 255 } , - { "Gray5" , 13, 13, 13, 255 } , - { "Grey5" , 13, 13, 13, 255 } , - { "Gray6" , 15, 15, 15, 255 } , - { "Grey6" , 15, 15, 15, 255 } , - { "Gray7" , 18, 18, 18, 255 } , - { "Grey7" , 18, 18, 18, 255 } , - { "Gray8" , 20, 20, 20, 255 } , - { "Grey8" , 20, 20, 20, 255 } , - { "Gray9" , 23, 23, 23, 255 } , - { "Grey9" , 23, 23, 23, 255 } , - { "Gray10" , 26, 26, 26, 255 } , - { "Grey10" , 26, 26, 26, 255 } , - { "Gray11" , 28, 28, 28, 255 } , - { "Grey11" , 28, 28, 28, 255 } , - { "Gray12" , 31, 31, 31, 255 } , - { "Grey12" , 31, 31, 31, 255 } , - { "Gray13" , 33, 33, 33, 255 } , - { "Grey13" , 33, 33, 33, 255 } , - { "Gray14" , 36, 36, 36, 255 } , - { "Grey14" , 36, 36, 36, 255 } , - { "Gray15" , 38, 38, 38, 255 } , - { "Grey15" , 38, 38, 38, 255 } , - { "Gray16" , 41, 41, 41, 255 } , - { "Grey16" , 41, 41, 41, 255 } , - { "Gray17" , 43, 43, 43, 255 } , - { "Grey17" , 43, 43, 43, 255 } , - { "Gray18" , 46, 46, 46, 255 } , - { "Grey18" , 46, 46, 46, 255 } , - { "Gray19" , 48, 48, 48, 255 } , - { "Grey19" , 48, 48, 48, 255 } , - { "Gray20" , 51, 51, 51, 255 } , - { "Grey20" , 51, 51, 51, 255 } , - { "Gray21" , 54, 54, 54, 255 } , - { "Grey21" , 54, 54, 54, 255 } , - { "Gray22" , 56, 56, 56, 255 } , - { "Grey22" , 56, 56, 56, 255 } , - { "Gray23" , 59, 59, 59, 255 } , - { "Grey23" , 59, 59, 59, 255 } , - { "Gray24" , 61, 61, 61, 255 } , - { "Grey24" , 61, 61, 61, 255 } , - { "Gray25" , 64, 64, 64, 255 } , - { "Grey25" , 64, 64, 64, 255 } , - { "Gray26" , 66, 66, 66, 255 } , - { "Grey26" , 66, 66, 66, 255 } , - { "Gray27" , 69, 69, 69, 255 } , - { "Grey27" , 69, 69, 69, 255 } , - { "Gray28" , 71, 71, 71, 255 } , - { "Grey28" , 71, 71, 71, 255 } , - { "Gray29" , 74, 74, 74, 255 } , - { "Grey29" , 74, 74, 74, 255 } , - { "Gray30" , 77, 77, 77, 255 } , - { "Grey30" , 77, 77, 77, 255 } , - { "Gray31" , 79, 79, 79, 255 } , - { "Grey31" , 79, 79, 79, 255 } , - { "Gray32" , 82, 82, 82, 255 } , - { "Grey32" , 82, 82, 82, 255 } , - { "Gray33" , 84, 84, 84, 255 } , - { "Grey33" , 84, 84, 84, 255 } , - { "Gray34" , 87, 87, 87, 255 } , - { "Grey34" , 87, 87, 87, 255 } , - { "Gray35" , 89, 89, 89, 255 } , - { "Grey35" , 89, 89, 89, 255 } , - { "Gray36" , 92, 92, 92, 255 } , - { "Grey36" , 92, 92, 92, 255 } , - { "Gray37" , 94, 94, 94, 255 } , - { "Grey37" , 94, 94, 94, 255 } , - { "Gray38" , 97, 97, 97, 255 } , - { "Grey38" , 97, 97, 97, 255 } , - { "Gray39" , 99, 99, 99, 255 } , - { "Grey39" , 99, 99, 99, 255 } , - { "Gray40" , 102, 102, 102, 255 } , - { "Grey40" , 102, 102, 102, 255 } , - { "Gray41" , 105, 105, 105, 255 } , - { "Grey41" , 105, 105, 105, 255 } , - { "Gray42" , 107, 107, 107, 255 } , - { "Grey42" , 107, 107, 107, 255 } , - { "Gray43" , 110, 110, 110, 255 } , - { "Grey43" , 110, 110, 110, 255 } , - { "Gray44" , 112, 112, 112, 255 } , - { "Grey44" , 112, 112, 112, 255 } , - { "Gray45" , 115, 115, 115, 255 } , - { "Grey45" , 115, 115, 115, 255 } , - { "Gray46" , 117, 117, 117, 255 } , - { "Grey46" , 117, 117, 117, 255 } , - { "Gray47" , 120, 120, 120, 255 } , - { "Grey47" , 120, 120, 120, 255 } , - { "Gray48" , 122, 122, 122, 255 } , - { "Grey48" , 122, 122, 122, 255 } , - { "Gray49" , 125, 125, 125, 255 } , - { "Grey49" , 125, 125, 125, 255 } , - { "Gray50" , 127, 127, 127, 255 } , - { "Grey50" , 127, 127, 127, 255 } , - { "Gray51" , 130, 130, 130, 255 } , - { "Grey51" , 130, 130, 130, 255 } , - { "Gray52" , 133, 133, 133, 255 } , - { "Grey52" , 133, 133, 133, 255 } , - { "Gray53" , 135, 135, 135, 255 } , - { "Grey53" , 135, 135, 135, 255 } , - { "Gray54" , 138, 138, 138, 255 } , - { "Grey54" , 138, 138, 138, 255 } , - { "Gray55" , 140, 140, 140, 255 } , - { "Grey55" , 140, 140, 140, 255 } , - { "Gray56" , 143, 143, 143, 255 } , - { "Grey56" , 143, 143, 143, 255 } , - { "Gray57" , 145, 145, 145, 255 } , - { "Grey57" , 145, 145, 145, 255 } , - { "Gray58" , 148, 148, 148, 255 } , - { "Grey58" , 148, 148, 148, 255 } , - { "Gray59" , 150, 150, 150, 255 } , - { "Grey59" , 150, 150, 150, 255 } , - { "Gray60" , 153, 153, 153, 255 } , - { "Grey60" , 153, 153, 153, 255 } , - { "Gray61" , 156, 156, 156, 255 } , - { "Grey61" , 156, 156, 156, 255 } , - { "Gray62" , 158, 158, 158, 255 } , - { "Grey62" , 158, 158, 158, 255 } , - { "Gray63" , 161, 161, 161, 255 } , - { "Grey63" , 161, 161, 161, 255 } , - { "Gray64" , 163, 163, 163, 255 } , - { "Grey64" , 163, 163, 163, 255 } , - { "Gray65" , 166, 166, 166, 255 } , - { "Grey65" , 166, 166, 166, 255 } , - { "Gray66" , 168, 168, 168, 255 } , - { "Grey66" , 168, 168, 168, 255 } , - { "Gray67" , 171, 171, 171, 255 } , - { "Grey67" , 171, 171, 171, 255 } , - { "Gray68" , 173, 173, 173, 255 } , - { "Grey68" , 173, 173, 173, 255 } , - { "Gray69" , 176, 176, 176, 255 } , - { "Grey69" , 176, 176, 176, 255 } , - { "Gray70" , 179, 179, 179, 255 } , - { "Grey70" , 179, 179, 179, 255 } , - { "Gray71" , 181, 181, 181, 255 } , - { "Grey71" , 181, 181, 181, 255 } , - { "Gray72" , 184, 184, 184, 255 } , - { "Grey72" , 184, 184, 184, 255 } , - { "Gray73" , 186, 186, 186, 255 } , - { "Grey73" , 186, 186, 186, 255 } , - { "Gray74" , 189, 189, 189, 255 } , - { "Grey74" , 189, 189, 189, 255 } , - { "Gray75" , 191, 191, 191, 255 } , - { "Grey75" , 191, 191, 191, 255 } , - { "Gray76" , 194, 194, 194, 255 } , - { "Grey76" , 194, 194, 194, 255 } , - { "Gray77" , 196, 196, 196, 255 } , - { "Grey77" , 196, 196, 196, 255 } , - { "Gray78" , 199, 199, 199, 255 } , - { "Grey78" , 199, 199, 199, 255 } , - { "Gray79" , 201, 201, 201, 255 } , - { "Grey79" , 201, 201, 201, 255 } , - { "Gray80" , 204, 204, 204, 255 } , - { "Grey80" , 204, 204, 204, 255 } , - { "Gray81" , 207, 207, 207, 255 } , - { "Grey81" , 207, 207, 207, 255 } , - { "Gray82" , 209, 209, 209, 255 } , - { "Grey82" , 209, 209, 209, 255 } , - { "Gray83" , 212, 212, 212, 255 } , - { "Grey83" , 212, 212, 212, 255 } , - { "Gray84" , 214, 214, 214, 255 } , - { "Grey84" , 214, 214, 214, 255 } , - { "Gray85" , 217, 217, 217, 255 } , - { "Grey85" , 217, 217, 217, 255 } , - { "Gray86" , 219, 219, 219, 255 } , - { "Grey86" , 219, 219, 219, 255 } , - { "Gray87" , 222, 222, 222, 255 } , - { "Grey87" , 222, 222, 222, 255 } , - { "Gray88" , 224, 224, 224, 255 } , - { "Grey88" , 224, 224, 224, 255 } , - { "Gray89" , 227, 227, 227, 255 } , - { "Grey89" , 227, 227, 227, 255 } , - { "Gray90" , 229, 229, 229, 255 } , - { "Grey90" , 229, 229, 229, 255 } , - { "Gray91" , 232, 232, 232, 255 } , - { "Grey91" , 232, 232, 232, 255 } , - { "Gray92" , 235, 235, 235, 255 } , - { "Grey92" , 235, 235, 235, 255 } , - { "Gray93" , 237, 237, 237, 255 } , - { "Grey93" , 237, 237, 237, 255 } , - { "Gray94" , 240, 240, 240, 255 } , - { "Grey94" , 240, 240, 240, 255 } , - { "Gray95" , 242, 242, 242, 255 } , - { "Grey95" , 242, 242, 242, 255 } , - { "Gray96" , 245, 245, 245, 255 } , - { "Grey96" , 245, 245, 245, 255 } , - { "Gray97" , 247, 247, 247, 255 } , - { "Grey97" , 247, 247, 247, 255 } , - { "Gray98" , 250, 250, 250, 255 } , - { "Grey98" , 250, 250, 250, 255 } , - { "Gray99" , 252, 252, 252, 255 } , - { "Grey99" , 252, 252, 252, 255 } , - { "Gray100" , 255, 255, 255, 255 } , - { "Grey100" , 255, 255, 255, 255 } , - { "DarkGrey" , 169, 169, 169, 255 } , - { "DarkGray" , 169, 169, 169, 255 } , - { "DarkBlue" , 0 , 0, 139, 255 } , - { "DarkCyan" , 0 , 139, 139, 255 } , - { "DarkMagenta" , 139, 0, 139, 255 } , - { "DarkRed" , 139, 0, 0, 255 } , - { "LightGreen" , 144, 238, 144, 255 } , - { NULL , 0 , 0, 0, 255 } -} ; - -int Get_ColorForString(StringX4Int SX4I[], int alpha, - char * string, int * FlagError); - - -#endif diff --git a/Common/Context.cpp b/Common/Context.cpp deleted file mode 100644 index 53a44aa1797961a50d78d72e727aa829eb5f0194..0000000000000000000000000000000000000000 --- a/Common/Context.cpp +++ /dev/null @@ -1,130 +0,0 @@ -// $Id: Context.cpp,v 1.40 2001-08-11 23:28:31 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "Mesh.h" -#include "Draw.h" -#include "Context.h" -#include "Options.h" -#include "DefaultOptions.h" -#include "trackball.c" - -extern Context_T CTX ; - -/* - 3 rotations successives autour de x, y et z: - - c(y)c(z) s(x)s(y)c(z)+c(x)s(z) -c(x)s(y)c(z)+s(x)s(z) - t[][] = -c(y)s(z) -s(x)s(y)s(z)+c(x)c(z) c(x)s(y)s(z)+s(x)c(z) - s(y) -s(x)c(y) c(x)c(y) - - get the position angles: - - y = asin(t31) - Pi - asin(t31) - - si y != +- Pi/2 : - - x = atan(-t32/t33) si t33 cos y > 0 - atan(-t32/t33)+Pi si t33 cos y < 0 - - z = atan(-t21/t11) si t11 cos y > 0 - atan(-t21/t11)+Pi si t11 cos y < 0 - -*/ - -void Context_T::buildRotmatrix(void) -{ - double x, y, z; - extern void set_r(int i, double val); - - if(CTX.useTrackball){ - build_rotmatrix(rot, quaternion); - // get the position angles - /* - double x=0., y=0., z=0. - - y = asin(rot[2][0]) ; y = Pi - asin(rot[2][0]) ; // choix ??? - - if(fabs(y) != Pi/2.){ - if(rot[2][2]*cos(y) > 0.) x = atan2(-rot[2][1],rot[2][2]); - else x = atan2(-rot[2][1],rot[2][2]) + Pi; - if(rot[0][0]*cos(y) > 0.) z = atan2(-rot[1][0],rot[0][0]); - else z = atan2(-rot[1][0],rot[0][0]) + Pi; - } - set_r(0, x * 180./Pi); - set_r(1, y * 180./Pi); - set_r(2, z * 180./Pi); - */ - /* - double r0, r1, r2; - - r1 = atan2(-rot[0][2],sqrt(rot[1][2]*rot[1][2] + rot[2][2]*rot[2][2])); - - double c = cos(r1); - if(c != 0.0){ - r0 = atan2(rot[1][2]/c,rot[2][2]/c) ; - r2 = atan2(-rot[1][0]/c,rot[0][0]/c) ; - r0 *= 180./(Pi); - r2 *= 180./(Pi); - } - set_r(0, r0); - set_r(1, r1 * 180./(Pi)); // lazyyyyyy - set_r(2, r2); - */ - - // until we can compute this correctly - set_r(0, 0.); - set_r(1, 0.); - set_r(2, 0.); - - } - else{ - x = r[0] * Pi / 180.; - y = r[1] * Pi / 180.; - z = r[2] * Pi / 180.; - - rot[0][0] = cos(y)*cos(z) ; - rot[0][1] = sin(x)*sin(y)*cos(z)+cos(x)*sin(z); - rot[0][2] = -cos(x)*sin(y)*cos(z)+sin(x)*sin(z); - rot[0][3] = 0.0; - - rot[1][0] = -cos(y)*sin(z); - rot[1][1] = -sin(x)*sin(y)*sin(z)+cos(x)*cos(z); - rot[1][2] = cos(x)*sin(y)*sin(z)+sin(x)*cos(z); - rot[1][3] = 0.0; - - rot[2][0] = sin(y); - rot[2][1] = -sin(x)*cos(y); - rot[2][2] = cos(x)*cos(y); - rot[2][3] = 0.0; - - rot[3][0] = 0.0 ; - rot[3][1] = 0.0 ; - rot[3][2] = 0.0 ; - rot[3][3] = 1.0 ; - /* - printf("x=%g y=%g z=%g\n", r[0], r[1], r[2]); - printf("[%g %g %g]\n", rot[0][0], rot[0][1], rot[0][2]); - printf("[%g %g %g]\n", rot[1][0], rot[1][1], rot[1][2]); - printf("[%g %g %g]\n", rot[2][0], rot[2][1], rot[2][2]); - */ - } - -} - -void Context_T::addQuaternion (float p1x, float p1y, float p2x, float p2y) -{ - float quat[4]; - trackball(quat,p1x,p1y,p2x,p2y); - add_quats(quat, quaternion, quaternion); -} - -void Context_T::setQuaternion (float q0, float q1, float q2, float q3) -{ - quaternion[0] = q0; - quaternion[1] = q1; - quaternion[2] = q2; - quaternion[3] = q3; -} diff --git a/Common/Context.h b/Common/Context.h deleted file mode 100644 index c4ebf39cfba5a5135a4ed37d6b114f9c82254688..0000000000000000000000000000000000000000 --- a/Common/Context.h +++ /dev/null @@ -1,192 +0,0 @@ -#ifndef _CONTEXT_H_ -#define _CONTEXT_H_ - -// How RGBA values are packed and unpacked into/from a 4-byte integer - -# ifdef _LITTLE_ENDIAN -# define PACK_COLOR(R,G,B,A) ( (A)<<24 | (B)<<16 | (G)<<8 | (R) ) -# define UNPACK_RED(X) ( (X) & 0xff ) -# define UNPACK_GREEN(X) ( ( (X) >> 8 ) & 0xff ) -# define UNPACK_BLUE(X) ( ( (X) >> 16 ) & 0xff ) -# define UNPACK_ALPHA(X) ( ( (X) >> 24 ) & 0xff ) -# else -# define PACK_COLOR(R,G,B,A) ( (R)<<24 | (G)<<16 | (B)<<8 | (A) ) -# define UNPACK_RED(X) ( ( (X) >> 24 ) & 0xff ) -# define UNPACK_GREEN(X) ( ( (X) >> 16 ) & 0xff ) -# define UNPACK_BLUE(X) ( ( (X) >> 8 ) & 0xff ) -# define UNPACK_ALPHA(X) ( (X) & 0xff ) -# endif - -// Interface-independant context - -class Context_T { - -public : - - // general options - char filename[256]; // the name of the currently opened file - char base_filename[256]; // the same without the extension - char *output_filename; // output file specified with command line option '-o' - char *default_filename; // the name of the default file - char *tmp_filename; // the name of the temp file - char *session_filename, sessionrc_filename[256]; - // the name of the sessionrc configuration file - char *options_filename, optionsrc_filename[256]; - // the name of the optionrc configuration file - char *error_filename; // the name of the error file - - int session_save, options_save; // save session/option file on exit - char *display; // forced display host:0.0 under X11 - int terminal; // show we print to the terminal console? - char *editor; // text editor command (with included '%s') - char home_dir[256]; // the home directory - - int position[2]; // position of the menu window on the screen - int gl_position[2]; // position of the graphic window on the screen - int msg_position[2]; // position of the message window on the screen - int msg_size[2]; // size of the message window on the screen - int center_windows; // center popup windows on the menu window - - int default_plugins; // do we load default plugins on startup? - - int batch; // 0=full gfx; -1=just parse; 1,2,3=batch 1D, 2D, 3D mesh - int initial_context; // 0=automatic; 1=geom; 2=mesh; 3=solver; 4=post - int verbosity; // 0=silent -> 3=debug - int expose; // 1 if everything is ready to expose and draw - - float rot[4][4]; // current rotation matrix - double r[3]; // position angles (if succ. rot. along x, y and z) - double t[3], s[3]; // current translation and scale - int rlock[3], tlock[3], slock[3]; - // locks for r, t and s - float quaternion[4]; // the actual quaternion used for "trackball" rotating - int useTrackball; // do or do not use the trackball for rotations - - double min[3]; // x, y and z min for the current geometry - double max[3]; // x, y and z max for the current geometry - double range[3]; // maximum range in the three directions - double lc, lc_middle; // characteristic lengths for the whole problem, - double lc_order; // and never used in mesh generation (->only for geo/post) - - int db; // double buffer? - int overlay; // overlay graphic window? - int stream; // output stream: TO_SCREEN or TO_FILE - int ortho; // orthogonal projection? - int fast; // inhibit mesh and postpro drawing when changing r,s,t - int command_win; // command window? - int display_lists; // use display lists? - int axes, small_axes; // draw axes? - int threads, threads_lock; // threads?, lock (should be a mutex...) - int alpha; // enable alpha blending - int flash; // authorize colormap flashing (beek) - int same_visual; // force same visual for GUI and Graphics - double zoom_factor; // mouse2 zoom coefficient - - //only used for Motif - int font_base; // display list index for the font - char *font; // main font - char *fixed_font; // font for colorbar - //end(only used for Motif) - - int fontsize; // font size for fltk UI - int gl_fontsize; // font size for opengl graphics - int gl_fontheight; // font height - int gl_fontascent; // height of the font above the reference point - - int viewport[4]; // current viewport - double vxmin, vxmax, vymin, vymax; // current viewport in real coordinates - int light[6]; // status of light - float light_position[6][4]; // light sources positions - int moving_light; // type of light (follows the model or not) - float shine; // specular value - int render_mode; // GMSH_RENDER, GMSH_SELECT, GMSH_FEEDBACK - int clip[6]; // status of clip planes - double clip_plane[6][4]; // clip planes - double pixel_equiv_x, pixel_equiv_y ; - // approximative equivalent model length of a pixel - int color_scheme ; // general color scheme - - // geometry options - struct{ - int vis_type; - int points, lines, surfaces, volumes; - int points_num, lines_num, surfaces_num, volumes_num; - int hidden, shade; - int highlight; - int level, old_circle; - double normals, tangents; - double scaling_factor; - int color_scheme ; - } geom; - - // mesh options - struct { - int vis_type; - int draw; - int points, lines, surfaces, volumes; - int points_num, lines_num, surfaces_num, volumes_num; - double quality; - double gamma_inf, gamma_sup, radius_inf, radius_sup; - double scaling_factor, lc_factor, rand_factor; - int dual, interactive; - int hidden, shade; - int format, nb_smoothing, algo, degree; - int point_insertion, speed_max, min_circ_points, constrained_bgmesh; - int histogram; - double normals, tangents, explode; - int color_scheme, color_carousel ; - int use_cut_plane; - double cut_planea,cut_planeb,cut_planec,cut_planed; - double evalCutPlane (double x, double y, double z) - { - double val = cut_planea * x + - cut_planeb * y + - cut_planec * z + cut_planed; - return val; - } - int oldxtrude, oldxtrude_recombine, check_duplicates; - } mesh; - - // post processing options - struct{ - int draw, scales, link ; - int smooth ; - int nb_views ; - double anim_delay ; - }post; - - // print options - struct{ - int format; - int eps_quality, eps_background; - int jpeg_quality; - int gif_dither, gif_sort, gif_interlace, gif_transparent; - char *font; - int font_size, gl_fonts; - int geom_line_width, mesh_line_width, post_line_width; - } print; - - // color options - struct{ - unsigned int bg, fg, text, axes, small_axes; - struct{ - unsigned int point, line, surface, volume; - unsigned int point_sel, line_sel, surface_sel, volume_sel; - unsigned int point_hlt, line_hlt, surface_hlt, volume_hlt; - unsigned int tangents, normals; - } geom; - struct{ - unsigned int vertex, vertex_supp, line, triangle, quadrangle; - unsigned int tetrahedron, hexahedron, prism, pyramid; - unsigned int carousel[10]; - unsigned int tangents, normals; - } mesh; - } color; - - // trackball functions - void buildRotmatrix(void); - void setQuaternion (float p1x, float p1y, float p2x, float p2y); - void addQuaternion (float p1x, float p1y, float p2x, float p2y); -}; - -#endif diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h deleted file mode 100644 index b0bc6ef1488a6e30eaf1d9aa68f64a55a0d35aba..0000000000000000000000000000000000000000 --- a/Common/DefaultOptions.h +++ /dev/null @@ -1,727 +0,0 @@ -#ifndef _DEFAULT_OPTIONS_H_ -#define _DEFAULT_OPTIONS_H_ - -// Option Database (General, Geometry, Mesh, Post, View, Print), with -// default values. The first number defines the level of saving: O -// for the option file, S for the session file and F for the full -// listing: - -#define S GMSH_SESSIONRC -#define O GMSH_OPTIONSRC -#define F GMSH_FULLRC - -// STRINGS - -StringXString GeneralOptions_String[] = { - { F, "Display" , opt_general_display , "" , - "X server to use (only for Unix versions)" }, - { 0, "SessionFileName" , opt_general_session_filename , ".gmshrc" , - "File into which session specific information is saved, and which is read on startup" }, - { F|S, "DefaultFileName" , opt_general_default_filename , "unnamed.geo" , - "Default project file name" }, - { F|S, "TmpFileName" , opt_general_tmp_filename , ".gmsh-tmp" , - "Temporary file (created in your home directory)" }, - { F|S, "ErrorFileName" , opt_general_error_filename , ".gmsh-errors" , - "File into which the log is saved if a fatal error occurs" }, - { F|S, "OptionsFileName" , opt_general_options_filename , ".gmsh-options" , - "File created in your home directory with 'Options->Save options now', and which is read on startup" }, -#ifdef WIN32 - { F|O, "TextEditor" , opt_general_editor , "notepad %s" , -#else - { F|O, "TextEditor" , opt_general_editor , "emacs %s &" , -#endif - "System command to launch a text editor" }, - { 0, NULL , NULL , NULL , NULL } -} ; - -StringXString GeometryOptions_String[] = { - { 0, NULL , NULL , NULL , NULL } -} ; - -StringXString MeshOptions_String[] = { - { 0, NULL , NULL , NULL , NULL } -} ; - -StringXString SolverOptions_String[] = { -#ifdef WIN32 - { F|O, "GetDPCommand" , opt_solver_getdp_command , "./getdp.exe" , -#else - { F|O, "GetDPCommand" , opt_solver_getdp_command , "getdp" , -#endif - "System command to launch the GetDP solver (should _not_ contain the '&' character)" }, - { 0, NULL , NULL , NULL , NULL } -} ; - -StringXString PostProcessingOptions_String[] = { - { 0, NULL , NULL , NULL , NULL } -} ; - -StringXString ViewOptions_String[] = { - { F, "Name" , opt_view_name , "" , - "Default name to assign to the post-processing view" }, - { F|O, "Format" , opt_view_format , "%.3e" , - "Number format (in standard C form)" }, - { F, "FileName" , opt_view_filename , "" , - "Default file name to assign to the post-processing view" }, - { 0, NULL , NULL , NULL , NULL } -} ; - -StringXString PrintOptions_String[] = { - { F|O, "Font" , opt_print_font , "Courier" , - "Font used for postscript printing" }, - { 0, NULL , NULL , NULL , NULL } -} ; - -// NUMBERS - -StringXNumber GeneralOptions_Number[] = { - { F|O, "InitialModule", opt_general_initial_context, 0. , - "Module launched on startup (0=automatic, 1=geometry, 2=mesh, 3=solver, 4=post-processing) " }, - { F|S, "SaveSession" , opt_general_session_save, 1. , - "Automatically save session specific information each time you quit Gmsh?" }, - { F|S, "SaveOptions" , opt_general_options_save, 0. , - "Automatically save all current options each time you quit Gmsh?" }, - { F|S, "FontSize" , opt_general_fontsize , 12. , - "Size of the font in the graphical user interface" }, - { F|S, "GraphicsFontSize" , opt_general_graphics_fontsize , 11. , - "Size of the font in the graphic window" }, - { F|S, "GraphicsPositionX" , opt_general_graphics_position0 , 20. , - "Horizontal position (in pixels) of the upper left corner of the graphic window" }, - { F|S, "GraphicsPositionY" , opt_general_graphics_position1 , 30. , - "Vertical position (in pixels) of the upper left corner of the graphic window" }, - { F|S, "GraphicsWidth" , opt_general_viewport2 , 700. , - "Width (in pixels) of the graphic window" }, - { F|S, "GraphicsHeight" , opt_general_viewport3 , 500. , - "Height (in pixels) of the graphic window" }, - { F|S, "MenuPositionX" , opt_general_menu_position0 , 800. , - "Horizontal position (in pixels) of the upper left corner of the menu window" }, - { F|S, "MenuPositionY" , opt_general_menu_position1 , 50. , - "Vertical position (in pixels) of the upper left corner of the menu window" }, - { F|S, "MessagePositionX" , opt_general_message_position0 , 650. , - "Horizontal position (in pixels) of the upper left corner of the message window" }, - { F|S, "MessagePositionY" , opt_general_message_position1 , 150. , - "Vertical position (in pixels) of the upper left corner of the message window" }, - { F|S, "MessageWidth" , opt_general_message_size0 , 450. , - "Width (in pixels) of the message window" }, - { F|S, "MessageHeight" , opt_general_message_size1 , 350. , - "Height (in pixels) of the message window" }, - { F|O, "CenterWindows" , opt_general_center_windows , 1. , - "Center new windows on the menu window" }, - { F, "RotationX" , opt_general_rotation0 , 0.0 , - "First Euler angle (used if Trackball == 0)" }, - { F, "RotationY" , opt_general_rotation1 , 0.0 , - "Second Euler angle (used if Trackball == 0)" }, - { F, "RotationZ" , opt_general_rotation2 , 0.0 , - "Third Euler angle (used if Trackball == 0)" }, - { F, "TrackballQuaternion0" , opt_general_quaternion0 , 0.0 , - "First trackball quaternion component (used if Trackball == 1)" }, - { F, "TrackballQuaternion1" , opt_general_quaternion1 , 0.0 , - "Second trackball quaternion component (used if Trackball == 1)" }, - { F, "TrackballQuaternion2" , opt_general_quaternion2 , 0.0 , - "Third trackball quaternion component (used if Trackball == 1)" }, - { F, "TrackballQuaternion3" , opt_general_quaternion3 , 1.0 , - "Fourth trackball quaternion component (used if Trackball == 1)" }, - { F, "TranslationX" , opt_general_translation0 , 0.0 , - "X-axis translation (in model units)" }, - { F, "TranslationY" , opt_general_translation1 , 0.0 , - "Y-axis translation (in model units)" }, - { F, "TranslationZ" , opt_general_translation2 , 0.0 , - "Z-axis translation (in model units)" }, - { F, "ScaleX" , opt_general_scale0 , 1.0 , - "X-axis scale factor" }, - { F, "ScaleY" , opt_general_scale1 , 1.0 , - "Y-axis scale factor" }, - { F, "ScaleZ" , opt_general_scale2 , 1.0 , - "Z-axis scale factor" }, - { F|O, "Shininess" , opt_general_shine , 0.4 , - "Material shininess (must be > 0)" }, - { F|O, "ColorScheme", opt_general_color_scheme , 0. , - "Default color scheme (0, 1 or 2)" }, -#ifdef _BLACKBOX - { F|O, "Verbosity" , opt_general_verbosity , 0. , -#else - { F|O, "Verbosity" , opt_general_verbosity , 2. , -#endif - "Level of information printed during processing (0=no information)" }, -#ifdef _FLTK - { F|O, "Terminal" , opt_general_terminal , 0. , -#else - { F|O, "Terminal" , opt_general_terminal , 1. , -#endif - "Should information be printed on the terminal (if available)?" }, - { F|O, "Orthographic" , opt_general_orthographic , 1. , - "Orthographic projection mode (0=perspective projection)" }, - { F|O, "FastRedraw" , opt_general_fast_redraw , 1. , - "Fast redraw (no mesh or view display) when moving the model" }, - { F|O, "Axes" , opt_general_axes , 1. , - "Display the axes linked to the model" }, - { F|O, "SmallAxes" , opt_general_small_axes , 1. , - "Display the small axes" }, - { F|O, "DoubleBuffer" , opt_general_double_buffer , 1. , - "Use a double buffered graphic window (on Unix, should be set to 0 when working on a remote host without GLX)" }, - { F|O, "DisplayLists" , opt_general_display_lists , 0. , - "Use OpenGL display lists (useful with real time manipulation of 'big' post-processing views)" }, - { F|O, "AlphaBlending" , opt_general_alpha_blending , 0. , - "Enable alpha blending (transparency) in post-processing views" }, - { F|O, "Trackball" , opt_general_trackball , 1. , - "Use trackball rotation mode" }, - { F|O, "ZoomFactor" , opt_general_zoom_factor , 1.1 , - "'Speed' of the middle mouse button zoom" }, - { F|O, "DefaultPlugins" , opt_general_default_plugins , 1. , - "Load default plugins on startup" }, - { F, "Clip0" , opt_general_clip0 , 0. , - "Enable clip plane 0" }, - { F, "Clip0A" , opt_general_clip0a , 0.0 , - "First clip plane 0 equation coefficient ('A' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip0B" , opt_general_clip0b , 0.0 , - "Second clip plane 0 equation coefficient ('B' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip0C" , opt_general_clip0c , 0.0 , - "Third clip plane 0 equation coefficient ('C' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip0D" , opt_general_clip0d , 0.0 , - "Fourth clip plane 0 equation coefficient ('D' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip1" , opt_general_clip1 , 0., - "Enable clip plane 1" }, - { F, "Clip1A" , opt_general_clip1a , 0.0 , - "First clip plane 1 equation coefficient ('A' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip1B" , opt_general_clip1b , 0.0 , - "Second clip plane 1 equation coefficient ('B' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip1C" , opt_general_clip1c , 0.0 , - "Third clip plane 1 equation coefficient ('C' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip1D" , opt_general_clip1d , 0.0 , - "Fourth clip plane 1 equation coefficient ('D' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip2" , opt_general_clip2 , 0., - "Enable clip plane 2" }, - { F, "Clip2A" , opt_general_clip2a , 0.0 , - "First clip plane 2 equation coefficient ('A' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip2B" , opt_general_clip2b , 0.0 , - "Second clip plane 2 equation coefficient ('B' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip2C" , opt_general_clip2c , 0.0 , - "Third clip plane 2 equation coefficient ('C' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip2D" , opt_general_clip2d , 0.0 , - "Fourth clip plane 2 equation coefficient ('D' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip3" , opt_general_clip3 , 0., - "Enable clip plane 3" }, - { F, "Clip3A" , opt_general_clip3a , 0.0 , - "First clip plane 3 equation coefficient ('A' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip3B" , opt_general_clip3b , 0.0 , - "Second clip plane 3 equation coefficient ('B' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip3C" , opt_general_clip3c , 0.0 , - "Third clip plane 3 equation coefficient ('C' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip3D" , opt_general_clip3d , 0.0 , - "Fourth clip plane 3 equation coefficient ('D' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip4" , opt_general_clip4 , 0., - "Enable clip plane 4" }, - { F, "Clip4A" , opt_general_clip4a , 0.0 , - "First clip plane 4 equation coefficient ('A' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip4B" , opt_general_clip4b , 0.0 , - "Second clip plane 4 equation coefficient ('B' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip4C" , opt_general_clip4c , 0.0 , - "Third clip plane 4 equation coefficient ('C' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip4D" , opt_general_clip4d , 0.0 , - "Fourth clip plane 4 equation coefficient ('D' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip5" , opt_general_clip5 , 0., - "Enable clip plane 5" }, - { F, "Clip5A" , opt_general_clip5a , 0.0 , - "First clip plane 5 equation coefficient ('A' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip5B" , opt_general_clip5b , 0.0 , - "Second clip plane 5 equation coefficient ('B' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip5C" , opt_general_clip5c , 0.0 , - "Third clip plane 5 equation coefficient ('C' in equation 'AX+BY+CZ+D=0')" }, - { F, "Clip5D" , opt_general_clip5d , 0.0 , - "Fourth clip plane 5 equation coefficient ('D' in equation 'AX+BY+CZ+D=0')" }, - { F|O, "MovingLight" , opt_general_moving_light , 0. , - "Use a moving (i.e. which follows the model) light source" }, - { F|O, "Light0" , opt_general_light0 , 1. , - "Enable light source 0" }, - { F|O, "Light0X" , opt_general_light00 , 0.5 , - "X position of light source 0" }, - { F|O, "Light0Y" , opt_general_light01 , 0.3 , - "Y position of light source 0" }, - { F|O, "Light0Z" , opt_general_light02 , 1.0 , - "Z position of light source 0" }, - { F|O, "Light1" , opt_general_light1 , 0., - "Enable light source 1" }, - { F|O, "Light1X" , opt_general_light10 , 0.5 , - "X position of light source 1" }, - { F|O, "Light1Y" , opt_general_light11 , 0.3 , - "Y position of light source 1" }, - { F|O, "Light1Z" , opt_general_light12 , 1.0 , - "Z position of light source 1" }, - { F|O, "Light2" , opt_general_light2 , 0., - "Enable light source 2" }, - { F|O, "Light2X" , opt_general_light20 , 0.5 , - "X position of light source 2" }, - { F|O, "Light2Y" , opt_general_light21 , 0.3 , - "Y position of light source 2" }, - { F|O, "Light2Z" , opt_general_light22 , 1.0 , - "Z position of light source 2" }, - { F|O, "Light3" , opt_general_light3 , 0., - "Enable light source 3" }, - { F|O, "Light3X" , opt_general_light30 , 0.5 , - "X position of light source 3" }, - { F|O, "Light3Y" , opt_general_light31 , 0.3 , - "Y position of light source 3" }, - { F|O, "Light3Z" , opt_general_light32 , 1.0 , - "Z position of light source 3" }, - { F|O, "Light4" , opt_general_light4 , 0., - "Enable light source 4" }, - { F|O, "Light4X" , opt_general_light40 , 0.5 , - "X position of light source 4" }, - { F|O, "Light4Y" , opt_general_light41 , 0.3 , - "Y position of light source 4" }, - { F|O, "Light4Z" , opt_general_light42 , 1.0 , - "Z position of light source 4" }, - { F|O, "Light5" , opt_general_light5 , 0., - "Enable light source 5" }, - { F|O, "Light5X" , opt_general_light50 , 0.5 , - "X position of light source 5" }, - { F|O, "Light5Y" , opt_general_light51 , 0.3 , - "Y position of light source 5" }, - { F|O, "Light5Z" , opt_general_light52 , 1.0 , - "Z position of light source 5" }, - { 0, NULL , NULL , 0. , NULL } -} ; - -StringXNumber GeometryOptions_Number[] = { - { F|O, "Normals" , opt_geometry_normals , 0. , - "Size of the vectors normal to the surfaces" }, - { F|O, "Tangents" , opt_geometry_tangents , 0. , - "Size of the vectors tangent to the curves" }, - { F|O, "Points" , opt_geometry_points , 1. , - "Display geometry points?" }, - { F|O, "Lines" , opt_geometry_lines , 1. , - "Display geometry curves?" }, - { F|O, "Surfaces" , opt_geometry_surfaces , 0. , - "Display geometry surfaces?" }, - { F|O, "Volumes" , opt_geometry_volumes , 0. , - "Display geometry volumes? (not implemented yet)" }, - { F|O, "PointsNumbers" , opt_geometry_points_num , 0. , - "Display points numbers?" }, - { F|O, "LinesNumbers" , opt_geometry_lines_num , 0. , - "Display curve numbers?" }, - { F|O, "SurfacesNumbers" , opt_geometry_surfaces_num , 0. , - "Display surface numbers?" }, - { F|O, "VolumesNumbers" , opt_geometry_volumes_num , 0. , - "Display volume numbers? (not implemented yet)" }, - { F|O, "Aspect" , opt_geometry_aspect , 0. , - "Not used" }, - { F|O, "Highlight" , opt_geometry_highlight , 1. , - "Not used" }, - { F|O, "OldCircle" , opt_geometry_old_circle , 0. , - "Use old circle description (compatibility option for old Gmsh geometries)" }, - { F|O, "ScalingFactor" , opt_geometry_scaling_factor , 1.0 , - "Global geometry scaling factor" }, - { F|O, "ColorScheme" , opt_geometry_color_scheme , 0. , - "Default geometry color scheme (0, 1 or 2)" }, - { 0, NULL , NULL , 0. , NULL } -} ; - -StringXNumber MeshOptions_Number[] = { - { F|O, "Quality" , opt_mesh_quality , 0.0 , - "Target quality for tetrahedral elements (not fully functional)" }, - { F|O, "Normals" , opt_mesh_normals , 0.0 , - "Size of the normal vectors" }, - { F|O, "Tangents" , opt_mesh_tangents , 0.0 , - "Size of the tangent vectors" }, - { F|O, "Explode" , opt_mesh_explode , 1.0 , - "Display mesh with non adjacent elements (factor between 0 and 1)" }, - { F|O, "ScalingFactor" , opt_mesh_scaling_factor , 1.0 , - "Global scaling factor applied to the saved mesh" }, - { F|O, "CharacteristicLengthFactor" , opt_mesh_lc_factor , 1.0 , - "Factor applied to all charcteristic lenghts (and background meshes)" }, - { F|O, "RandomFactor" , opt_mesh_rand_factor , 1.e-4 , - "Random factor used in 2D and 3D meshing algorithm (test other values when the algorithm fails)" }, - { F|O, "GammaInf" , opt_mesh_gamma_inf , 0.0 , - "Only display elements whose Gamma factor is greater than GammaInf" }, - { F|O, "GammaSup" , opt_mesh_gamma_sup , 0.0 , - "Only display elements whose Gamma factor is smaller than GammaSup" }, - { F|O, "RadiusInf" , opt_mesh_radius_inf , 0.0 , - "Only display elements whose Radius is greater than RadiusInf" }, - { F|O, "RadiusSup" , opt_mesh_radius_sup , 0.0 , - "Only display elements whose Radius is smaller than RadiusSup" }, - { F|O, "Points" , opt_mesh_points , 1. , - "Display mesh vertices?" }, - { F|O, "Lines" , opt_mesh_lines , 1. , - "Display mesh vertices on curves?" }, - { F|O, "Surfaces" , opt_mesh_surfaces , 1. , - "Display surface mesh?" }, - { F|O, "Volumes" , opt_mesh_volumes , 1. , - "Display volume mesh?" }, - { F|O, "PointsNumbers" , opt_mesh_points_num , 0. , - "Display mesh vertices numbers?" }, - { F|O, "LinesNumbers" , opt_mesh_lines_num , 0. , - "Display mesh line numbers?" }, - { F|O, "SurfacesNumbers" , opt_mesh_surfaces_num , 0. , - "Display mesh surface numbers?" }, - { F|O, "VolumesNumbers" , opt_mesh_volumes_num , 0. , - "Display mesh elements numbers?" }, - { F|O, "Aspect" , opt_mesh_aspect , 0. , - "Mesh apsect (0=wireframe, 1=hidden lines, 2=solid)" }, - { F|O, "Format" , opt_mesh_format , FORMAT_MSH , - "Mesh output format (1=MSH, 2=UNV)" }, - { F|O, "Smoothing" , opt_mesh_nb_smoothing , 0. , - "Number of smoothing steps applied to the final mesh" }, - { F|O, "Algorithm" , opt_mesh_algo , DELAUNAY_OLDALGO , - "2D mesh algorithm (1=isotropic, 2=anisotropic)" }, - { F|O, "PointInsertion" , opt_mesh_point_insertion, CENTER_CIRCCIRC , - "Point insertion method for isotropic 2D algorithm (1=center of circ. circle, 2=voronoi, 3=cog)" }, - { F|O, "SpeedMax" , opt_mesh_speed_max , 0. , - "Disable dubious point insertion tests" }, - { F|O, "MinimumCirclePoints" , opt_mesh_min_circ_points, 7. , - "Minimum number of points used to mesh a circle" }, - { F|O, "ConstrainedBackgroundMesh" , opt_mesh_constrained_bgmesh, 0. , - "Should the background mesh be constrained by the characteristic lengths associated with the geometry?" }, - { F|O, "Degree" , opt_mesh_degree , 1. , - "Element order" }, - { F|O, "Dual" , opt_mesh_dual , 0. , - "Display the dual mesh obtained by barycentric subdivision" }, - { F|O, "Interactive" , opt_mesh_interactive , 0. , - "Show the construction of the 2D mesh in real time (only with the anisotropic algorithm)" }, - { F|O, "ColorScheme" , opt_mesh_color_scheme , 0. , - "Default mesh color scheme (0, 1 or 2)" }, - { F|O, "ColorCarousel" , opt_mesh_color_carousel , 1. , - "Use a 'color by region number' scheme" }, - { F, "use_cut_plane" , opt_mesh_use_cut_plane , 0 , - "Enable mesh clip plane" }, - { F, "cut_planea" , opt_mesh_cut_planea , 1. , - "First clip plane equation coefficient ('A' in equation 'AX+BY+CZ+D=0')" }, - { F, "cut_planeb" , opt_mesh_cut_planeb , 0. , - "Second clip plane equation coefficient ('B' in equation 'AX+BY+CZ+D=0')" }, - { F, "cut_planec" , opt_mesh_cut_planec , 0. , - "Third clip plane equation coefficient ('C' in equation 'AX+BY+CZ+D=0')" }, - { F, "cut_planed" , opt_mesh_cut_planed , 0. , - "Fourth clip plane equation coefficient ('D' in equation 'AX+BY+CZ+D=0')" }, - { 0, NULL , NULL , 0. , NULL } -} ; - -StringXNumber SolverOptions_Number[] = { - { F|O, "GetDPPopupMessages" , opt_solver_getdp_popupmessages , 1.0 , - "Automatically display GetDP messages" }, - { F|O, "GetDPMergeViews" , opt_solver_getdp_mergeviews , 1.0 , - "Automatically merge any post-processing view created by GetDP" }, - { 0, NULL , NULL , 0. , NULL } -} ; - -StringXNumber PostProcessingOptions_Number[] = { - { F|O, "Scales" , opt_post_scales , 1. , - "Show value scales" }, - { F|O, "Link" , opt_post_link , 0. , - "Link post-processing views (0=none, 1,2=changes in visible/all, 3,4=everything in visible/all)" }, - { F|O, "Smoothing" , opt_post_smooth , 0. , - "Apply (non-reversible) smoothing to post-processing view when merged" }, - { F|O, "AnimationDelay" , opt_post_anim_delay , 0.25 , - "Delay (in seconds) between to animation frames" }, - { F, "NbViews" , opt_post_nb_views , 0. , - "Current number of views merged (do _not_ change this!)" }, - { 0, NULL , NULL , 0. } -} ; - -StringXNumber ViewOptions_Number[] = { - { F, "NbTimeStep" , opt_view_nb_timestep , 1. , - "Number of time steps in the view (do _not_ change this!)" }, - { F, "TimeStep" , opt_view_timestep , 0. , - "Current time step displayed" }, - { F, "Min" , opt_view_min , 1.e200 , - "Minimum value in the view (do _not_ change this!)" }, - { F, "Max" , opt_view_max , -1.e200 , - "Maximum value in the view (do _not_ change this!)" }, - { F, "CustomMin" , opt_view_custom_min , 0. , - "User defined minimum value to be displayed" }, - { F, "CustomMax" , opt_view_custom_max , 0. , - "User defined maximum value to be displayed" }, - { F, "OffsetX" , opt_view_offset0 , 0. , - "Translation of the view along X-axis (in model coordinates)" }, - { F, "OffsetY" , opt_view_offset1 , 0. , - "Translation of the view along Y-axis (in model coordinates)" }, - { F, "OffsetZ" , opt_view_offset2 , 0. , - "Translation of the view along Z-axis (in model coordinates)" }, - { F, "RaiseX" , opt_view_raise0 , 0. , - "Elevation of the view along X-axis (in model coordinates)" }, - { F, "RaiseY" , opt_view_raise1 , 0. , - "Elevation of the view along Y-axis (in model coordinates)" }, - { F, "RaiseZ" , opt_view_raise2 , 0. , - "Elevation of the view along Z-axis (in model coordinates)" }, - { F|O, "ArrowScale" , opt_view_arrow_scale , 50. , - "Size of the vector (e.g. arrow size in pixels)" }, - { F|O, "Explode" , opt_view_explode , 1. , - "Explode elements (0: reduced to point; 1: not transformed)" }, - { F, "Visible" , opt_view_visible , 1. , - "Is the view visible?" }, - { F|O, "IntervalsType" , opt_view_intervals_type , DRAW_POST_ISO , - "Type of interval display (1=iso, 2=continuous, 3=discrete, 4=numeric)" }, - { F|O, "SaturateValues" , opt_view_saturate_values , 0 , - "Saturate the view values to custom min and max (1=true, 0=false)" }, - { F|O, "NbIso" , opt_view_nb_iso , 15. , - "Number of intervals" }, - { F|O, "Boundary" , opt_view_boundary , 0 , - "Draw the N-b dimensional boundary of the simplex (N=dimension, b=option value)" }, - { F|O, "Light" , opt_view_light , 0. , - "Enable light sources?" }, - { F|O, "SmoothNormals" , opt_view_smooth_normals , 0. , - "Smooth the normals?" }, - { F|O, "ShowElement" , opt_view_show_element , 0. , - "Show element boundaries?" }, - { F|O, "ShowTime" , opt_view_show_time , 1. , - "Show time value (or time step) if NbTimeStep > 1?" }, - { F|O, "ShowScale" , opt_view_show_scale , 1. , - "Show value scale?" }, - { F|O, "DrawPoints" , opt_view_draw_points , 1. , - "Display post-processing points?" }, - { F|O, "DrawLines" , opt_view_draw_lines , 1. , - "Display post-processing lines?" }, - { F|O, "DrawTriangles" , opt_view_draw_triangles , 1. , - "Display post-processing triangles?" }, - { F|O, "DrawTetrahedra" , opt_view_draw_tetrahedra , 1. , - "Display post-processing tetrahedra?" }, - { F|O, "DrawScalars" , opt_view_draw_scalars , 1. , - "Display scalar values?" }, - { F|O, "DrawVectors" , opt_view_draw_vectors , 1. , - "Display vector values?" }, - { F|O, "DrawTensors" , opt_view_draw_tensors , 1. , - "Display tensor values?" }, - { F|O, "TransparentScale" , opt_view_transparent_scale , 1. , - "Display a 'transparent' value scale?" }, - { F|O, "ScaleType" , opt_view_scale_type , DRAW_POST_LINEAR , - "Value scale type (1=linear, 2=logarithmic, 3=double logarithmic)" }, - { F|O, "RangeType" , opt_view_range_type , DRAW_POST_DEFAULT , - "Value scale range type (1=default, 2=custom)" }, - { F|O, "ArrowType" , opt_view_arrow_type , DRAW_POST_ARROW , - "Vector display type (1=segment, 2=arrow, 3=pyramid, 4=cone, 5=displacement)" }, - { F|O, "ArrowLocation" , opt_view_arrow_location , DRAW_POST_LOCATE_COG , - "Arrow location (1=cog, 2=vertex)" }, - { 0, NULL , NULL , 0. , NULL } -} ; - -StringXNumber PrintOptions_Number[] = { - { F|O, "Format" , opt_print_format , FORMAT_AUTO , - "Print format" }, - { F|O, "EpsQuality" , opt_print_eps_quality , 1 , - "Postscript quality (1=simple sort, 2=recursive sort)" }, - { F|O, "EpsBackground" , opt_print_eps_background , 1 , - "Save image background in postscript output" }, - { F|O, "JpegQuality" , opt_print_jpeg_quality , 85 , - "JPEG quality (between 1 and 100)" }, - { F|O, "GifDither" , opt_print_gif_dither , 0 , - "Apply dithering to GIF output" }, - { F|O, "GifSort" , opt_print_gif_sort , 1 , - "Sort the colormap in GIF output" }, - { F|O, "GifInterlace" , opt_print_gif_interlace , 0 , - "Interlace GIF output" }, - { F|O, "GifTransparent" , opt_print_gif_transparent , 0 , - "Output transparent GIF image" }, - { F|O, "FontSize" , opt_print_font_size , 12. , - "Font size used for postscript printing" }, - { F|O, "GeometryLineWidth" , opt_print_geom_line_width , 2. , - "Width factor for geometry lines in postscript output (10 looks nice for geometry+mesh display)" }, - { F|O, "MeshLineWidth" , opt_print_mesh_line_width , 1. , - "Width factor for mesh lines in postscript output (1 looks nice for geometry+mesh display)" }, - { F|O, "PostProcessingLineWidth" , opt_print_post_line_width , 2. , - "Width factor for post-processing lines in postscript output" }, - { 0, NULL , NULL , 0. } -} ; - -// COLORS - -StringXColor GeneralOptions_Color[] = { - { F|O, "Background" , opt_general_color_background , - PACK_COLOR(0, 0, 0, 255), - PACK_COLOR(255, 255, 255, 255), - PACK_COLOR(255, 255, 255, 255), - "Background color" }, - { F|O, "Foreground" , opt_general_color_foreground , - PACK_COLOR(255, 255, 255, 255), - PACK_COLOR(0, 0, 0, 255), - PACK_COLOR(0, 0, 0, 255), - "Foreground color" }, - { F|O, "Text" , opt_general_color_text , - PACK_COLOR(255, 255, 255, 255), - PACK_COLOR(0, 0, 0, 255), - PACK_COLOR(0, 0, 0, 255), - "Text color" }, - { F|O, "Axes" , opt_general_color_axes , - PACK_COLOR(255, 255, 0, 255), - PACK_COLOR(128, 128, 128, 255), - PACK_COLOR(0, 0, 0, 255), - "Axes color" }, - { F|O, "SmallAxes" , opt_general_color_small_axes , - PACK_COLOR(255, 255, 255, 255), - PACK_COLOR(0, 0, 0, 255), - PACK_COLOR(0, 0, 0, 255), - "Small axes color" }, - { 0, NULL , NULL , 0, 0, 0 , NULL } -} ; - -StringXColor GeometryOptions_Color[] = { - { F|O, "Points" , opt_geometry_color_points , - PACK_COLOR(178, 182, 129, 255) , - PACK_COLOR(178, 182, 129, 255) , - PACK_COLOR(0, 0, 0, 255), - "Normal geometry point color" }, - { F|O, "Lines" , opt_geometry_color_lines , - PACK_COLOR(0, 0, 255, 255), - PACK_COLOR(0, 0, 255, 255), - PACK_COLOR(0, 0, 0, 255), - "Normal geometry curve color" }, - { F|O, "Surfaces" , opt_geometry_color_surfaces , - PACK_COLOR(128, 128, 128, 255), - PACK_COLOR(128, 128, 128, 255), - PACK_COLOR(0, 0, 0, 255), - "Normal geometry surface color" }, - { F|O, "Volumes" , opt_geometry_color_volumes , - PACK_COLOR(128, 128, 128, 255), - PACK_COLOR(128, 128, 128, 255), - PACK_COLOR(0, 0, 0, 255), - "Normal geometry volume color" }, - { F|O, "PointsSelect" , opt_geometry_color_points_select , - PACK_COLOR(255, 0, 0, 255), - PACK_COLOR(255, 0, 0, 255), - PACK_COLOR(0, 0, 0, 255), - "Selected geometry point color" }, - { F|O, "LinesSelect" , opt_geometry_color_lines_select , - PACK_COLOR(255, 0, 0, 255), - PACK_COLOR(255, 0, 0, 255), - PACK_COLOR(0, 0, 0, 255), - "Selected geometry curve color" }, - { F|O, "SurfacesSelect" , opt_geometry_color_surfaces_select , - PACK_COLOR(255, 0, 0, 255), - PACK_COLOR(255, 0, 0, 255), - PACK_COLOR(0, 0, 0, 255), - "Selected geometry surface color" }, - { F|O, "VolumesSelect" , opt_geometry_color_volumes_select , - PACK_COLOR(255, 0, 0, 255), - PACK_COLOR(255, 0, 0, 255), - PACK_COLOR(0, 0, 0, 255), - "Selected geometry volume color" }, - { F|O, "PointsHighlight" , opt_geometry_color_points_highlight , - PACK_COLOR(0, 255, 0, 255), - PACK_COLOR(0, 255, 0, 255), - PACK_COLOR(0, 0, 0, 255), - "Highlighted geometry point color" }, - { F|O, "LinesHighlight" , opt_geometry_color_lines_highlight , - PACK_COLOR(0, 0, 255, 255), - PACK_COLOR(0, 0, 255, 255), - PACK_COLOR(0, 0, 0, 255), - "Highlighted geometry curve color" }, - { F|O, "SurfacesHighlight" , opt_geometry_color_surfaces_highlight , - PACK_COLOR(128, 128, 128, 255), - PACK_COLOR(128, 128, 128, 255), - PACK_COLOR(0, 0, 0, 255), - "Highlighted geometry surface color" }, - { F|O, "VolumesHighlight" , opt_geometry_color_volumes_highlight , - PACK_COLOR(128, 128, 128, 255), - PACK_COLOR(128, 128, 128, 255), - PACK_COLOR(0, 0, 0, 255), - "Highlighted geometry volume color" }, - { F|O, "Tangents" , opt_geometry_color_tangents , - PACK_COLOR(255, 255, 0, 255), - PACK_COLOR(255, 255, 0, 255), - PACK_COLOR(0, 0, 0, 255), - "Tangent geometry vectors color" }, - { F|O, "Normals" , opt_geometry_color_normals , - PACK_COLOR(255, 0, 0, 255), - PACK_COLOR(255, 0, 0, 255), - PACK_COLOR(0, 0, 0, 255), - "Normal geometry vectors color" }, - { 0, NULL , NULL , 0, 0, 0 , NULL } -} ; - -#define COL1 PACK_COLOR( 232, 210, 23, 255 ) -#define COL2 PACK_COLOR( 226, 167, 29, 255 ) -#define COL3 PACK_COLOR( 217, 113, 38, 255 ) -#define COL4 PACK_COLOR( 201, 54, 54, 255 ) -#define COL5 PACK_COLOR( 169, 12, 86, 255 ) -#define COL6 PACK_COLOR( 114, 2, 141, 255 ) -#define COL7 PACK_COLOR( 67, 30, 188, 255 ) -#define COL8 PACK_COLOR( 44, 86, 211, 255 ) -#define COL9 PACK_COLOR( 32, 145, 223, 255 ) -#define COL10 PACK_COLOR( 25, 193, 230, 255 ) -#define COLW PACK_COLOR( 255, 255, 255, 255 ) -#define COLT PACK_COLOR( 160, 150, 255, 255 ) -#define COLQ PACK_COLOR( 130, 120, 225, 255 ) -#define COLP PACK_COLOR( 232, 210, 23, 255 ) -#define COLY PACK_COLOR( 217, 113, 38, 255 ) - -StringXColor MeshOptions_Color[] = { - { F|O, "Points" , opt_mesh_color_points , - PACK_COLOR(0 , 123, 59 , 255), - PACK_COLOR(0 , 123, 59 , 255), - PACK_COLOR(0, 0, 0, 255), - "Mesh vertex color" }, - { F|O, "PointsSupp" , opt_mesh_color_points_supp , - PACK_COLOR(255, 0, 255, 255), - PACK_COLOR(255, 0, 255, 255), - PACK_COLOR(0, 0, 0, 255), - "Mesh high order vertex color" }, - { F|O, "Lines" , opt_mesh_color_lines , - PACK_COLOR(0, 255, 0, 255), - PACK_COLOR(0, 255, 0, 255), - PACK_COLOR(0, 0, 0, 255), - "Mesh line color" }, - { F|O, "Triangles" , opt_mesh_color_triangles , - COLT, COLT, COLW, "Mesh triangle color (if ColorCarousel=0)" }, - { F|O, "Quadrangles" , opt_mesh_color_quadrangles , - COLQ, COLQ, COLW, "Mesh quadrangle color (if ColorCarousel=0)" }, - { F|O, "Tetrahedra" , opt_mesh_color_tetrahedra , - COLT, COLT, COLW, "Mesh tetrahedron color (if ColorCarousel=0)" }, - { F|O, "Hexahedra" , opt_mesh_color_hexahedra , - COLQ, COLQ, COLW, "Mesh hexahedron color (if ColorCarousel=0)" }, - { F|O, "Prisms" , opt_mesh_color_prisms , - COLP, COLP, COLW, "Mesh prism color (if ColorCarousel=0)" }, - { F|O, "Pyramids" , opt_mesh_color_pyramid , - COLY, COLY, COLW, "Mesh pyramid color (if ColorCarousel=0)" }, - { F|O, "Normals" , opt_mesh_color_normals , - PACK_COLOR(128, 128, 128, 255), - PACK_COLOR(128, 128, 128, 255), - PACK_COLOR(0, 0, 0, 255), - "Normal mesh vector color" }, - { F|O, "Tangents" , opt_mesh_color_tangents , - PACK_COLOR(128, 128, 128, 255), - PACK_COLOR(128, 128, 128, 255), - PACK_COLOR(0, 0, 0, 255), - "Tangent mesh vector color" }, - { F|O, "One" , opt_mesh_color_1 , COL1, COL1, COLW, "First color in color carousel" }, - { F|O, "Two" , opt_mesh_color_2 , COL2, COL2, COLW, "Second color in color carousel" }, - { F|O, "Three" , opt_mesh_color_3 , COL3, COL3, COLW, "Third color in color carousel" }, - { F|O, "Four" , opt_mesh_color_4 , COL4, COL4, COLW, "Fourth color in color carousel" }, - { F|O, "Five" , opt_mesh_color_5 , COL5, COL5, COLW, "Fifth color in color carousel" }, - { F|O, "Six" , opt_mesh_color_6 , COL6, COL6, COLW, "Sixth color in color carousel" }, - { F|O, "Seven" , opt_mesh_color_7 , COL7, COL7, COLW, "Seventh color in color carousel" }, - { F|O, "Eight" , opt_mesh_color_8 , COL8, COL8, COLW, "Eighth color in color carousel" }, - { F|O, "Nine" , opt_mesh_color_9 , COL9, COL9, COLW, "Nitnth color in color carousel" }, - { F|O, "Ten" , opt_mesh_color_10 , COL10, COL10, COLW, "tenth color in color carousel" }, - { 0, NULL , NULL , 0, 0, 0 , NULL } -} ; - -#undef COL1 -#undef COL2 -#undef COL3 -#undef COL4 -#undef COL5 -#undef COL6 -#undef COL7 -#undef COL8 -#undef COL9 -#undef COL10 -#undef COLW - -StringXColor SolverOptions_Color[] = { - { 0, NULL , NULL , 0, 0, 0 , NULL } -} ; - -StringXColor PostProcessingOptions_Color[] = { - { 0, NULL , NULL , 0, 0, 0 , NULL } -} ; - -StringXColor ViewOptions_Color[] = { - { 0, NULL , NULL , 0, 0, 0 , NULL } -} ; - -StringXColor PrintOptions_Color[] = { - { 0, NULL , NULL , 0, 0, 0 , NULL } -} ; - -#undef S -#undef O -#undef F - -#endif diff --git a/Common/GetOptions.cpp b/Common/GetOptions.cpp deleted file mode 100644 index 1fd654f2da0d445eae412e8450d5edb11371c063..0000000000000000000000000000000000000000 --- a/Common/GetOptions.cpp +++ /dev/null @@ -1,500 +0,0 @@ -// $Id: GetOptions.cpp,v 1.35 2001-08-11 23:28:31 geuzaine Exp $ - -#include <unistd.h> -#include "Gmsh.h" -#include "GmshUI.h" -#include "GmshVersion.h" -#include "Numeric.h" -#include "Context.h" -#include "Options.h" -#include "Geo.h" -#include "Mesh.h" -#include "Views.h" -#include "OpenFile.h" -#include "Parser.h" - -extern Context_T CTX; - -char *TheFileNameTab[MAX_OPEN_FILES]; -char *TheBgmFileName=NULL, *TheOptString=NULL; - -char gmsh_progname[] = "This is Gmsh" ; -char gmsh_copyright[] = "Copyright (C) 1997-2001 Jean-Francois Remacle and Christophe Geuzaine"; -char gmsh_version[] = "Version : " ; -char gmsh_os[] = "Build OS : " GMSH_OS ; -char gmsh_gui[] = "GUI toolkit : " ; -char gmsh_date[] = "Build date : " GMSH_DATE ; -char gmsh_host[] = "Build host : " GMSH_HOST ; -char gmsh_packager[] = "Packager : " GMSH_PACKAGER ; -char gmsh_url[] = "Web site : http://www.geuz.org/gmsh/" ; -char gmsh_email[] = "Mailing list : gmsh@geuz.org" ; - -void Print_Usage(char *name){ - Msg(DIRECT, "Usage: %s [options] [files]", name); - Msg(DIRECT, "Geometry options:"); - Msg(DIRECT, " -0 parse input files, output flattened geometry, and exit"); - Msg(DIRECT, "Mesh options:"); - Msg(DIRECT, " -1, -2, -3 perform batch 1D, 2D and 3D mesh generation"); - Msg(DIRECT, " -o file specify mesh output file name"); - Msg(DIRECT, " -format msh|unv|gref set output mesh format (default: msh)"); - Msg(DIRECT, " -algo iso|aniso select 2D mesh algorithm (default: iso)"); - Msg(DIRECT, " -smooth int set mesh smoothing (default: 0)"); - Msg(DIRECT, " -degree int set mesh degree (default: 1)"); - Msg(DIRECT, " -scale float set global scaling factor (default: 1.0)"); - Msg(DIRECT, " -meshscale float set mesh scaling factor (default: 1.0)"); - Msg(DIRECT, " -clscale float set characteristic length scaling factor (default: 1.0)"); - Msg(DIRECT, " -rand float set random perturbation factor (default: 1.e-4)"); - Msg(DIRECT, " -bgm file load backround mesh from file"); - Msg(DIRECT, " -constrain constrain background mesh with characteristic lengths"); - Msg(DIRECT, " -histogram print mesh quality histogram"); - Msg(DIRECT, " -extrude use old extrusion mesh generator"); - Msg(DIRECT, " -recombine recombine meshes from old extrusion mesh generator"); -#ifndef _BLACKBOX - Msg(DIRECT, " -interactive display 2D mesh construction interactively"); - Msg(DIRECT, "Post-processing options:"); - Msg(DIRECT, " -dl enable display lists"); - Msg(DIRECT, " -noview hide all views on startup"); - Msg(DIRECT, " -link int select link mode between views (default: 0)"); - Msg(DIRECT, " -smoothview smooth views"); - Msg(DIRECT, " -convert file file convert an ascii view into a binary one"); - Msg(DIRECT, "Display options:"); - Msg(DIRECT, " -nodb disable double buffering"); -#ifdef _XMOTIF - Msg(DIRECT, " -noov disable overlay visual"); - Msg(DIRECT, " -flash allow colormap flashing"); - Msg(DIRECT, " -samevisual force same visual for graphics and GUI"); -#else - Msg(DIRECT, " -fontsize int specify the font size for the GUI (default: 12)"); -#endif - Msg(DIRECT, " -alpha enable alpha blending"); - Msg(DIRECT, " -notrack don't use trackball mode for rotations"); - Msg(DIRECT, " -display string specify display"); - Msg(DIRECT, " -perspective set projection mode to perspective"); -#endif - Msg(DIRECT, "Other options:"); -#ifndef _BLACKBOX - Msg(DIRECT, " -a, -g, -m, -s, -p start in automatic, geometry, mesh, solver or"); - Msg(DIRECT, " post-processing mode (default: automatic)"); -#endif - Msg(DIRECT, " -v int set verbosity level (default: 2)"); -#ifdef _XMOTIF - Msg(DIRECT, " -nothreads disable threads"); -#endif - Msg(DIRECT, " -opt \"string\" parse string before project file"); - Msg(DIRECT, " -version show version number"); - Msg(DIRECT, " -info show detailed version information"); - Msg(DIRECT, " -help show this message"); -} - - -void Get_Options (int argc, char *argv[], int *nbfiles) { - int i=1; - - // Parse session and option files - - InitSymbols(); //this symbol context is local to option parsing (the - //symbols will not interfere with subsequent OpenFiles) - - ParseFile(CTX.sessionrc_filename); - ParseFile(CTX.optionsrc_filename); - - // Get command line options - - TheFileNameTab[0] = CTX.default_filename ; - *nbfiles = 0; - - while (i < argc) { - - if (argv[i][0] == '-') { - - if(!strcmp(argv[i]+1, "opt")){ - i++; - if(argv[i]!=NULL) TheOptString = argv[i++]; - else{ - fprintf(stderr, ERROR_STR "Missing string\n"); - exit(1); - } - } - else if(!strcmp(argv[i]+1, "a")){ - CTX.initial_context = 0; i++; - } - else if(!strcmp(argv[i]+1, "g")){ - CTX.initial_context = 1; i++; - } - else if(!strcmp(argv[i]+1, "m")){ - CTX.initial_context = 2; i++; - } - else if(!strcmp(argv[i]+1, "s")){ - CTX.initial_context = 3; i++; - } - else if(!strcmp(argv[i]+1, "p")){ - CTX.initial_context = 4; i++; - } - else if(!strcmp(argv[i]+1, "0")){ - CTX.batch = -1; i++; - } - else if(!strcmp(argv[i]+1, "1")){ - CTX.batch = 1; i++; - } - else if(!strcmp(argv[i]+1, "2")){ - CTX.batch = 2; i++; - } - else if(!strcmp(argv[i]+1, "3")){ - CTX.batch = 3; i++; - } - else if(!strcmp(argv[i]+1, "extrude")){ //old extrusion mesh generator - CTX.mesh.oldxtrude = 1; i++; - } - else if(!strcmp(argv[i]+1, "recombine")){ //old extrusion mesh generator - CTX.mesh.oldxtrude_recombine = 1; i++; - } - else if(!strcmp(argv[i]+1, "dupli")){ - CTX.mesh.check_duplicates = 1; i++; - } - else if(!strcmp(argv[i]+1, "histogram")){ - CTX.mesh.histogram = 1; i++; - } - else if(!strcmp(argv[i]+1, "o")){ - i++; - if(argv[i] != NULL) CTX.output_filename = argv[i++]; - else { - fprintf(stderr, ERROR_STR "Missing file name\n"); - exit(1); - } - } - else if(!strcmp(argv[i]+1, "bgm")){ - i++; - if(argv[i] != NULL) TheBgmFileName = argv[i++]; - else { - fprintf(stderr, ERROR_STR "Missing file name\n"); - exit(1); - } - } - else if(!strcmp(argv[i]+1, "constrain")){ - CTX.mesh.constrained_bgmesh = 1; i++; - } - else if(!strcmp(argv[i]+1, "convert")){ - i++; - CTX.terminal = 1; - if(argv[i] && argv[i+1]){ - ParseFile(argv[i]); - if(List_Nbr(Post_ViewList)) - Write_View(1,(Post_View*)List_Pointer(Post_ViewList, 0),argv[i+1]); - else - fprintf(stderr, ERROR_STR "No view to convert\n"); - } - else - fprintf(stderr, "Usage: %s -convert view.ascii view.binary\n", argv[0]); - exit(1); - } - else if(!strcmp(argv[i]+1, "old")){ - CTX.geom.old_circle = 1; i++; - } - else if(!strcmp(argv[i]+1, "quality")){ - i++; - if(argv[i]!=NULL) CTX.mesh.quality = atof(argv[i++]); - else { - fprintf(stderr, ERROR_STR "Missing number\n"); - exit(1); - } - } - else if(!strcmp(argv[i]+1, "scale")){ - i++; - if(argv[i]!=NULL) CTX.geom.scaling_factor = atof(argv[i++]); - else { - fprintf(stderr, ERROR_STR "Missing number\n"); - exit(1); - } - } - else if(!strcmp(argv[i]+1, "meshscale")){ - i++; - if(argv[i]!=NULL) CTX.mesh.scaling_factor = atof(argv[i++]); - else { - fprintf(stderr, ERROR_STR "Missing number\n"); - exit(1); - } - } - else if(!strcmp(argv[i]+1, "rand")){ - i++; - if(argv[i]!=NULL) CTX.mesh.rand_factor = atof(argv[i++]); - else { - fprintf(stderr, ERROR_STR "Missing number\n"); - exit(1); - } - } - else if(!strcmp(argv[i]+1, "clscale")){ - i++; - if(argv[i]!=NULL){ - CTX.mesh.lc_factor = atof(argv[i++]); - if(CTX.mesh.lc_factor <= 0.0){ - fprintf(stderr, ERROR_STR - "Characteristic length factor must be > 0\n"); - exit(1); - } - } - else { - fprintf(stderr, ERROR_STR "Missing number\n"); - exit(1); - } - } - else if(!strcmp(argv[i]+1, "smooth")){ - i++; - if(argv[i]!=NULL) CTX.mesh.nb_smoothing = atoi(argv[i++]); - else{ - fprintf(stderr, ERROR_STR "Missing number\n"); - exit(1); - } - } - else if(!strcmp(argv[i]+1, "degree")){ - i++; - if(argv[i]!=NULL){ - CTX.mesh.degree = atoi(argv[i++]); - if(CTX.mesh.degree != 1 && CTX.mesh.degree != 2){ - fprintf(stderr, ERROR_STR "Wrong degree\n"); - exit(1); - } - } - else { - fprintf(stderr, ERROR_STR "Missing number\n"); - exit(1); - } - } - else if(!strcmp(argv[i]+1, "format") || - !strcmp(argv[i]+1, "f")){ - i++; - if(argv[i]!=NULL){ - if(!strcmp(argv[i],"msh") || - !strcmp(argv[i],"MSH") || - !strcmp(argv[i],"gmsh")){ - CTX.mesh.format = FORMAT_MSH ; - } - else if(!strcmp(argv[i],"unv") || - !strcmp(argv[i],"UNV") || - !strcmp(argv[i],"ideas")){ - CTX.mesh.format = FORMAT_UNV ; - } - else if(!strcmp(argv[i],"gref") || - !strcmp(argv[i],"GREF") || - !strcmp(argv[i],"Gref")){ - CTX.mesh.format = FORMAT_GREF ; - } - else{ - fprintf(stderr, ERROR_STR "Unknown mesh format\n"); - exit(1); - } - i++; - } - else { - fprintf(stderr, ERROR_STR "Missing format\n"); - exit(1); - } - } - else if(!strcmp(argv[i]+1, "algo")){ - i++; - if(argv[i]!=NULL){ - if(!strcmp(argv[i],"iso")) - CTX.mesh.algo = DELAUNAY_OLDALGO ; - else if(!strcmp(argv[i],"aniso")) - CTX.mesh.algo = DELAUNAY_NEWALGO ; - else{ - fprintf(stderr, ERROR_STR "Unknown mesh algorithm\n"); - exit(1); - } - i++; - } - else { - fprintf(stderr, ERROR_STR "Missing algorithm\n"); - exit(1); - } - } - else if(!strcmp(argv[i]+1, "version") || - !strcmp(argv[i]+1, "-version")){ - fprintf(stderr, "%.2f\n", GMSH_VERSION); - exit(1); - } - else if(!strcmp(argv[i]+1, "info") || - !strcmp(argv[i]+1, "-info")){ - fprintf(stderr, "%s%.2f\n", gmsh_version, GMSH_VERSION); - fprintf(stderr, "%s\n", gmsh_os); -#if _XMOTIF - fprintf(stderr, "%s%s\n", gmsh_gui, XmVERSION_STRING); -#elif _FLTK - fprintf(stderr, "%sFLTK %d.%d.%d\n", gmsh_gui, FL_MAJOR_VERSION, - FL_MINOR_VERSION, FL_PATCH_VERSION); -#else - fprintf(stderr, "%snone\n", gmsh_gui); -#endif - fprintf(stderr, "%s\n", gmsh_date); - fprintf(stderr, "%s\n", gmsh_host); - fprintf(stderr, "%s\n", gmsh_packager); - fprintf(stderr, "%s\n", gmsh_url); - fprintf(stderr, "%s\n", gmsh_email); - exit(1) ; - } - else if(!strcmp(argv[i]+1, "help") || - !strcmp(argv[i]+1, "-help")){ - fprintf(stderr, "%s\n", gmsh_progname); - fprintf(stderr, "%s\n", gmsh_copyright); - CTX.terminal = 1 ; - Print_Usage(argv[0]); - exit(1); - } - else if(!strcmp(argv[i]+1, "v")){ - i++; - if(argv[i]!=NULL) CTX.verbosity = atoi(argv[i++]); - else { - fprintf(stderr, ERROR_STR "Missing number\n"); - exit(1); - } - } -#ifndef _BLACKBOX - else if(!strcmp(argv[i]+1, "noterm")){ - CTX.terminal = 0; i++; - } - else if(!strcmp(argv[i]+1, "term")){ - CTX.terminal = 1; i++; - } - else if(!strcmp(argv[i]+1, "alpha")){ - CTX.alpha = 1; i++; - } - else if(!strcmp(argv[i]+1, "notrack")){ - CTX.useTrackball = 0; i++; - } - else if(!strcmp(argv[i]+1, "flash")){ - CTX.flash = 1; i++; - } - else if(!strcmp(argv[i]+1, "dual")){ - CTX.mesh.dual = 1; i++; - } - else if(!strcmp(argv[i]+1, "samevisual")){ - CTX.same_visual = 1; i++; - } - else if(!strcmp(argv[i]+1, "interactive")){ - CTX.mesh.interactive = 1; i++; - } - else if(!strcmp(argv[i]+1, "noview")){ - opt_view_visible(0, GMSH_SET, 0); i++; - } - else if(!strcmp(argv[i]+1, "plugin")){ - opt_general_default_plugins(0, GMSH_SET, 1); i++; - } - else if(!strcmp(argv[i]+1, "noplugin")){ - opt_general_default_plugins(0, GMSH_SET, 0); i++; - } - else if(!strcmp(argv[i]+1, "link")){ - i++ ; - if(argv[i]!=NULL) - CTX.post.link = atoi(argv[i++]); - else{ - fprintf(stderr, ERROR_STR "Missing number\n"); - exit(1); - } - } - else if(!strcmp(argv[i]+1, "fill")){ - opt_view_intervals_type(0, GMSH_SET, DRAW_POST_CONTINUOUS) ; i++; - } - else if(!strcmp(argv[i]+1, "smoothview")){ - CTX.post.smooth=1; i++; - } - else if(!strcmp(argv[i]+1, "nbiso")){ - i++ ; - if(argv[i]!=NULL) - opt_view_nb_iso(0, GMSH_SET, atoi(argv[i++])); - else{ - fprintf(stderr, ERROR_STR "Missing number\n"); - exit(1); - } - } - else if(!strcmp(argv[i]+1, "command") || - !strcmp(argv[i]+1, "c")){ - CTX.command_win = 1; i++; - } - else if(!strcmp(argv[i]+1, "nocommand") || - !strcmp(argv[i]+1, "noc")){ - CTX.command_win = 0; i++; - } - else if(!strcmp(argv[i]+1, "overlay") || - !strcmp(argv[i]+1, "ov")){ - CTX.overlay = 1; i++; - } - else if(!strcmp(argv[i]+1, "nooverlay") || - !strcmp(argv[i]+1, "noov")){ - CTX.overlay = CTX.geom.highlight = 0; i++; - } - else if(!strcmp(argv[i]+1, "hh")){ - CTX.overlay = 0 ; CTX.geom.highlight = 1; i++; - } - else if(!strcmp(argv[i]+1, "perspective") || - !strcmp(argv[i]+1, "p")){ - CTX.ortho = 0; i++; - } - else if(!strcmp(argv[i]+1, "ortho") || - !strcmp(argv[i]+1, "o")){ - CTX.ortho = 0; i++; - } - else if(!strcmp(argv[i]+1, "threads")){ - CTX.threads = 1; i++; - } - else if(!strcmp(argv[i]+1, "nothreads")){ - CTX.threads = 0; i++; - } - else if(!strcmp(argv[i]+1, "db")){ - CTX.db = 1; i++; - } - else if(!strcmp(argv[i]+1, "nodb")){ - CTX.db = 0; CTX.geom.highlight = 0; i++; - } - else if(!strcmp(argv[i]+1, "dl")){ - CTX.display_lists = 1; i++; - } - else if(!strcmp(argv[i]+1, "nodl")){ - CTX.display_lists = 0; i++; - } - else if(!strcmp(argv[i]+1, "fontsize")){ - i++; - if(argv[i]!=NULL){ - CTX.fontsize = atoi(argv[i]); - i++; - } - else { - fprintf(stderr, ERROR_STR "Missing number\n"); - exit(1); - } - } - else if(!strcmp(argv[i]+1, "display")){ - i++; - if(argv[i]!=NULL){ - CTX.display = argv[i]; - i++; - } - else { - fprintf(stderr, ERROR_STR "Missing argument\n"); - exit(1); - } - } -#endif // !_BLACKBOX - - - else{ - fprintf(stderr, "Unknown option '%s'\n", argv[i]); - CTX.terminal = 1 ; - Print_Usage(argv[0]); - exit(1); - } - } - - else { - if(*nbfiles < MAX_OPEN_FILES) - TheFileNameTab[(*nbfiles)++] = argv[i++]; - else{ - fprintf(stderr, ERROR_STR "Too many input files\n"); - exit(1); - } - } - - } - - strncpy(CTX.filename, TheFileNameTab[0], 255); - -} - diff --git a/Common/GetOptions.h b/Common/GetOptions.h deleted file mode 100644 index d5ded2855cf26bf46770dc7889cdc6bf679631b4..0000000000000000000000000000000000000000 --- a/Common/GetOptions.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef _GET_OPTIONS_H_ -#define _GET_OPTIONS_H_ - -extern char gmsh_progname[], gmsh_copyright[], gmsh_version[], gmsh_os[]; -extern char gmsh_date[], gmsh_host[], gmsh_packager[], gmsh_url[]; -extern char gmsh_email[], gmsh_gui[]; - -extern char *TheFileNameTab[MAX_OPEN_FILES], *TheBgmFileName, *TheOptString; - -void Get_Options(int argc, char *argv[], int *nbfiles); -void Print_Usage(char *name); - -#endif diff --git a/Common/Gmsh.h b/Common/Gmsh.h deleted file mode 100644 index ec3acf0e79846a2501a75cc417c0cde558033e2e..0000000000000000000000000000000000000000 --- a/Common/Gmsh.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef _GMSH_H_ -#define _GMSH_H_ - -/* This header should be included in any Gmsh source file. Modify it - only if really necessary, since it will force the whole code to be - rebuilt... */ - -#undef bool -#define bool int - -#undef true -#define true 1 - -#undef false -#define false 0 - -#include <stdio.h> -#include <stdlib.h> -#include <math.h> -#include <string.h> - -#include "Message.h" -#include "Malloc.h" -#include "List.h" -#include "Tree.h" -#include "Tools.h" - -#endif diff --git a/Common/GmshUI.h b/Common/GmshUI.h deleted file mode 100644 index 2e75a82dc7e68745c92b09e9bef9623b0ceda09e..0000000000000000000000000000000000000000 --- a/Common/GmshUI.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef _GMSH_UI_H_ -#define _GMSH_UI_H_ - -#ifdef WIN32 -#include <windows.h> -#include <GL/gl.h> -#include <GL/glu.h> -#endif - -#if _XMOTIF // X11 Motif for Unix - -#include <X11/keysym.h> -#include <Xm/XmAll.h> -#include <GL/gl.h> -#include <GL/glu.h> -#include <GL/glx.h> -#include <GLwMDrawA.h> - -#elif _FLTK // FLTK for both Unix and Windows - -#include <FL/Fl.H> -#include <FL/gl.h> -#include <GL/glu.h> - -#endif - -#endif diff --git a/Common/Icon.h b/Common/Icon.h deleted file mode 100644 index 1b35c1ddef9c32193271d44d993635e888fe6268..0000000000000000000000000000000000000000 --- a/Common/Icon.h +++ /dev/null @@ -1 +0,0 @@ -#define IDI_ICON 101 diff --git a/Common/Icon.ico b/Common/Icon.ico deleted file mode 100644 index d0761decbc9dbe7e407c0b37adbbead28a395e89..0000000000000000000000000000000000000000 Binary files a/Common/Icon.ico and /dev/null differ diff --git a/Common/Icon.rc b/Common/Icon.rc deleted file mode 100644 index 5c885f15cfb3f5c01e38e8c3cc697ca48e198ddc..0000000000000000000000000000000000000000 --- a/Common/Icon.rc +++ /dev/null @@ -1,5 +0,0 @@ - -#include "Icon.h" - -IDI_ICON ICON DISCARDABLE "Icon.ico" - diff --git a/Common/Icon.res b/Common/Icon.res deleted file mode 100644 index 696570cb91f14508277e69aafc31db200536c7e9..0000000000000000000000000000000000000000 Binary files a/Common/Icon.res and /dev/null differ diff --git a/Common/Iso.cpp b/Common/Iso.cpp deleted file mode 100644 index faadba61564da2761b8cbbc897a2fb9d93ebb126..0000000000000000000000000000000000000000 --- a/Common/Iso.cpp +++ /dev/null @@ -1,284 +0,0 @@ -// $Id: Iso.cpp,v 1.2 2001-08-09 13:27:41 remacle Exp $ - -#include "Gmsh.h" -#include "Mesh.h" -#include "Draw.h" -#include "Numeric.h" - -void RaiseFill(int i, double Val, double ValMin, double Raise[3][5]); - -/* ------------------------------------------------------------------------ */ -/* I n t e r p o l a t e */ -/* ------------------------------------------------------------------------ */ - -double InterpolateIso(double *X, double *Y, double *Z, - double *Val, double V, int I1, int I2, - double *XI, double *YI ,double *ZI){ - - if(Val[I1] == Val[I2]){ - *XI = X[I1]; - *YI = Y[I1]; - *ZI = Z[I1]; - return 0; - } - else{ - double coef = (V - Val[I1])/(Val[I2]-Val[I1]); - *XI= coef*(X[I2]-X[I1]) + X[I1]; - *YI= coef*(Y[I2]-Y[I1]) + Y[I1]; - *ZI= coef*(Z[I2]-Z[I1]) + Z[I1]; - return coef; - } -} - -/* ------------------------------------------------------------------------ */ -/* T r i a n g l e */ -/* ------------------------------------------------------------------------ */ - -void CutTriangle1D(double *X, double *Y, double *Z, double *Val, - double V, double Vmin, double Vmax, - double *Xp, double *Yp, double *Zp, int *nb){ - - if(V != Vmax){ - *nb = 0; - if((Val[0] > V && Val[1] <= V) || (Val[1] > V && Val[0] <= V)){ - InterpolateIso(X,Y,Z,Val,V,0,1,&Xp[*nb],&Yp[*nb],&Zp[*nb]); (*nb)++; - } - if((Val[0] > V && Val[2] <= V) || (Val[2] > V && Val[0] <= V)){ - InterpolateIso(X,Y,Z,Val,V,0,2,&Xp[*nb],&Yp[*nb],&Zp[*nb]); (*nb)++; - } - if((Val[1] > V && Val[2] <= V) || (Val[2] > V && Val[1] <= V)){ - InterpolateIso(X,Y,Z,Val,V,1,2,&Xp[*nb],&Yp[*nb],&Zp[*nb]); (*nb)++; - } - } - else{ - *nb = 0; - if((Val[0] < V && Val[1] >= V) || (Val[1] < V && Val[0] >= V)){ - InterpolateIso(X,Y,Z,Val,V,0,1,&Xp[*nb],&Yp[*nb],&Zp[*nb]); (*nb)++; - } - if((Val[0] < V && Val[2] >= V) || (Val[2] < V && Val[0] >= V)){ - InterpolateIso(X,Y,Z,Val,V,0,2,&Xp[*nb],&Yp[*nb],&Zp[*nb]); (*nb)++; - } - if((Val[1] < V && Val[2] >= V) || (Val[2] < V && Val[1] >= V)){ - InterpolateIso(X,Y,Z,Val,V,1,2,&Xp[*nb],&Yp[*nb],&Zp[*nb]); (*nb)++; - } - } - -} - -// Il faut refaire cette routine pour que l'orientation des elements -// soit respectee. - -void CutTriangle2D(double *X, double *Y, double *Z, double *Val, - double V1, double V2, double Vmin, double Vmax, - double *Xp2, double *Yp2, double *Zp2, int *Np2, double *Vp2){ - - int i, io[3],j,iot,Np,Fl; - double Xp[5],Yp[5],Zp[5],Vp[5]; - - *Np2 = 0; - - for(i=0;i<3;i++) io[i] = i; - - for(i=0;i<2;i++){ - for(j=i+1;j<3;j++){ - if(Val[io[i]]>Val[io[j]]){ - iot = io[i]; - io[i] = io[j]; - io[j] = iot; - } - } - } - - /* io[] contient un indexage des noeuds t.q. Val[io[i]] > Val[io[j]] si i > j */ - - if(Val[io[0]] > V2) return; - if(Val[io[2]] < V1) return; - - if(V1 <= Val[io[0]] && Val[io[2]] <= V2){ - memcpy(Vp2,Val,3*sizeof(double)); - memcpy(Xp2,X,3*sizeof(double)); - memcpy(Yp2,Y,3*sizeof(double)); - memcpy(Zp2,Z,3*sizeof(double)); - *Np2 = 3; - return; - } - - Np = 0; - if(V1<=Val[io[0]]){ - Vp[Np] = Val[io[0]]; - Xp[Np] = X[io[0]]; - Yp[Np] = Y[io[0]]; - Zp[Np] = Z[io[0]]; - Np++; Fl = 1; - } - else if(Val[io[0]] < V1 && V1 <= Val[io[1]]){ - Vp[Np] = V1; - InterpolateIso(X,Y,Z,Val,V1,io[0],io[2],&Xp[Np],&Yp[Np],&Zp[Np]); Np++; - Vp[Np] = V1; - InterpolateIso(X,Y,Z,Val,V1,io[0],io[1],&Xp[Np],&Yp[Np],&Zp[Np]); Np++; Fl = 1; - } - else { - Vp[Np] = V1; - InterpolateIso(X,Y,Z,Val,V1,io[0],io[2],&Xp[Np],&Yp[Np],&Zp[Np]); Np++; - Vp[Np] = V1; - InterpolateIso(X,Y,Z,Val,V1,io[1],io[2],&Xp[Np],&Yp[Np],&Zp[Np]); Np++; Fl = 0; - } - - if(V2 == Val[io[0]]){ - return; - } - else if((Val[io[0]]<V2) && ( V2 < Val[io[1]])){ - Vp[Np] = V2; - InterpolateIso(X,Y,Z,Val,V2,io[0],io[1],&Xp[Np],&Yp[Np],&Zp[Np]); Np++; - Vp[Np] = V2; - InterpolateIso(X,Y,Z,Val,V2,io[0],io[2],&Xp[Np],&Yp[Np],&Zp[Np]); Np++; - } - else if(V2 < Val[io[2]]){ - if(Fl){ - Vp[Np] = Val[io[1]]; - Xp[Np] = X[io[1]]; - Yp[Np] = Y[io[1]]; - Zp[Np] = Z[io[1]]; - Np++; - } - Vp[Np] = V2; - InterpolateIso(X,Y,Z,Val,V2,io[1],io[2],&Xp[Np],&Yp[Np],&Zp[Np]); Np++; - Vp[Np] = V2; - InterpolateIso(X,Y,Z,Val,V2,io[0],io[2],&Xp[Np],&Yp[Np],&Zp[Np]); Np++; - } - else{ - if(Fl){ - Vp[Np] = Val[io[1]]; - Xp[Np] = X[io[1]]; - Yp[Np] = Y[io[1]]; - Zp[Np] = Z[io[1]]; - Np++; - } - Vp[Np] = Val[io[2]]; - Xp[Np] = X[io[2]]; - Yp[Np] = Y[io[2]]; - Zp[Np] = Z[io[2]]; - Np++; - } - - Vp2[0] = Vp[0]; - Xp2[0] = Xp[0]; - Yp2[0] = Yp[0]; - Zp2[0] = Zp[0]; - *Np2 = 1; - - for(i=1;i<Np;i++){ - if((Xp[i] != Xp2[(*Np2)-1]) ||(Yp[i] != Yp2[(*Np2)-1]) ||(Zp[i] != Zp2[(*Np2)-1])){ - Vp2[*Np2] = Vp[i]; - Xp2[*Np2] = Xp[i]; - Yp2[*Np2] = Yp[i]; - Zp2[*Np2] = Zp[i]; - (*Np2)++; - } - } - - if(Xp2[0] == Xp2[(*Np2)-1] && Yp2[0] == Yp2[(*Np2)-1] && Zp2[0] == Zp2[(*Np2)-1]){ - (*Np2)-- ; - } - -} - -/* ------------------------------------------------------------------------ */ -/* L i n e */ -/* ------------------------------------------------------------------------ */ - -void CutLine0D(double *X, double *Y, double *Z, double *Val, - double V, double Vmin, double Vmax, - double *Xp, double *Yp, double *Zp, int *nb){ - - *nb = 0; - - if(V != Vmax){ - if((Val[0] > V && Val[1] <= V) || (Val[1] > V && Val[0] <= V)){ - InterpolateIso(X,Y,Z,Val,V,0,1,Xp,Yp,Zp); *nb = 1; - } - } - else{ - if((Val[0] < V && Val[1] >= V) || (Val[1] < V && Val[0] >= V)){ - InterpolateIso(X,Y,Z,Val,V,0,1,Xp,Yp,Zp); *nb = 1; - } - } -} - -void CutLine1D(double *X, double *Y, double *Z, double *Val, - double V1, double V2, double Vmin, double Vmax, - double *Xp2, double *Yp2, double *Zp2, int *Np2, double *Vp2){ - - int io[2]; - - if(Val[0]<Val[1]){ - io[0] = 0; - io[1] = 1; - } - else{ - io[0] = 1; - io[1] = 0; - } - - /* io[] contient un indexage des noeuds t.q. Val[io[i]] > Val[io[j]] si i > j */ - - *Np2 = 0; - - if(Val[io[0]] > V2) return; - if(Val[io[1]] < V1) return; - - *Np2 = 2; - - if(V1 <= Val[io[0]] && Val[io[1]] <= V2){ - memcpy(Vp2,Val,2*sizeof(double)); - memcpy(Xp2,X,2*sizeof(double)); - memcpy(Yp2,Y,2*sizeof(double)); - memcpy(Zp2,Z,2*sizeof(double)); - return; - } - - if(V1<=Val[io[0]]){ - Vp2[0] = Val[io[0]]; - Xp2[0] = X[io[0]]; - Yp2[0] = Y[io[0]]; - Zp2[0] = Z[io[0]]; - } - else{ - Vp2[0] = V1; - InterpolateIso(X,Y,Z,Val,V1,io[0],io[1],&Xp2[0],&Yp2[0],&Zp2[0]); - } - - if(V2>=Val[io[1]]){ - Vp2[1] = Val[io[1]]; - Xp2[1] = X[io[1]]; - Yp2[1] = Y[io[1]]; - Zp2[1] = Z[io[1]]; - } - else{ - Vp2[1] = V2; - InterpolateIso(X,Y,Z,Val,V2,io[0],io[1],&Xp2[1],&Yp2[1],&Zp2[1]); - } - -} - -void gradSimplex (double *x, double *y, double *z, double *v, double *grad){ - /* - p = p1 * (1-u-v-w) + p2 u + p3 v + p4 w - */ - - double mat[3][3]; - double det,b[3]; - mat[0][0] = x[1]-x[0]; - mat[1][0] = x[2]-x[0]; - mat[2][0] = x[3]-x[0]; - mat[0][1] = y[1]-y[0]; - mat[1][1] = y[2]-y[0]; - mat[2][1] = y[3]-y[0]; - mat[0][2] = z[1]-z[0]; - mat[1][2] = z[2]-z[0]; - mat[2][2] = z[3]-z[0]; - b[0] = v[1]-v[0]; - b[1] = v[2]-v[0]; - b[2] = v[3]-v[0]; - sys3x3 (mat, b, grad, &det); -} diff --git a/Common/Iso.h b/Common/Iso.h deleted file mode 100644 index 6ac4c4d2b08d19a261038d4b7e4f5f43d2e99089..0000000000000000000000000000000000000000 --- a/Common/Iso.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef _ISO_H_ -#define _ISO_H_ - -void gradSimplex (double *x, double *y, double *z, double *v, double *grad); - -void CutTriangle1D (double *X, double *Y, double *Z, double *Val, - double V, double Vmin, double Vmax, - double *Xp, double *Yp, double *Zp, int *nb); - -void CutTriangle2D (double *X, double *Y, double *Z, double *Val, - double V1, double V2, double Vmin, double Vmax, - double *Xp, double *Yp, double *Zp, int *nb, - double *value); - -void CutLine0D (double *X, double *Y, double *Z, double *Val, - double V, double Vmin, double Vmax, - double *Xp, double *Yp, double *Zp, int *nb); - -void CutLine1D (double *X, double *Y, double *Z, double *Val, - double V1, double V2, double Vmin, double Vmax, - double *Xp, double *Yp, double *Zp, int *nb, - double *value); - -double InterpolateIso(double *X, double *Y, double *Z, - double *Val, double V, int I1, int I2, - double *XI, double *YI ,double *ZI); - -#endif diff --git a/Common/Makefile b/Common/Makefile deleted file mode 100644 index 48702d8144a67d1317f6bdfa9f8924d766aa095f..0000000000000000000000000000000000000000 --- a/Common/Makefile +++ /dev/null @@ -1,103 +0,0 @@ -# $Id: Makefile,v 1.26 2001-08-11 23:32:17 geuzaine Exp $ -# -# Makefile for "libCommon.a" -# - -.IGNORE: - -CC = c++ -AR = ar ruvs -RANLIB = ranlib -RM = rm - -LIB = ../lib/libCommon.a -INCLUDE = -I../includes -I../Common -I../DataStr -I../Geo -I../Graphics\ - -I../Mesh -I../Parser -I../Motif -I../Fltk - -C_FLAGS = -g -Wall -OS_FLAGS = -D_LITTLE_ENDIAN -VERSION_FLAGS = -D_FLTK - -GL_INCLUDE = -I$(HOME)/SOURCES/Mesa-3.1/include\ - -I$(HOME)/SOURCES/Mesa-3.1/include/GL -GUI_INCLUDE = -I/usr/X11R6/LessTif/Motif1.2/include - -RMFLAGS = -f -CFLAGS = $(C_FLAGS) $(OS_FLAGS) $(VERSION_FLAGS) $(INCLUDE)\ - $(GL_INCLUDE) $(GUI_INCLUDE) - -SRC = Context.cpp\ - Views.cpp\ - Iso.cpp\ - Options.cpp\ - GetOptions.cpp\ - Timer.cpp\ - ColorTable.cpp\ - Numeric.cpp - -OBJ = $(SRC:.cpp=.o) - -.SUFFIXES: .o .cpp - -$(LIB): $(OBJ) - $(AR) $(LIB) $(OBJ) - $(RANLIB) $(LIB) - -.cpp.o: - $(CC) $(CFLAGS) -c $< - -clean: - $(RM) $(RMFLAGS) *.o - -lint: - $(LINT) $(CFLAGS) $(SRC) - -res: - windres Icon.rc -O coff Icon.res - -depend: - (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ - $(CC) -MM $(CFLAGS) ${SRC} \ - ) >Makefile.new - cp Makefile Makefile.bak - cp Makefile.new Makefile - $(RM) $(RMFLAGS) Makefile.new - -# DO NOT DELETE THIS LINE -Context.o: Context.cpp Gmsh.h Message.h ../DataStr/Malloc.h \ - ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \ - ../DataStr/Tools.h Numeric.h ../Geo/Geo.h ../Mesh/Mesh.h \ - ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Graphics/Draw.h \ - ../Common/Views.h ../Common/ColorTable.h Context.h Options.h \ - DefaultOptions.h trackball.c trackball.h -Views.o: Views.cpp Gmsh.h Message.h ../DataStr/Malloc.h \ - ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \ - ../DataStr/Tools.h Numeric.h Views.h ColorTable.h Context.h Options.h -Iso.o: Iso.cpp Gmsh.h Message.h ../DataStr/Malloc.h ../DataStr/List.h \ - ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h ../Mesh/Mesh.h \ - ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Graphics/Draw.h \ - ../Common/Views.h ../Common/ColorTable.h Numeric.h -Options.o: Options.cpp Gmsh.h Message.h ../DataStr/Malloc.h \ - ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \ - ../DataStr/Tools.h GmshUI.h ../Geo/Geo.h ../Mesh/Mesh.h \ - ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Graphics/Draw.h \ - ../Common/Views.h ../Common/ColorTable.h Context.h Options.h \ - ../Fltk/Solvers.h ../Fltk/GUI.h ../Fltk/Opengl_Window.h \ - ../Fltk/Colorbar_Window.h -GetOptions.o: GetOptions.cpp Gmsh.h Message.h ../DataStr/Malloc.h \ - ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \ - ../DataStr/Tools.h GmshUI.h GmshVersion.h Numeric.h Context.h \ - Options.h ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ - ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/Metric.h Views.h ColorTable.h ../Parser/OpenFile.h \ - ../Parser/Parser.h -Timer.o: Timer.cpp -ColorTable.o: ColorTable.cpp Gmsh.h Message.h ../DataStr/Malloc.h \ - ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \ - ../DataStr/Tools.h ColorTable.h Context.h -Numeric.o: Numeric.cpp Gmsh.h Message.h ../DataStr/Malloc.h \ - ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \ - ../DataStr/Tools.h Numeric.h diff --git a/Common/Message.h b/Common/Message.h deleted file mode 100644 index a4b616e3fb0d0393ad1ed40d3fd931f47cac782d..0000000000000000000000000000000000000000 --- a/Common/Message.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef _MESSAGE_H_ -#define _MESSAGE_H_ - -#include <stdarg.h> - -#define FATAL 1 // Fatal error (causes Gmsh to exit) -#define FATAL1 2 // First part of a multiline FATAL message -#define FATAL2 3 // Middle part of a multiline FATAL message -#define FATAL3 4 // Last part of a multiline FATAL message - -#define GERROR 5 // Error (but Gmsh can live with it) -#define GERROR1 6 // First part of a multiline ERROR message -#define GERROR2 7 // Middle part of a multiline ERROR message -#define GERROR3 8 // Last part of a multiline ERROR message - -#define WARNING 9 // Warning -#define WARNING1 10 // First part of a multiline WARNING message -#define WARNING2 11 // Middle part of a multiline WARNING message -#define WARNING3 12 // Last part of a multiline WARNING message - -#define INFO 13 // Long informations -#define INFO1 14 // First part of a multiline INFO message -#define INFO2 15 // Middle part of a multiline INFO message -#define INFO3 16 // Last part of a multiline INFO message - -#define DEBUG 17 // Long debug information -#define DEBUG1 18 // First part of a multiline DEBUG message -#define DEBUG2 19 // Middle part of a multiline DEBUG message -#define DEBUG3 20 // Last part of a multiline DEBUG message - -#define STATUS1 21 // Small information in status bar (left) -#define STATUS2 22 // Small interaction in status bar (middle) -#define STATUS3 23 // Small interaction in status bar (right) - -#define STATUS1N 24 // Same as STATUS1, but not going into the log file -#define STATUS2N 25 // Same as STATUS2, but not going into the log file -#define STATUS3N 26 // Same as STATUS3, but not going into the log file - -#define PARSER_ERROR 27 // Error during syntax parsing -#define PARSER_INFO 28 // Info during syntax parsing -#define LOG_INFO 29 // Info put only in the logfile - -#define DIRECT 30 // Direct message (no special formatting) - -#define FATAL_STR "Fatal Error : " -#define FATAL_NIL " : " -#define ERROR_STR "Error : " -#define ERROR_NIL " : " -#define WARNING_STR "Warning : " -#define WARNING_NIL " : " -#define INFO_STR "Info : " -#define INFO_NIL " : " -#define DEBUG_STR "Debug : " -#define DEBUG_NIL " : " -#define STATUS_STR "Info : " -#define PARSER_ERROR_STR "Parse Error : " -#define PARSER_INFO_STR "Parse Info : " - -void Signal (int signum); -void Msg (int level, char *fmt, ...); -double Cpu (void); -void Progress(int); -void Exit(int); -void AddALineInTheEditGeometryForm (char* line); - -#endif diff --git a/Common/Numeric.cpp b/Common/Numeric.cpp deleted file mode 100644 index aca50feb50232fe10c419f3cbd79f1da809887b1..0000000000000000000000000000000000000000 --- a/Common/Numeric.cpp +++ /dev/null @@ -1,161 +0,0 @@ -// $Id: Numeric.cpp,v 1.1 2001-08-11 23:28:31 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" - -// this file should contain only purely numerical routines (that do -// not depend on any Gmsh structures) - -double myatan2 (double a, double b){ - if (a == 0.0 && b == 0) - return 0.0; - return atan2 (a, b); -} - -double myacos (double a){ - if (a == 0) - return Pi * 0.5; - if (a == 1) - return 0.0; - return acos (a); -} - -void prodve (double a[3], double b[3], double c[3]){ - c[2] = a[0] * b[1] - a[1] * b[0]; - c[1] = -a[0] * b[2] + a[2] * b[0]; - c[0] = a[1] * b[2] - a[2] * b[1]; -} - -void prosca (double a[3], double b[3], double *c){ - *c = a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; -} - -void norme (double a[3]){ - double mod; - mod = sqrt (a[0] * a[0] + a[1] * a[1] + a[2] * a[2]); - if (mod == 0.0) - return; - a[0] /= mod; - a[1] /= mod; - a[2] /= mod; -} - -int sys2x2 (double mat[2][2], double b[2], double res[2]){ - double det, ud, norm; - int i; - - norm = DSQR (mat[0][0]) + DSQR (mat[1][1]) + DSQR (mat[0][1]) + DSQR (mat[1][0]); - det = mat[0][0] * mat[1][1] - mat[1][0] * mat[0][1]; - - // TOLERANCE ! WARNING WARNING - if (norm == 0.0 || fabs (det) / norm < 1.e-07){ - Msg(DEBUG, "Assuming 2x2 matrix is singular (det/norm == %g)", fabs(det)/norm); - res[0] = res[1] = 0.0 ; - return 0; - } - ud = 1. / det; - - res[0] = b[0] * mat[1][1] - mat[0][1] * b[1]; - res[1] = mat[0][0] * b[1] - mat[1][0] * b[0]; - - for (i = 0; i < 2; i++) - res[i] *= ud; - return (1); -} - -int sys3x3 (double mat[3][3], double b[3], double res[3], double *det){ - double ud; - int i; - - *det = mat[0][0] * (mat[1][1] * mat[2][2] - mat[1][2] * mat[2][1]) - - mat[0][1] * (mat[1][0] * mat[2][2] - mat[1][2] * mat[2][0]) + - mat[0][2] * (mat[1][0] * mat[2][1] - mat[1][1] * mat[2][0]); - - if (*det == 0.0){ - res[0] = res[1] = res[2] = 0.0 ; - return (0); - } - - ud = 1. / (*det); - - res[0] = b[0] * (mat[1][1] * mat[2][2] - mat[1][2] * mat[2][1]) - - mat[0][1] * (b[1] * mat[2][2] - mat[1][2] * b[2]) + - mat[0][2] * (b[1] * mat[2][1] - mat[1][1] * b[2]); - - res[1] = mat[0][0] * (b[1] * mat[2][2] - mat[1][2] * b[2]) - - b[0] * (mat[1][0] * mat[2][2] - mat[1][2] * mat[2][0]) + - mat[0][2] * (mat[1][0] * b[2] - b[1] * mat[2][0]); - - res[2] = mat[0][0] * (mat[1][1] * b[2] - b[1] * mat[2][1]) - - mat[0][1] * (mat[1][0] * b[2] - b[1] * mat[2][0]) + - b[0] * (mat[1][0] * mat[2][1] - mat[1][1] * mat[2][0]); - - for (i = 0; i < 3; i++) - res[i] *= ud; - return (1); - -} - -int sys3x3_with_tol (double mat[3][3], double b[3], double res[3], double *det){ - int out; - double norm; - - out = sys3x3(mat,b,res,det); - norm = - DSQR (mat[0][0]) + DSQR (mat[0][1]) + DSQR (mat[0][2]) + - DSQR (mat[1][0]) + DSQR (mat[1][1]) + DSQR (mat[1][2]) + - DSQR (mat[2][0]) + DSQR (mat[2][1]) + DSQR (mat[2][2]) ; - - // TOLERANCE ! WARNING WARNING - if (norm == 0.0 || fabs (*det) / norm < 1.e-12){ - Msg(DEBUG, "Assuming 3x3 matrix is singular (det/norm == %g)", fabs(*det)/norm); - res[0] = res[1] = res[2] = 0.0 ; - return 0; - } - - return out ; -} - -int det3x3 (double mat[3][3], double *det){ - *det = mat[0][0] * (mat[1][1] * mat[2][2] - mat[1][2] * mat[2][1]) - - mat[0][1] * (mat[1][0] * mat[2][2] - mat[1][2] * mat[2][0]) + - mat[0][2] * (mat[1][0] * mat[2][1] - mat[1][1] * mat[2][0]); - return 1; -} - -int inv3x3 (double mat[3][3], double inv[3][3], double *det){ - double ud; - - *det = mat[0][0] * (mat[1][1] * mat[2][2] - mat[1][2] * mat[2][1]) - - mat[0][1] * (mat[1][0] * mat[2][2] - mat[1][2] * mat[2][0]) + - mat[0][2] * (mat[1][0] * mat[2][1] - mat[1][1] * mat[2][0]); - - if (*det == 0.0) - return (0); - - ud = 1. / (*det); - - inv[0][0] = ud * (mat[1][1] * mat[2][2] - mat[1][2] * mat[2][1]); - inv[0][1] = -ud * (mat[1][0] * mat[2][2] - mat[1][2] * mat[2][0]); - inv[0][2] = ud * (mat[1][0] * mat[2][1] - mat[1][1] * mat[2][0]); - inv[1][0] = -ud * (mat[0][1] * mat[2][2] - mat[0][2] * mat[2][1]); - inv[1][1] = ud * (mat[0][0] * mat[2][2] - mat[0][2] * mat[2][0]); - inv[1][2] = -ud * (mat[0][0] * mat[2][1] - mat[0][1] * mat[2][0]); - inv[2][0] = ud * (mat[0][1] * mat[1][2] - mat[0][2] * mat[1][1]); - inv[2][1] = -ud * (mat[0][0] * mat[1][2] - mat[0][2] * mat[1][0]); - inv[2][2] = ud * (mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0]); - return (1); - -} - -double angle_02pi (double A3){ - double DP = 2 * Pi; - while (A3 > DP || A3 < 0.){ - if (A3 > 0) - A3 -= DP; - else - A3 += DP; - } - return A3; -} - diff --git a/Common/Numeric.h b/Common/Numeric.h deleted file mode 100644 index 7d00a54e852c54ab2e3bc60cf21ac772a5f4837a..0000000000000000000000000000000000000000 --- a/Common/Numeric.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef _NUMERIC_H_ -#define _NUMERIC_H_ - -#include <math.h> - -#define RADTODEG 57.295779513082321 -#define RacineDeDeux 1.4142135623730950 -#define RacineDeTrois 1.7320508075688773 -#define Pi 3.1415926535897932 -#define Deux_Pi 6.2831853071795865 - -#define MIN(a,b) (((a)<(b))?(a):(b)) -#define MAX(a,b) (((a)<(b))?(b):(a)) -#define SQR(a) ((a)*(a)) - -#define IMIN MIN -#define LMIN MIN -#define FMIN MIN -#define DMIN MIN - -#define IMAX MAX -#define LMAX MAX -#define FMAX MAX -#define DMAX MAX - -#define DSQR SQR -#define FSQR SQU - -#define THRESHOLD(a,b,c) (((a)>(c))?(c):((a)<(b)?(b):(a))) - -#define myhypot(a,b) (sqrt((a)*(a)+(b)*(b))) -#define sign(x) (((x)>=0)?1:-1) -#define Pred(x) ((x)->prev) -#define Succ(x) ((x)->next) -#define square(x) ((x)*(x)) - -double myatan2 (double a, double b); -double myacos (double a); -void prodve (double a[3], double b[3], double c[3]); -void prosca (double a[3], double b[3], double *c); -void norme (double a[3]); -int sys2x2 (double mat[2][2], double b[2], double res[2]); -int sys3x3 (double mat[3][3], double b[3], double res[3], double *det); -int sys3x3_with_tol (double mat[3][3], double b[3], double res[3], double *det); -int det3x3 (double mat[3][3], double *det); -int inv3x3 (double mat[3][3], double inv[3][3], double *det); -double angle_02pi (double A3); - -#endif diff --git a/Common/Options.cpp b/Common/Options.cpp deleted file mode 100644 index d76a6704002974a0c42af182927b9cce97007af9..0000000000000000000000000000000000000000 --- a/Common/Options.cpp +++ /dev/null @@ -1,2402 +0,0 @@ -// $Id: Options.cpp,v 1.39 2001-08-04 01:16:58 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Geo.h" -#include "Mesh.h" -#include "Draw.h" -#include "Context.h" -#include "Options.h" - -extern Context_T CTX ; - -#ifdef _FLTK -#include "Solvers.h" -#include "GUI.h" -extern GUI *WID ; -#endif - -// ************** General routines **************************************** - -void Init_Options(int num){ - char *tmp; - - // Home directory -#if !defined(WIN32) // Some WinNT systems have bad HOME variables... - if((tmp = getenv("HOME"))) strcpy(CTX.home_dir, tmp); - else -#endif - if((tmp = getenv("TMP"))) strcpy(CTX.home_dir, tmp); - else if((tmp = getenv("TEMP"))) strcpy(CTX.home_dir, tmp); - else strcpy(CTX.home_dir, ""); - if(strlen(CTX.home_dir)){ -#if defined(WIN32) && !defined(__CYGWIN__) - strcat(CTX.home_dir, "\\"); -#else - strcat(CTX.home_dir, "/"); -#endif - } - - // Reference view storing default options - Post_ViewReference = (Post_View*)Malloc(sizeof(Post_View)) ; - Post_ViewReference->CT.size = 255; - Post_ViewReference->CT.ipar[COLORTABLE_MODE] = COLORTABLE_RGB; - ColorTable_InitParam(1, &Post_ViewReference->CT, 1, 1); - ColorTable_Recompute(&Post_ViewReference->CT, 1, 1); - - // Default string options - Set_DefaultStringOptions(num, GeneralOptions_String); - Set_DefaultStringOptions(num, GeometryOptions_String); - Set_DefaultStringOptions(num, MeshOptions_String); - Set_DefaultStringOptions(num, SolverOptions_String); - Set_DefaultStringOptions(num, PostProcessingOptions_String); - Set_DefaultStringOptions(num, ViewOptions_String); - Set_DefaultStringOptions(num, PrintOptions_String); - - // Default number options - Set_DefaultNumberOptions(num, GeneralOptions_Number); - Set_DefaultNumberOptions(num, GeometryOptions_Number); - Set_DefaultNumberOptions(num, MeshOptions_Number); - Set_DefaultNumberOptions(num, SolverOptions_Number); - Set_DefaultNumberOptions(num, PostProcessingOptions_Number); - Set_DefaultNumberOptions(num, ViewOptions_Number); - Set_DefaultNumberOptions(num, PrintOptions_Number); - - // Default color options - Set_DefaultColorOptions(num, GeneralOptions_Color, CTX.color_scheme); - Set_DefaultColorOptions(num, GeometryOptions_Color, CTX.color_scheme); - Set_DefaultColorOptions(num, MeshOptions_Color, CTX.color_scheme); - Set_DefaultColorOptions(num, SolverOptions_Color, CTX.color_scheme); - Set_DefaultColorOptions(num, PostProcessingOptions_Color, CTX.color_scheme); - Set_DefaultColorOptions(num, ViewOptions_Color, CTX.color_scheme); - Set_DefaultColorOptions(num, PrintOptions_Color, CTX.color_scheme); - - // The following defaults cannot be set by the user - CTX.batch = 0 ; - CTX.output_filename = NULL ; - CTX.expose = 0 ; - CTX.stream = TO_SCREEN ; - CTX.gl_fontheight = 12; - CTX.gl_fontascent = 8; - CTX.lc = 1.0 ; - CTX.viewport[0] = CTX.viewport[1] = 0 ; - CTX.min[0] = CTX.min[1] = CTX.min[2] = 0.0 ; - CTX.max[0] = CTX.max[1] = CTX.max[2] = 1.0 ; - CTX.range[0] = CTX.range[1] = CTX.range[2] = 1.0 ; - CTX.vxmin = CTX.vymin = CTX.vxmax = CTX.vymax = 0. ; - CTX.render_mode = GMSH_RENDER ; - CTX.pixel_equiv_x = CTX.pixel_equiv_y = 0. ; - CTX.geom.vis_type = 0 ; - CTX.geom.level = ELEMENTARY ; - CTX.mesh.vis_type = 0 ; - CTX.mesh.draw = 1 ; - CTX.post.draw = 1 ; - CTX.threads_lock = 0 ; //very primitive locking during mesh generation - CTX.mesh.histogram = 0 ; - CTX.mesh.oldxtrude = CTX.mesh.oldxtrude_recombine = 0; //old extrusion mesh generator - CTX.mesh.check_duplicates = 0; //check for duplicate nodes in Read_Mesh - - // For motif versions only: - CTX.overlay = 1 ; - CTX.command_win = 0 ; - CTX.threads = 1 ; - CTX.font = "-*-helvetica-medium-r-*-*-*-*-*-*-*-*-*-*" ; - CTX.fixed_font = "fixed" ; -} - -void Init_Options_GUI(int num){ - Set_StringOptions_GUI(num, GeneralOptions_String); - Set_StringOptions_GUI(num, GeometryOptions_String); - Set_StringOptions_GUI(num, MeshOptions_String); - Set_StringOptions_GUI(num, SolverOptions_String); - Set_StringOptions_GUI(num, PostProcessingOptions_String); - Set_StringOptions_GUI(num, PrintOptions_String); - - Set_NumberOptions_GUI(num, GeneralOptions_Number); - Set_NumberOptions_GUI(num, GeometryOptions_Number); - Set_NumberOptions_GUI(num, MeshOptions_Number); - Set_NumberOptions_GUI(num, SolverOptions_Number); - Set_NumberOptions_GUI(num, PostProcessingOptions_Number); - Set_NumberOptions_GUI(num, PrintOptions_Number); - - Set_ColorOptions_GUI(num, GeneralOptions_Color); - Set_ColorOptions_GUI(num, GeometryOptions_Color); - Set_ColorOptions_GUI(num, MeshOptions_Color); - Set_ColorOptions_GUI(num, SolverOptions_Color); - Set_ColorOptions_GUI(num, PostProcessingOptions_Color); - Set_ColorOptions_GUI(num, PrintOptions_Color); -} - -void Print_OptionCategory(int level, char *cat, FILE *file){ - if(level & GMSH_SESSIONRC) return ; - if(file){ - fprintf(file, "//\n"); - fprintf(file, "// %s\n", cat); - fprintf(file, "//\n"); - } - else{ - Msg(DIRECT, "//"); - Msg(DIRECT, "// %s", cat); - Msg(DIRECT, "//"); - } -} - -void Print_Options(int num, int level, char *filename){ - FILE *file; - char tmp[256]; - int i ; - - if(filename){ - file = fopen(filename,"w"); - if(!file){ - Msg(WARNING, "Unable to open file '%s'", filename); - return; - } - } - else - file = NULL ; - - if((level & GMSH_SESSIONRC) && file){ - fprintf(file, "// Gmsh Session File\n"); - fprintf(file, "//\n"); - fprintf(file, "// This file takes session specific info (that is info\n"); - fprintf(file, "// you want to keep between two Gmsh sessions). You are\n"); - fprintf(file, "// not supposed to edit it manually, but of course you\n"); - fprintf(file, "// can do. This file will be entirely rewritten every time\n"); - fprintf(file, "// you quit Gmsh if the option 'General.SaveSession' is\n"); - fprintf(file, "// set. If this file isn't found, defaults are used.\n"); - fprintf(file, "//\n"); - } - - if((level & GMSH_OPTIONSRC) && file){ - fprintf(file, "// Gmsh Option File\n"); - fprintf(file, "//\n"); - fprintf(file, "// This file takes configuration options (preferences) that\n"); - fprintf(file, "// should be loaded each time Gmsh is launched. You can create\n"); - fprintf(file, "// this file by hand, or let Gmsh generate it for you (with\n"); - fprintf(file, "// the 'Options->Save options now' menu button). This file can\n"); - fprintf(file, "// also be automatically regenerated every time you quit\n"); - fprintf(file, "// Gmsh if the option 'General.SaveOptions' is set. If\n"); - fprintf(file, "// this file isn't found, defaults are used.\n"); - fprintf(file, "//\n"); - } - - Print_OptionCategory(level, "General options", file); - Print_StringOptions(num, level, GeneralOptions_String, "General.", file); - Print_NumberOptions(num, level, GeneralOptions_Number, "General.", file); - Print_ColorOptions(num, level, GeneralOptions_Color, "General.", file); - Print_OptionCategory(level, "Geometry options", file); - Print_StringOptions(num, level, GeometryOptions_String, "Geometry.", file); - Print_NumberOptions(num, level, GeometryOptions_Number, "Geometry.", file); - Print_ColorOptions(num, level, GeometryOptions_Color, "Geometry.", file); - Print_OptionCategory(level, "Mesh options", file); - Print_StringOptions(num, level, MeshOptions_String, "Mesh.", file); - Print_NumberOptions(num, level, MeshOptions_Number, "Mesh.", file); - Print_ColorOptions(num, level, MeshOptions_Color, "Mesh.", file); - Print_OptionCategory(level, "Solver options", file); - Print_StringOptions(num, level, SolverOptions_String, "Solver.", file); - Print_NumberOptions(num, level, SolverOptions_Number, "Solver.", file); - Print_ColorOptions(num, level, SolverOptions_Color, "Solver.", file); - Print_OptionCategory(level, "Post-processing options", file); - Print_StringOptions(num, level, PostProcessingOptions_String, "PostProcessing.", file); - Print_NumberOptions(num, level, PostProcessingOptions_Number, "PostProcessing.", file); - Print_ColorOptions(num, level, PostProcessingOptions_Color, "PostProcessing.", file); - Print_OptionCategory(level, "View options", file); - if(level & GMSH_FULLRC){ - for(i=0; i<List_Nbr(Post_ViewList) ; i++){ - sprintf(tmp, "View[%d].", i); - Print_StringOptions(i, level, ViewOptions_String, tmp, file); - Print_NumberOptions(i, level, ViewOptions_Number, tmp, file); - Print_ColorOptions(i, level, ViewOptions_Color, tmp, file); - strcat(tmp, "ColorTable"); - Print_ColorTable(i, tmp, file); - } - } - else if(level & GMSH_OPTIONSRC){ - Print_StringOptions(num, level, ViewOptions_String, "View.", file); - Print_NumberOptions(num, level, ViewOptions_Number, "View.", file); - Print_ColorOptions(num, level, ViewOptions_Color, "View.", file); - Print_ColorTable(num, "View.ColorTable", file); - } - Print_OptionCategory(level, "Print options", file); - Print_StringOptions(num, level, PrintOptions_String, "Print.", file); - Print_NumberOptions(num, level, PrintOptions_Number, "Print.", file); - Print_ColorOptions(num, level, PrintOptions_Color, "Print.", file); - - if(filename){ - if((level & GMSH_OPTIONSRC) || (level & GMSH_FULLRC)){ - Msg(INFO, "Options output complete '%s'", filename); - Msg(STATUS2, "Wrote '%s'", filename); - } - fclose(file); - } -} - -// ************** General routines for string options ************************ - -StringXString * Get_StringOptionCategory(char * cat){ - if (!strcmp(cat,"General")) return GeneralOptions_String ; - else if(!strcmp(cat,"Geometry")) return GeometryOptions_String ; - else if(!strcmp(cat,"Mesh")) return MeshOptions_String ; - else if(!strcmp(cat,"Solver")) return SolverOptions_String ; - else if(!strcmp(cat,"PostProcessing")) return PostProcessingOptions_String ; - else if(!strcmp(cat,"View")) return ViewOptions_String ; - else if(!strcmp(cat,"Print")) return PrintOptions_String ; - else return NULL ; -} - -void Set_DefaultStringOptions(int num, StringXString s[]){ - int i = 0; - while(s[i].str){ - s[i].function(num, GMSH_SET, s[i].def) ; - i++; - } -} - -void Set_StringOptions_GUI(int num, StringXString s[]){ - int i = 0; - while(s[i].str){ - s[i].function(num, GMSH_GUI, 0) ; - i++; - } -} - -void * Get_StringOption(char *str, StringXString s[]){ - int i = 0; - while ((s[i].str != NULL) && (strcmp(s[i].str, str))) i++ ; - if(!s[i].str) - return NULL; - else - return (void*)s[i].function; -} - -void Print_StringOptions(int num, int level, StringXString s[], char *prefix, FILE *file){ - int i = 0; - char tmp[1024]; - while(s[i].str){ - if(s[i].level & level){ - sprintf(tmp, "%s%s = \"%s\"; // %s", prefix, - s[i].str, s[i].function(num, GMSH_GET, NULL), s[i].help) ; - if(file) fprintf(file, "%s\n", tmp); else Msg(DIRECT, "%s", tmp); - } - i++; - } -} - -// ************** General routines for numeric options ************************ - -StringXNumber * Get_NumberOptionCategory(char * cat){ - if (!strcmp(cat,"General")) return GeneralOptions_Number ; - else if(!strcmp(cat,"Geometry")) return GeometryOptions_Number ; - else if(!strcmp(cat,"Mesh")) return MeshOptions_Number ; - else if(!strcmp(cat,"Solver")) return SolverOptions_Number ; - else if(!strcmp(cat,"PostProcessing")) return PostProcessingOptions_Number ; - else if(!strcmp(cat,"View")) return ViewOptions_Number ; - else if(!strcmp(cat,"Print")) return PrintOptions_Number ; - else return NULL ; -} - -void Set_DefaultNumberOptions(int num, StringXNumber s[]){ - int i = 0; - while(s[i].str){ - s[i].function(num, GMSH_SET, s[i].def) ; - i++; - } -} - -void Set_NumberOptions_GUI(int num, StringXNumber s[]){ - int i = 0; - while(s[i].str){ - s[i].function(num, GMSH_GUI, 0) ; - i++ ; - } -} - -void * Get_NumberOption(char *str, StringXNumber s[]){ - int i = 0; - - while ((s[i].str != NULL) && (strcmp(s[i].str, str))) i++ ; - if(!s[i].str) - return NULL; - else{ - return (void*)s[i].function; - } -} - -void Print_NumberOptions(int num, int level, StringXNumber s[], char *prefix, FILE *file){ - int i = 0; - char tmp[1024]; - while(s[i].str){ - if(s[i].level & level){ - sprintf(tmp, "%s%s = %g; // %s", prefix, - s[i].str, s[i].function(num, GMSH_GET, 0), s[i].help); - if(file) fprintf(file, "%s\n", tmp); else Msg(DIRECT, tmp); - } - i++; - } -} - -// ************** General routines for color options ************************ - -StringXColor * Get_ColorOptionCategory(char * cat){ - if (!strcmp(cat,"General")) return GeneralOptions_Color ; - else if(!strcmp(cat,"Geometry")) return GeometryOptions_Color ; - else if(!strcmp(cat,"Mesh")) return MeshOptions_Color ; - else if(!strcmp(cat,"Solver")) return SolverOptions_Color ; - else if(!strcmp(cat,"PostProcessing")) return PostProcessingOptions_Color ; - else if(!strcmp(cat,"View")) return ViewOptions_Color ; - else if(!strcmp(cat,"Print")) return PrintOptions_Color ; - else return NULL ; -} - -void Set_DefaultColorOptions(int num, StringXColor s[], int scheme){ - int i = 0; - switch(scheme){ - case 0 : - while(s[i].str){ - s[i].function(num, GMSH_SET, s[i].def1) ; - i++; - } - break; - case 1 : - while(s[i].str){ - s[i].function(num, GMSH_SET, s[i].def2) ; - i++; - } - break; - case 2 : - while(s[i].str){ - s[i].function(num, GMSH_SET, s[i].def3) ; - i++; - } - break; - } -} - -void Set_ColorOptions_GUI(int num, StringXColor s[]){ - int i = 0; - while(s[i].str){ - s[i].function(num, GMSH_GUI, 0) ; - i++; - } -} - -void * Get_ColorOption(char *str, StringXColor s[]) { - int i = 0; - while ((s[i].str != NULL) && (strcmp(s[i].str, str))) i++ ; - if(!s[i].str) - return NULL; - else - return (void*)s[i].function; -} - -void Print_ColorOptions(int num, int level, StringXColor s[], char *prefix, FILE *file){ - int i = 0; - char tmp[1024]; - while(s[i].str){ - if(s[i].level & level){ - sprintf(tmp, "%sColor.%s = {%d,%d,%d}; // %s", - prefix, s[i].str, - UNPACK_RED (s[i].function(num, GMSH_GET, 0)), - UNPACK_GREEN(s[i].function(num, GMSH_GET, 0)), - UNPACK_BLUE (s[i].function(num, GMSH_GET, 0)), - s[i].help); - if(file) fprintf(file, "%s\n", tmp); else Msg(DIRECT, tmp); - } - i++; - } -} - -int Get_ColorForString(StringX4Int SX4I[], int alpha, - char * str, int * FlagError) { - int i = 0 ; - while ((SX4I[i].str != NULL) && (strcmp(SX4I[i].str, str))) i++ ; - *FlagError = (SX4I[i].str == NULL)? 1 : 0 ; - if(alpha > 0) - return PACK_COLOR(SX4I[i].int1,SX4I[i].int2,SX4I[i].int3,alpha) ; - else - return PACK_COLOR(SX4I[i].int1,SX4I[i].int2,SX4I[i].int3,SX4I[i].int4) ; -} - - - - - -// ************** String option routines **************************** - -#define GET_VIEW(error_val) \ - Post_View *v; \ - if(!Post_ViewList) \ - v = Post_ViewReference ; \ - else{ \ - if(!(v = (Post_View*)List_Pointer_Test(Post_ViewList, num))){ \ - Msg(WARNING, "View[%d] does not exist", num) ; \ - return (error_val) ; \ - } \ - } - -char * opt_general_display(OPT_ARGS_STR){ - if(action & GMSH_SET) CTX.display = val; - return CTX.display; -} -char * opt_general_default_filename(OPT_ARGS_STR){ - if(action & GMSH_SET) CTX.default_filename = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_input[0]->value(CTX.default_filename); -#endif - return CTX.default_filename; -} -char * opt_general_tmp_filename(OPT_ARGS_STR){ - if(action & GMSH_SET) CTX.tmp_filename = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_input[1]->value(CTX.tmp_filename); -#endif - return CTX.tmp_filename; -} -char * opt_general_error_filename(OPT_ARGS_STR){ - if(action & GMSH_SET) CTX.error_filename = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_input[2]->value(CTX.error_filename); -#endif - return CTX.error_filename; -} -char * opt_general_session_filename(OPT_ARGS_STR){ - if(action & GMSH_SET){ - CTX.session_filename = val; - strcpy(CTX.sessionrc_filename, CTX.home_dir); - strcat(CTX.sessionrc_filename, CTX.session_filename); - } - return CTX.session_filename; -} -char * opt_general_options_filename(OPT_ARGS_STR){ - if(action & GMSH_SET){ - CTX.options_filename = val; - strcpy(CTX.optionsrc_filename, CTX.home_dir); - strcat(CTX.optionsrc_filename, CTX.options_filename); - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_input[3]->value(CTX.options_filename); -#endif - return CTX.options_filename; -} -char * opt_general_editor(OPT_ARGS_STR){ - if(action & GMSH_SET) CTX.editor = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_input[4]->value(CTX.editor); -#endif - return CTX.editor; -} - -char * opt_solver_getdp_command(OPT_ARGS_STR){ -#ifdef _FLTK - if(action & GMSH_SET) strcpy(GetDP_Info.command, val); - if(WID && (action & GMSH_GUI)) - WID->getdp_input[2]->value(GetDP_Info.command); - return GetDP_Info.command; -#else - return "getdp"; -#endif -} - -char * opt_view_name(OPT_ARGS_STR){ - GET_VIEW(NULL) ; - if(action & GMSH_SET){ - strcpy(v->Name, val); -#ifdef _FLTK - if(WID && num<NB_BUTT_MAX){ - WID->m_toggle_butt[num]->label(v->Name); - WID->m_toggle_butt[num]->redraw(); - } -#endif - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)){ - WID->view_input[0]->value(v->Name); - } -#endif - return v->Name; -} -char * opt_view_format(OPT_ARGS_STR){ - GET_VIEW(NULL) ; - if(action & GMSH_SET){ - strcpy(v->Format, val); - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_input[1]->value(v->Format); -#endif - return v->Format; -} -char * opt_view_filename(OPT_ARGS_STR){ - GET_VIEW(NULL) ; - if(action & GMSH_SET) - strcpy(v->FileName, val); - return v->FileName; -} - - -char * opt_print_font(OPT_ARGS_STR){ - if(action & GMSH_SET) CTX.print.font = val; - return CTX.print.font; -} - - -// ************** Numeric option routines **************************** - - -double opt_general_initial_context(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.initial_context = (int)val; - return CTX.initial_context; -} -double opt_general_fontsize(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.fontsize = (int)val; - return CTX.fontsize; -} -double opt_general_graphics_fontsize(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.gl_fontsize = (int)val; - return CTX.gl_fontsize; -} -double opt_general_viewport2(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.viewport[2] = (int)val; - return CTX.viewport[2]; -} -double opt_general_viewport3(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.viewport[3] = (int)val; - return CTX.viewport[3]; -} -double opt_general_graphics_position0(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.gl_position[0] = (int)val; - return CTX.gl_position[0]; -} -double opt_general_graphics_position1(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.gl_position[1] = (int)val; - return CTX.gl_position[1]; -} -double opt_general_menu_position0(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.position[0] = (int)val; - return CTX.position[0]; -} -double opt_general_menu_position1(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.position[1] = (int)val; - return CTX.position[1]; -} -double opt_general_message_position0(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.msg_position[0] = (int)val; - return CTX.msg_position[0]; -} -double opt_general_message_position1(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.msg_position[1] = (int)val; - return CTX.msg_position[1]; -} -double opt_general_message_size0(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.msg_size[0] = (int)val; - return CTX.msg_size[0]; -} -double opt_general_message_size1(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.msg_size[1] = (int)val; - return CTX.msg_size[1]; -} -double opt_general_center_windows(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.center_windows = (int)val; - return CTX.center_windows; -} -double opt_general_session_save(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.session_save = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_butt[8]->value(CTX.session_save); -#endif - return CTX.session_save; -} -double opt_general_options_save(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.options_save = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_butt[9]->value(CTX.options_save); -#endif - return CTX.options_save; -} -double opt_general_rotation0(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.r[0] = val; - return CTX.r[0]; -} -double opt_general_rotation1(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.r[1] = val; - return CTX.r[1]; -} -double opt_general_rotation2(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.r[2] = val; - return CTX.r[3]; -} -double opt_general_quaternion0(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.quaternion[0] = val; - return CTX.quaternion[0]; -} -double opt_general_quaternion1(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.quaternion[1] = val; - return CTX.quaternion[1]; -} -double opt_general_quaternion2(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.quaternion[2] = val; - return CTX.quaternion[2]; -} -double opt_general_quaternion3(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.quaternion[3] = val; - return CTX.quaternion[3]; -} -double opt_general_translation0(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.t[0] = val; - return CTX.t[0]; -} -double opt_general_translation1(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.t[1] = val; - return CTX.t[1]; -} -double opt_general_translation2(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.t[2] = val; - return CTX.t[2]; -} -double opt_general_scale0(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.s[0] = val; - return CTX.s[0]; -} -double opt_general_scale1(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.s[1] = val; - return CTX.s[1]; -} -double opt_general_scale2(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.s[2] = val; - return CTX.s[2]; -} -double opt_general_shine(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.shine = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_value[1]->value(CTX.shine); -#endif - return CTX.shine; -} -double opt_general_verbosity(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.verbosity = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_value[5]->value(CTX.verbosity); -#endif - return CTX.verbosity; -} -double opt_general_terminal(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.terminal = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_butt[7]->value(CTX.terminal); -#endif - return CTX.terminal; -} -double opt_general_orthographic(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.ortho = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)){ - WID->gen_butt[10]->value(CTX.ortho); - WID->gen_butt[11]->value(!CTX.ortho); - } -#endif - return CTX.ortho; -} -double opt_general_fast_redraw(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.fast = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_butt[2]->value(CTX.fast); -#endif - return CTX.fast; -} -double opt_general_axes(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.axes = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_butt[0]->value(CTX.axes); -#endif - return CTX.axes; -} -double opt_general_small_axes(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.small_axes = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_butt[1]->value(CTX.small_axes); -#endif - return CTX.small_axes; -} -double opt_general_display_lists(OPT_ARGS_NUM){ - int i; - if(action & GMSH_SET){ - CTX.display_lists = (int)val; - if(CTX.display_lists) - for(i=0 ; i<List_Nbr(Post_ViewList) ; i++) - ((Post_View*)List_Pointer_Test(Post_ViewList, i))->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_butt[4]->value(CTX.display_lists); -#endif - return CTX.display_lists; -} -double opt_general_double_buffer(OPT_ARGS_NUM){ - if(action & GMSH_SET){ - CTX.db = (int)val; -#ifdef _FLTK - if(WID){ - if(CTX.db){ - Msg(INFO, "Setting OpenGL visual to double buffered"); - WID->g_opengl_window->mode(FL_RGB | FL_DEPTH | FL_DOUBLE); - } - else{ - Msg(INFO, "Setting OpenGL visual to single buffered"); - WID->g_opengl_window->mode(FL_RGB | FL_DEPTH | FL_SINGLE); - } - } -#endif - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_butt[3]->value(CTX.db); -#endif - return CTX.db; -} -double opt_general_alpha_blending(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.alpha = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_butt[5]->value(CTX.alpha); -#endif - return CTX.alpha; -} -double opt_general_color_scheme(OPT_ARGS_NUM){ - if(action & GMSH_SET){ - CTX.color_scheme = (int)val; - if(CTX.color_scheme>2) CTX.color_scheme=0; - Set_DefaultColorOptions(0, GeneralOptions_Color, CTX.color_scheme); - Set_ColorOptions_GUI(0, GeneralOptions_Color); - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_value[0]->value(CTX.color_scheme); -#endif - return CTX.color_scheme; -} -double opt_general_trackball(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.useTrackball = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_butt[6]->value(CTX.useTrackball); -#endif - return CTX.useTrackball; -} -double opt_general_zoom_factor(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.zoom_factor = val; - return CTX.zoom_factor; -} -double opt_general_default_plugins(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.default_plugins = (int)val; - return CTX.default_plugins; -} -double opt_general_clip0(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip[0] = (int)val; - return CTX.clip[0]; -} -double opt_general_clip0a(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[0][0] = val; - return CTX.clip_plane[0][0]; -} -double opt_general_clip0b(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[0][1] = val; - return CTX.clip_plane[0][1]; -} -double opt_general_clip0c(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[0][2] = val; - return CTX.clip_plane[0][2]; -} -double opt_general_clip0d(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[0][3] = val; - return CTX.clip_plane[0][3]; -} -double opt_general_clip1(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip[1] = (int)val; - return CTX.clip[1]; -} -double opt_general_clip1a(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[1][0] = val; - return CTX.clip_plane[1][0]; -} -double opt_general_clip1b(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[1][1] = val; - return CTX.clip_plane[1][1]; -} -double opt_general_clip1c(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[1][2] = val; - return CTX.clip_plane[1][2]; -} -double opt_general_clip1d(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[1][3] = val; - return CTX.clip_plane[1][3]; -} -double opt_general_clip2(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip[2] = (int)val; - return CTX.clip[2]; -} -double opt_general_clip2a(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[2][0] = val; - return CTX.clip_plane[2][0]; -} -double opt_general_clip2b(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[2][1] = val; - return CTX.clip_plane[2][1]; -} -double opt_general_clip2c(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[2][2] = val; - return CTX.clip_plane[2][2]; -} -double opt_general_clip2d(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[2][3] = val; - return CTX.clip_plane[2][3]; -} -double opt_general_clip3(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip[3] = (int)val; - return CTX.clip[3]; -} -double opt_general_clip3a(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[3][0] = val; - return CTX.clip_plane[3][0]; -} -double opt_general_clip3b(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[3][1] = val; - return CTX.clip_plane[3][1]; -} -double opt_general_clip3c(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[3][2] = val; - return CTX.clip_plane[3][2]; -} -double opt_general_clip3d(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[3][3] = val; - return CTX.clip_plane[3][3]; -} -double opt_general_clip4(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip[4] = (int)val; - return CTX.clip[4]; -} -double opt_general_clip4a(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[4][0] = val; - return CTX.clip_plane[4][0]; -} -double opt_general_clip4b(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[4][1] = val; - return CTX.clip_plane[4][1]; -} -double opt_general_clip4c(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[4][2] = val; - return CTX.clip_plane[4][2]; -} -double opt_general_clip4d(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[4][3] = val; - return CTX.clip_plane[4][3]; -} -double opt_general_clip5(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip[5] = (int)val; - return CTX.clip[5]; -} -double opt_general_clip5a(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[5][0] = val; - return CTX.clip_plane[5][0]; -} -double opt_general_clip5b(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[5][1] = val; - return CTX.clip_plane[5][1]; -} -double opt_general_clip5c(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[5][2] = val; - return CTX.clip_plane[5][2]; -} -double opt_general_clip5d(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.clip_plane[5][3] = val; - return CTX.clip_plane[5][3]; -} -double opt_general_moving_light(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.moving_light = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_butt[12]->value(CTX.moving_light); -#endif - return CTX.moving_light; -} -double opt_general_light0(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light[0] = (int)val; - return CTX.light[0]; -} -double opt_general_light00(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light_position[0][0] = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_value[2]->value(CTX.light_position[0][0]); -#endif - return CTX.light_position[0][0]; -} -double opt_general_light01(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light_position[0][1] = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_value[3]->value(CTX.light_position[0][1]); -#endif - return CTX.light_position[0][1]; -} -double opt_general_light02(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light_position[0][2] = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->gen_value[4]->value(CTX.light_position[0][2]); -#endif - return CTX.light_position[0][2]; -} -double opt_general_light1(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light[1] = (int)val; - return CTX.light[1]; -} -double opt_general_light10(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light_position[1][0] = val; - return CTX.light_position[1][0]; -} -double opt_general_light11(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light_position[1][1] = val; - return CTX.light_position[1][1]; -} -double opt_general_light12(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light_position[1][2] = val; - return CTX.light_position[1][2]; -} -double opt_general_light2(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light[2] = (int)val; - return CTX.light[2]; -} -double opt_general_light20(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light_position[2][0] = val; - return CTX.light_position[2][0]; -} -double opt_general_light21(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light_position[2][1] = val; - return CTX.light_position[2][1]; -} -double opt_general_light22(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light_position[2][2] = val; - return CTX.light_position[2][2]; -} -double opt_general_light3(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light[3] = (int)val; - return CTX.light[3]; -} -double opt_general_light30(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light_position[3][0] = val; - return CTX.light_position[3][0]; -} -double opt_general_light31(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light_position[3][1] = val; - return CTX.light_position[3][1]; -} -double opt_general_light32(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light_position[3][2] = val; - return CTX.light_position[3][2]; -} -double opt_general_light4(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light[4] = (int)val; - return CTX.light[4]; -} -double opt_general_light40(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light_position[4][0] = val; - return CTX.light_position[4][0]; -} -double opt_general_light41(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light_position[4][1] = val; - return CTX.light_position[4][1]; -} -double opt_general_light42(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light_position[4][2] = val; - return CTX.light_position[4][2]; -} -double opt_general_light5(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light[5] = (int)val; - return CTX.light[5]; -} -double opt_general_light50(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light_position[5][0] = val; - return CTX.light_position[5][0]; -} -double opt_general_light51(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light_position[5][1] = val; - return CTX.light_position[5][1]; -} -double opt_general_light52(OPT_ARGS_NUM){ - if(action & GMSH_SET) CTX.light_position[5][2] = val; - return CTX.light_position[5][2]; -} - - - -double opt_geometry_normals(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.geom.normals = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->geo_value[0]->value(CTX.geom.normals); -#endif - return CTX.geom.normals; -} -double opt_geometry_tangents(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.geom.tangents = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->geo_value[1]->value(CTX.geom.tangents); -#endif - return CTX.geom.tangents; -} -double opt_geometry_points(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.geom.points = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->geo_butt[0]->value(CTX.geom.points); -#endif - return CTX.geom.points; -} -double opt_geometry_lines(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.geom.lines = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->geo_butt[1]->value(CTX.geom.lines); -#endif - return CTX.geom.lines; -} -double opt_geometry_surfaces(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.geom.surfaces = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->geo_butt[2]->value(CTX.geom.surfaces); -#endif - return CTX.geom.surfaces; -} -double opt_geometry_volumes(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.geom.volumes = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->geo_butt[3]->value(CTX.geom.volumes); -#endif - return CTX.geom.volumes; -} -double opt_geometry_points_num(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.geom.points_num = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->geo_butt[4]->value(CTX.geom.points_num); -#endif - return CTX.geom.points_num; -} -double opt_geometry_lines_num(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.geom.lines_num = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->geo_butt[5]->value(CTX.geom.lines_num); -#endif - return CTX.geom.lines_num; -} -double opt_geometry_surfaces_num(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.geom.surfaces_num = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->geo_butt[6]->value(CTX.geom.surfaces_num); -#endif - return CTX.geom.surfaces_num; -} -double opt_geometry_volumes_num(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.geom.volumes_num = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->geo_butt[7]->value(CTX.geom.volumes_num); -#endif - return CTX.geom.volumes_num; -} -double opt_geometry_aspect(OPT_ARGS_NUM){ - if(action & GMSH_SET){ - switch((int)val){ - case 1 : CTX.geom.hidden = 1; CTX.geom.shade = 0; break ; - case 2 : CTX.geom.hidden = 1; CTX.geom.shade = 1; break ; - default : CTX.geom.hidden = CTX.geom.shade = 0; break ; - } - } - if(CTX.geom.hidden && !CTX.geom.shade) return 1; - else if(CTX.geom.hidden && CTX.geom.shade) return 2; - else return 0; -} -double opt_geometry_highlight(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.geom.highlight = (int)val; - return CTX.geom.highlight; -} -double opt_geometry_old_circle(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.geom.old_circle = (int)val; - return CTX.geom.old_circle; -} -double opt_geometry_scaling_factor(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.geom.scaling_factor = (int)val; - return CTX.geom.scaling_factor; -} -double opt_geometry_color_scheme(OPT_ARGS_NUM){ - if(action & GMSH_SET){ - CTX.geom.color_scheme = (int)val; - if(CTX.geom.color_scheme>2) CTX.geom.color_scheme=0; - Set_DefaultColorOptions(0, GeometryOptions_Color, CTX.geom.color_scheme); - Set_ColorOptions_GUI(0, GeometryOptions_Color); - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->geo_value[2]->value(CTX.geom.color_scheme); -#endif - return CTX.geom.color_scheme; -} - - -double opt_mesh_quality(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.quality = val; - return CTX.mesh.quality; -} -double opt_mesh_normals(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.normals = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_value[8]->value(CTX.mesh.normals); -#endif - return CTX.mesh.normals; -} -double opt_mesh_tangents(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.tangents = val; - return CTX.mesh.tangents; -} -double opt_mesh_explode(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.explode = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_value[9]->value(CTX.mesh.explode); -#endif - return CTX.mesh.explode; -} -double opt_mesh_scaling_factor(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.scaling_factor = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_value[1]->value(CTX.mesh.scaling_factor); -#endif - return CTX.mesh.scaling_factor; -} -double opt_mesh_lc_factor(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.lc_factor = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_value[2]->value(CTX.mesh.lc_factor); -#endif - return CTX.mesh.lc_factor; -} -double opt_mesh_rand_factor(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.rand_factor = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_value[3]->value(CTX.mesh.rand_factor); -#endif - return CTX.mesh.rand_factor; -} -double opt_mesh_gamma_inf(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.gamma_inf = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_value[4]->value(CTX.mesh.gamma_inf); -#endif - return CTX.mesh.gamma_inf; -} -double opt_mesh_gamma_sup(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.gamma_sup = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_value[5]->value(CTX.mesh.gamma_sup); -#endif - return CTX.mesh.gamma_sup; -} -double opt_mesh_radius_inf(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.radius_inf = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_value[6]->value(CTX.mesh.radius_inf); -#endif - return CTX.mesh.radius_inf; -} -double opt_mesh_radius_sup(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.radius_sup = val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_value[7]->value(CTX.mesh.radius_sup); -#endif - return CTX.mesh.radius_sup; -} -double opt_mesh_points(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.points = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_butt[4]->value(CTX.mesh.points); -#endif - return CTX.mesh.points; -} -double opt_mesh_lines(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.lines = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_butt[5]->value(CTX.mesh.lines); -#endif - return CTX.mesh.lines; -} -double opt_mesh_surfaces(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.surfaces = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_butt[6]->value(CTX.mesh.surfaces); -#endif - return CTX.mesh.surfaces; -} -double opt_mesh_volumes(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.volumes = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_butt[7]->value(CTX.mesh.volumes); -#endif - return CTX.mesh.volumes; -} -double opt_mesh_points_num(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.points_num = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_butt[8]->value(CTX.mesh.points_num); -#endif - return CTX.mesh.points_num; -} -double opt_mesh_lines_num(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.lines_num = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_butt[9]->value(CTX.mesh.lines_num); -#endif - return CTX.mesh.lines_num; -} -double opt_mesh_surfaces_num(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.surfaces_num = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_butt[10]->value(CTX.mesh.surfaces_num); -#endif - return CTX.mesh.surfaces_num; -} -double opt_mesh_volumes_num(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.volumes_num = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_butt[11]->value(CTX.mesh.volumes_num); -#endif - return CTX.mesh.volumes_num; -} -double opt_mesh_aspect(OPT_ARGS_NUM){ - if(action & GMSH_SET){ - switch((int)val){ - case 1 : CTX.mesh.hidden = 1; CTX.mesh.shade = 0; break ; - case 2 : CTX.mesh.hidden = 1; CTX.mesh.shade = 1; break ; - default : CTX.mesh.hidden = CTX.mesh.shade = 0; break ; - } - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI)){ - WID->mesh_butt[12]->value(!CTX.mesh.hidden && !CTX.mesh.shade); - WID->mesh_butt[13]->value(CTX.mesh.hidden && !CTX.mesh.shade); - WID->mesh_butt[14]->value(CTX.mesh.hidden && CTX.mesh.shade); - } -#endif - if(CTX.mesh.hidden && !CTX.mesh.shade) return 1; - else if(CTX.mesh.hidden && CTX.mesh.shade) return 2; - else return 0; -} -double opt_mesh_format(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.format = (int)val; - return CTX.mesh.format; -} -double opt_mesh_nb_smoothing(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.nb_smoothing = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_value[0]->value(CTX.mesh.nb_smoothing); -#endif - return CTX.mesh.nb_smoothing; -} -double opt_mesh_algo(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.algo = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_butt[2]->value(CTX.mesh.algo==DELAUNAY_NEWALGO); -#endif - return CTX.mesh.algo; -} -double opt_mesh_point_insertion(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.point_insertion = (int)val; - return CTX.mesh.point_insertion; -} -double opt_mesh_speed_max(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.speed_max = (int)val; - return CTX.mesh.speed_max; -} -double opt_mesh_min_circ_points(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.min_circ_points = (int)val; - return CTX.mesh.min_circ_points; -} -double opt_mesh_constrained_bgmesh(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.constrained_bgmesh = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_butt[3]->value(CTX.mesh.constrained_bgmesh); -#endif - return CTX.mesh.constrained_bgmesh; -} -double opt_mesh_degree(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.degree = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_butt[0]->value(CTX.mesh.degree==2); -#endif - return CTX.mesh.degree; -} -double opt_mesh_dual(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.dual = (int)val; - return CTX.mesh.dual; -} -double opt_mesh_interactive(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.interactive = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_butt[1]->value(CTX.mesh.interactive); -#endif - return CTX.mesh.interactive; -} -double opt_mesh_use_cut_plane(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.use_cut_plane = (int)val; - return CTX.mesh.use_cut_plane; -} -double opt_mesh_cut_planea(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.cut_planea = val; - return CTX.mesh.cut_planea; -} -double opt_mesh_cut_planeb(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.cut_planeb = val; - return CTX.mesh.cut_planeb; -} -double opt_mesh_cut_planec(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.cut_planec = val; - return CTX.mesh.cut_planec; -} -double opt_mesh_cut_planed(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.cut_planed = val; - return CTX.mesh.cut_planed; -} -double opt_mesh_color_scheme(OPT_ARGS_NUM){ - if(action & GMSH_SET){ - CTX.mesh.color_scheme = (int)val; - if(CTX.mesh.color_scheme>2) CTX.mesh.color_scheme=0; - Set_DefaultColorOptions(0, MeshOptions_Color, CTX.mesh.color_scheme); - Set_ColorOptions_GUI(0, MeshOptions_Color); - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_value[10]->value(CTX.mesh.color_scheme); -#endif - return CTX.mesh.color_scheme; -} -double opt_mesh_color_carousel(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.mesh.color_carousel = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->mesh_butt[15]->value(CTX.mesh.color_carousel); -#endif - return CTX.mesh.color_carousel; -} - - -double opt_solver_getdp_popupmessages(OPT_ARGS_NUM){ -#ifdef _FLTK - if(action & GMSH_SET) - GetDP_Info.popupmessages = (int)val; - if(WID && (action & GMSH_GUI)) - WID->getdp_butt[0]->value(GetDP_Info.popupmessages); - return GetDP_Info.popupmessages; -#else - return 1.; -#endif -} -double opt_solver_getdp_mergeviews(OPT_ARGS_NUM){ -#ifdef _FLTK - if(action & GMSH_SET) - GetDP_Info.mergeviews = (int)val; - if(WID && (action & GMSH_GUI)) - WID->getdp_butt[1]->value(GetDP_Info.mergeviews); - return GetDP_Info.mergeviews; -#else - return 1.; -#endif -} - - -double opt_post_scales(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.post.scales = (int)val; - return CTX.post.scales; -} -double opt_post_link(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.post.link = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)){ - WID->post_butt[0]->value(CTX.post.link==0); - WID->post_butt[1]->value(CTX.post.link==1); - WID->post_butt[2]->value(CTX.post.link==2); - WID->post_butt[3]->value(CTX.post.link==3); - WID->post_butt[4]->value(CTX.post.link==4); - } -#endif - return CTX.post.link; -} -double opt_post_smooth(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.post.smooth = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->post_butt[3]->value(CTX.post.smooth); -#endif - return CTX.post.smooth; -} -double opt_post_anim_delay(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.post.anim_delay = (val>=0.)? val : 0. ; -#ifdef _FLTK - if(WID && (action & GMSH_GUI)) - WID->post_value[0]->value(CTX.post.anim_delay); -#endif - return CTX.post.anim_delay; -} -double opt_post_nb_views(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.post.nb_views = (int)val; - return CTX.post.nb_views; -} - - - -double opt_view_nb_timestep(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET) - v->NbTimeStep = (int)val; -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_value[9]->maximum(v->NbTimeStep-1); - if(WID && (action & GMSH_GUI) && v->NbTimeStep > 1) - WID->g_status_butt[5]->activate(); -#endif - return v->NbTimeStep; -} -double opt_view_timestep(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->TimeStep = (int)val; - if(v->TimeStep > v->NbTimeStep-1 || v->TimeStep < 0) - v->TimeStep = 0 ; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_value[9]->value(v->TimeStep); -#endif - return v->TimeStep; -} -double opt_view_min(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->Min = val; - v->Changed = 1; - } - return v->Min; -} -double opt_view_max(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->Max = val; - v->Changed = 1; - } - return v->Max; -} -double opt_view_custom_min(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->CustomMin = val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)){ - WID->view_value[0]->value(v->CustomMin); - } -#endif - return v->CustomMin; -} -double opt_view_custom_max(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->CustomMax = val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_value[1]->value(v->CustomMax); -#endif - return v->CustomMax; -} -double opt_view_offset0(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->Offset[0] = val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_value[3]->value(v->Offset[0]); -#endif - return v->Offset[0]; -} -double opt_view_offset1(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->Offset[1] = val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_value[4]->value(v->Offset[1]); -#endif - return v->Offset[1]; -} -double opt_view_offset2(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->Offset[2] = val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_value[5]->value(v->Offset[2]); -#endif - return v->Offset[2]; -} -double opt_view_raise0(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->Raise[0] = val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_value[6]->value(v->Raise[0]); -#endif - return v->Raise[0]; -} -double opt_view_raise1(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->Raise[1] = val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_value[7]->value(v->Raise[1]); -#endif - return v->Raise[1]; -} -double opt_view_raise2(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->Raise[2] = val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_value[8]->value(v->Raise[2]); -#endif - return v->Raise[2]; -} -double opt_view_arrow_scale(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->ArrowScale = val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_value[10]->value(v->ArrowScale); -#endif - return v->ArrowScale; -} -double opt_view_explode(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->Explode = val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_value[12]->value(v->Explode); -#endif - return v->Explode; -} -double opt_view_visible(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->Visible = (int)val; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && num<NB_BUTT_MAX) - WID->m_toggle_butt[num]->value(v->Visible); -#endif - Msg(DEBUG1, "View %d", v->Num); - Msg(DEBUG2, " -> Name '%s'", v->Name); - Msg(DEBUG2, " -> FileName '%s'", v->FileName); - Msg(DEBUG2, " -> DuplicateOf %d", v->DuplicateOf); - Msg(DEBUG3, " -> Links %d", v->Links); - return v->Visible; -} -double opt_view_intervals_type(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->IntervalsType = (int)val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)){ - WID->view_butt[3]->value(v->IntervalsType==DRAW_POST_ISO); - WID->view_butt[4]->value(v->IntervalsType==DRAW_POST_DISCRETE); - WID->view_butt[5]->value(v->IntervalsType==DRAW_POST_CONTINUOUS); - WID->view_butt[6]->value(v->IntervalsType==DRAW_POST_NUMERIC); - } -#endif - return v->IntervalsType; -} - -double opt_view_saturate_values(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->SaturateValues = (int)val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)){ - WID->view_butt[25]->value(v->SaturateValues); - } -#endif - return v->SaturateValues; -} - -double opt_view_nb_iso(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->NbIso = (int)val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_value[2]->value(v->NbIso); -#endif - return v->NbIso; -} -double opt_view_boundary(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->Boundary = (int)val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)){ - WID->view_value[11]->value(v->Boundary); - } -#endif - return v->Boundary; -} -double opt_view_light(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->Light = (int)val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_butt[17]->value(v->Light); -#endif - return v->Light; -} -double opt_view_smooth_normals(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->SmoothNormals = (int)val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_butt[27]->value(v->SmoothNormals); -#endif - return v->SmoothNormals; -} -double opt_view_show_element(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->ShowElement = (int)val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_butt[13]->value(v->ShowElement); -#endif - return v->ShowElement; -} -double opt_view_show_time(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->ShowTime = (int)val; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_butt[15]->value(v->ShowTime); -#endif - return v->ShowTime; -} -double opt_view_show_scale(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->ShowScale = (int)val; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_butt[14]->value(v->ShowScale); -#endif - return v->ShowScale; -} -double opt_view_draw_points(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->DrawPoints = (int)val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_butt[18]->value(v->DrawPoints); -#endif - return v->DrawPoints; -} -double opt_view_draw_lines(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->DrawLines = (int)val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_butt[19]->value(v->DrawLines); -#endif - return v->DrawLines; -} -double opt_view_draw_triangles(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->DrawTriangles = (int)val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_butt[20]->value(v->DrawTriangles); -#endif - return v->DrawTriangles; -} -double opt_view_draw_tetrahedra(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->DrawTetrahedra = (int)val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_butt[21]->value(v->DrawTetrahedra); -#endif - return v->DrawTetrahedra; -} -double opt_view_draw_scalars(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->DrawScalars = (int)val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_butt[22]->value(v->DrawScalars); -#endif - return v->DrawScalars; -} -double opt_view_draw_vectors(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->DrawVectors = (int)val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_butt[23]->value(v->DrawVectors); -#endif - return v->DrawVectors; -} -double opt_view_draw_tensors(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->DrawTensors = (int)val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_butt[24]->value(v->DrawTensors); -#endif - return v->DrawTensors; -} -double opt_view_transparent_scale(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->TransparentScale = (int)val; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_butt[16]->value(v->TransparentScale); -#endif - return v->TransparentScale; -} -double opt_view_scale_type(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->ScaleType = (int)val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)){ - WID->view_butt[1]->value(v->ScaleType==DRAW_POST_LINEAR); - WID->view_butt[2]->value(v->ScaleType==DRAW_POST_LOGARITHMIC); - WID->view_butt[26]->value(v->ScaleType==DRAW_POST_DOUBLELOGARITHMIC); - } -#endif - return v->ScaleType; -} -double opt_view_range_type(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->RangeType = (int)val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)) - WID->view_butt[0]->value(v->RangeType==DRAW_POST_CUSTOM); -#endif - return v->RangeType; -} -double opt_view_arrow_type(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->ArrowType = (int)val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)){ - WID->view_butt[7]->value(v->ArrowType==DRAW_POST_SEGMENT); - WID->view_butt[8]->value(v->ArrowType==DRAW_POST_ARROW); - WID->view_butt[9]->value(v->ArrowType==DRAW_POST_CONE); - WID->view_butt[10]->value(v->ArrowType==DRAW_POST_DISPLACEMENT); - } -#endif - return v->ArrowType; -} -double opt_view_arrow_location(OPT_ARGS_NUM){ - GET_VIEW(0.) ; - if(action & GMSH_SET){ - v->ArrowLocation = (int)val; - v->Changed = 1; - } -#ifdef _FLTK - if(WID && (action & GMSH_GUI) && (num == WID->view_number)){ - WID->view_butt[11]->value(v->ArrowLocation==DRAW_POST_LOCATE_COG); - WID->view_butt[12]->value(v->ArrowLocation==DRAW_POST_LOCATE_VERTEX); - } -#endif - return v->ArrowLocation; -} - - -double opt_print_format(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.print.format = (int)val; - return CTX.print.format; -} -double opt_print_eps_quality(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.print.eps_quality = (int)val; - return CTX.print.eps_quality; -} -double opt_print_eps_background(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.print.eps_background = (int)val; - return CTX.print.eps_background; -} -double opt_print_jpeg_quality(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.print.jpeg_quality = (int)val; - return CTX.print.jpeg_quality; -} -double opt_print_gif_dither(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.print.gif_dither = (int)val; - return CTX.print.gif_dither; -} -double opt_print_gif_sort(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.print.gif_sort = (int)val; - return CTX.print.gif_sort; -} -double opt_print_gif_interlace(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.print.gif_interlace = (int)val; - return CTX.print.gif_interlace; -} -double opt_print_gif_transparent(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.print.gif_transparent = (int)val; - return CTX.print.gif_transparent; -} -double opt_print_font_size(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.print.font_size = (int)val; - return CTX.print.font_size; -} -double opt_print_geom_line_width(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.print.geom_line_width = (int)val; - return CTX.print.geom_line_width; -} -double opt_print_mesh_line_width(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.print.mesh_line_width = (int)val; - return CTX.print.mesh_line_width; -} -double opt_print_post_line_width(OPT_ARGS_NUM){ - if(action & GMSH_SET) - CTX.print.post_line_width = (int)val; - return CTX.print.post_line_width; -} - -// ************** Color option routines **************************** - -#ifdef _FLTK -#define CCC(col,but) \ - if(WID && (action & GMSH_GUI)){ \ - Fl_Color c = fl_color_cube(UNPACK_RED(col)*FL_NUM_RED/256, \ - UNPACK_GREEN(col)*FL_NUM_GREEN/256, \ - UNPACK_BLUE(col)*FL_NUM_BLUE/256); \ - (but)->color(c); \ - (but)->labelcolor(contrast(FL_BLACK,c)); \ - (but)->redraw(); \ - } -#endif - -unsigned int opt_general_color_background(OPT_ARGS_COL){ - if(action & GMSH_SET){ - CTX.color.bg = val; -#ifdef _FLTK - if(WID) WID->view_colorbar_window->redraw(); -#endif - } -#ifdef _FLTK - CCC(CTX.color.bg,WID->gen_col[0]); -#endif - return CTX.color.bg; -} -unsigned int opt_general_color_foreground(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.fg = val; -#ifdef _FLTK - CCC(CTX.color.fg,WID->gen_col[1]); -#endif - return CTX.color.fg; -} -unsigned int opt_general_color_text(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.text = val; -#ifdef _FLTK - CCC(CTX.color.text,WID->gen_col[2]); -#endif - return CTX.color.text; -} -unsigned int opt_general_color_axes(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.axes = val; -#ifdef _FLTK - CCC(CTX.color.axes,WID->gen_col[3]); -#endif - return CTX.color.axes; -} -unsigned int opt_general_color_small_axes(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.small_axes = val; -#ifdef _FLTK - CCC(CTX.color.small_axes,WID->gen_col[4]); -#endif - return CTX.color.small_axes; -} -unsigned int opt_geometry_color_points(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.geom.point = val; -#ifdef _FLTK - CCC(CTX.color.geom.point,WID->geo_col[0]); -#endif - return CTX.color.geom.point; -} -unsigned int opt_geometry_color_lines(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.geom.line = val; -#ifdef _FLTK - CCC(CTX.color.geom.line,WID->geo_col[1]); -#endif - return CTX.color.geom.line; -} -unsigned int opt_geometry_color_surfaces(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.geom.surface = val; -#ifdef _FLTK - CCC(CTX.color.geom.surface,WID->geo_col[2]); -#endif - return CTX.color.geom.surface; -} -unsigned int opt_geometry_color_volumes(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.geom.volume = val; -#ifdef _FLTK - CCC(CTX.color.geom.volume,WID->geo_col[3]); -#endif - return CTX.color.geom.volume; -} -unsigned int opt_geometry_color_points_select(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.geom.point_sel = val; -#ifdef _FLTK - CCC(CTX.color.geom.point_sel,WID->geo_col[4]); -#endif - return CTX.color.geom.point_sel; -} -unsigned int opt_geometry_color_lines_select(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.geom.line_sel = val; -#ifdef _FLTK - CCC(CTX.color.geom.line_sel,WID->geo_col[5]); -#endif - return CTX.color.geom.line_sel; -} -unsigned int opt_geometry_color_surfaces_select(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.geom.surface_sel = val; -#ifdef _FLTK - CCC(CTX.color.geom.surface_sel,WID->geo_col[6]); -#endif - return CTX.color.geom.surface_sel; -} -unsigned int opt_geometry_color_volumes_select(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.geom.volume_sel = val; -#ifdef _FLTK - CCC(CTX.color.geom.volume_sel,WID->geo_col[7]); -#endif - return CTX.color.geom.volume_sel; -} -unsigned int opt_geometry_color_points_highlight(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.geom.point_hlt = val; -#ifdef _FLTK - CCC(CTX.color.geom.point_hlt,WID->geo_col[8]); -#endif - return CTX.color.geom.point_hlt; -} -unsigned int opt_geometry_color_lines_highlight(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.geom.line_hlt = val; -#ifdef _FLTK - CCC(CTX.color.geom.line_hlt,WID->geo_col[9]); -#endif - return CTX.color.geom.line_hlt; -} -unsigned int opt_geometry_color_surfaces_highlight(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.geom.surface_hlt = val; -#ifdef _FLTK - CCC(CTX.color.geom.surface_hlt,WID->geo_col[10]); -#endif - return CTX.color.geom.surface_hlt; -} -unsigned int opt_geometry_color_volumes_highlight(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.geom.volume_hlt = val; -#ifdef _FLTK - CCC(CTX.color.geom.volume_hlt,WID->geo_col[11]); -#endif - return CTX.color.geom.volume_hlt; -} -unsigned int opt_geometry_color_tangents(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.geom.tangents = val; -#ifdef _FLTK - CCC(CTX.color.geom.tangents,WID->geo_col[12]); -#endif - return CTX.color.geom.tangents; -} -unsigned int opt_geometry_color_normals(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.geom.normals = val; -#ifdef _FLTK - CCC(CTX.color.geom.normals,WID->geo_col[13]); -#endif - return CTX.color.geom.normals; -} -unsigned int opt_mesh_color_points(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.vertex = val; -#ifdef _FLTK - CCC(CTX.color.mesh.vertex,WID->mesh_col[0]); -#endif - return CTX.color.mesh.vertex; -} -unsigned int opt_mesh_color_points_supp(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.vertex_supp = val; -#ifdef _FLTK - CCC(CTX.color.mesh.vertex_supp,WID->mesh_col[1]); -#endif - return CTX.color.mesh.vertex_supp; -} -unsigned int opt_mesh_color_lines(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.line = val; -#ifdef _FLTK - CCC(CTX.color.mesh.line,WID->mesh_col[2]); -#endif - return CTX.color.mesh.line; -} -unsigned int opt_mesh_color_triangles(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.triangle = val; -#ifdef _FLTK - CCC(CTX.color.mesh.triangle,WID->mesh_col[3]); -#endif - return CTX.color.mesh.triangle; -} -unsigned int opt_mesh_color_quadrangles(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.quadrangle = val; -#ifdef _FLTK - CCC(CTX.color.mesh.quadrangle,WID->mesh_col[4]); -#endif - return CTX.color.mesh.quadrangle; -} -unsigned int opt_mesh_color_tetrahedra(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.tetrahedron = val; -#ifdef _FLTK - CCC(CTX.color.mesh.tetrahedron,WID->mesh_col[5]); -#endif - return CTX.color.mesh.tetrahedron; -} -unsigned int opt_mesh_color_hexahedra(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.hexahedron = val; -#ifdef _FLTK - CCC(CTX.color.mesh.hexahedron,WID->mesh_col[6]); -#endif - return CTX.color.mesh.hexahedron; -} -unsigned int opt_mesh_color_prisms(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.prism = val; -#ifdef _FLTK - CCC(CTX.color.mesh.prism,WID->mesh_col[7]); -#endif - return CTX.color.mesh.prism; -} -unsigned int opt_mesh_color_pyramid(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.pyramid = val; -#ifdef _FLTK - CCC(CTX.color.mesh.pyramid,WID->mesh_col[8]); -#endif - return CTX.color.mesh.pyramid; -} -unsigned int opt_mesh_color_tangents(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.tangents = val; -#ifdef _FLTK - CCC(CTX.color.mesh.tangents,WID->mesh_col[9]); -#endif - return CTX.color.mesh.tangents; -} -unsigned int opt_mesh_color_normals(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.normals = val; -#ifdef _FLTK - CCC(CTX.color.mesh.normals,WID->mesh_col[10]); -#endif - return CTX.color.mesh.normals; -} -unsigned int opt_mesh_color_1(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.carousel[0] = val; -#ifdef _FLTK - CCC(CTX.color.mesh.carousel[0],WID->mesh_col[11]); -#endif - return CTX.color.mesh.carousel[0]; -} -unsigned int opt_mesh_color_2(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.carousel[1] = val; -#ifdef _FLTK - CCC(CTX.color.mesh.carousel[1],WID->mesh_col[12]); -#endif - return CTX.color.mesh.carousel[1]; -} -unsigned int opt_mesh_color_3(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.carousel[2] = val; -#ifdef _FLTK - CCC(CTX.color.mesh.carousel[2],WID->mesh_col[13]); -#endif - return CTX.color.mesh.carousel[2]; -} -unsigned int opt_mesh_color_4(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.carousel[3] = val; -#ifdef _FLTK - CCC(CTX.color.mesh.carousel[3],WID->mesh_col[14]); -#endif - return CTX.color.mesh.carousel[3]; -} -unsigned int opt_mesh_color_5(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.carousel[4] = val; -#ifdef _FLTK - CCC(CTX.color.mesh.carousel[4],WID->mesh_col[15]); -#endif - return CTX.color.mesh.carousel[4]; -} -unsigned int opt_mesh_color_6(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.carousel[5] = val; -#ifdef _FLTK - CCC(CTX.color.mesh.carousel[5],WID->mesh_col[16]); -#endif - return CTX.color.mesh.carousel[5]; -} -unsigned int opt_mesh_color_7(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.carousel[6] = val; -#ifdef _FLTK - CCC(CTX.color.mesh.carousel[6],WID->mesh_col[17]); -#endif - return CTX.color.mesh.carousel[6]; -} -unsigned int opt_mesh_color_8(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.carousel[7] = val; -#ifdef _FLTK - CCC(CTX.color.mesh.carousel[7],WID->mesh_col[18]); -#endif - return CTX.color.mesh.carousel[7]; -} -unsigned int opt_mesh_color_9(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.carousel[8] = val; -#ifdef _FLTK - CCC(CTX.color.mesh.carousel[8],WID->mesh_col[19]); -#endif - return CTX.color.mesh.carousel[8]; -} -unsigned int opt_mesh_color_10(OPT_ARGS_COL){ - if(action & GMSH_SET) - CTX.color.mesh.carousel[9] = val; -#ifdef _FLTK - CCC(CTX.color.mesh.carousel[9],WID->mesh_col[20]); -#endif - return CTX.color.mesh.carousel[9]; -} diff --git a/Common/Options.h b/Common/Options.h deleted file mode 100644 index 30ed840b5b847e6532d511b481398050c5f12223..0000000000000000000000000000000000000000 --- a/Common/Options.h +++ /dev/null @@ -1,365 +0,0 @@ -#ifndef _OPTIONS_H_ -#define _OPTIONS_H_ - -#define GMSH_SET (1<<0) -#define GMSH_GET (1<<1) -#define GMSH_GUI (1<<2) - -#define GMSH_SESSIONRC (1<<0) -#define GMSH_OPTIONSRC (1<<1) -#define GMSH_FULLRC (1<<2) - -// action is a combination of GMSH_SET, GMSH_GET, GMSH_GUI - -#define OPT_ARGS_STR int num, int action, char *val -#define OPT_ARGS_NUM int num, int action, double val -#define OPT_ARGS_COL int num, int action, unsigned int val - -// STRINGS - -char * opt_general_display(OPT_ARGS_STR); -char * opt_general_default_filename(OPT_ARGS_STR); -char * opt_general_tmp_filename(OPT_ARGS_STR); -char * opt_general_error_filename(OPT_ARGS_STR); -char * opt_general_session_filename(OPT_ARGS_STR); -char * opt_general_options_filename(OPT_ARGS_STR); -char * opt_general_editor(OPT_ARGS_STR); -char * opt_solver_getdp_command(OPT_ARGS_STR); -char * opt_view_name(OPT_ARGS_STR); -char * opt_view_format(OPT_ARGS_STR); -char * opt_view_filename(OPT_ARGS_STR); -char * opt_print_font(OPT_ARGS_STR); - -// NUMBERS - -double opt_general_initial_context(OPT_ARGS_NUM); -double opt_general_fontsize(OPT_ARGS_NUM); -double opt_general_graphics_fontsize(OPT_ARGS_NUM); -double opt_general_graphics_position0(OPT_ARGS_NUM); -double opt_general_graphics_position1(OPT_ARGS_NUM); -double opt_general_viewport2(OPT_ARGS_NUM); -double opt_general_viewport3(OPT_ARGS_NUM); -double opt_general_menu_position0(OPT_ARGS_NUM); -double opt_general_menu_position1(OPT_ARGS_NUM); -double opt_general_message_position0(OPT_ARGS_NUM); -double opt_general_message_position1(OPT_ARGS_NUM); -double opt_general_message_size0(OPT_ARGS_NUM); -double opt_general_message_size1(OPT_ARGS_NUM); -double opt_general_center_windows(OPT_ARGS_NUM); -double opt_general_session_save(OPT_ARGS_NUM); -double opt_general_options_save(OPT_ARGS_NUM); -double opt_general_rotation0(OPT_ARGS_NUM); -double opt_general_rotation1(OPT_ARGS_NUM); -double opt_general_rotation2(OPT_ARGS_NUM); -double opt_general_quaternion0(OPT_ARGS_NUM); -double opt_general_quaternion1(OPT_ARGS_NUM); -double opt_general_quaternion2(OPT_ARGS_NUM); -double opt_general_quaternion3(OPT_ARGS_NUM); -double opt_general_translation0(OPT_ARGS_NUM); -double opt_general_translation1(OPT_ARGS_NUM); -double opt_general_translation2(OPT_ARGS_NUM); -double opt_general_scale0(OPT_ARGS_NUM); -double opt_general_scale1(OPT_ARGS_NUM); -double opt_general_scale2(OPT_ARGS_NUM); -double opt_general_shine(OPT_ARGS_NUM); -double opt_general_color_scheme(OPT_ARGS_NUM); -double opt_general_verbosity(OPT_ARGS_NUM); -double opt_general_terminal(OPT_ARGS_NUM); -double opt_general_orthographic(OPT_ARGS_NUM); -double opt_general_fast_redraw(OPT_ARGS_NUM); -double opt_general_axes(OPT_ARGS_NUM); -double opt_general_small_axes(OPT_ARGS_NUM); -double opt_general_display_lists(OPT_ARGS_NUM); -double opt_general_double_buffer(OPT_ARGS_NUM); -double opt_general_alpha_blending(OPT_ARGS_NUM); -double opt_general_trackball(OPT_ARGS_NUM); -double opt_general_zoom_factor(OPT_ARGS_NUM); -double opt_general_default_plugins(OPT_ARGS_NUM); -double opt_general_clip0(OPT_ARGS_NUM); -double opt_general_clip0a(OPT_ARGS_NUM); -double opt_general_clip0b(OPT_ARGS_NUM); -double opt_general_clip0c(OPT_ARGS_NUM); -double opt_general_clip0d(OPT_ARGS_NUM); -double opt_general_clip1(OPT_ARGS_NUM); -double opt_general_clip1a(OPT_ARGS_NUM); -double opt_general_clip1b(OPT_ARGS_NUM); -double opt_general_clip1c(OPT_ARGS_NUM); -double opt_general_clip1d(OPT_ARGS_NUM); -double opt_general_clip2(OPT_ARGS_NUM); -double opt_general_clip2a(OPT_ARGS_NUM); -double opt_general_clip2b(OPT_ARGS_NUM); -double opt_general_clip2c(OPT_ARGS_NUM); -double opt_general_clip2d(OPT_ARGS_NUM); -double opt_general_clip3(OPT_ARGS_NUM); -double opt_general_clip3a(OPT_ARGS_NUM); -double opt_general_clip3b(OPT_ARGS_NUM); -double opt_general_clip3c(OPT_ARGS_NUM); -double opt_general_clip3d(OPT_ARGS_NUM); -double opt_general_clip4(OPT_ARGS_NUM); -double opt_general_clip4a(OPT_ARGS_NUM); -double opt_general_clip4b(OPT_ARGS_NUM); -double opt_general_clip4c(OPT_ARGS_NUM); -double opt_general_clip4d(OPT_ARGS_NUM); -double opt_general_clip5(OPT_ARGS_NUM); -double opt_general_clip5a(OPT_ARGS_NUM); -double opt_general_clip5b(OPT_ARGS_NUM); -double opt_general_clip5c(OPT_ARGS_NUM); -double opt_general_clip5d(OPT_ARGS_NUM); -double opt_general_moving_light(OPT_ARGS_NUM); -double opt_general_light0(OPT_ARGS_NUM); -double opt_general_light00(OPT_ARGS_NUM); -double opt_general_light01(OPT_ARGS_NUM); -double opt_general_light02(OPT_ARGS_NUM); -double opt_general_light1(OPT_ARGS_NUM); -double opt_general_light10(OPT_ARGS_NUM); -double opt_general_light11(OPT_ARGS_NUM); -double opt_general_light12(OPT_ARGS_NUM); -double opt_general_light2(OPT_ARGS_NUM); -double opt_general_light20(OPT_ARGS_NUM); -double opt_general_light21(OPT_ARGS_NUM); -double opt_general_light22(OPT_ARGS_NUM); -double opt_general_light3(OPT_ARGS_NUM); -double opt_general_light30(OPT_ARGS_NUM); -double opt_general_light31(OPT_ARGS_NUM); -double opt_general_light32(OPT_ARGS_NUM); -double opt_general_light4(OPT_ARGS_NUM); -double opt_general_light40(OPT_ARGS_NUM); -double opt_general_light41(OPT_ARGS_NUM); -double opt_general_light42(OPT_ARGS_NUM); -double opt_general_light5(OPT_ARGS_NUM); -double opt_general_light50(OPT_ARGS_NUM); -double opt_general_light51(OPT_ARGS_NUM); -double opt_general_light52(OPT_ARGS_NUM); -double opt_geometry_normals(OPT_ARGS_NUM); -double opt_geometry_tangents(OPT_ARGS_NUM); -double opt_geometry_points(OPT_ARGS_NUM); -double opt_geometry_lines(OPT_ARGS_NUM); -double opt_geometry_surfaces(OPT_ARGS_NUM); -double opt_geometry_volumes(OPT_ARGS_NUM); -double opt_geometry_points_num(OPT_ARGS_NUM); -double opt_geometry_lines_num(OPT_ARGS_NUM); -double opt_geometry_surfaces_num(OPT_ARGS_NUM); -double opt_geometry_volumes_num(OPT_ARGS_NUM); -double opt_geometry_aspect(OPT_ARGS_NUM); -double opt_geometry_highlight(OPT_ARGS_NUM); -double opt_geometry_old_circle(OPT_ARGS_NUM); -double opt_geometry_scaling_factor(OPT_ARGS_NUM); -double opt_geometry_color_scheme(OPT_ARGS_NUM); -double opt_mesh_quality(OPT_ARGS_NUM); -double opt_mesh_normals(OPT_ARGS_NUM); -double opt_mesh_tangents(OPT_ARGS_NUM); -double opt_mesh_explode(OPT_ARGS_NUM); -double opt_mesh_scaling_factor(OPT_ARGS_NUM); -double opt_mesh_lc_factor(OPT_ARGS_NUM); -double opt_mesh_rand_factor(OPT_ARGS_NUM); -double opt_mesh_gamma_inf(OPT_ARGS_NUM); -double opt_mesh_gamma_sup(OPT_ARGS_NUM); -double opt_mesh_radius_inf(OPT_ARGS_NUM); -double opt_mesh_radius_sup(OPT_ARGS_NUM); -double opt_mesh_points(OPT_ARGS_NUM); -double opt_mesh_lines(OPT_ARGS_NUM); -double opt_mesh_surfaces(OPT_ARGS_NUM); -double opt_mesh_volumes(OPT_ARGS_NUM); -double opt_mesh_points_num(OPT_ARGS_NUM); -double opt_mesh_lines_num(OPT_ARGS_NUM); -double opt_mesh_surfaces_num(OPT_ARGS_NUM); -double opt_mesh_volumes_num(OPT_ARGS_NUM); -double opt_mesh_aspect(OPT_ARGS_NUM); -double opt_mesh_format(OPT_ARGS_NUM); -double opt_mesh_nb_smoothing(OPT_ARGS_NUM); -double opt_mesh_algo(OPT_ARGS_NUM); -double opt_mesh_point_insertion(OPT_ARGS_NUM); -double opt_mesh_speed_max(OPT_ARGS_NUM); -double opt_mesh_min_circ_points(OPT_ARGS_NUM); -double opt_mesh_constrained_bgmesh(OPT_ARGS_NUM); -double opt_mesh_degree(OPT_ARGS_NUM); -double opt_mesh_dual(OPT_ARGS_NUM); -double opt_mesh_interactive(OPT_ARGS_NUM); -double opt_mesh_use_cut_plane(OPT_ARGS_NUM); -double opt_mesh_cut_planea(OPT_ARGS_NUM); -double opt_mesh_cut_planeb(OPT_ARGS_NUM); -double opt_mesh_cut_planec(OPT_ARGS_NUM); -double opt_mesh_cut_planed(OPT_ARGS_NUM); -double opt_mesh_color_scheme(OPT_ARGS_NUM); -double opt_mesh_color_carousel(OPT_ARGS_NUM); -double opt_solver_getdp_popupmessages(OPT_ARGS_NUM); -double opt_solver_getdp_mergeviews(OPT_ARGS_NUM); -double opt_post_scales(OPT_ARGS_NUM); -double opt_post_link(OPT_ARGS_NUM); -double opt_post_smooth(OPT_ARGS_NUM); -double opt_post_anim_delay(OPT_ARGS_NUM); -double opt_post_nb_views(OPT_ARGS_NUM); -double opt_post_color_scheme(OPT_ARGS_NUM); -double opt_view_nb_timestep(OPT_ARGS_NUM); -double opt_view_timestep(OPT_ARGS_NUM); -double opt_view_min(OPT_ARGS_NUM); -double opt_view_max(OPT_ARGS_NUM); -double opt_view_custom_min(OPT_ARGS_NUM); -double opt_view_custom_max(OPT_ARGS_NUM); -double opt_view_offset0(OPT_ARGS_NUM); -double opt_view_offset1(OPT_ARGS_NUM); -double opt_view_offset2(OPT_ARGS_NUM); -double opt_view_raise0(OPT_ARGS_NUM); -double opt_view_raise1(OPT_ARGS_NUM); -double opt_view_raise2(OPT_ARGS_NUM); -double opt_view_arrow_scale(OPT_ARGS_NUM); -double opt_view_explode(OPT_ARGS_NUM); -double opt_view_visible(OPT_ARGS_NUM); -double opt_view_intervals_type(OPT_ARGS_NUM); -double opt_view_saturate_values(OPT_ARGS_NUM); -double opt_view_nb_iso(OPT_ARGS_NUM); -double opt_view_boundary(OPT_ARGS_NUM); -double opt_view_light(OPT_ARGS_NUM); -double opt_view_smooth_normals(OPT_ARGS_NUM); -double opt_view_show_element(OPT_ARGS_NUM); -double opt_view_show_time(OPT_ARGS_NUM); -double opt_view_show_scale(OPT_ARGS_NUM); -double opt_view_draw_points(OPT_ARGS_NUM); -double opt_view_draw_lines(OPT_ARGS_NUM); -double opt_view_draw_triangles(OPT_ARGS_NUM); -double opt_view_draw_tetrahedra(OPT_ARGS_NUM); -double opt_view_draw_scalars(OPT_ARGS_NUM); -double opt_view_draw_vectors(OPT_ARGS_NUM); -double opt_view_draw_tensors(OPT_ARGS_NUM); -double opt_view_transparent_scale(OPT_ARGS_NUM); -double opt_view_scale_type(OPT_ARGS_NUM); -double opt_view_range_type(OPT_ARGS_NUM); -double opt_view_arrow_type(OPT_ARGS_NUM); -double opt_view_arrow_location(OPT_ARGS_NUM); -double opt_print_format(OPT_ARGS_NUM); -double opt_print_eps_quality(OPT_ARGS_NUM); -double opt_print_eps_background(OPT_ARGS_NUM); -double opt_print_jpeg_quality(OPT_ARGS_NUM); -double opt_print_gif_dither(OPT_ARGS_NUM); -double opt_print_gif_sort(OPT_ARGS_NUM); -double opt_print_gif_interlace(OPT_ARGS_NUM); -double opt_print_gif_transparent(OPT_ARGS_NUM); -double opt_print_font_size(OPT_ARGS_NUM); -double opt_print_geom_line_width(OPT_ARGS_NUM); -double opt_print_mesh_line_width(OPT_ARGS_NUM); -double opt_print_post_line_width(OPT_ARGS_NUM); - -// COLORS - -unsigned int opt_general_color_background(OPT_ARGS_COL); -unsigned int opt_general_color_foreground(OPT_ARGS_COL); -unsigned int opt_general_color_text(OPT_ARGS_COL); -unsigned int opt_general_color_axes(OPT_ARGS_COL); -unsigned int opt_general_color_small_axes(OPT_ARGS_COL); -unsigned int opt_geometry_color_points(OPT_ARGS_COL); -unsigned int opt_geometry_color_lines(OPT_ARGS_COL); -unsigned int opt_geometry_color_surfaces(OPT_ARGS_COL); -unsigned int opt_geometry_color_volumes(OPT_ARGS_COL); -unsigned int opt_geometry_color_points_select(OPT_ARGS_COL); -unsigned int opt_geometry_color_lines_select(OPT_ARGS_COL); -unsigned int opt_geometry_color_surfaces_select(OPT_ARGS_COL); -unsigned int opt_geometry_color_volumes_select(OPT_ARGS_COL); -unsigned int opt_geometry_color_points_highlight(OPT_ARGS_COL); -unsigned int opt_geometry_color_lines_highlight(OPT_ARGS_COL); -unsigned int opt_geometry_color_surfaces_highlight(OPT_ARGS_COL); -unsigned int opt_geometry_color_volumes_highlight(OPT_ARGS_COL); -unsigned int opt_geometry_color_tangents(OPT_ARGS_COL); -unsigned int opt_geometry_color_normals(OPT_ARGS_COL); -unsigned int opt_mesh_color_points(OPT_ARGS_COL); -unsigned int opt_mesh_color_points_supp(OPT_ARGS_COL); -unsigned int opt_mesh_color_lines(OPT_ARGS_COL); -unsigned int opt_mesh_color_triangles(OPT_ARGS_COL); -unsigned int opt_mesh_color_quadrangles(OPT_ARGS_COL); -unsigned int opt_mesh_color_tetrahedra(OPT_ARGS_COL); -unsigned int opt_mesh_color_hexahedra(OPT_ARGS_COL); -unsigned int opt_mesh_color_prisms(OPT_ARGS_COL); -unsigned int opt_mesh_color_pyramid(OPT_ARGS_COL); -unsigned int opt_mesh_color_tangents(OPT_ARGS_COL); -unsigned int opt_mesh_color_normals(OPT_ARGS_COL); -unsigned int opt_mesh_color_1(OPT_ARGS_COL); -unsigned int opt_mesh_color_2(OPT_ARGS_COL); -unsigned int opt_mesh_color_3(OPT_ARGS_COL); -unsigned int opt_mesh_color_4(OPT_ARGS_COL); -unsigned int opt_mesh_color_5(OPT_ARGS_COL); -unsigned int opt_mesh_color_6(OPT_ARGS_COL); -unsigned int opt_mesh_color_7(OPT_ARGS_COL); -unsigned int opt_mesh_color_8(OPT_ARGS_COL); -unsigned int opt_mesh_color_9(OPT_ARGS_COL); -unsigned int opt_mesh_color_10(OPT_ARGS_COL); - - -// Data structures and global functions - -typedef struct { - char *str ; - int int1, int2, int3, int4 ; -} StringX4Int; - -typedef struct { - int level; - char *str ; - char * (*function)(int num, int action, char *val) ; - char *def ; - char *help ; -} StringXString ; - -typedef struct { - int level; - char *str; - double (*function)(int num, int action, double val) ; - double def ; - char *help ; -} StringXNumber ; - -typedef struct { - int level; - char *str ; - unsigned int (*function)(int num, int action, unsigned int val) ; - unsigned int def1, def2, def3 ; - char *help ; -} StringXColor ; - -void Init_Options (int num); -void Init_Options_GUI (int num); -void Print_Options(int num, int level, char *filename); - -StringXString * Get_StringOptionCategory(char * cat); -StringXNumber * Get_NumberOptionCategory(char * cat); -StringXColor * Get_ColorOptionCategory(char * cat); - -void Set_DefaultStringOptions(int num, StringXString s[]); -void Set_DefaultNumberOptions(int num, StringXNumber s[]); -void Set_DefaultColorOptions(int num, StringXColor s[], int scheme); - -void Set_StringOptions_GUI(int num, StringXString s[]); -void Set_NumberOptions_GUI(int num, StringXNumber s[]); -void Set_ColorOptions_GUI(int num, StringXColor s[]); - -void * Get_StringOption(char *str, StringXString s[]); -void * Get_NumberOption(char *str, StringXNumber s[]); -void * Get_ColorOption(char *str, StringXColor s[]); - -void Print_StringOptions(int num, int level, StringXString s[], char *prefix, FILE *file); -void Print_NumberOptions(int num, int level, StringXNumber s[], char *prefix, FILE *file); -void Print_ColorOptions(int num, int level, StringXColor s[], char *prefix, FILE *file); - -extern StringXString GeneralOptions_String[] ; -extern StringXString GeometryOptions_String[] ; -extern StringXString MeshOptions_String[] ; -extern StringXString SolverOptions_String[] ; -extern StringXString PostProcessingOptions_String[] ; -extern StringXString ViewOptions_String[] ; -extern StringXString PrintOptions_String[] ; - -extern StringXNumber GeneralOptions_Number[] ; -extern StringXNumber GeometryOptions_Number[] ; -extern StringXNumber MeshOptions_Number[] ; -extern StringXNumber SolverOptions_Number[] ; -extern StringXNumber PostProcessingOptions_Number[] ; -extern StringXNumber ViewOptions_Number[] ; -extern StringXNumber PrintOptions_Number[] ; - -extern StringXColor GeneralOptions_Color[] ; -extern StringXColor GeometryOptions_Color[] ; -extern StringXColor MeshOptions_Color[] ; -extern StringXColor SolverOptions_Color[] ; -extern StringXColor PostProcessingOptions_Color[] ; -extern StringXColor ViewOptions_Color[] ; -extern StringXColor PrintOptions_Color[] ; - -#endif diff --git a/Common/Static.h b/Common/Static.h deleted file mode 100644 index 44a4156f41ce53b42d0daa56e4b9162d030e5bd9..0000000000000000000000000000000000000000 --- a/Common/Static.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef _STATIC_H_ -#define _STATIC_H_ - -/* This file defines the static structures for Gmsh. It should be - included only once, in your 'main' file */ - -char yyname[256]; -int yyerrorstate; - -int CurrentNodeNumber, CurrentSimplexNumber; - -Context_T CTX ; -Mesh M, *THEM, *LOCAL; - -#endif diff --git a/Common/Timer.cpp b/Common/Timer.cpp deleted file mode 100644 index f2218c588da2228cb6a20216e360a51c1321f2a9..0000000000000000000000000000000000000000 --- a/Common/Timer.cpp +++ /dev/null @@ -1,19 +0,0 @@ -// $Id: Timer.cpp,v 1.4 2001-02-09 07:59:50 geuzaine Exp $ - -#if defined(WIN32) && !defined(__CYGWIN__) - -long GetTime(){ - return 0; -} - -#else - -#include <sys/time.h> -#include <unistd.h> -long GetTime(){ - struct timeval tp; - gettimeofday(&tp, (struct timezone *)0); - return (long)tp.tv_sec * 1000000 + (long)tp.tv_usec; -} - -#endif diff --git a/Common/Timer.h b/Common/Timer.h deleted file mode 100644 index a5103b0f2e7c751128a59ff81d7b5c025c031f69..0000000000000000000000000000000000000000 --- a/Common/Timer.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _TIMER_H_ -#define _TIMER_H_ - -long GetTime(); - -#endif diff --git a/Common/Views.cpp b/Common/Views.cpp deleted file mode 100644 index 40ea8a6e52edb2ec3b7be3fbb95b8442b1412690..0000000000000000000000000000000000000000 --- a/Common/Views.cpp +++ /dev/null @@ -1,929 +0,0 @@ -// $Id: Views.cpp,v 1.50 2001-08-11 23:28:31 geuzaine Exp $ - -#include <set> -#include "Gmsh.h" -#include "Numeric.h" -#include "Views.h" -#include "Context.h" -#include "Options.h" -#include "ColorTable.h" - -extern Context_T CTX ; - -#define INFINITY 1.e200 - -// this static stuff should be removed -List_T *Post_ViewList = NULL; -Post_View *Post_ViewReference = NULL; -int Post_ViewForceNumber = 0; - -/* ------------------------------------------------------------------------ */ -/* V i e w s */ -/* ------------------------------------------------------------------------ */ - -int fcmpPostViewNum(const void *v1, const void *v2){ - return (((Post_View *)v1)->Num - ((Post_View *)v2)->Num); -} - -int fcmpPostViewDuplicateOf(const void *v1, const void *v2){ - return (((Post_View *)v1)->DuplicateOf - ((Post_View *)v2)->DuplicateOf); -} - -Post_View * BeginView(int allocate){ - Post_View vv, *v; - static int UniqueNum=0; - int i; - - if(!Post_ViewList) Post_ViewList = List_Create(100,1,sizeof(Post_View)); - - if(!Post_ViewForceNumber){ - vv.Num = ++UniqueNum; // each view _must_ have a unique number - List_Add(Post_ViewList, &vv); - } - else{ - vv.Num = Post_ViewForceNumber; - List_Replace(Post_ViewList,&vv,fcmpPostViewNum); - } - - CTX.post.nb_views = List_Nbr(Post_ViewList); - - i = List_ISearch(Post_ViewList, &vv, fcmpPostViewNum); - v = (Post_View*)List_Pointer(Post_ViewList, i); - - v->Index = i; - v->Dirty = 1; - v->NbTimeStep = 0; - v->NbSP = v->NbVP = v->NbTP = 0; - v->NbSL = v->NbVL = v->NbTL = 0; - v->NbST = v->NbVT = v->NbTT = 0; - v->NbSS = v->NbVS = v->NbTS = 0; - - if(allocate){ - v->datasize = sizeof(double); - - v->Time = List_Create(100,1000,sizeof(double)); - - v->SP = List_Create(100,1000,sizeof(double)); - v->VP = List_Create(100,1000,sizeof(double)); - v->TP = List_Create(100,1000,sizeof(double)); - - v->SL = List_Create(100,1000,sizeof(double)); - v->VL = List_Create(100,1000,sizeof(double)); - v->TL = List_Create(100,1000,sizeof(double)); - - v->ST = List_Create(100,1000,sizeof(double)); - v->VT = List_Create(100,1000,sizeof(double)); - v->TT = List_Create(100,1000,sizeof(double)); - - v->SS = List_Create(100,1000,sizeof(double)); - v->VS = List_Create(100,1000,sizeof(double)); - v->TS = List_Create(100,1000,sizeof(double)); - } - else{ - v->Time = NULL; - v->SP = NULL; v->VP = NULL; v->TP = NULL; - v->SL = NULL; v->VL = NULL; v->TL = NULL; - v->ST = NULL; v->VT = NULL; v->TT = NULL; - v->SS = NULL; v->VS = NULL; v->TS = NULL; - } - - // Copy all options from the reference view initialized in InitOptions() - CopyViewOptions(Post_ViewReference, v); - - v->Changed = 1; - v->Links = 0; - v->DuplicateOf = 0; - v->ScalarOnly = 1; - v->normals = NULL; - v->Min = INFINITY; - v->Max = -INFINITY; - for(i=0;i<3;i++){ - v->BBox[2*i] = INFINITY; - v->BBox[2*i+1] = -INFINITY; - } - - return v; -} - -void Stat_ScalarSimplex(Post_View *v, int nbnod, int N, - double *X, double *Y, double *Z, double *V){ - int i; - - if(v->Min == INFINITY || v->Max == -INFINITY){ - v->Min = V[0]; - v->Max = V[0]; - v->NbTimeStep = N/nbnod; - } - else if(N/nbnod < v->NbTimeStep) - v->NbTimeStep = N/nbnod ; - - for(i=0 ; i<N ; i++){ - if(V[i] < v->Min) v->Min = V[i] ; - if(V[i] > v->Max) v->Max = V[i] ; - } - - for(i=0 ; i<nbnod ; i++){ - if(X[i] < v->BBox[0]) v->BBox[0] = X[i] ; - if(X[i] > v->BBox[1]) v->BBox[1] = X[i] ; - if(Y[i] < v->BBox[2]) v->BBox[2] = Y[i] ; - if(Y[i] > v->BBox[3]) v->BBox[3] = Y[i] ; - if(Z[i] < v->BBox[4]) v->BBox[4] = Z[i] ; - if(Z[i] > v->BBox[5]) v->BBox[5] = Z[i] ; - } -} - -void Stat_VectorSimplex(Post_View *v, int nbnod, int N, - double *X, double *Y, double *Z, double *V){ - double l0; - int i; - - if(v->Min == INFINITY || v->Max == -INFINITY){ - l0 = sqrt(DSQR(V[0])+DSQR(V[1])+DSQR(V[2])); - v->Min = l0; - v->Max = l0; - v->NbTimeStep = N/(3*nbnod) ; - } - else if(N/(3*nbnod) < v->NbTimeStep) - v->NbTimeStep = N/(3*nbnod) ; - - for(i=0 ; i<N ; i+=3){ - l0 = sqrt(DSQR(V[i])+DSQR(V[i+1])+DSQR(V[i+2])); - if(l0 < v->Min) v->Min = l0 ; - if(l0 > v->Max) v->Max = l0 ; - } - - for(i=0 ; i<nbnod ; i++){ - if(X[i] < v->BBox[0]) v->BBox[0] = X[i] ; - if(X[i] > v->BBox[1]) v->BBox[1] = X[i] ; - if(Y[i] < v->BBox[2]) v->BBox[2] = Y[i] ; - if(Y[i] > v->BBox[3]) v->BBox[3] = Y[i] ; - if(Z[i] < v->BBox[4]) v->BBox[4] = Z[i] ; - if(Z[i] > v->BBox[5]) v->BBox[5] = Z[i] ; - } - - v->ScalarOnly = 0; -} - -void Stat_TensorSimplex(Post_View *v, int nbnod, int N, - double *X, double *Y, double *Z, double *V){ - Msg(GERROR, "Tensor field views not implemented yet"); -} - - -void EndView(Post_View *v, int add_in_gui, char *file_name, char *name){ - int i, nb; - double d; - extern int AddViewInUI(int , char *, int); - - // Points - - if(v->NbSP){ - nb = List_Nbr(v->SP) / v->NbSP ; - for(i = 0 ; i < List_Nbr(v->SP) ; i+=nb) - Stat_ScalarSimplex(v, 1, nb-3, - (double*)List_Pointer_Fast(v->SP,i), - (double*)List_Pointer_Fast(v->SP,i+1), - (double*)List_Pointer_Fast(v->SP,i+2), - (double*)List_Pointer_Fast(v->SP,i+3)); - } - if(v->NbVP){ - nb = List_Nbr(v->VP) / v->NbVP ; - for(i = 0 ; i < List_Nbr(v->VP) ; i+=nb) - Stat_VectorSimplex(v, 1, nb-3, - (double*)List_Pointer_Fast(v->VP,i), - (double*)List_Pointer_Fast(v->VP,i+1), - (double*)List_Pointer_Fast(v->VP,i+2), - (double*)List_Pointer_Fast(v->VP,i+3)); - } - if(v->NbTP){ - nb = List_Nbr(v->TP) / v->NbTP ; - for(i = 0 ; i < List_Nbr(v->TP) ; i+=nb) - Stat_TensorSimplex(v, 1, nb-3, - (double*)List_Pointer_Fast(v->TP,i), - (double*)List_Pointer_Fast(v->TP,i+1), - (double*)List_Pointer_Fast(v->TP,i+2), - (double*)List_Pointer_Fast(v->TP,i+3)); - } - - // Lines - - if(v->NbSL){ - nb = List_Nbr(v->SL) / v->NbSL ; - for(i = 0 ; i < List_Nbr(v->SL) ; i+=nb) - Stat_ScalarSimplex(v, 2, nb-6, - (double*)List_Pointer_Fast(v->SL,i), - (double*)List_Pointer_Fast(v->SL,i+2), - (double*)List_Pointer_Fast(v->SL,i+4), - (double*)List_Pointer_Fast(v->SL,i+6)); - } - if(v->NbVL){ - nb = List_Nbr(v->VL) / v->NbVL ; - for(i = 0 ; i < List_Nbr(v->VL) ; i+=nb) - Stat_VectorSimplex(v, 2, nb-6, - (double*)List_Pointer_Fast(v->VL,i), - (double*)List_Pointer_Fast(v->VL,i+2), - (double*)List_Pointer_Fast(v->VL,i+4), - (double*)List_Pointer_Fast(v->VL,i+6)); - } - if(v->NbTL){ - nb = List_Nbr(v->TL) / v->NbTL ; - for(i = 0 ; i < List_Nbr(v->TL) ; i+=nb) - Stat_TensorSimplex(v, 2, nb-6, - (double*)List_Pointer_Fast(v->TL,i), - (double*)List_Pointer_Fast(v->TL,i+2), - (double*)List_Pointer_Fast(v->TL,i+4), - (double*)List_Pointer_Fast(v->TL,i+6)); - } - - // Triangles - - if(v->NbST){ - nb = List_Nbr(v->ST) / v->NbST ; - for(i = 0 ; i < List_Nbr(v->ST) ; i+=nb) - Stat_ScalarSimplex(v, 3, nb-9, - (double*)List_Pointer_Fast(v->ST,i), - (double*)List_Pointer_Fast(v->ST,i+3), - (double*)List_Pointer_Fast(v->ST,i+6), - (double*)List_Pointer_Fast(v->ST,i+9)); - } - if(v->NbVT){ - nb = List_Nbr(v->VT) / v->NbVT ; - for(i = 0 ; i < List_Nbr(v->VT) ; i+=nb) - Stat_VectorSimplex(v, 3, nb-9, - (double*)List_Pointer_Fast(v->VT,i), - (double*)List_Pointer_Fast(v->VT,i+3), - (double*)List_Pointer_Fast(v->VT,i+6), - (double*)List_Pointer_Fast(v->VT,i+9)); - } - if(v->NbTT){ - nb = List_Nbr(v->TT) / v->NbTT ; - for(i = 0 ; i < List_Nbr(v->TT) ; i+=nb) - Stat_TensorSimplex(v, 3, nb-9, - (double*)List_Pointer_Fast(v->TT,i), - (double*)List_Pointer_Fast(v->TT,i+3), - (double*)List_Pointer_Fast(v->TT,i+6), - (double*)List_Pointer_Fast(v->TT,i+9)); - } - - // Tetrahedra - - if(v->NbSS){ - nb = List_Nbr(v->SS) / v->NbSS ; - for(i = 0 ; i < List_Nbr(v->SS) ; i+=nb) - Stat_ScalarSimplex(v, 4, nb-12, - (double*)List_Pointer_Fast(v->SS,i), - (double*)List_Pointer_Fast(v->SS,i+4), - (double*)List_Pointer_Fast(v->SS,i+8), - (double*)List_Pointer_Fast(v->SS,i+12)); - } - if(v->NbVS){ - nb = List_Nbr(v->VS) / v->NbVS ; - for(i = 0 ; i < List_Nbr(v->VS) ; i+=nb) - Stat_VectorSimplex(v, 4, nb-12, - (double*)List_Pointer_Fast(v->VS,i), - (double*)List_Pointer_Fast(v->VS,i+4), - (double*)List_Pointer_Fast(v->VS,i+8), - (double*)List_Pointer_Fast(v->VS,i+12)); - } - if(v->NbTS){ - nb = List_Nbr(v->TS) / v->NbTS ; - for(i = 0 ; i < List_Nbr(v->TS) ; i+=nb) - Stat_TensorSimplex(v, 4, nb-12, - (double*)List_Pointer_Fast(v->TS,i), - (double*)List_Pointer_Fast(v->TS,i+4), - (double*)List_Pointer_Fast(v->TS,i+8), - (double*)List_Pointer_Fast(v->TS,i+12)); - } - - // Dummy time values if using old parsed format... - if(v->Time && !List_Nbr(v->Time)){ - for(i=0 ; i<v->NbTimeStep ; i++){ - d = (double)i; - List_Add(v->Time, &d); - } - } - - opt_view_name(v->Index, GMSH_SET|GMSH_GUI, name); - opt_view_filename(v->Index, GMSH_SET|GMSH_GUI, file_name); - opt_view_nb_timestep(v->Index, GMSH_GUI, 0); - opt_view_timestep(v->Index, GMSH_SET|GMSH_GUI, v->TimeStep); - if(v->Min > v->Max){ - opt_view_min(v->Index, GMSH_SET|GMSH_GUI, 0.); - opt_view_max(v->Index, GMSH_SET|GMSH_GUI, 0.); - } - else{ - opt_view_min(v->Index, GMSH_GUI, 0); - opt_view_max(v->Index, GMSH_GUI, 0); - } - opt_view_custom_min(v->Index, GMSH_SET|GMSH_GUI, v->Min); - opt_view_custom_max(v->Index, GMSH_SET|GMSH_GUI, v->Max); - - if(CTX.post.smooth) v->smooth(); - - if(!Post_ViewForceNumber && add_in_gui) - AddViewInUI(List_Nbr(Post_ViewList), v->Name, v->Num); - - v->Dirty = 0; //the view is complete, we may draw it -} - -bool FreeView(int num){ - Post_View *v; - - Msg(DEBUG, "Trying to free view %d",num); - - if(num < 0 || num >= List_Nbr(Post_ViewList)){ - return false ; - } - v = (Post_View*)List_Pointer(Post_ViewList, num); - FreeView(v); - List_PSuppress(Post_ViewList, num); - CTX.post.nb_views = List_Nbr(Post_ViewList); - - Msg(INFO, "View %d deleted (%d views left)",num, List_Nbr(Post_ViewList)); - return true; -} - - -void FreeView(Post_View *v){ - Post_View vv,*v2; - int i, numdup, free = 1; - - if(v->DuplicateOf){ - vv.Num = v->DuplicateOf ; - Msg(DEBUG, "This view is a duplicata"); - if(!(v2 = (Post_View*)List_PQuery(Post_ViewList, &vv, fcmpPostViewNum))){ - Msg(DEBUG, " -the original view is gone"); - numdup = 0; - for(i=0 ; i<List_Nbr(Post_ViewList); i++) - numdup += (((Post_View*)List_Pointer(Post_ViewList, i))->DuplicateOf == v->DuplicateOf); - if(numdup == 1){ - Msg(DEBUG, " -there are no other duplicata, so I can free"); - free = 1 ; - } - else{ - Msg(DEBUG, " -there are still duplicata, so I cannot free"); - free = 0 ; - } - } - else{ - v2->Links--; - free = 0 ; - Msg(DEBUG, " -the original still exists, so I cannot free"); - } - } - - if(free && !v->Links){ - Msg(DEBUG, "FREEING VIEW"); - List_Delete(v->Time); - List_Delete(v->SP); List_Delete(v->VP); List_Delete(v->TP); - List_Delete(v->SL); List_Delete(v->VL); List_Delete(v->TL); - List_Delete(v->ST); List_Delete(v->VT); List_Delete(v->TT); - List_Delete(v->SS); List_Delete(v->VS); List_Delete(v->TS); - v->reset_normals(); - } - -} - -void CopyViewOptions(Post_View *src, Post_View *dest){ - strcpy(dest->Format, src->Format); - dest->CustomMin = src->CustomMin; - dest->CustomMax = src->CustomMax; - dest->Offset[0] = src->Offset[0]; - dest->Offset[1] = src->Offset[1]; - dest->Offset[2] = src->Offset[2]; - dest->Raise[0] = src->Raise[0]; - dest->Raise[1] = src->Raise[1]; - dest->Raise[2] = src->Raise[2]; - dest->ArrowScale = src->ArrowScale; - dest->Explode = src->Explode; - dest->Visible = src->Visible; - dest->IntervalsType = src->IntervalsType; - dest->SaturateValues = src->SaturateValues; - dest->Boundary = src->Boundary ; - dest->NbIso = src->NbIso; - dest->Light = src->Light ; - dest->SmoothNormals = src->SmoothNormals ; - dest->ShowElement = src->ShowElement; - dest->ShowTime = src->ShowTime; - dest->ShowScale = src->ShowScale; - dest->DrawPoints = src->DrawPoints; - dest->DrawLines = src->DrawLines; - dest->DrawTriangles = src->DrawTriangles; - dest->DrawTetrahedra = src->DrawTetrahedra; - dest->DrawScalars = src->DrawScalars; - dest->DrawVectors = src->DrawVectors; - dest->DrawTensors = src->DrawTensors; - dest->TransparentScale = src->TransparentScale; - dest->ScaleType = src->ScaleType; - dest->RangeType = src->RangeType; - dest->ArrowType = src->ArrowType; - dest->ArrowLocation = src->ArrowLocation; - dest->TimeStep = src->TimeStep; - ColorTable_Copy(&src->CT); - ColorTable_Paste(&dest->CT); -} - -ColorTable *Get_ColorTable(int num){ - Post_View *v; - - if(!Post_ViewList) - v = Post_ViewReference ; - else - v = (Post_View*)List_Pointer_Test(Post_ViewList, num); - if(v) - return &v->CT ; - else - return NULL ; -} - -void Print_ColorTable(int num, char *prefix, FILE *file){ - char tmp[1024]; - Post_View *v; - if(!Post_ViewList) - v = Post_ViewReference ; - else - v = (Post_View*)List_Pointer_Test(Post_ViewList, num); - if(!v) return; - sprintf(tmp, "%s = {", prefix); - if(file) fprintf(file, "%s\n", tmp); else Msg(DIRECT, tmp); - ColorTable_Print(&v->CT, file); - sprintf(tmp, "};"); - if(file) fprintf(file, "%s\n", tmp); else Msg(DIRECT, tmp); -} - - -/* ------------------------------------------------------------------------ */ -/* R e a d _ V i e w */ -/* ------------------------------------------------------------------------ */ - -void Read_View(FILE *file, char *filename){ - char str[256], name[256]; - int nb, format, size, testone, swap; - double version; - Post_View *v; - - while (1) { - - do { - fgets(str, 256, file) ; - if (feof(file)) break ; - } while (str[0] != '$') ; - - if (feof(file)) break ; - - /* F o r m a t */ - - if (!strncmp(&str[1], "PostFormat", 10)){ - fscanf(file, "%lf %d %d\n", &version, &format, &size) ; - if(version < 1.0){ - Msg(GERROR, "The version of this post-processing file is too old (%g < 1.0)", version); - return; - } - if(size == sizeof(double)) - Msg(DEBUG, "Data is in double precision format (size==%d)", size); - else if(size == sizeof(float)) - Msg(DEBUG, "Data is in single precision format (size==%d)", size); - else{ - Msg(GERROR, "Unknown type of data (size = %d) in post-processing file", - size); - return; - } - if(format == 0) - format = LIST_FORMAT_ASCII ; - else if(format == 1) - format = LIST_FORMAT_BINARY ; - else{ - Msg(GERROR, "Unknown format for view"); - return ; - } - } - - /* V i e w */ - - if (!strncmp(&str[1], "View", 4)) { - - v = BeginView(0); - - fscanf(file, "%s %d %d %d %d %d %d %d %d %d %d %d %d %d\n", - name, &v->NbTimeStep, - &v->NbSP, &v->NbVP, &v->NbTP, - &v->NbSL, &v->NbVL, &v->NbTL, - &v->NbST, &v->NbVT, &v->NbTT, - &v->NbSS, &v->NbVS, &v->NbTS); - - swap = 0 ; - if(format == LIST_FORMAT_BINARY){ - fread(&testone, sizeof(int), 1, file); - if(testone != 1){ - Msg(INFO, "Swapping bytes from binary file"); - swap = 1; - } - } - - v->datasize = size ; - - // Time values - v->Time = List_CreateFromFile(v->NbTimeStep, size, file, format, swap); - - // Points - nb = v->NbSP ? v->NbSP * (v->NbTimeStep +3) : 0 ; - v->SP = List_CreateFromFile(nb, size, file, format, swap); - - nb = v->NbVP ? v->NbVP * (v->NbTimeStep*3+3) : 0 ; - v->VP = List_CreateFromFile(nb, size, file, format, swap); - - nb = v->NbTP ? v->NbTP * (v->NbTimeStep*9+3) : 0 ; - v->TP = List_CreateFromFile(nb, size, file, format, swap); - - // Lines - nb = v->NbSL ? v->NbSL * (v->NbTimeStep*2 +6) : 0 ; - v->SL = List_CreateFromFile(nb, size, file, format, swap); - - nb = v->NbVL ? v->NbVL * (v->NbTimeStep*2*3+6) : 0 ; - v->VL = List_CreateFromFile(nb, size, file, format, swap); - - nb = v->NbTL ? v->NbTL * (v->NbTimeStep*2*9+6) : 0 ; - v->TL = List_CreateFromFile(nb, size, file, format, swap); - - // Triangles - nb = v->NbST ? v->NbST * (v->NbTimeStep*3 +9) : 0 ; - v->ST = List_CreateFromFile(nb, size, file, format, swap); - - nb = v->NbVT ? v->NbVT * (v->NbTimeStep*3*3+9) : 0 ; - v->VT = List_CreateFromFile(nb, size, file, format, swap); - - nb = v->NbTT ? v->NbTT * (v->NbTimeStep*3*9+9) : 0 ; - v->TT = List_CreateFromFile(nb, size, file, format, swap); - - // Tetrahedra - nb = v->NbSS ? v->NbSS * (v->NbTimeStep*4 +12) : 0 ; - v->SS = List_CreateFromFile(nb, size, file, format, swap); - - nb = v->NbVS ? v->NbVS * (v->NbTimeStep*4*3+12) : 0 ; - v->VS = List_CreateFromFile(nb, size, file, format, swap); - - nb = v->NbTS ? v->NbTS * (v->NbTimeStep*4*9+12) : 0 ; - v->TS = List_CreateFromFile(nb, size, file, format, swap); - - Msg(DEBUG, "Read View '%s' (%d TimeSteps): %d %d %d %d %d %d %d %d %d %d %d %d", - name, v->NbTimeStep, - v->NbSP, v->NbVP, v->NbTP, - v->NbSL, v->NbVL, v->NbTL, - v->NbST, v->NbVT, v->NbTT, - v->NbSS, v->NbVS, v->NbTS); - Msg(DEBUG, "List_Nbrs: %d %d %d %d %d %d %d %d %d %d %d %d", - List_Nbr(v->SP), List_Nbr(v->VP), List_Nbr(v->TP), - List_Nbr(v->SL), List_Nbr(v->VL), List_Nbr(v->TL), - List_Nbr(v->ST), List_Nbr(v->VT), List_Nbr(v->TT), - List_Nbr(v->SS), List_Nbr(v->VS), List_Nbr(v->TS)); - - EndView(v, 1, filename, name); - } - - do { - fgets(str, 256, file) ; - if (feof(file)) Msg(GERROR,"Prematured end of file"); - } while (str[0] != '$') ; - - } /* while 1 ... */ - -} - -/* ------------------------------------------------------------------------ */ -/* W r i t e _ V i e w */ -/* ------------------------------------------------------------------------ */ - -void Write_View(int Flag_BIN, Post_View *v, char *filename){ - FILE *file; - int i, f, One=1; - - if(filename){ - file = fopen(filename,"w"); - if(!file){ - Msg(WARNING, "Unable to open file '%s'", filename); - return; - } - } - else - file = stdout; - - fprintf(file, "$PostFormat /* Gmsh 1.0, %s */\n", Flag_BIN ? "binary" : "ascii") ; - fprintf(file, "1.0 %d %d\n", Flag_BIN, (int)sizeof(double)) ; - fprintf(file, "$EndPostFormat\n") ; - for(i=0;i<(int)strlen(v->Name);i++) if(v->Name[i]==' ') v->Name[i]='_'; - // -> Il faudra changer le format de post pour autoriser les blancs. - // On ajoutera aussi un entier par simplexe (num de region). - // Devrait-on passer a un format liste de noeuds + liste de - // simplexes ? - fprintf(file, "$View /* %s */\n", v->Name); - fprintf(file, "%s ", v->Name); - fprintf(file, "%d %d %d %d %d %d %d %d %d %d %d %d %d\n", - List_Nbr(v->Time), - v->NbSP, v->NbVP, v->NbTP, v->NbSL, v->NbVL, v->NbTL, - v->NbST, v->NbVT, v->NbTT, v->NbSS, v->NbVS, v->NbTS); - if(Flag_BIN){ - f = LIST_FORMAT_BINARY; - fwrite(&One, sizeof(int), 1, file); - } - else - f = LIST_FORMAT_ASCII; - List_WriteToFile(v->Time, file, f); - List_WriteToFile(v->SP, file, f); List_WriteToFile(v->VP, file, f); - List_WriteToFile(v->TP, file, f); List_WriteToFile(v->SL, file, f); - List_WriteToFile(v->VL, file, f); List_WriteToFile(v->TL, file, f); - List_WriteToFile(v->ST, file, f); List_WriteToFile(v->VT, file, f); - List_WriteToFile(v->TT, file, f); List_WriteToFile(v->SS, file, f); - List_WriteToFile(v->VS, file, f); List_WriteToFile(v->TS, file, f); - if(Flag_BIN) fprintf(file, "\n"); - fprintf(file, "$EndView\n"); - - if(filename){ - Msg(INFO, "View output complete '%s'", filename); - Msg(STATUS2, "Wrote '%s'", filename); - fclose(file); - } - -} - - -/* ------------------------------------------------------------------------ */ -/* S m o o t h i n g */ -/* ------------------------------------------------------------------------ */ - -using namespace std; - -struct xyzv{ -private: -public: - double x,y,z,*vals; - int nbvals; - int nboccurences; - static double eps; - void update (int nbVals, double *); - xyzv(double x, double y, double z); - ~xyzv(); - xyzv & operator = ( const xyzv &); - xyzv ( const xyzv &); -}; - -double xyzv::eps = 0.0; - -xyzv::xyzv (double xx, double yy, double zz) - : x(xx),y(yy),z(zz),vals(0),nbvals(0),nboccurences(0){} - -xyzv::~xyzv(){ - if(vals)delete [] vals; -} - -xyzv::xyzv(const xyzv &other){ - x = other.x; - y = other.y; - z = other.z; - nbvals = other.nbvals; - nboccurences = other.nboccurences; - if(other.vals && other.nbvals){ - vals = new double[other.nbvals]; - for(int i=0;i<nbvals;i++)vals[i] = other.vals[i]; - } -} - -xyzv & xyzv::operator = (const xyzv &other){ - if(this != &other){ - x = other.x; - y = other.y; - z = other.z; - nbvals = other.nbvals; - nboccurences = other.nboccurences; - if(other.vals && other.nbvals){ - vals = new double[other.nbvals]; - for(int i=0;i<nbvals;i++)vals[i] = other.vals[i]; - } - } - return *this; -} - -void xyzv::update (int n, double *v){ - int i; - if(!vals){ - vals = new double[n]; - for(i=0;i<n;i++)vals[i] = 0.0; - nbvals = n; - nboccurences = 0; - } - else if (nbvals != n){ - throw n; - } - - double x1 = (double)(nboccurences)/ (double)(nboccurences + 1); - double x2 = 1./(double)(nboccurences + 1); - for(i=0;i<nbvals;i++)vals[i] = (x1 * vals[i] + x2 * v[i]); - nboccurences++; - - //printf("val(%d,%f,%f,%f) = %f\n",nboccurences,x,y,z,vals[0]); -} - -// trop simple... If faudrait coder une structure qui tient compte des -// angles entres normales, qui ne smoothe que si p1.val est "proche" -// (eps2) de p2.val, et qui renvoie le xyzv qui a le xyz dans eps ET -// val eps2... Sinon, pour un smoothing de normales, les "coins" -// deviennent de la bouillie. - -struct lessthanxyzv{ - bool operator () (const xyzv & p2, const xyzv &p1) const{ - if( p1.x - p2.x > xyzv::eps)return true; - if( p1.x - p2.x <-xyzv::eps)return false; - if( p1.y - p2.y > xyzv::eps)return true; - if( p1.y - p2.y <-xyzv::eps)return false; - if( p1.z - p2.z > xyzv::eps)return true; - return false; - } -}; - -typedef set<xyzv,lessthanxyzv> mycont; -typedef mycont::const_iterator iter; - -class smooth_container{ -public : - mycont c; -}; - -void smooth_list (List_T *SS , - double *min, double *max, - int NbTimeStep, - int nbvert, - int nb, - mycont & connectivities){ - double *x,*y,*z,*v; - int i,j,k; - double *vals = new double[NbTimeStep]; - *min = INFINITY; - *max = -INFINITY; - - for(i = 0 ; i < List_Nbr(SS) ; i+=nb){ - x = (double*)List_Pointer_Fast(SS,i); - y = (double*)List_Pointer_Fast(SS,i+nbvert); - z = (double*)List_Pointer_Fast(SS,i+2*nbvert); - v = (double*)List_Pointer_Fast(SS,i+3*nbvert); - - for(j=0;j<nbvert;j++){ - for(k=0;k<NbTimeStep;k++)vals[k] = v[j+k*nbvert]; - xyzv xyz(x[j],y[j],z[j]); - iter it = connectivities.find(xyz); - if(it == connectivities.end()){ - xyz.update(NbTimeStep,vals); - connectivities.insert(xyz); - } - else{ - xyzv *xx = (xyzv*) &(*it); // a little weird ... becaus we know that - // this will not destroy the set ordering - xx->update(NbTimeStep,vals); - } - } - } - - for(i = 0 ; i < List_Nbr(SS) ; i+=nb){ - x = (double*)List_Pointer_Fast(SS,i); - y = (double*)List_Pointer_Fast(SS,i+nbvert); - z = (double*)List_Pointer_Fast(SS,i+2*nbvert); - v = (double*)List_Pointer_Fast(SS,i+3*nbvert); - for(j=0;j<nbvert;j++){ - xyzv xyz(x[j],y[j],z[j]); - iter it = connectivities.find(xyz); - if(it != connectivities.end()){ - for(k=0;k<NbTimeStep;k++){ - v[j+k*nbvert] = (*it).vals[k]; - if(v[j+k*nbvert] < *min) *min = v[j+k*nbvert] ; - if(v[j+k*nbvert] > *max) *max = v[j+k*nbvert] ; - } - } - } - } - delete [] vals; -} - -void Post_View :: smooth (){ - xyzv::eps = CTX.lc * 1.e-6; - int nb; - - if(NbSS){ - mycont conSS; - Msg(INFO,"Smoothing scalar tetrahedra in view..."); - nb = List_Nbr(SS) / NbSS ; - smooth_list (SS , &Min, &Max, NbTimeStep, 4, nb, conSS); - Msg(INFO,"...done"); - } - if(NbST){ - mycont conST; - Msg(INFO,"Smoothing scalar triangles in view..."); - nb = List_Nbr(ST) / NbST ; - smooth_list (ST , &Min, &Max, NbTimeStep, 3, nb, conST); - Msg(INFO,"...done"); - } - -} - -// a small utility to smooth normals - -void Post_View :: reset_normals(){ - if(normals) delete normals; - normals = 0; -} - -void Post_View :: add_normal(double x, double y, double z, - double nx, double ny, double nz){ - if(!normals) normals = new smooth_container; - xyzv xyz(x,y,z); - double n[3] = {nx,ny,nz}; - iter it = normals->c.find(xyz); - if(it == normals->c.end()){ - xyz.update(3,n); - normals->c.insert(xyz); - } - else{ - xyzv *xx = (xyzv*) &(*it); - xx->update(3,n); - } -} - -bool Post_View :: get_normal(double x, double y, double z, - double &nx, double &ny, double &nz){ - if(!normals) return false; - xyzv xyz(x,y,z); - iter it = normals->c.find(xyz); - if(it == normals->c.end()) return false; - nx = (*it).vals[0]; - ny = (*it).vals[1]; - nz = (*it).vals[2]; - return true; -} - -/* ------------------------------------------------------------------------ */ -/* T r a n s f o r m a t i o n */ -/* ------------------------------------------------------------------------ */ - -static void transform(double mat[3][3], double v[3], - double *x, double *y, double *z){ - *x = mat[0][0]*v[0] + mat[0][1]*v[1] + mat[0][2]*v[2]; - *y = mat[1][0]*v[0] + mat[1][1]*v[1] + mat[1][2]*v[2]; - *z = mat[2][0]*v[0] + mat[2][1]*v[1] + mat[2][2]*v[2]; -} - -static void transform_list(List_T *V , - int NbTimeStep, - int nbvert, - int nb, - double mat[3][3]){ - double *x,*y,*z, v[3]; - int i, j; - - for(i = 0 ; i < List_Nbr(V) ; i+=nb){ - x = (double*)List_Pointer_Fast(V,i); - y = (double*)List_Pointer_Fast(V,i+nbvert); - z = (double*)List_Pointer_Fast(V,i+2*nbvert); - for(j=0; j<nbvert; j++){ - v[0] = x[j]; - v[1] = y[j]; - v[2] = z[j]; - transform(mat,v,&x[j],&y[j],&z[j]); - } - } -} - -void Post_View :: transform (double mat[3][3]){ - int nb; - - if(NbSP){ - nb = List_Nbr(SP) / NbSP ; - transform_list(SP, NbTimeStep, 1, nb, mat); - } - if(NbSL){ - nb = List_Nbr(SL) / NbSL ; - transform_list(SL, NbTimeStep, 2, nb, mat); - } - if(NbST){ - nb = List_Nbr(ST) / NbST ; - transform_list(ST, NbTimeStep, 3, nb, mat); - } - if(NbSS){ - nb = List_Nbr(SS) / NbSS ; - transform_list(SS, NbTimeStep, 4, nb, mat); - } - - - if(NbVP){ - nb = List_Nbr(VP) / NbVP ; - transform_list(VP, NbTimeStep, 1, nb, mat); - } - if(NbVL){ - nb = List_Nbr(VL) / NbVL ; - transform_list(VL, NbTimeStep, 2, nb, mat); - } - if(NbVT){ - nb = List_Nbr(VT) / NbVT ; - transform_list(VT, NbTimeStep, 3, nb, mat); - } - if(NbVS){ - nb = List_Nbr(VS) / NbVS ; - transform_list(VS, NbTimeStep, 4, nb, mat); - } -} diff --git a/Common/Views.h b/Common/Views.h deleted file mode 100644 index 9c0ffa53832b65eb10d95112a261412af2bc963c..0000000000000000000000000000000000000000 --- a/Common/Views.h +++ /dev/null @@ -1,118 +0,0 @@ -#ifndef _VIEWS_H_ -#define _VIEWS_H_ - -#include "ColorTable.h" - -class smooth_container; - -class Post_View{ - public : - // intrinsic to a view - int Num, Index, Changed, DuplicateOf, Links, Dirty; - char FileName[256], Name[256]; - - // the data - int datasize; // size(double) or sizeof(float) - List_T *Time; - int NbSP, NbVP, NbTP; - List_T *SP, *VP, *TP; // points - int NbSL, NbVL, NbTL; - List_T *SL, *VL, *TL; // lines - int NbST, NbVT, NbTT; - List_T *ST, *VT, *TT; // triangles - int NbSS, NbVS, NbTS; - List_T *SS, *VS, *TS; // tetrahedra - int NbTimeStep, ScalarOnly; - double Min, Max, BBox[6]; - - // options - char Format[256]; - double CustomMin, CustomMax; - double Offset[3], Raise[3], ArrowScale, Explode; - int Visible, IntervalsType, NbIso, Light, SmoothNormals ; - int SaturateValues; - int ShowElement, ShowTime, ShowScale; - int TransparentScale, ScaleType, RangeType; - int ArrowType, ArrowLocation; - int TimeStep; - int DrawPoints, DrawLines, DrawTriangles, DrawTetrahedra; - int DrawScalars, DrawVectors, DrawTensors; - int Boundary; - ColorTable CT; - - // dynamic - double (*GVFI) (double min, double max, int nb, int index); - int (*GIFV) (double min, double max, int nb, double value); - // smooth the view - void smooth(); - // smooth the normals - smooth_container *normals; - void reset_normals(); - void add_normal(double x, double y, double z, - double nx, double ny, double nz); - bool get_normal(double x, double y, double z, - double &nx, double &ny, double &nz); - // transform the view - void transform(double mat[3][3]); -}; - -// The static list with pointers to all views - -extern List_T *Post_ViewList; - -// Reference view storing default options and the static options - -extern Post_View *Post_ViewReference; -extern int Post_ViewForceNumber, Post_ViewComputeBBox; - - - -// IntervalsType -#define DRAW_POST_ISO 1 -#define DRAW_POST_CONTINUOUS 2 -#define DRAW_POST_DISCRETE 3 -#define DRAW_POST_NUMERIC 4 - -// ArrowType -#define DRAW_POST_SEGMENT 1 -#define DRAW_POST_ARROW 2 -#define DRAW_POST_PYRAMID 3 -#define DRAW_POST_CONE 4 -#define DRAW_POST_DISPLACEMENT 5 -#define DRAW_POST_ARROW_HEAD 6 - -// ArrowLocation -#define DRAW_POST_LOCATE_COG 1 -#define DRAW_POST_LOCATE_VERTEX 2 - -// RangeType -#define DRAW_POST_DEFAULT 1 -#define DRAW_POST_CUSTOM 2 - -// ScaleType -#define DRAW_POST_LINEAR 1 -#define DRAW_POST_LOGARITHMIC 2 -#define DRAW_POST_DOUBLELOGARITHMIC 3 // for vorticity e.g. - -// Public functions - -int fcmpPostViewNum(const void *v1, const void *v2); -int fcmpPostViewDuplicateOf(const void *v1, const void *v2); - -Post_View * BeginView (int alloc); -void EndView (Post_View *v, int AddInUI, char *FileName, char *Name); -void FreeView(Post_View *v); -bool FreeView(int); -void Read_View(FILE *file, char *filename); -void Write_View(int Flag_BIN, Post_View *v, char *filename); -void CopyViewOptions(Post_View *src, Post_View *dest); - -int BGMWithView (Post_View *ErrView); -int CreateBGM(Post_View *ErrView, int OptiMethod, double Degree, - double OptiValue, double *ObjFunct, char *OutFile); -double ErrorInView(Post_View * ErrView, int *n); - -ColorTable *Get_ColorTable(int num); -void Print_ColorTable(int num, char *prefix, FILE *file); - -#endif diff --git a/Common/trackball.c b/Common/trackball.c deleted file mode 100644 index f23d3db30b53cf5f401f7900dd70e4b84e58f921..0000000000000000000000000000000000000000 --- a/Common/trackball.c +++ /dev/null @@ -1,324 +0,0 @@ -/* - * (c) Copyright 1993, 1994, Silicon Graphics, Inc. - * ALL RIGHTS RESERVED - * Permission to use, copy, modify, and distribute this software for - * any purpose and without fee is hereby granted, provided that the above - * copyright notice appear in all copies and that both the copyright notice - * and this permission notice appear in supporting documentation, and that - * the name of Silicon Graphics, Inc. not be used in advertising - * or publicity pertaining to distribution of the software without specific, - * written prior permission. - * - * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" - * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR - * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON - * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, - * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY - * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, - * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF - * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN - * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE - * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. - * - * US Government Users Restricted Rights - * Use, duplication, or disclosure by the Government is subject to - * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph - * (c)(1)(ii) of the Rights in Technical Data and Computer Software - * clause at DFARS 252.227-7013 and/or in similar or successor - * clauses in the FAR or the DOD or NASA FAR Supplement. - * Unpublished-- rights reserved under the copyright laws of the - * United States. Contractor/manufacturer is Silicon Graphics, - * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. - * - * OpenGL(TM) is a trademark of Silicon Graphics, Inc. - */ -/* - * Trackball code: - * - * Implementation of a virtual trackball. - * Implemented by Gavin Bell, lots of ideas from Thant Tessman and - * the August '88 issue of Siggraph's "Computer Graphics," pp. 121-129. - * - * Vector manip code: - * - * Original code from: - * David M. Ciemiewicz, Mark Grossman, Henry Moreton, and Paul Haeberli - * - * Much mucking with by: - * Gavin Bell - */ -#include <math.h> -#include "trackball.h" - -/* - * This size should really be based on the distance from the center of - * rotation to the point on the object underneath the mouse. That - * point would then track the mouse as closely as possible. This is a - * simple example, though, so that is left as an Exercise for the - * Programmer. - */ -#define TRACKBALLSIZE (0.8) - -/* - * Local function prototypes (not defined in trackball.h) - */ -static float tb_project_to_sphere(float, float, float); -static void normalize_quat(float [4]); - -void -vzero(float *v) -{ - v[0] = 0.0; - v[1] = 0.0; - v[2] = 0.0; -} - -void -vset(float *v, float x, float y, float z) -{ - v[0] = x; - v[1] = y; - v[2] = z; -} - -void -vsub(const float *src1, const float *src2, float *dst) -{ - dst[0] = src1[0] - src2[0]; - dst[1] = src1[1] - src2[1]; - dst[2] = src1[2] - src2[2]; -} - -void -vcopy(const float *v1, float *v2) -{ - register int i; - for (i = 0 ; i < 3 ; i++) - v2[i] = v1[i]; -} - -void -vcross(const float *v1, const float *v2, float *cross) -{ - float temp[3]; - - temp[0] = (v1[1] * v2[2]) - (v1[2] * v2[1]); - temp[1] = (v1[2] * v2[0]) - (v1[0] * v2[2]); - temp[2] = (v1[0] * v2[1]) - (v1[1] * v2[0]); - vcopy(temp, cross); -} - -float -vlength(const float *v) -{ - return sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); -} - -void -vscale(float *v, float div) -{ - v[0] *= div; - v[1] *= div; - v[2] *= div; -} - -void -vnormal(float *v) -{ - vscale(v,1.0/vlength(v)); -} - -float -vdot(const float *v1, const float *v2) -{ - return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]; -} - -void -vadd(const float *src1, const float *src2, float *dst) -{ - dst[0] = src1[0] + src2[0]; - dst[1] = src1[1] + src2[1]; - dst[2] = src1[2] + src2[2]; -} - -/* - * Ok, simulate a track-ball. Project the points onto the virtual - * trackball, then figure out the axis of rotation, which is the cross - * product of P1 P2 and O P1 (O is the center of the ball, 0,0,0) - * Note: This is a deformed trackball-- is a trackball in the center, - * but is deformed into a hyperbolic sheet of rotation away from the - * center. This particular function was chosen after trying out - * several variations. - * - * It is assumed that the arguments to this routine are in the range - * (-1.0 ... 1.0) - */ -void -trackball(float q[4], float p1x, float p1y, float p2x, float p2y) -{ - float a[3]; /* Axis of rotation */ - float phi; /* how much to rotate about axis */ - float p1[3], p2[3], d[3]; - float t; - - if (p1x == p2x && p1y == p2y) { - /* Zero rotation */ - vzero(q); - q[3] = 1.0; - return; - } - - /* - * First, figure out z-coordinates for projection of P1 and P2 to - * deformed sphere - */ - vset(p1,p1x,p1y,tb_project_to_sphere(TRACKBALLSIZE,p1x,p1y)); - vset(p2,p2x,p2y,tb_project_to_sphere(TRACKBALLSIZE,p2x,p2y)); - - /* - * Now, we want the cross product of P1 and P2 - */ - vcross(p2,p1,a); - - /* - * Figure out how much to rotate around that axis. - */ - vsub(p1,p2,d); - t = vlength(d) / (2.0*TRACKBALLSIZE); - - /* - * Avoid problems with out-of-control values... - */ - if (t > 1.0) t = 1.0; - if (t < -1.0) t = -1.0; - phi = 2.0 * asin(t); - - axis_to_quat(a,phi,q); -} - -/* - * Given an axis and angle, compute quaternion. - */ -void -axis_to_quat(float a[3], float phi, float q[4]) -{ - vnormal(a); - vcopy(a,q); - vscale(q,sin(phi/2.0)); - q[3] = cos(phi/2.0); -} - -/* - * Project an x,y pair onto a sphere of radius r OR a hyperbolic sheet - * if we are away from the center of the sphere. - */ -static float -tb_project_to_sphere(float r, float x, float y) -{ - float d, t, z; - - d = sqrt(x*x + y*y); - if (d < r * 0.70710678118654752440) { /* Inside sphere */ - z = sqrt(r*r - d*d); - } else { /* On hyperbola */ - t = r / 1.41421356237309504880; - z = t*t / d; - } - return z; -} - -/* - * Given two rotations, e1 and e2, expressed as quaternion rotations, - * figure out the equivalent single rotation and stuff it into dest. - * - * This routine also normalizes the result every RENORMCOUNT times it is - * called, to keep error from creeping in. - * - * NOTE: This routine is written so that q1 or q2 may be the same - * as dest (or each other). - */ - -#define RENORMCOUNT 97 - -void -add_quats(float q1[4], float q2[4], float dest[4]) -{ - static int count=0; - float t1[4], t2[4], t3[4]; - float tf[4]; - - vcopy(q1,t1); - vscale(t1,q2[3]); - - vcopy(q2,t2); - vscale(t2,q1[3]); - - vcross(q2,q1,t3); - vadd(t1,t2,tf); - vadd(t3,tf,tf); - tf[3] = q1[3] * q2[3] - vdot(q1,q2); - - dest[0] = tf[0]; - dest[1] = tf[1]; - dest[2] = tf[2]; - dest[3] = tf[3]; - - if (++count > RENORMCOUNT) { - count = 0; - normalize_quat(dest); - } -} - -/* - * Quaternions always obey: a^2 + b^2 + c^2 + d^2 = 1.0 - * If they don't add up to 1.0, dividing by their magnitued will - * renormalize them. - * - * Note: See the following for more information on quaternions: - * - * - Shoemake, K., Animating rotation with quaternion curves, Computer - * Graphics 19, No 3 (Proc. SIGGRAPH'85), 245-254, 1985. - * - Pletinckx, D., Quaternion calculus as a basic tool in computer - * graphics, The Visual Computer 5, 2-13, 1989. - */ -static void -normalize_quat(float q[4]) -{ - int i; - float mag; - - mag = (q[0]*q[0] + q[1]*q[1] + q[2]*q[2] + q[3]*q[3]); - for (i = 0; i < 4; i++) q[i] /= mag; -} - -/* - * Build a rotation matrix, given a quaternion rotation. - * - */ -void -build_rotmatrix(float m[4][4], float q[4]) -{ - m[0][0] = 1.0 - 2.0 * (q[1] * q[1] + q[2] * q[2]); - m[0][1] = 2.0 * (q[0] * q[1] - q[2] * q[3]); - m[0][2] = 2.0 * (q[2] * q[0] + q[1] * q[3]); - m[0][3] = 0.0; - - m[1][0] = 2.0 * (q[0] * q[1] + q[2] * q[3]); - m[1][1]= 1.0 - 2.0 * (q[2] * q[2] + q[0] * q[0]); - m[1][2] = 2.0 * (q[1] * q[2] - q[0] * q[3]); - m[1][3] = 0.0; - - m[2][0] = 2.0 * (q[2] * q[0] - q[1] * q[3]); - m[2][1] = 2.0 * (q[1] * q[2] + q[0] * q[3]); - m[2][2] = 1.0 - 2.0 * (q[1] * q[1] + q[0] * q[0]); - m[2][3] = 0.0; - - m[3][0] = 0.0; - m[3][1] = 0.0; - m[3][2] = 0.0; - m[3][3] = 1.0; -} - diff --git a/Common/trackball.h b/Common/trackball.h deleted file mode 100644 index b676fb4e54ba7cd70f22a02087a88ac31db343f0..0000000000000000000000000000000000000000 --- a/Common/trackball.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * (c) Copyright 1993, 1994, Silicon Graphics, Inc. - * ALL RIGHTS RESERVED - * Permission to use, copy, modify, and distribute this software for - * any purpose and without fee is hereby granted, provided that the above - * copyright notice appear in all copies and that both the copyright notice - * and this permission notice appear in supporting documentation, and that - * the name of Silicon Graphics, Inc. not be used in advertising - * or publicity pertaining to distribution of the software without specific, - * written prior permission. - * - * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" - * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR - * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON - * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, - * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY - * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, - * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF - * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN - * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE - * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. - * - * US Government Users Restricted Rights - * Use, duplication, or disclosure by the Government is subject to - * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph - * (c)(1)(ii) of the Rights in Technical Data and Computer Software - * clause at DFARS 252.227-7013 and/or in similar or successor - * clauses in the FAR or the DOD or NASA FAR Supplement. - * Unpublished-- rights reserved under the copyright laws of the - * United States. Contractor/manufacturer is Silicon Graphics, - * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. - * - * OpenGL(TM) is a trademark of Silicon Graphics, Inc. - */ -/* - * trackball.h - * A virtual trackball implementation - * Written by Gavin Bell for Silicon Graphics, November 1988. - */ - -/* - * Pass the x and y coordinates of the last and current positions of - * the mouse, scaled so they are from (-1.0 ... 1.0). - * - * The resulting rotation is returned as a quaternion rotation in the - * first paramater. - */ -void -trackball(float q[4], float p1x, float p1y, float p2x, float p2y); - -/* - * Given two quaternions, add them together to get a third quaternion. - * Adding quaternions to get a compound rotation is analagous to adding - * translations to get a compound translation. When incrementally - * adding rotations, the first argument here should be the new - * rotation, the second and third the total rotation (which will be - * over-written with the resulting new total rotation). - */ -void -add_quats(float *q1, float *q2, float *dest); - -/* - * A useful function, builds a rotation matrix in Matrix based on - * given quaternion. - */ -void -build_rotmatrix(float m[4][4], float q[4]); - -/* - * This function computes a quaternion based on an axis (defined by - * the given vector) and an angle about which to rotate. The angle is - * expressed in radians. The result is put into the third argument. - */ -void -axis_to_quat(float a[3], float phi, float q[4]); - diff --git a/DataStr/List.cpp b/DataStr/List.cpp deleted file mode 100644 index 53487fd51effbcd0ea205e33aeb36783adb6d04d..0000000000000000000000000000000000000000 --- a/DataStr/List.cpp +++ /dev/null @@ -1,425 +0,0 @@ -// $Id: List.cpp,v 1.16 2001-05-22 07:11:14 geuzaine Exp $ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <sys/types.h> - -#include "Malloc.h" -#include "List.h" -#include "Message.h" - -static char *startptr; - - -List_T *List_Create(int n, int incr, int size) -{ - List_T *liste; - - if (n <= 0) n = 1 ; - if (incr <= 0) incr = 1; - - liste = (List_T *)Malloc(sizeof(List_T)); - - liste->nmax = 0; - liste->incr = incr; - liste->size = size; - liste->n = 0; - liste->isorder = 0; - liste->array = NULL; - - List_Realloc(liste,n); - return(liste); -} - -void List_Delete(List_T *liste) -{ - if(!liste) return ; - Free(liste->array); - Free(liste); -} - -void List_Realloc(List_T *liste,int n) -{ - if (n <= 0) return; - - if (liste->array == NULL) { - liste->nmax = ((n - 1) / liste->incr + 1) * liste->incr; - liste->array = (char *)Malloc(liste->nmax * liste->size); - } - else - if (n > liste->nmax) { - liste->nmax = ((n - 1) / liste->incr + 1) * liste->incr; - liste->array = (char *)Realloc(liste->array, - liste->nmax * liste->size); - } -} - -void List_Add(List_T *liste, void *data) -{ - liste->n++; - - List_Realloc(liste,liste->n); - liste->isorder = 0; - memcpy(&liste->array[(liste->n - 1) * liste->size],data,liste->size); -} - -int List_Nbr(List_T *liste) -{ - return (liste)? liste->n : 0 ; -} - -void List_Insert(List_T *liste, void *data, - int (*fcmp)(const void *a, const void *b)) -{ - if (List_Search(liste,data,fcmp) == 0) - List_Add(liste,data); -} - -int List_Replace(List_T *liste, void *data, - int (*fcmp)(const void *a, const void *b)) -{ - void *ptr; - - if (liste->isorder != 1) List_Sort(liste,fcmp); - liste->isorder = 1; - ptr = (void *) bsearch(data,liste->array,liste->n,liste->size,fcmp); - if (ptr == NULL) { - List_Add(liste,data); - return(0); - } - else { - memcpy(ptr,data,liste->size); - return (1); - } -} - -void List_Read(List_T *liste, int index, void *data) -{ - if ((index < 0) || (index >= liste->n)) - Msg(FATAL, "Wrong list index (read)"); - memcpy(data,&liste->array[index * liste->size],liste->size); -} - -void List_Write(List_T *liste, int index, void *data) -{ - if ((index < 0) || (index >= liste->n)) - Msg(GERROR, "Wrong list index (write)"); - else{ - liste->isorder = 0; - memcpy(&liste->array[index * liste->size],data,liste->size); - } -} - -void List_Put(List_T *liste, int index, void *data) -{ - if (index < 0) - Msg(GERROR, "Wrong list index (put)"); - else{ - if (index >= liste->n) { - liste->n = index + 1; - List_Realloc(liste,liste->n); - List_Write(liste,index,data); - } - else { - List_Write(liste,index,data); - } - } -} - -void List_Pop(List_T *liste) -{ - liste->n -- ; -} - -void *List_Pointer(List_T *liste, int index) -{ - if ((index < 0) || (index >= liste->n)) - Msg(FATAL, "Wrong list index (pointer)"); - - liste->isorder = 0; - return(&liste->array[index * liste->size]); -} - -void *List_Pointer_NoChange(List_T *liste, int index) -{ - if ((index < 0) || (index >= liste->n)) - Msg(FATAL, "Wrong list index (pointer)"); - - return(&liste->array[index * liste->size]); -} - -void *List_Pointer_Fast(List_T *liste, int index) -{ - return(&liste->array[index * liste->size]); -} - -void *List_Pointer_Test(List_T *liste, int index) -{ - if (!liste || (index < 0) || (index >= liste->n)) - return NULL; - - liste->isorder = 0; - return(&liste->array[index * liste->size]); -} - -void List_Sort(List_T *liste, int (*fcmp)(const void *a, const void *b)) -{ - qsort(liste->array,liste->n,liste->size,fcmp); -} - -int List_Search(List_T *liste, void *data, - int (*fcmp)(const void *a, const void *b)) -{ - void *ptr; - - if (liste->isorder != 1) { List_Sort(liste,fcmp) ; liste->isorder = 1 ; } - ptr = (void *) bsearch(data,liste->array,liste->n,liste->size,fcmp); - if (ptr == NULL) return(0); - return (1); -} - -int List_ISearch(List_T *liste, void *data, - int (*fcmp)(const void *a, const void *b)) -{ - void *ptr; - - if (liste->isorder != 1) List_Sort(liste,fcmp); - liste->isorder = 1; - ptr = (void *) bsearch(data,liste->array,liste->n,liste->size,fcmp); - if (ptr == NULL) return(-1); - return (((long)ptr - (long)liste->array) / liste->size); -} - -int List_ISearchSeq(List_T *liste, void * data, - int (*fcmp)(const void *a, const void *b)) { - int i ; - - if (!liste) return -1 ; - i = 0 ; - while ((i < List_Nbr(liste)) && - fcmp(data, (void *)List_Pointer(liste, i)) ) i++ ; - if (i == List_Nbr(liste)) i = -1 ; - return i ; -} - -int List_ISearchSeqPartial(List_T *liste, void * data, int i_Start, - int (*fcmp)(const void *a, const void *b)) { - int i ; - - if (!liste) return -1 ; - i = i_Start ; - while ((i < List_Nbr(liste)) && - fcmp(data, (void *)List_Pointer(liste, i)) ) i++ ; - if (i == List_Nbr(liste)) i = -1 ; - return i ; -} - -int List_Query(List_T *liste, void *data, - int (*fcmp)(const void *a, const void *b)) -{ - void *ptr; - - if (liste->isorder != 1) List_Sort(liste,fcmp); - liste->isorder = 1; - ptr = (void *) bsearch(data,liste->array,liste->n,liste->size,fcmp); - if (ptr == NULL) return(0); - - memcpy(data,ptr,liste->size); - return (1); -} - -void *lolofind(void *data, void *array, int n, int size, - int (*fcmp)(const void *a, const void *b) ) -{ - char *ptr; - int i; - - ptr = (char*)array; - for (i = 0; i < n; i++) { - if (fcmp(ptr,data) == 0) break; - ptr += size; - } - if (i < n) return(ptr); - return(NULL); -} - -int List_LQuery(List_T *liste, void *data, - int (*fcmp)(const void *a, const void *b), int first) -{ - char *ptr; - - if (first == 1) { - ptr = (char *) lolofind(data,liste->array,liste->n,liste->size,fcmp); - } - else { - if (startptr != NULL) - ptr = (char *) lolofind(data,startptr,liste->n,liste->size,fcmp); - else - return(0); - } - - if (ptr == NULL) return(0); - - startptr = ptr + liste->size; - if ( startptr >= ( liste->array + liste->n * liste->size)) - startptr = NULL; - memcpy(data,ptr,liste->size); - return (1); -} - -void *List_PQuery(List_T *liste, void *data, - int (*fcmp)(const void *a, const void *b)) -{ - void *ptr; - - if (liste->isorder != 1) List_Sort(liste,fcmp); - liste->isorder = 1; - ptr = (void *) bsearch(data,liste->array,liste->n,liste->size,fcmp); - return(ptr); -} - -int List_Suppress(List_T *liste, void *data, - int (*fcmp)(const void *a, const void *b)) -{ - char *ptr; - int len; - - ptr = (char*)List_PQuery(liste,data,fcmp) ; - if (ptr == NULL) return(0); - - liste->n--; - len = liste->n - (((long)ptr - (long)liste->array) / liste->size); - if (len > 0) memmove(ptr, ptr + liste->size, len * liste->size); - return(1); -} - -int List_PSuppress(List_T *liste, int index) -{ - char *ptr; - int len; - - ptr = (char*)List_Pointer_NoChange(liste,index) ; - if (ptr == NULL) return(0); - - liste->n--; - len = liste->n - (((long)ptr - (long)liste->array) / liste->size); - if (len > 0) memmove(ptr, ptr + liste->size, len * liste->size); - return(1); -} - -void List_Invert(List_T *a , List_T *b) -{ - int i,N; - N = List_Nbr(a); - for(i=0;i<N;i++){ - List_Add(b,List_Pointer(a,N-i-1)); - } -} - -void List_Reset(List_T *liste) -{ - if(!liste) return; - liste->n = 0; -} - -void List_Action(List_T *liste, void (*action)(void *data, void *dummy)) -{ - int i,dummy; - - for(i=0 ; i<List_Nbr(liste) ; i++){ - (*action)(List_Pointer_NoChange(liste,i),&dummy); - } - -} - -void List_Action_Inverse(List_T *liste, void (*action)(void *data, void *dummy)) -{ - int i,dummy; - - for(i=List_Nbr(liste) ; i>0 ; i--){ - (*action)(List_Pointer_NoChange(liste,i-1),&dummy); - } - -} - -void List_Copy(List_T *a , List_T *b){ - int i,N; - N = List_Nbr(a); - for(i=0;i<N;i++){ - List_Add(b,List_Pointer(a,i)); - } -} - -void swap_bytes(char *array, int size, int n){ - int i, c; - char *x, *a; - - x = (char*)Malloc(size); - - for (i = 0; i < n; i++) { - a = &array[i*size]; - memcpy(x, a, size); - for (c = 0; c < size; c++) - a[size-1-c] = x[c]; - } - - Free(x); -} - -List_T *List_CreateFromFile(int n, int size, FILE *file, int format, int swap){ - int i; - List_T *liste; - - if(!n) return NULL; - - liste = List_Create(n, 1, size); - liste->n = n; - switch(format){ - case LIST_FORMAT_ASCII : - if(size == sizeof(double)) - for(i=0;i<n;i++) fscanf(file, "%lf", (double*)&liste->array[i*size]) ; - else if(size == sizeof(float)) - for(i=0;i<n;i++) fscanf(file, "%f", (float*)&liste->array[i*size]) ; - else if(size == sizeof(int)) - for(i=0;i<n;i++) fscanf(file, "%d", (int*)&liste->array[i*size]) ; - else{ - Msg(GERROR, "Bad type of data to create list from (size = %d)", size); - return NULL; - } - return liste; - case LIST_FORMAT_BINARY : - fread(liste->array, size, n, file); - if(swap) swap_bytes(liste->array, size, n); - return liste; - default : - Msg(GERROR, "Unknown list format"); - return NULL; - } - -} - -void List_WriteToFile(List_T *liste, FILE *file, int format){ - int i, n; - - if(!(n=List_Nbr(liste))) return ; - - switch(format){ - case LIST_FORMAT_ASCII : - if(liste->size == sizeof(double)) - for(i=0;i<n;i++) fprintf(file, "%g ", *((double*)&liste->array[i*liste->size])) ; - else if(liste->size == sizeof(float)) - for(i=0;i<n;i++) fprintf(file, "%g ", *((float*)&liste->array[i*liste->size])) ; - else if(liste->size == sizeof(int)) - for(i=0;i<n;i++) fprintf(file, "%d ", *((int*)&liste->array[i*liste->size])) ; - else - Msg(GERROR, "Bad type of data to write list to file (size = %d)", liste->size); - fprintf(file, "\n"); - break; - case LIST_FORMAT_BINARY : - fwrite(liste->array, liste->size, n, file); - break; - default : - Msg(GERROR, "Unknown list format"); - } -} diff --git a/DataStr/List.h b/DataStr/List.h deleted file mode 100644 index 50e58b3bbfeaf465cbed8d0cc853cf4cf0d8ee05..0000000000000000000000000000000000000000 --- a/DataStr/List.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef _LIST_H_ -#define _LIST_H_ - -#include <stdio.h> - -#define LIST_FORMAT_ASCII 0 -#define LIST_FORMAT_BINARY 1 - -typedef struct { - int nmax; - int size; - int incr; - int n; - int isorder; - char *array; -} List_T; - -List_T *List_Create(int n, int incr, int size); -void List_Delete(List_T *liste); -void List_Realloc(List_T *liste,int n); -void List_Add(List_T *liste, void *data); -int List_Nbr(List_T *liste); -void List_Insert(List_T *liste, void *data, int (*fcmp)(const void *a, const void *b)); -int List_Replace(List_T *liste, void *data, int (*fcmp)(const void *a, const void *b)); -void List_Read(List_T *liste, int index, void *data); -void List_Write(List_T *liste, int index, void *data); -void List_Put(List_T *liste, int index, void *data); -void List_Pop(List_T *liste); -void *List_Pointer(List_T *liste, int index); -void *List_Pointer_NoChange(List_T *liste, int index); -void *List_Pointer_Fast(List_T *liste, int index); -void *List_Pointer_Test(List_T *liste, int index); -void List_Sort(List_T *liste, int (*fcmp)(const void *a, const void *b)); -int List_Search(List_T *liste, void *data, int (*fcmp)(const void *a, const void *b)); -int List_ISearch(List_T *liste, void *data, int (*fcmp)(const void *a, const void *b)); -int List_ISearchSeq(List_T *liste, void * data, int (*fcmp)(const void *a, const void *b)); -int List_ISearchSeqPartial(List_T *liste, void * data, int i_Start, - int (*fcmp)(const void *a, const void *b)) ; -int List_Query(List_T *liste, void *data, int (*fcmp)(const void *a, const void *b)); -int List_LQuery(List_T *liste, void *data, int (*fcmp)(const void *a, const void *b), int first); -void *List_PQuery(List_T *liste, void *data, int (*fcmp)(const void *a, const void *b)); -int List_Suppress(List_T *liste, void *data, int (*fcmp)(const void *a, const void *b)); -int List_PSuppress(List_T *liste, int index); -void List_Invert(List_T *a, List_T *b); -void List_Reset(List_T *liste); -void List_Action(List_T *liste, void (*action)(void *data, void *dummy)); -void List_Action_Inverse(List_T *liste, void (*action)(void *data, void *dummy)); -void List_Copy(List_T *a , List_T *b); -List_T *List_CreateFromFile(int n, int size, FILE *file, int format, int swap); -void List_WriteToFile(List_T *liste, FILE *file, int format); - -#endif - diff --git a/DataStr/Makefile b/DataStr/Makefile deleted file mode 100644 index 4906bf4cc8f21347ed9e841ffaca79df3ec87a78..0000000000000000000000000000000000000000 --- a/DataStr/Makefile +++ /dev/null @@ -1,59 +0,0 @@ -# $Id: Makefile,v 1.11 2001-08-11 23:32:18 geuzaine Exp $ -# -# Makefile for "libDataStr.a" -# - -.IGNORE: - -CC = c++ -AR = ar ruvs -RM = rm -RANLIB = ranlib -LIB = ../lib/libDataStr.a -INCLUDE = -I../Common - -C_FLAGS = -g -Wall -OS_FLAGS = -VERSION_FLAGS = - -RMFLAGS = -f -CFLAGS = $(C_FLAGS) $(OS_FLAGS) $(VERSION_FLAGS) $(INCLUDE) - -SRC = List.cpp \ - Malloc.cpp \ - Tree.cpp \ - avl.cpp \ - Tools.cpp - -OBJ = $(SRC:.cpp=.o) - -.SUFFIXES: .o .cpp - -$(LIB): $(OBJ) - $(AR) $(LIB) $(OBJ) - $(RANLIB) $(LIB) - -.cpp.o: - $(CC) $(CFLAGS) -c $< - -clean: - $(RM) $(RMFLAGS) *.o - -lint: - lint $(CFLAGS) $(SRC) - -depend: - (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ - $(CC) -MM $(CFLAGS) ${SRC} \ - ) >Makefile.new - cp Makefile Makefile.bak - cp Makefile.new Makefile - $(RM) Makefile.new - - -# DO NOT DELETE THIS LINE -List.o: List.cpp Malloc.h List.h ../Common/Message.h -Malloc.o: Malloc.cpp Malloc.h ../Common/Message.h -Tree.o: Tree.cpp Malloc.h Tree.h avl.h ../Common/Message.h -avl.o: avl.cpp avl.h Malloc.h -Tools.o: Tools.cpp Tools.h List.h Tree.h avl.h diff --git a/DataStr/Malloc.cpp b/DataStr/Malloc.cpp deleted file mode 100644 index fb02765f15ea032221496f02efc7c74488b749d7..0000000000000000000000000000000000000000 --- a/DataStr/Malloc.cpp +++ /dev/null @@ -1,44 +0,0 @@ -// $Id: Malloc.cpp,v 1.8 2001-06-07 15:13:08 geuzaine Exp $ -#include <stdio.h> -#include <stdlib.h> -#include <malloc.h> - -#include "Malloc.h" -#include "Message.h" - -void *Malloc(size_t size) -{ - void *ptr; - - if (!size) return(NULL); - ptr = malloc(size); - if (ptr == NULL) - Msg(FATAL, "Out of memory (buy some more RAM!)"); - return(ptr); -} - -void *Calloc(size_t num, size_t size) -{ - void *ptr; - - if (!size) return(NULL); - ptr = calloc(num, size); - if (ptr == NULL) - Msg(FATAL, "Out of memory (buy some more RAM!)"); - return(ptr); -} - -void *Realloc(void *ptr, size_t size) -{ - if (!size) return(NULL); - ptr = realloc(ptr,size); - if (ptr == NULL) - Msg(FATAL, "Out of memory (buy some more RAM!)"); - return(ptr); -} - -void Free(void *ptr) -{ - if (ptr == NULL) return; - free(ptr); -} diff --git a/DataStr/Malloc.h b/DataStr/Malloc.h deleted file mode 100644 index aeabacae095d830c7d46d9507cdb45f9a6404339..0000000000000000000000000000000000000000 --- a/DataStr/Malloc.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef _MALLOC_H_ -#define _MALLOC_H_ - -void *Malloc(size_t size); -void *Calloc(size_t num, size_t size); -void *Realloc(void *ptr, size_t size); -void Free(void *ptr); - -#endif diff --git a/DataStr/Tools.cpp b/DataStr/Tools.cpp deleted file mode 100644 index f8a24c72a456a08518327bf1ba35ab883cbba0f2..0000000000000000000000000000000000000000 --- a/DataStr/Tools.cpp +++ /dev/null @@ -1,99 +0,0 @@ -// $Id: Tools.cpp,v 1.4 2001-01-08 08:05:41 geuzaine Exp $ - -#include <stdlib.h> -#include <math.h> -#include "Tools.h" - -// Comparison functions - -int fcmp_int(const void *a, const void *b){ - return(*(int*)a - *(int*)b ); -} - -int fcmp_absint(const void *a, const void *b){ - return( abs(*(int*)a) - abs(*(int*)b) ); -} - -int fcmp_double(const void *a, const void *b){ - double cmp ; - - cmp = *(double*)a - *(double*)b ; - if (cmp > 1.e-16) return 1 ; - else if (cmp < -1.e-16) return -1 ; - else return 0 ; -} - -// Tree ==> List transfer - -List_T *pListeTransfert; - -void TransfereListe(void *a,void *b){ - List_Add(pListeTransfert,a); -} -List_T *Tree2List(Tree_T *pTree){ - int Nb; - Nb = Tree_Nbr(pTree) ; if (Nb == 0) Nb = 1 ; - pListeTransfert = List_Create(Nb,Nb,Tree_Size(pTree)); - Tree_Action(pTree,TransfereListe); - return(pListeTransfert); -} - -// Algebraic utilities - -Tree_T *pTreeTransfert; -Tree_T *pTreeTransfert2; - -void DupliqueArbre(void *a,void *b){ - Tree_Add(pTreeTransfert,a); -} -Tree_T *Tree_Duplique(Tree_T *pTree){ - pTreeTransfert = Tree_Create(pTree->size,pTree->root->compar); - Tree_Action(pTree,DupliqueArbre); - return(pTreeTransfert); -} - -void UnitArbre(void *a,void *b){ - Tree_Replace(pTreeTransfert,a); -} -Tree_T *Tree_Union(Tree_T *pTreeA, Tree_T *pTreeB){ - pTreeTransfert = Tree_Duplique(pTreeA); - Tree_Action(pTreeB,UnitArbre); - return(pTreeTransfert); -} -void Tree_Unit(Tree_T *pTreeA, Tree_T *pTreeB){ - pTreeTransfert = pTreeA; - Tree_Action(pTreeB,UnitArbre); -} - - -void SoustraitArbre(void *a,void *b){ - Tree_Suppress(pTreeTransfert,a); -} -Tree_T *Tree_Soustraction(Tree_T *pTreeA, Tree_T *pTreeB){ - pTreeTransfert = Tree_Duplique(pTreeA); - Tree_Action(pTreeB,SoustraitArbre); - return(pTreeTransfert); -} -void Tree_Soustrait(Tree_T *pTreeA, Tree_T *pTreeB){ - pTreeTransfert = pTreeA; - Tree_Action(pTreeB,SoustraitArbre); -} - - -void IntersecteArbre(void *a,void *b){ - if (Tree_Query(pTreeTransfert,a)) Tree_Add(pTreeTransfert2,a); -} -Tree_T *Tree_Intersection(Tree_T *pTreeA, Tree_T *pTreeB){ - pTreeTransfert = Tree_Duplique(pTreeA); - pTreeTransfert2= Tree_Create(pTreeA->size,pTreeA->root->compar); - Tree_Action(pTreeB,IntersecteArbre); - Tree_Delete(pTreeTransfert); - return(pTreeTransfert2); -} -void Tree_Intersecte(Tree_T *pTreeA, Tree_T *pTreeB){ - pTreeTransfert2 = pTreeA; - pTreeTransfert = Tree_Create(pTreeA->size,pTreeA->root->compar); - Tree_Action(pTreeB,IntersecteArbre); - pTreeA = pTreeTransfert2; - Tree_Delete(pTreeA); -} diff --git a/DataStr/Tools.h b/DataStr/Tools.h deleted file mode 100644 index cb5f57b839e68bb8a6a90b810b7bff1557de527e..0000000000000000000000000000000000000000 --- a/DataStr/Tools.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef _TOOLS_H_ -#define _TOOLS_H_ - -#include "List.h" -#include "Tree.h" - -int fcmp_int(const void *a, const void *b); -int fcmp_absint(const void *a, const void *b); -int fcmp_double(const void *a, const void *b); - -List_T *Tree2List(Tree_T *pTree) ; - -Tree_T *Tree_Duplique(Tree_T *pTree) ; -Tree_T *Tree_Union (Tree_T *pTreeA, Tree_T *pTreeB) ; -Tree_T *Tree_Soustraction(Tree_T *pTreeA, Tree_T *pTreeB) ; -Tree_T *Tree_Intersection(Tree_T *pTreeA, Tree_T *pTreeB) ; - -void Tree_Unit (Tree_T *pTreeA, Tree_T *pTreeB) ; -void Tree_Soustrait (Tree_T *pTreeA, Tree_T *pTreeB) ; -void Tree_Intersecte(Tree_T *pTreeA, Tree_T *pTreeB) ; - -#endif diff --git a/DataStr/Tree.cpp b/DataStr/Tree.cpp deleted file mode 100644 index 091c60207763f8422efb4ac89bfdd03f8eb74df3..0000000000000000000000000000000000000000 --- a/DataStr/Tree.cpp +++ /dev/null @@ -1,181 +0,0 @@ -// $Id: Tree.cpp,v 1.7 2001-04-08 20:36:49 geuzaine Exp $ - -#include <stdlib.h> -#include <string.h> - -#include "Malloc.h" -#include "Tree.h" -#include "Message.h" - -Tree_T *Tree_Create(int size, int (*fcmp)(const void *a, const void *b)) -{ - Tree_T *tree; - - tree = (Tree_T *) Malloc(sizeof(Tree_T)); - - tree->size = size; - tree->root = avl_init_table(fcmp); - - return(tree); -} - -void Tree_Delete(Tree_T *tree) -{ - if(!tree) return; - avl_free_table(tree->root, Free, 0); - Free(tree); -} - -void Tree_Add(Tree_T *tree, void *data) -{ - void *ptr; - - if(!tree) - Msg(GERROR, "Impossible to add in unallocated tree"); - else{ - ptr = Malloc(tree->size); - memcpy(ptr,data,tree->size); - avl_insert(tree->root, ptr, ptr); - } -} - -void * Tree_AddP(Tree_T *tree, void *data) -{ - void *ptr; - - if(!tree) - Msg(FATAL, "Impossible to add in unallocated tree"); - ptr = Malloc(tree->size); - memcpy(ptr,data,tree->size); - avl_insert(tree->root, ptr, ptr); - return ptr ; -} - -int Tree_Nbr(Tree_T *tree) -{ - if(!tree) return 0; - return(avl_count(tree->root)); -} - -void Tree_Insert(Tree_T *tree, void *data) -{ - if (Tree_Search(tree,data) == 0) - Tree_Add(tree,data); -} - -int Tree_Replace(Tree_T *tree, void *data) -{ - void *ptr; - int state; - - if(!tree) { - Msg(GERROR, "Impossible to replace in unallocated tree"); - return(0); - } - state = avl_lookup(tree->root, data, &ptr); - if (state == 0) { - Tree_Add(tree,data); - return(0); - } - else { - memcpy(ptr,data,tree->size); - return (1); - } -} - -int Tree_Search(Tree_T *tree, void *data) -{ - void *ptr; - - if(!tree) return 0; - return (avl_lookup(tree->root, data, &ptr)); -} - -int Tree_Query(Tree_T *tree, void *data) -{ - void *ptr; - int state; - - if(!tree) return 0; - - state = avl_lookup(tree->root, data, &ptr); - - if (state == 0) return(0); - - memcpy(data,ptr,tree->size); - - return (1); -} - -void *Tree_PQuery(Tree_T *tree, void *data) -{ - void *ptr; - int state; - - if(!tree) return 0; - - state = avl_lookup(tree->root, data, &ptr); - - if (state == 0) return(NULL); - return (ptr); -} - -int Tree_Suppress(Tree_T *tree, void *data) -{ - void *ptr; - int state; - - if(!tree) return 0; - - ptr = data; - state = avl_delete(tree->root, &ptr, &ptr) ; - if (state == 0) return(0); - - Free(ptr); - return(1); -} - -int Tree_Left(Tree_T *tree, void *data) -{ - void *ptr; - int state; - - if(!tree) return 0; - - state = avl_extremum(tree->root, AVL_MOST_LEFT, &ptr); - - if (state == 0) return (0); - - memcpy(data,ptr,tree->size); - - return (1); -} - -int Tree_Right(Tree_T *tree, void *data) -{ - void *ptr; - int state; - - if(!tree) return 0; - - state = avl_extremum(tree->root, AVL_MOST_RIGHT, &ptr); - - if (state == 0) return (0); - - memcpy(data,ptr,tree->size); - - return (1); -} - -void Tree_Action(Tree_T *tree, void (*action) (void *data, void *dummy)) -{ - if(!tree) return; - - avl_foreach(tree->root, action, AVL_FORWARD); -} - -int Tree_Size(Tree_T *tree) { - if(!tree) return 0; - - return(tree->size); -} diff --git a/DataStr/Tree.h b/DataStr/Tree.h deleted file mode 100644 index 85be99ed569c2945c825e957ff8c636e41baf316..0000000000000000000000000000000000000000 --- a/DataStr/Tree.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef _TREE_H_ -#define _TREE_H_ - -#include "avl.h" - -typedef struct { - int size; - avl_tree *root; -} Tree_T; - -Tree_T *Tree_Create(int size, int (*fcmp)(const void *a, const void *b)); -void Tree_Delete(Tree_T *Tree); -void Tree_Add(Tree_T *tree, void *data); -void *Tree_AddP(Tree_T *tree, void *data); -int Tree_Nbr(Tree_T *Tree); -void Tree_Insert(Tree_T *Tree, void *data); -int Tree_Replace(Tree_T *Tree, void *data); -int Tree_Search(Tree_T *Tree, void *data); -int Tree_Query(Tree_T *Tree, void *data); -void *Tree_PQuery(Tree_T *Tree, void *data); -int Tree_Suppress(Tree_T *Tree, void *data); -int Tree_Left(Tree_T *tree, void *data); -int Tree_Right(Tree_T *tree, void *data); -void Tree_Action(Tree_T *tree, void (*action) (void *data, void *dummy)); -int Tree_Size(Tree_T *tree) ; - -#endif - diff --git a/DataStr/avl.cpp b/DataStr/avl.cpp deleted file mode 100644 index c10d4b2ce9c07c1854749b64ec06e76b350e7f46..0000000000000000000000000000000000000000 --- a/DataStr/avl.cpp +++ /dev/null @@ -1,443 +0,0 @@ -// $Id: avl.cpp,v 1.5 2001-01-08 08:05:41 geuzaine Exp $ - -/* - * This is a modified version for Gmsh (for c++, 64-bit architectures, etc.) - */ - -/* - * avl package - * - * Copyright (c) 1988-1993, The Regents of the University of California. - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the University of California not - * be used in advertising or publicity pertaining to distribution of - * the software without specific, written prior permission. The University - * of California makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * THE UNIVERSITY OF CALIFORNIA DISCLAIMS ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE FOR - * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER - * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF - * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <stdio.h> - -#include "avl.h" -#include "Malloc.h" - -#define ALLOC(type, number) (type *) Malloc((unsigned) sizeof(type) * number) -#define NIL(type) (type *) 0 -#define FREE(item) (void) Free(item) -#define XRNMAX(a,b) ((a) > (b) ? (a) : (b)) -#define HEIGHT(node) (node == NIL(avl_node) ? -1 : (node)->height) -#define BALANCE(node) (HEIGHT((node)->right) - HEIGHT((node)->left)) - -#define compute_height(node) { \ - int x=HEIGHT(node->left), y=HEIGHT(node->right); \ - (node)->height = XRNMAX(x,y) + 1; \ -} - -#define COMPARE(key, nodekey, compare) \ - ((compare == avl_numcmp) ? \ - (long int) key - (long int) nodekey : \ - (*compare)(key, nodekey)) - -static void avl_record_gen_forward(avl_node *node, avl_generator *gen); -static void avl_record_gen_backward(avl_node *node, avl_generator *gen); -static avl_node *find_rightmost(avl_node **node_p); -static void do_rebalance(avl_node ***stack_nodep, int stack_n); -static void rotate_left(avl_node **node_p); -static void rotate_right(avl_node **node_p); -static void avl_walk_forward(avl_node *node, void (*func)(void *key, void *value)); -static void avl_walk_backward(avl_node *node, void (*func)(void *key, void *value)); -static void free_entry(avl_node *node, void (*key_free)(void *key), - void (*value_free)(void *value)); -static avl_node *new_node(void *key, void *value); -static int do_check_tree(avl_node *node, int (*compar)(const void *key1, const void *key2), - int *error); - - -avl_tree *avl_init_table(int (*compar)(const void *key1, const void *key2)) -{ - avl_tree *tree; - - tree = ALLOC(avl_tree, 1); - tree->root = NIL(avl_node); - tree->compar = compar; - tree->num_entries = 0; - return tree; -} - -int avl_lookup(avl_tree *tree, void *key, void **value_p) -{ - register avl_node *node; - register int (*compare)(const void*, const void *) = tree->compar, diff; - - node = tree->root; - while (node != NIL(avl_node)) { - diff = COMPARE(key, node->key, compare); - if (diff == 0) { - /* got a match, give the user a 'value' only if non-null */ - if (value_p != NIL(void *)) *value_p = node->value; - return 1; - } - node = (diff < 0) ? node->left : node->right; - } - return 0; -} - -int avl_insert(avl_tree *tree, void *key, void *value) -{ - register avl_node **node_p, *node; - register int stack_n = 0; - register int (*compare)(const void*, const void *) = tree->compar; - avl_node **stack_nodep[32]; - int diff, status; - - node_p = &tree->root; - - /* walk down the tree (saving the path); stop at insertion point */ - status = 0; - while ((node = *node_p) != NIL(avl_node)) { - stack_nodep[stack_n++] = node_p; - diff = COMPARE(key, node->key, compare); - if (diff == 0) status = 1; - node_p = (diff < 0) ? &node->left : &node->right; - } - - /* insert the item and re-balance the tree */ - *node_p = new_node(key, value); - do_rebalance(stack_nodep, stack_n); - tree->num_entries++; - tree->modified = 1; - return status; -} - -int avl_delete(avl_tree *tree, void **key_p, void **value_p) -{ - register avl_node **node_p, *node, *rightmost; - register int stack_n = 0; - void *key = *key_p; - int (*compare)(const void*, const void*) = tree->compar, diff; - avl_node **stack_nodep[32]; - - node_p = &tree->root; - - /* Walk down the tree saving the path; return if not found */ - while ((node = *node_p) != NIL(avl_node)) { - diff = COMPARE(key, node->key, compare); - if (diff == 0) goto delete_item; - stack_nodep[stack_n++] = node_p; - node_p = (diff < 0) ? &node->left : &node->right; - } - return 0; /* not found */ - - /* prepare to delete node and replace it with rightmost of left tree */ - delete_item: - *key_p = node->key; - if (value_p != 0) *value_p = node->value; - if (node->left == NIL(avl_node)) { - *node_p = node->right; - } else { - rightmost = find_rightmost(&node->left); - rightmost->left = node->left; - rightmost->right = node->right; - rightmost->height = -2; /* mark bogus height for do_rebal */ - *node_p = rightmost; - stack_nodep[stack_n++] = node_p; - } - FREE(node); - - /* work our way back up, re-balancing the tree */ - do_rebalance(stack_nodep, stack_n); - tree->num_entries--; - tree->modified = 1; - return 1; -} - -static void avl_record_gen_forward(avl_node *node, avl_generator *gen) -{ - if (node != NIL(avl_node)) { - avl_record_gen_forward(node->left, gen); - gen->nodelist[gen->count++] = node; - avl_record_gen_forward(node->right, gen); - } -} - -static void avl_record_gen_backward(avl_node *node, avl_generator *gen) -{ - if (node != NIL(avl_node)) { - avl_record_gen_backward(node->right, gen); - gen->nodelist[gen->count++] = node; - avl_record_gen_backward(node->left, gen); - } -} - -avl_generator *avl_init_gen(avl_tree *tree, int dir) -{ - avl_generator *gen; - - /* what a hack */ - gen = ALLOC(avl_generator, 1); - gen->tree = tree; - gen->nodelist = ALLOC(avl_node *, avl_count(tree)); - gen->count = 0; - if (dir == AVL_FORWARD) { - avl_record_gen_forward(tree->root, gen); - } else { - avl_record_gen_backward(tree->root, gen); - } - gen->count = 0; - - /* catch any attempt to modify the tree while we generate */ - tree->modified = 0; - return gen; -} - -int avl_gen(avl_generator *gen, void **key_p, void **value_p) -{ - avl_node *node; - - if (gen->count == gen->tree->num_entries) { - return 0; - } else { - node = gen->nodelist[gen->count++]; - if (key_p != NIL(void *)) *key_p = node->key; - if (value_p != NIL(void *)) *value_p = node->value; - return 1; - } -} - -void avl_free_gen(avl_generator *gen) -{ - FREE(gen->nodelist); - FREE(gen); -} - -static avl_node *find_rightmost(avl_node **node_p) -{ - register avl_node *node; - register int stack_n = 0; - avl_node **stack_nodep[32]; - - node = *node_p; - while (node->right != NIL(avl_node)) { - stack_nodep[stack_n++] = node_p; - node_p = &node->right; - node = *node_p; - } - *node_p = node->left; - - do_rebalance(stack_nodep, stack_n); - return node; -} - -static void do_rebalance(avl_node ***stack_nodep, int stack_n) -{ - register avl_node **node_p, *node; - register int hl, hr; - int height; - - /* work our way back up, re-balancing the tree */ - while (--stack_n >= 0) { - node_p = stack_nodep[stack_n]; - node = *node_p; - hl = HEIGHT(node->left); /* watch for NIL */ - hr = HEIGHT(node->right); /* watch for NIL */ - if ((hr - hl) < -1) { - rotate_right(node_p); - } else if ((hr - hl) > 1) { - rotate_left(node_p); - } else { - height = XRNMAX(hl, hr) + 1; - if (height == node->height) break; - node->height = height; - } - } -} - -static void rotate_left(avl_node **node_p) -{ - register avl_node *old_root = *node_p, *new_root, *new_right; - - if (BALANCE(old_root->right) >= 0) { - *node_p = new_root = old_root->right; - old_root->right = new_root->left; - new_root->left = old_root; - } else { - new_right = old_root->right; - *node_p = new_root = new_right->left; - old_root->right = new_root->left; - new_right->left = new_root->right; - new_root->right = new_right; - new_root->left = old_root; - compute_height(new_right); - } - compute_height(old_root); - compute_height(new_root); -} - -static void rotate_right(avl_node **node_p) -{ - register avl_node *old_root = *node_p, *new_root, *new_left; - - if (BALANCE(old_root->left) <= 0) { - *node_p = new_root = old_root->left; - old_root->left = new_root->right; - new_root->right = old_root; - } else { - new_left = old_root->left; - *node_p = new_root = new_left->right; - old_root->left = new_root->right; - new_left->right = new_root->left; - new_root->left = new_left; - new_root->right = old_root; - compute_height(new_left); - } - compute_height(old_root); - compute_height(new_root); -} - -static void avl_walk_forward(avl_node *node, void (*func)(void *key, void *value)) -{ - if (node != NIL(avl_node)) { - avl_walk_forward(node->left, func); - (*func)(node->key, node->value); - avl_walk_forward(node->right, func); - } -} - -static void avl_walk_backward(avl_node *node, void (*func)(void *key, void *value)) -{ - if (node != NIL(avl_node)) { - avl_walk_backward(node->right, func); - (*func)(node->key, node->value); - avl_walk_backward(node->left, func); - } -} - -void avl_foreach(avl_tree *tree, void (*func)(void *key, void *value), int direction) -{ - if (direction == AVL_FORWARD) { - avl_walk_forward(tree->root, func); - } else { - avl_walk_backward(tree->root, func); - } -} - -int avl_extremum(avl_tree *tree, int side, void **value_p) -{ - register avl_node *node; - - node = tree->root; - if (node == NIL(avl_node)) return 0; - - if (side == AVL_MOST_LEFT) - while (node->left != NIL(avl_node)) node = node->left; - else - while (node->right != NIL(avl_node)) node = node->right; - - if (value_p != NIL(void *)) { - *value_p = node->value; - return 1; - } - return 0; -} - -static void free_entry(avl_node *node, void (*key_free)(void *key), void (*value_free)(void *value)) -{ - if (node != NIL(avl_node)) { - free_entry(node->left, key_free, value_free); - free_entry(node->right, key_free, value_free); - if (key_free != 0) (*key_free)(node->key); - if (value_free != 0) (*value_free)(node->value); - FREE(node); - } -} - -void avl_free_table(avl_tree *tree, void (*key_free)(void *key), void (*value_free)(void *value)) -{ - free_entry(tree->root, key_free, value_free); - FREE(tree); -} - -int avl_count(avl_tree *tree) -{ - return tree->num_entries; -} - -static avl_node *new_node(void *key, void *value) -{ - register avl_node *newn; - - newn = ALLOC(avl_node, 1); - newn->key = key; - newn->value = value; - newn->height = 0; - newn->left = newn->right = NIL(avl_node); - return newn; -} -int avl_numcmp(const void *x, const void*y) -{ - return (long int) x - (long int) y; -} - -int avl_check_tree(avl_tree *tree) -{ - int error = 0; - (void) do_check_tree(tree->root, tree->compar, &error); - return error; -} - -static int do_check_tree(avl_node *node, - int (*compar)(const void *key1, const void *key2), int *error) -{ - int l_height, r_height, comp_height, bal; - - if (node == NIL(avl_node)) { - return -1; - } - - r_height = do_check_tree(node->right, compar, error); - l_height = do_check_tree(node->left, compar, error); - - comp_height = XRNMAX(l_height, r_height) + 1; - bal = r_height - l_height; - - if (comp_height != node->height) { - (void) printf("Bad height for %p: computed=%d stored=%d\n", - node, comp_height, node->height); - ++*error; - } - - if (bal > 1 || bal < -1) { - (void) printf("Out of balance at node %p, balance = %d\n", - node, bal); - ++*error; - } - - if (node->left != NIL(avl_node) && - (*compar)(node->left->key, node->key) > 0) { - (void) printf("Bad ordering between %p and %p", - node, node->left); - ++*error; - } - - if (node->right != NIL(avl_node) && - (*compar)(node->key, node->right->key) > 0) { - (void) printf("Bad ordering between %p and %p", - node, node->right); - ++*error; - } - - return comp_height; -} diff --git a/DataStr/avl.h b/DataStr/avl.h deleted file mode 100644 index 6ff601f6bb7fb4cea7d69d966df95b01315355d9..0000000000000000000000000000000000000000 --- a/DataStr/avl.h +++ /dev/null @@ -1,84 +0,0 @@ -#ifndef _AVL_H_ -#define _AVL_H_ - -/* - * avl package - * - * Copyright (c) 1988-1993, The Regents of the University of California. - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the University of California not - * be used in advertising or publicity pertaining to distribution of - * the software without specific, written prior permission. The University - * of California makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * THE UNIVERSITY OF CALIFORNIA DISCLAIMS ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS, IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE FOR - * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER - * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF - * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -typedef struct avl_node_struct avl_node; -struct avl_node_struct { - avl_node *left, *right; - void *key; - void *value; - int height; -}; - - -typedef struct avl_tree_struct avl_tree; -struct avl_tree_struct { - avl_node *root; - int (*compar)(const void *key1, const void *key2); - int num_entries; - int modified; -}; - - -typedef struct avl_generator_struct avl_generator; -struct avl_generator_struct { - avl_tree *tree; - avl_node **nodelist; - int count; -}; - - -#define AVL_FORWARD 0 -#define AVL_BACKWARD 1 - -#define AVL_MOST_LEFT 0 -#define AVL_MOST_RIGHT 1 - -#define avl_is_member(tree, key) avl_lookup(tree, key, (void **) 0) - -#define avl_foreach_item(table, gen, dir, key_p, value_p) \ - for(gen = avl_init_gen(table, dir); \ - avl_gen(gen, key_p, value_p) || (avl_free_gen(gen),0);) - - -avl_tree *avl_init_table(int (*compar)(const void *key1, const void *key2)); -int avl_lookup(avl_tree *tree, void *key, void **value_p); -int avl_insert(avl_tree *tree, void *key, void *value); -int avl_delete(avl_tree *tree, void **key_p, void **value_p); -void avl_foreach(avl_tree *tree, void (*func)(void *key, void *value), int direction); -void avl_free_table(avl_tree *tree, void (*key_free)(void *key), void (*value_free)(void *value)); -int avl_count(avl_tree *tree); -int avl_check_tree(avl_tree *tree); -int avl_extremum(avl_tree *tree, int side, void **value_p); - -avl_generator *avl_init_gen(avl_tree *tree, int dir); -int avl_gen(avl_generator *gen, void **key_p, void **value_p); -void avl_free_gen(avl_generator *gen); - -int avl_numcmp(const void *x, const void*y); - -#endif diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp deleted file mode 100644 index 6c7ea0e58403001d3959da01cc552649f1f57752..0000000000000000000000000000000000000000 --- a/Fltk/Callbacks.cpp +++ /dev/null @@ -1,1908 +0,0 @@ -// $Id: Callbacks.cpp,v 1.77 2001-08-12 14:23:36 geuzaine Exp $ - -#include <sys/types.h> -#include <signal.h> -#include <map> -#include "Gmsh.h" -#include "GmshUI.h" -#include "Geo.h" -#include "Verif.h" -#include "Mesh.h" -#include "Draw.h" -#include "Views.h" -#include "Timer.h" -#include "Visibility.h" -#include "CreateFile.h" -#include "OpenFile.h" -#include "GetOptions.h" -#include "Context.h" -#include "Options.h" -#include "GUI.h" -#include "Callbacks.h" -#include "Plugin.h" - -using namespace std; - -#include <FL/fl_file_chooser.H> -#include <errno.h> - -extern GUI *WID; -extern Mesh M; -extern Context_T CTX; - -// Compatibility/local routines - -int AddViewInUI(int i, char *Name, int Num){ - if(i > NB_BUTT_MAX -1) return 1; - if(WID && (WID->get_context() == 3)) - WID->set_context(menu_post,0); - return 0; -} - -int SetGlobalShortcut(int event){ - return WID->global_shortcuts(event); -} - -int SelectContour (int type, int num, List_T *Liste1){ - int k,ip,i; - List_T *Liste2; - - Liste2 = List_Create(1,1,sizeof(int)); - - if(!List_Nbr(Liste1)){ - switch(type){ - case ENT_LINE : k = alledgeslinked (num, Liste1, (List_T*)NULL); break; - case ENT_SURFACE : k = allfaceslinked (num, Liste1, (List_T*)NULL); break; - } - } - else{ - List_Reset(Liste2); - for(i=0;i<List_Nbr(Liste1);i++) - List_Add(Liste2,List_Pointer(Liste1,i)); - List_Reset(Liste1); - switch(type){ - case ENT_LINE : k = alledgeslinked (num, Liste1, Liste2); break; - case ENT_SURFACE : k = allfaceslinked (num, Liste1, Liste2); break; - } - } - - for(i=0;i<List_Nbr(Liste1);i++){ - List_Read(Liste1,i,&ip); - switch(type){ - case ENT_LINE : HighlightEntityNum(0,abs(ip),0,1); break ; - case ENT_SURFACE : HighlightEntityNum(0,0,abs(ip),1); break ; - } - } - - Draw();//added July 18 2001 to overcome missing refreshes... Is this OK ? - List_Delete(Liste2); - return k; -} - - -// Common callbacks - -void cancel_cb(CALLBACK_ARGS){ - if(data) ((Fl_Window*)data)->hide(); -} - -void color_cb(CALLBACK_ARGS){ - unsigned int (*fct) (int, int, unsigned int); - fct = (unsigned int (*) (int, int, unsigned int))data ; - uchar r = UNPACK_RED(fct(0,GMSH_GET,0)) ; - uchar g = UNPACK_GREEN(fct(0,GMSH_GET,0)) ; - uchar b = UNPACK_BLUE(fct(0,GMSH_GET,0)) ; - if (fl_color_chooser("Color Chooser",r,g,b)) - fct(0,GMSH_SET|GMSH_GUI,PACK_COLOR(r,g,b,255)); - Draw(); -} - -void set_changed_cb(CALLBACK_ARGS){ - w->set_changed(); -} - -// Graphical window - -void status_xyz1p_cb(CALLBACK_ARGS){ - - extern void set_r(int i, double val); - extern void set_t(int i, double val); - extern void set_s(int i, double val); - - switch((int)data){ - case 0 : - if(CTX.useTrackball) - CTX.setQuaternion(0.,-1./sqrt(2.),0.,1./sqrt(2.)); - set_r(0,0.); set_r(1,90.);set_r(2,0.); - Draw(); - break; - case 1 : - if(CTX.useTrackball) - CTX.setQuaternion(1./sqrt(2.),0.,0.,1./sqrt(2.)); - set_r(0,-90.);set_r(1,0.); set_r(2,0.); - Draw(); - break; - case 2 : - if(CTX.useTrackball) - CTX.setQuaternion(0.,0.,0.,1.); - set_r(0,0.); set_r(1,0.); set_r(2,0.); - Draw(); - break; - case 3 : - set_t(0,0.); set_t(1,0.); set_t(2,0.); - set_s(0,1.); set_s(1,1.); set_s(2,1.); - Draw(); - break; - case 4 : - Print_Options(0,GMSH_FULLRC,NULL); - WID->create_message_window(); - break ; - } -} - -static int stop_anim ; -void status_play_cb(CALLBACK_ARGS){ - static long anim_time ; - int i; - WID->set_anim(0); - stop_anim = 0 ; - anim_time = GetTime(); - while(1){ - if(stop_anim) break ; - if(GetTime() - anim_time > 1.e6*CTX.post.anim_delay){ - anim_time = GetTime(); - for(i=0 ; i<List_Nbr(Post_ViewList) ; i++) - opt_view_timestep(i, GMSH_SET|GMSH_GUI, opt_view_timestep(i, GMSH_GET, 0)+1); - Draw(); - } - WID->check(); - } -} - -void status_pause_cb(CALLBACK_ARGS){ - stop_anim = 1; - WID->set_anim(1); -} - -void status_cancel_cb(CALLBACK_ARGS){ -} - -// File Menu - -void file_open_cb(CALLBACK_ARGS) { - char *newfile; - int n = List_Nbr(Post_ViewList); - newfile = fl_file_chooser("Open file", "*", NULL); - if (newfile != NULL) { - OpenProblem(newfile); - Draw(); - } - if(n != List_Nbr(Post_ViewList)) - WID->set_context(menu_post, 0); -} - -void file_merge_cb(CALLBACK_ARGS) { - char *newfile; - int n = List_Nbr(Post_ViewList); - newfile = fl_file_chooser("Merge file", "*", NULL); - if (newfile != NULL) { - MergeProblem(newfile); - Draw(); - } - if(n != List_Nbr(Post_ViewList)) - WID->set_context(menu_post, 0); -} - -void file_save_as_auto_cb(CALLBACK_ARGS) { - char *newfile; - if((newfile = fl_file_chooser("Save file by extension", "*", NULL))) - CreateOutputFile(newfile, CTX.print.format = FORMAT_AUTO); -} - -void file_save_as_geo_cb(CALLBACK_ARGS) { - char *newfile; - if((newfile = fl_file_chooser("Save GEO file", "*", NULL))) - CreateOutputFile(newfile, CTX.print.format = FORMAT_GEO); -} - -void file_save_as_geo_options_cb(CALLBACK_ARGS) { - char *newfile; - if((newfile = fl_file_chooser("Save options file", "*", NULL))) - Print_Options(0,GMSH_FULLRC, newfile); -} - -void file_save_as_msh_cb(CALLBACK_ARGS) { - char *newfile; - if((newfile = fl_file_chooser("Save MSH file", "*", NULL))) - CreateOutputFile(newfile, CTX.print.format = CTX.mesh.format = FORMAT_MSH); -} -void file_save_as_unv_cb(CALLBACK_ARGS) { - char *newfile; - if((newfile = fl_file_chooser("Save UNV file", "*", NULL))) - CreateOutputFile(newfile, CTX.print.format = CTX.mesh.format = FORMAT_UNV); -} -void file_save_as_gref_cb(CALLBACK_ARGS) { - char *newfile; - if((newfile = fl_file_chooser("Save GREF file", "*", NULL))) - CreateOutputFile(newfile, CTX.print.format = CTX.mesh.format = FORMAT_GREF); -} -void file_save_as_eps_simple_cb(CALLBACK_ARGS) { - char *newfile; - if((newfile = fl_file_chooser("Save EPS file", "*", NULL))){ - CTX.print.eps_quality = 1; - CreateOutputFile(newfile, CTX.print.format = FORMAT_EPS); - } -} -void file_save_as_eps_accurate_cb(CALLBACK_ARGS) { - char *newfile; - if((newfile = fl_file_chooser("Save EPS file", "*", NULL))){ - CTX.print.eps_quality = 2; - CreateOutputFile(newfile, CTX.print.format = FORMAT_EPS); - } -} -void file_save_as_jpeg_cb(CALLBACK_ARGS) { - char *newfile; - if((newfile = fl_file_chooser("Save JPEG file", "*", NULL))) - CreateOutputFile(newfile, CTX.print.format = FORMAT_JPEG); -} - -void file_save_as_gif_cb(CALLBACK_ARGS) { - char *newfile; - if((newfile = fl_file_chooser("Save GIF file", "*", NULL))){ - CTX.print.gif_dither = 0; - CTX.print.gif_transparent = 0; - CreateOutputFile(newfile, CTX.print.format = FORMAT_GIF); - } -} -void file_save_as_gif_dithered_cb(CALLBACK_ARGS) { - char *newfile; - if((newfile = fl_file_chooser("Save GIF file", "*", NULL))){ - CTX.print.gif_dither = 1; - CTX.print.gif_transparent = 0; - CreateOutputFile(newfile, CTX.print.format = FORMAT_GIF); - } -} -void file_save_as_gif_transparent_cb(CALLBACK_ARGS) { - char *newfile; - if((newfile = fl_file_chooser("Save GIF file", "*", NULL))){ - CTX.print.gif_dither = 0; - CTX.print.gif_transparent = 1; - CreateOutputFile(newfile, CTX.print.format = FORMAT_GIF); - } -} -void file_save_as_ppm_cb(CALLBACK_ARGS) { - char *newfile; - if((newfile = fl_file_chooser("Save PPM file", "*", NULL))) - CreateOutputFile(newfile, CTX.print.format = FORMAT_PPM); -} -void file_save_as_yuv_cb(CALLBACK_ARGS) { - char *newfile; - if((newfile = fl_file_chooser("Save YUV file", "*", NULL))) - CreateOutputFile(newfile, CTX.print.format = FORMAT_YUV); -} - -void file_quit_cb(CALLBACK_ARGS) { - Exit(0); -} - -// Option General Menu - -void opt_general_cb(CALLBACK_ARGS) { - WID->create_general_options_window(); -} -void opt_general_color_scheme_cb(CALLBACK_ARGS){ - opt_general_color_scheme(0,GMSH_SET, WID->gen_value[0]->value()); - Draw(); -} -void opt_general_ok_cb(CALLBACK_ARGS){ - opt_general_axes(0, GMSH_SET, WID->gen_butt[0]->value()); - opt_general_small_axes(0, GMSH_SET, WID->gen_butt[1]->value()); - opt_general_fast_redraw(0, GMSH_SET, WID->gen_butt[2]->value()); - if(opt_general_double_buffer(0, GMSH_GET, 0) != WID->gen_butt[3]->value()) - opt_general_double_buffer(0, GMSH_SET, WID->gen_butt[3]->value()); - opt_general_display_lists(0, GMSH_SET, WID->gen_butt[4]->value()); - opt_general_alpha_blending(0, GMSH_SET, WID->gen_butt[5]->value()); - opt_general_trackball(0, GMSH_SET, WID->gen_butt[6]->value()); - opt_general_terminal(0, GMSH_SET, WID->gen_butt[7]->value()); - double sessionrc = opt_general_session_save(0, GMSH_GET, 0); - opt_general_session_save(0, GMSH_SET, WID->gen_butt[8]->value()); - if(sessionrc && !opt_general_session_save(0, GMSH_GET, 0)) - Print_Options(0, GMSH_SESSIONRC, CTX.sessionrc_filename); - opt_general_options_save(0, GMSH_SET, WID->gen_butt[9]->value()); - opt_general_orthographic(0, GMSH_SET, WID->gen_butt[10]->value()); - opt_general_moving_light(0, GMSH_SET, WID->gen_butt[12]->value()); - - opt_general_shine(0, GMSH_SET, WID->gen_value[1]->value()); - opt_general_light00(0, GMSH_SET, WID->gen_value[2]->value()); - opt_general_light01(0, GMSH_SET, WID->gen_value[3]->value()); - opt_general_light02(0, GMSH_SET, WID->gen_value[4]->value()); - opt_general_verbosity(0, GMSH_SET, WID->gen_value[5]->value()); - - opt_general_default_filename(0, GMSH_SET, (char*)WID->gen_input[0]->value()); - opt_general_tmp_filename(0, GMSH_SET, (char*)WID->gen_input[1]->value()); - opt_general_error_filename(0, GMSH_SET, (char*)WID->gen_input[2]->value()); - opt_general_options_filename(0, GMSH_SET, (char*)WID->gen_input[3]->value()); - opt_general_editor(0, GMSH_SET, (char*)WID->gen_input[4]->value()); - - Draw(); -} - -// Option Geometry Menu - -void opt_geometry_cb(CALLBACK_ARGS) { - WID->create_geometry_options_window(); -} -void opt_geometry_show_by_entity_num_cb(CALLBACK_ARGS) { - char * c = (char*)((Fl_Input*)w)->value(); - if (!strcmp(c,"all") || !strcmp(c,"*")){ - if(SHOW_ALL_ENTITIES){ RemplirEntitesVisibles(0); SHOW_ALL_ENTITIES = 0; } - else { RemplirEntitesVisibles(1); SHOW_ALL_ENTITIES = 1; } - } - else{ - int i = atoi(c); - if(EntiteEstElleVisible(i)) ToutesLesEntitesRelatives(i,EntitesVisibles,0); - else ToutesLesEntitesRelatives(i,EntitesVisibles,1); - } - Draw(); -} -void opt_geometry_color_scheme_cb(CALLBACK_ARGS){ - opt_geometry_color_scheme(0,GMSH_SET, WID->geo_value[2]->value()); - Draw(); -} -void opt_geometry_ok_cb(CALLBACK_ARGS) { - opt_geometry_points(0, GMSH_SET, WID->geo_butt[0]->value()); - opt_geometry_lines(0, GMSH_SET, WID->geo_butt[1]->value()); - opt_geometry_surfaces(0, GMSH_SET, WID->geo_butt[2]->value()); - opt_geometry_volumes(0, GMSH_SET, WID->geo_butt[3]->value()); - opt_geometry_points_num(0, GMSH_SET, WID->geo_butt[4]->value()); - opt_geometry_lines_num(0, GMSH_SET, WID->geo_butt[5]->value()); - opt_geometry_surfaces_num(0, GMSH_SET, WID->geo_butt[6]->value()); - opt_geometry_volumes_num(0, GMSH_SET, WID->geo_butt[7]->value()); - - opt_geometry_normals(0, GMSH_SET, WID->geo_value[0]->value()); - opt_geometry_tangents(0, GMSH_SET, WID->geo_value[1]->value()); - Draw(); -} - -// Option Mesh Menu - -void opt_mesh_cb(CALLBACK_ARGS) { - WID->create_mesh_options_window(); -} -void opt_mesh_show_by_entity_num_cb(CALLBACK_ARGS) { - opt_geometry_show_by_entity_num_cb(w,data); -} -void opt_mesh_color_scheme_cb(CALLBACK_ARGS){ - opt_mesh_color_scheme(0,GMSH_SET, WID->mesh_value[10]->value()); - Draw(); -} -void opt_mesh_ok_cb(CALLBACK_ARGS) { - opt_mesh_degree(0, GMSH_SET, WID->mesh_butt[0]->value()?2:1); - opt_mesh_interactive(0, GMSH_SET, WID->mesh_butt[1]->value()); - opt_mesh_algo(0, GMSH_SET, WID->mesh_butt[2]->value()?DELAUNAY_NEWALGO:DELAUNAY_OLDALGO); - opt_mesh_constrained_bgmesh(0, GMSH_SET, WID->mesh_butt[3]->value()); - opt_mesh_points(0, GMSH_SET, WID->mesh_butt[4]->value()); - opt_mesh_lines(0, GMSH_SET, WID->mesh_butt[5]->value()); - opt_mesh_surfaces(0, GMSH_SET, WID->mesh_butt[6]->value()); - opt_mesh_volumes(0, GMSH_SET, WID->mesh_butt[7]->value()); - opt_mesh_points_num(0, GMSH_SET, WID->mesh_butt[8]->value()); - opt_mesh_lines_num(0, GMSH_SET, WID->mesh_butt[9]->value()); - opt_mesh_surfaces_num(0, GMSH_SET, WID->mesh_butt[10]->value()); - opt_mesh_volumes_num(0, GMSH_SET, WID->mesh_butt[11]->value()); - opt_mesh_aspect(0, GMSH_SET, - WID->mesh_butt[12]->value()?0: - WID->mesh_butt[13]->value()?1: - 2); - opt_mesh_color_carousel(0, GMSH_SET, WID->mesh_butt[15]->value()); - - opt_mesh_nb_smoothing(0, GMSH_SET, WID->mesh_value[0]->value()); - opt_mesh_scaling_factor(0, GMSH_SET, WID->mesh_value[1]->value()); - opt_mesh_lc_factor(0, GMSH_SET, WID->mesh_value[2]->value()); - opt_mesh_rand_factor(0, GMSH_SET, WID->mesh_value[3]->value()); - opt_mesh_gamma_inf(0, GMSH_SET, WID->mesh_value[4]->value()); - opt_mesh_gamma_sup(0, GMSH_SET, WID->mesh_value[5]->value()); - opt_mesh_radius_inf(0, GMSH_SET, WID->mesh_value[6]->value()); - opt_mesh_radius_sup(0, GMSH_SET, WID->mesh_value[7]->value()); - opt_mesh_normals(0, GMSH_SET, WID->mesh_value[8]->value()); - opt_mesh_explode(0, GMSH_SET, WID->mesh_value[9]->value()); - - Draw(); -} - -// Option Solver Menu - -void opt_solver_cb(CALLBACK_ARGS) { - WID->create_solver_options_window(); -} -void opt_solver_ok_cb(CALLBACK_ARGS) { -} - -// Option Post Menu - -void opt_post_cb(CALLBACK_ARGS) { - WID->create_post_options_window(); -} -void opt_post_ok_cb(CALLBACK_ARGS) { - opt_post_link(0, GMSH_SET, - WID->post_butt[0]->value()?0: - WID->post_butt[1]->value()?1: - WID->post_butt[2]->value()?2: - WID->post_butt[3]->value()?3: - 4); - opt_post_smooth(0, GMSH_SET, WID->post_butt[3]->value()); - - opt_post_anim_delay(0, GMSH_SET, WID->post_value[0]->value()); - Draw(); -} - -// Option Statistics Menu - -void opt_statistics_cb(CALLBACK_ARGS) { - WID->create_statistics_window(); -} -void opt_statistics_update_cb(CALLBACK_ARGS) { - WID->set_statistics(); -} -void opt_statistics_histogram_cb(CALLBACK_ARGS) { - Print_Histogram(M.Histogram[(int)data]); - WID->create_message_window(); -} - -// Option Messages Menu - -void opt_message_cb(CALLBACK_ARGS) { - WID->create_message_window(); -} -void opt_message_clear_cb(CALLBACK_ARGS) { - WID->msg_browser->clear(); -} -void opt_message_save_cb(CALLBACK_ARGS) { - char *newfile; - if((newfile = fl_file_chooser("Save messages", "*", NULL))) - WID->save_message(newfile); -} -void opt_save_cb(CALLBACK_ARGS) { - Print_Options(0,GMSH_OPTIONSRC, CTX.optionsrc_filename); -} - -// Help Menu - -void help_short_cb(CALLBACK_ARGS){ - Msg(DIRECT, ""); - Msg(DIRECT, "Mouse:"); - Msg(DIRECT, ""); - Msg(DIRECT, " move - highlight the elementary geometrical entity"); - Msg(DIRECT, " currently under the mouse pointer and display"); - Msg(DIRECT, " its properties in the status bar"); - Msg(DIRECT, " - size a rubber zoom started with Ctrl+mouse1"); - Msg(DIRECT, " mouse1 - rotate"); - Msg(DIRECT, " - accept a rubber zoom started with Ctrl+mouse1"); - Msg(DIRECT, " Ctrl+mouse1 start (anisotropic) rubber zoom"); - Msg(DIRECT, " Shift+mouse1 - zoom (isotropic)"); - Msg(DIRECT, " - cancel a rubber zoom"); - Msg(DIRECT, " mouse2 same as Shift+mouse1"); - Msg(DIRECT, " Ctrl+mouse2 orthogonalize display"); - Msg(DIRECT, " mouse3 - pan"); - Msg(DIRECT, " - cancel a rubber zoom"); - Msg(DIRECT, " - pop up menu on post-processing view button"); - Msg(DIRECT, " Ctrl+mouse3 reset to default viewpoint"); - Msg(DIRECT, ""); - Msg(DIRECT, "Menu bar shortcuts:"); - Msg(DIRECT, ""); - Msg(DIRECT, " b go back to previous context"); - Msg(DIRECT, " f go forward to next context"); - Msg(DIRECT, " g go to geometry module"); - Msg(DIRECT, " Shift+g show geometry options"); - Msg(DIRECT, " Shift+i show statistics window"); - Msg(DIRECT, " m go to mesh module"); - Msg(DIRECT, " Shift+m show mesh options"); - Msg(DIRECT, " Ctrl+m merge file"); - Msg(DIRECT, " Shift+o show general options"); - Msg(DIRECT, " Ctrl+o open file"); - Msg(DIRECT, " p go to post-processor module"); - Msg(DIRECT, " Shift+p show post-processing general options"); - Msg(DIRECT, " Ctrl+p save file by extension"); - Msg(DIRECT, " Ctrl+q quit"); - Msg(DIRECT, " Ctrl+s save mesh in default format"); - Msg(DIRECT, ""); - Msg(DIRECT, "Other shortcuts"); - Msg(DIRECT, ""); - Msg(DIRECT, " 0 or Esc reload geometry input file"); - Msg(DIRECT, " 1 or F1 mesh curves"); - Msg(DIRECT, " 2 or F2 mesh surfaces"); - Msg(DIRECT, " 3 or F3 mesh volumes"); - Msg(DIRECT, " Alt+a hide/show small axes"); - Msg(DIRECT, " Alt+Shift+a hide/show big moving axes"); - Msg(DIRECT, " Alt+b hide/show all post-processing scales"); - Msg(DIRECT, " Alt+c alternate between predefined color schemes"); - Msg(DIRECT, " Alt+d alternate between mesh wire frame, hidden lines and shading modes"); - Msg(DIRECT, " Shift+d decrease animation delay"); - Msg(DIRECT, " Ctrl+Shift+d increase animation delay"); - Msg(DIRECT, " Alt+f toggle redraw mode (fast/full)"); - Msg(DIRECT, " Alt+h hide/show all post-processing views"); - Msg(DIRECT, " Alt+l hide/show geometry lines"); - Msg(DIRECT, " Alt+Shift+l hide/show mesh lines"); - Msg(DIRECT, " Alt+m toggle visibility of all mesh entities"); - Msg(DIRECT, " Alt+o change projection mode"); - Msg(DIRECT, " Alt+p hide/show geometry points"); - Msg(DIRECT, " Alt+Shift+p hide/show mesh points"); - Msg(DIRECT, " Alt+s hide/show geometry surfaces"); - Msg(DIRECT, " Alt+Shift+s hide/show mesh surfaces"); - Msg(DIRECT, " Alt+t alternate intervals mode for visible post-processing views"); - Msg(DIRECT, " Alt+v hide/show geometry volumes"); - Msg(DIRECT, " Alt+Shift+v hide/show mesh volumes"); - Msg(DIRECT, " Alt+x set X view"); - Msg(DIRECT, " Alt+y set Y view"); - Msg(DIRECT, " Alt+z set Z view"); - Msg(DIRECT, ""); - WID->create_message_window(); -} -void help_command_line_cb(CALLBACK_ARGS){ - Msg(DIRECT, ""); - Print_Usage("gmsh"); - WID->create_message_window(); -} -void help_about_cb(CALLBACK_ARGS){ - WID->create_about_window(); -} - -// Module Menu - -void mod_geometry_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry, 0); -} -void mod_mesh_cb(CALLBACK_ARGS){ - WID->set_context(menu_mesh, 0); -} -void mod_solver_cb(CALLBACK_ARGS){ - WID->set_context(menu_solver, 0); -} -void mod_post_cb(CALLBACK_ARGS){ - WID->set_context(menu_post, 0); -} -void mod_back_cb(CALLBACK_ARGS){ - WID->set_context(NULL, -1); -} -void mod_forward_cb(CALLBACK_ARGS){ - WID->set_context(NULL, 1); -} - -// Dynamic Geomtry Menus - -void geometry_elementary_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_elementary, 0); -} -void geometry_physical_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_physical, 0); -} -void geometry_edit_cb(CALLBACK_ARGS){ - char cmd[1000]; - sprintf(cmd, CTX.editor, CTX.filename); - Msg(INFO, "Starting text editor '%s'", cmd); - system(cmd); -} -void geometry_reload_cb(CALLBACK_ARGS){ - OpenProblem(CTX.filename); - Draw(); -} -void geometry_elementary_add_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_elementary_add, 0); -} -void geometry_elementary_add_new_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_elementary_add_new, 0); -} -void geometry_elementary_add_new_parameter_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(0); -} -void geometry_elementary_add_new_point_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(1); -} - -static void _new_line_spline(int dim){ - Vertex *v; - Curve *c; - Surface *s; - int ib; - static int n, p[100]; - - if(!opt_geometry_points(0,GMSH_GET,0)){ - opt_geometry_points(0,GMSH_SET|GMSH_GUI,1); - Draw(); - } - - n = 0; - while(1){ - Msg(STATUS3N,"Select Point ('e'=end, 'q'=quit)"); - ib = SelectEntity(ENT_POINT, &v,&c,&s); - if(ib == 1){ /* left mouse butt */ - p[n++] = v->Num; - } - if (ib == -1){ /* 'e' */ - if(n >= 2) { - switch(dim){ - case 0 : add_multline(n,p,CTX.filename); break; - case 1 : add_spline(n,p,CTX.filename); break; - } - } - n=0; - ZeroHighlight(&M); - Draw(); - } - if(ib == 0){ /* 'q' */ - n=0 ; - ZeroHighlight(&M); - Draw(); - break; - } - } - Msg(STATUS3N,"Ready"); -} - -void geometry_elementary_add_new_line_cb(CALLBACK_ARGS){ - _new_line_spline(0); -} -void geometry_elementary_add_new_spline_cb(CALLBACK_ARGS){ - _new_line_spline(1); -} -void geometry_elementary_add_new_circle_cb(CALLBACK_ARGS){ - Vertex *v; - Curve *c; - Surface *s; - int ib; - static int n, p[100]; - - if(!opt_geometry_points(0,GMSH_GET,0)){ - opt_geometry_points(0,GMSH_SET|GMSH_GUI,1); - Draw(); - } - - n=0; - while(1){ - if(n == 0) Msg(STATUS3N,"Select center Point ('q'=quit)"); - if(n == 1) Msg(STATUS3N,"Select start Point ('q'=quit)"); - if(n == 2) Msg(STATUS3N,"Select end Point ('q'=quit)"); - ib = SelectEntity(ENT_POINT, &v,&c,&s); - if(ib == 1) { /* left mouse butt */ - p[n++] = v->Num; - } - if(ib == 0) { /* 'q' */ - n=0 ; - ZeroHighlight(&M); - Draw(); - break; - } - if(n == 3){ - add_circ(p[1],p[0],p[2],CTX.filename); /* begin, center, end */ - ZeroHighlight(&M); - Draw(); - n=0; - } - } - Msg(STATUS3N,"Ready"); -} -void geometry_elementary_add_new_ellipsis_cb(CALLBACK_ARGS){ - Vertex *v; - Curve *c; - Surface *s; - int ib; - static int n, p[100]; - - if(!opt_geometry_points(0,GMSH_GET,0)){ - opt_geometry_points(0,GMSH_SET|GMSH_GUI,1); - Draw(); - } - - n=0; - while(1){ - if(n == 0) Msg(STATUS3N,"Select center Point ('q'=quit)"); - if(n == 1) Msg(STATUS3N,"Select axis Point ('q'=quit)"); - if(n == 2) Msg(STATUS3N,"Select start Point ('q'=quit)"); - if(n == 3) Msg(STATUS3N,"Select end Point ('q'=quit)"); - ib = SelectEntity(ENT_POINT, &v,&c,&s); - if(ib == 1) { /* left mouse butt */ - p[n++] = v->Num; - } - if(ib == 0){ /* 'q' */ - n=0 ; - ZeroHighlight(&M); - Draw(); - break; - } - if(n == 4){ - add_ell(p[3],p[2],p[0],p[1],CTX.filename); - ZeroHighlight(&M); - Draw(); - n=0; - } - } - Msg(STATUS3N,"Ready"); -} - -static void _new_surface_volume(int mode){ - Vertex *v; - Curve *c; - Surface *s; - int ib, type, zone; - List_T *Liste1, *Liste2; - - Liste1 = List_Create(10,10,sizeof(int)); - Liste2 = List_Create(10,10,sizeof(int)); - - if(mode == 2){ - type = ENT_SURFACE; - if(!opt_geometry_surfaces(0,GMSH_GET,0)){ - opt_geometry_surfaces(0,GMSH_SET|GMSH_GUI,1); - Draw(); - } - } - else{ - type = ENT_LINE; - if(!opt_geometry_lines(0,GMSH_GET,0)){ - opt_geometry_lines(0,GMSH_SET|GMSH_GUI,1); - Draw(); - } - } - - while(1){ - List_Reset(Liste1); - List_Reset(Liste2); - - while(1) { - Msg(STATUS3N,"Select boundary ('q'=quit)"); - ib = SelectEntity(type, &v,&c,&s); - if(ib <= 0){ - ZeroHighlight(&M); - Draw(); - goto stopall; - } - if(SelectContour (type, (type==ENT_LINE)?c->Num:s->Num, Liste1)){ - if(type==ENT_LINE) - add_loop(Liste1,CTX.filename,&zone); - else - add_vol(Liste1,CTX.filename,&zone); - List_Reset(Liste1); - List_Add(Liste2,&zone); - while(1){ - Msg(STATUS3N,"Select holes ('q'=quit)"); - ib = SelectEntity(type, &v,&c,&s); - if(ib <= 0){ - ZeroHighlight(&M); - Draw(); - break; - } - if(SelectContour (type, (type==ENT_LINE)?c->Num:s->Num, Liste1)){ - if(type==ENT_LINE) - add_loop(Liste1,CTX.filename,&zone); - else - add_vol(Liste1,CTX.filename,&zone); - List_Reset(Liste1); - List_Add(Liste2,&zone); - } - } - if(List_Nbr(Liste2)){ - switch(mode){ - case 0 : add_surf(Liste2,CTX.filename,0,2); break; - case 1 : add_surf(Liste2,CTX.filename,0,1); break; - case 2 : add_multvol(Liste2,CTX.filename); break; - } - ZeroHighlight(&M); - Draw(); - break; - } - } - } - } - stopall : ; - List_Delete(Liste1); - List_Delete(Liste2); - Msg(STATUS3N,"Ready"); -} - -void geometry_elementary_add_new_planesurface_cb(CALLBACK_ARGS){ - _new_surface_volume(0); -} -void geometry_elementary_add_new_ruledsurface_cb(CALLBACK_ARGS){ - _new_surface_volume(1); -} -void geometry_elementary_add_new_volume_cb(CALLBACK_ARGS){ - _new_surface_volume(2); -} - -static void _transform_point_curve_surface(int transfo, int mode, char *what){ - Vertex *v; - Curve *c; - Surface *s; - int type, num; - - if(!strcmp(what,"Point")) { - type = ENT_POINT; - if(!opt_geometry_points(0,GMSH_GET,0)){ - opt_geometry_points(0,GMSH_SET|GMSH_GUI,1); - Draw(); - } - } - else if(!strcmp(what,"Line")){ - type = ENT_LINE; - if(!opt_geometry_lines(0,GMSH_GET,0)){ - opt_geometry_lines(0,GMSH_SET|GMSH_GUI,1); - Draw(); - } - } - else{ - type = ENT_SURFACE; - if(!opt_geometry_surfaces(0,GMSH_GET,0)){ - opt_geometry_surfaces(0,GMSH_SET|GMSH_GUI,1); - Draw(); - } - } - - while(1){ - Msg(STATUS3N,"Select %s ('q'=quit)", what); - if(!SelectEntity(type, &v,&c,&s)){ - ZeroHighlight(&M); - Draw(); - break; - } - switch(type){ - case ENT_POINT: num = v->Num; break; - case ENT_LINE: num = c->Num; break; - case ENT_SURFACE: num = s->Num; break; - } - switch(transfo){ - case 0: translate(mode,num,CTX.filename,what); break; - case 1: rotate(mode,num,CTX.filename,what); break; - case 2: dilate(mode,num,CTX.filename,what); break; - case 3: symmetry(mode,num,CTX.filename,what); break; - case 4: extrude(num,CTX.filename,what); break; - case 5: protude(num,CTX.filename,what); break; - case 6: delet(num,CTX.filename,what); break; - } - ZeroHighlight(&M); - Draw(); - } - Msg(STATUS3N,"Ready"); -} - -void geometry_elementary_add_translate_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_elementary_add_translate, 0); -} -void geometry_elementary_add_translate_point_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(2); - _transform_point_curve_surface(0,1,"Point"); -} -void geometry_elementary_add_translate_curve_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(2); - _transform_point_curve_surface(0,1,"Line"); -} -void geometry_elementary_add_translate_surface_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(2); - _transform_point_curve_surface(0,1,"Surface"); -} -void geometry_elementary_translate_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_elementary_translate, 0); -} -void geometry_elementary_translate_point_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(2); - _transform_point_curve_surface(0,0,"Point"); -} -void geometry_elementary_translate_curve_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(2); - _transform_point_curve_surface(0,0,"Line"); -} -void geometry_elementary_translate_surface_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(2); - _transform_point_curve_surface(0,0,"Surface"); -} - -void geometry_elementary_add_rotate_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_elementary_add_rotate, 0); -} -void geometry_elementary_add_rotate_point_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(3); - _transform_point_curve_surface(1,1,"Point"); -} -void geometry_elementary_add_rotate_curve_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(3); - _transform_point_curve_surface(1,1,"Line"); -} -void geometry_elementary_add_rotate_surface_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(3); - _transform_point_curve_surface(1,1,"Surface"); -} -void geometry_elementary_rotate_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_elementary_rotate, 0); -} -void geometry_elementary_rotate_point_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(3); - _transform_point_curve_surface(1,0,"Point"); -} -void geometry_elementary_rotate_curve_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(3); - _transform_point_curve_surface(1,0,"Line"); -} -void geometry_elementary_rotate_surface_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(3); - _transform_point_curve_surface(1,0,"Surface"); -} - -void geometry_elementary_add_scale_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_elementary_add_scale, 0); -} -void geometry_elementary_add_scale_point_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(4); - _transform_point_curve_surface(2,1,"Point"); -} -void geometry_elementary_add_scale_curve_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(4); - _transform_point_curve_surface(2,1,"Line"); -} -void geometry_elementary_add_scale_surface_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(4); - _transform_point_curve_surface(2,1,"Surface"); -} -void geometry_elementary_scale_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_elementary_scale, 0); -} -void geometry_elementary_scale_point_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(4); - _transform_point_curve_surface(2,0,"Point"); -} -void geometry_elementary_scale_curve_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(4); - _transform_point_curve_surface(2,0,"Line"); -} -void geometry_elementary_scale_surface_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(4); - _transform_point_curve_surface(2,0,"Surface"); -} - -void geometry_elementary_add_symmetry_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_elementary_add_symmetry, 0); -} -void geometry_elementary_add_symmetry_point_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(5); - _transform_point_curve_surface(3,1,"Point"); -} -void geometry_elementary_add_symmetry_curve_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(5); - _transform_point_curve_surface(3,1,"Line"); -} -void geometry_elementary_add_symmetry_surface_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(5); - _transform_point_curve_surface(3,1,"Surface"); -} -void geometry_elementary_symmetry_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_elementary_symmetry, 0); -} -void geometry_elementary_symmetry_point_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(5); - _transform_point_curve_surface(3,0,"Point"); -} -void geometry_elementary_symmetry_curve_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(5); - _transform_point_curve_surface(3,0,"Line"); -} -void geometry_elementary_symmetry_surface_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(5); - _transform_point_curve_surface(3,0,"Surface"); -} - -void geometry_elementary_extrude_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_elementary_extrude, 0); -} -void geometry_elementary_extrude_translate_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_elementary_extrude_translate, 0); -} -void geometry_elementary_extrude_translate_point_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(2); - _transform_point_curve_surface(4,0,"Point"); -} -void geometry_elementary_extrude_translate_curve_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(2); - _transform_point_curve_surface(4,0,"Line"); -} -void geometry_elementary_extrude_translate_surface_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(2); - _transform_point_curve_surface(4,0,"Surface"); -} -void geometry_elementary_extrude_rotate_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_elementary_extrude_rotate, 0); -} -void geometry_elementary_extrude_rotate_point_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(3); - _transform_point_curve_surface(5,0,"Point"); -} -void geometry_elementary_extrude_rotate_curve_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(3); - _transform_point_curve_surface(5,0,"Line"); -} -void geometry_elementary_extrude_rotate_surface_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(3); - _transform_point_curve_surface(5,0,"Surface"); -} - -void geometry_elementary_delete_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_elementary_delete, 0); -} -void geometry_elementary_delete_point_cb(CALLBACK_ARGS){ - _transform_point_curve_surface(6,0,"Point"); -} -void geometry_elementary_delete_curve_cb(CALLBACK_ARGS){ - _transform_point_curve_surface(6,0,"Line"); -} -void geometry_elementary_delete_surface_cb(CALLBACK_ARGS){ - _transform_point_curve_surface(6,0,"Surface"); -} - -static void _add_physical(char *what){ - Vertex *v; - Curve *c; - Surface *s; - int ib, type, zone; - List_T *Liste1; - - if(!strcmp(what,"Point")){ - type = ENT_POINT; - if(!opt_geometry_points(0,GMSH_GET,0)){ - opt_geometry_points(0,GMSH_SET|GMSH_GUI,1); - Draw(); - } - } - else if(!strcmp(what,"Line")){ - type = ENT_LINE; - if(!opt_geometry_lines(0,GMSH_GET,0)){ - opt_geometry_lines(0,GMSH_SET|GMSH_GUI,1); - Draw(); - } - } - else if(!strcmp(what,"Surface")){ - type = ENT_SURFACE; - if(!opt_geometry_surfaces(0,GMSH_GET,0)){ - opt_geometry_surfaces(0,GMSH_SET|GMSH_GUI,1); - Draw(); - } - } - else{ - Msg(GERROR, "Interactive volume selection not done " - "(you will have to edit the input file manually)"); - if(!opt_geometry_volumes(0,GMSH_GET,0)){ - opt_geometry_volumes(0,GMSH_SET|GMSH_GUI,1); - Draw(); - } - return; - } - - Liste1 = List_Create(5,5,sizeof(int)); - while(1){ - Msg(STATUS3N,"Select %s ('e'=end, 'q'=quit)", what); - ib = SelectEntity(type, &v,&c,&s); - if(ib == 1){ /* left mouse */ - switch(type){ - case ENT_POINT: List_Add(Liste1, &v->Num); break; - case ENT_LINE: List_Add(Liste1, &c->Num); break; - case ENT_SURFACE: List_Add(Liste1, &s->Num); break; - } - } - if(ib == -1){ /* end */ - if(List_Nbr(Liste1)){ - add_physical(Liste1,CTX.filename,type,&zone); - List_Reset(Liste1); - ZeroHighlight(&M); - Draw(); - } - } - if(ib == 0){ - ZeroHighlight(&M); - Draw(); - break; - } - } - Msg(STATUS3N,"Ready"); -} - -void geometry_physical_add_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_physical_add, 0); -} -void geometry_physical_add_point_cb (CALLBACK_ARGS){ - _add_physical("Point"); -} -void geometry_physical_add_curve_cb (CALLBACK_ARGS){ - _add_physical("Line"); -} -void geometry_physical_add_surface_cb (CALLBACK_ARGS){ - _add_physical("Surface"); -} -void geometry_physical_add_volume_cb (CALLBACK_ARGS){ - _add_physical("Volume"); -} - -// Dynamic Mesh Menus - -void mesh_save_cb(CALLBACK_ARGS) { - Print_Mesh(&M, CTX.output_filename, CTX.mesh.format); -} -void mesh_define_cb(CALLBACK_ARGS){ - WID->set_context(menu_mesh_define, 0); -} -void mesh_1d_cb(CALLBACK_ARGS){ - mai3d(&M, 1); - Draw(); - Msg(STATUS3N,"Ready"); -} -void mesh_2d_cb(CALLBACK_ARGS){ - mai3d(&M, 2); - Draw(); - Msg(STATUS3N,"Ready"); -} -void mesh_3d_cb(CALLBACK_ARGS){ - mai3d(&M, 3); - Draw(); - Msg(STATUS3N,"Ready"); -} -void mesh_define_length_cb (CALLBACK_ARGS){ - Vertex *v; - Curve *c; - Surface *s; - int ib; - static int n=0, p[100]; - - if(!opt_geometry_points(0,GMSH_GET,0)){ - opt_geometry_points(0,GMSH_SET|GMSH_GUI,1); - Draw(); - } - - WID->create_mesh_context_window(0); - - while(1){ - Msg(STATUS3N,"Select Point ('e'=end, 'q'=quit)"); - ib = SelectEntity(ENT_POINT, &v,&c,&s); - if(ib == 1){ /* left mouse butt */ - p[n++] = v->Num; - } - if (ib == -1){ /* 'e' */ - if(n >= 1) { - add_charlength(n,p,CTX.filename); - n=0; - ZeroHighlight(&M); - Draw(); - break; - } - } - if(ib == 0){ /* 'q' */ - n=0 ; - ZeroHighlight(&M); - Draw(); - break; - } - } - Msg(STATUS3N,"Ready"); -} -void mesh_define_recombine_cb (CALLBACK_ARGS){ - Vertex *v; - Curve *c; - Surface *s; - int ib; - static int n, p[100]; - - if(!opt_geometry_surfaces(0,GMSH_GET,0)){ - opt_geometry_surfaces(0,GMSH_SET|GMSH_GUI,1); - Draw(); - } - - n=0; - while(1){ - Msg(STATUS3N,"Select Surface ('e'=end, 'q'=quit)"); - ib = SelectEntity(ENT_SURFACE, &v,&c,&s); - if(ib == 1){ /* left mouse butt */ - p[n++] = s->Num; - } - if (ib == -1){ /* 'e' */ - if(n >= 1) { - add_recosurf(n,p,CTX.filename); break; - } - n=0; - ZeroHighlight(&M); - Draw(); - } - if(ib == 0){ /* 'q' */ - n=0 ; - ZeroHighlight(&M); - Draw(); - break; - } - } - Msg(STATUS3N, "Ready"); -} -void mesh_define_transfinite_cb (CALLBACK_ARGS){ - WID->set_context(menu_mesh_define_transfinite, 0); -} - -static void _add_transfinite(int dim){ - Vertex *v; - Curve *c; - Surface *s; - int ib; - static int n, p[100]; - - if(!opt_geometry_points(0,GMSH_GET,0)){ - opt_geometry_points(0,GMSH_SET|GMSH_GUI,1); - Draw(); - } - - switch (dim) { - case 1 : - if(!opt_geometry_lines(0,GMSH_GET,0)){ - opt_geometry_lines(0,GMSH_SET|GMSH_GUI,1); - Draw(); - } - break ; - case 2 : - if(!opt_geometry_surfaces(0,GMSH_GET,0)){ - opt_geometry_surfaces(0,GMSH_SET|GMSH_GUI,1); - Draw(); - } - break; - case 3 : - if(!opt_geometry_volumes(0,GMSH_GET,0)){ - opt_geometry_volumes(0,GMSH_SET|GMSH_GUI,1); - Draw(); - } - break; - } - - n=0; - while(1){ - switch (dim) { - case 1 : - Msg(STATUS3N,"Select Line ('e'=end, 'q'=quit)"); - ib = SelectEntity(ENT_LINE, &v,&c,&s); - break ; - case 2 : - Msg(STATUS3N,"Select Surface ('e'=end, 'q'=quit)"); - ib = SelectEntity(ENT_SURFACE, &v,&c,&s); - break; - case 3 : - ib = 1; - break; - } - if(ib == 1){ /* left mouse butt */ - switch (dim) { - case 1 : p[n++] = c->Num ; break ; - case 2 : p[n++] = s->Num; // fall-through - case 3 : - while(1){ - Msg(STATUS3N,"Select Point ('e'=end, 'q'=quit)"); - ib = SelectEntity(ENT_POINT, &v,&c,&s); - if(ib == 1){ /* left mouse butt */ - p[n++] = v->Num ; - } - if (ib == -1){ /* 'e' */ - switch (dim) { - case 2 : - if(n == 3+1 || n == 4+1) - add_trsfsurf(n,p,CTX.filename); - else - Msg(STATUS2, "Wrong number of points for Transfinite Surface"); - break; - case 3 : - if(n == 6 || n == 8) - add_trsfvol(n,p,CTX.filename); - else - Msg(STATUS2, "Wrong number of points for Transfinite Volume"); - break; - } - n=0; - ZeroHighlight(&M); - Draw(); - break; - } - if(ib == 0){ /* 'q' */ - n=0 ; - ZeroHighlight(&M); - Draw(); - break; - } - } - break ; - } - } - if (ib == -1){ /* 'e' */ - if (dim == 1){ - if(n >= 1) add_trsfline(n,p,CTX.filename); - } - n=0; - ZeroHighlight(&M); - Draw(); - } - if(ib == 0){ /* 'q' */ - n=0 ; - ZeroHighlight(&M); - Draw(); - break; - } - } - Msg(STATUS3N, "Ready"); -} - -void mesh_define_transfinite_line_cb(CALLBACK_ARGS){ - WID->create_mesh_context_window(1); - _add_transfinite(1); -} -void mesh_define_transfinite_surface_cb(CALLBACK_ARGS){ - _add_transfinite(2); -} -void mesh_define_transfinite_volume_cb(CALLBACK_ARGS){ - WID->create_mesh_context_window(2); - _add_transfinite(3); -} - -// Dynamic Solver Menus - -#include "Solvers.h" - -void getdp_cb(CALLBACK_ARGS){ - char file[256]; - static int first=1; - if(first){ - first = 0; - strcpy(file,CTX.base_filename); - strcat(file,".pro"); - WID->getdp_input[0]->value(file); - } - GetDP((char*)WID->getdp_input[0]->value()); - WID->create_getdp_window(); -} -void getdp_file_open_cb(CALLBACK_ARGS){ - char *newfile; - newfile = fl_file_chooser("Open problem definition file", "*.[Pp][Rr][Oo]", NULL); - if (newfile != NULL){ - WID->getdp_input[0]->value(newfile); - GetDP(newfile); - } -} -void getdp_file_edit_cb(CALLBACK_ARGS){ - char cmd[1000]; - sprintf(cmd, CTX.editor, WID->getdp_input[0]->value()); - Msg(INFO, "Starting text editor '%s'", cmd); - system(cmd); -} -void getdp_choose_mesh_cb(CALLBACK_ARGS){ - char *newfile; - newfile = fl_file_chooser("Open mesh file", "*.[Mm][Ss][Hh]", NULL); - if (newfile != NULL) WID->getdp_input[1]->value(newfile); -} -void getdp_pre_cb(CALLBACK_ARGS){ - char arg[256]; - if(GetDP_Info.popupmessages) WID->create_message_window(); - if(strlen(WID->getdp_input[1]->value())) - sprintf(arg, "%s -msh %s -pre %s", - WID->getdp_input[0]->value(), - WID->getdp_input[1]->value(), - GetDP_Info.res[WID->getdp_choice[0]->value()]); - else - sprintf(arg, "%s -pre %s", - WID->getdp_input[0]->value(), - GetDP_Info.res[WID->getdp_choice[0]->value()]); - - GetDP(arg); -} -void getdp_cal_cb(CALLBACK_ARGS){ - char arg[256]; - if(GetDP_Info.popupmessages) WID->create_message_window(); - if(strlen(WID->getdp_input[1]->value())) - sprintf(arg, "%s -msh %s -cal", - WID->getdp_input[0]->value(), - WID->getdp_input[1]->value()); - else - sprintf(arg, "%s -cal", WID->getdp_input[0]->value()); - GetDP(arg); -} -void getdp_post_cb(CALLBACK_ARGS){ - char arg[256]; - if(GetDP_Info.popupmessages) WID->create_message_window(); - if(strlen(WID->getdp_input[1]->value())) - sprintf(arg, "%s -msh %s -bin -pos %s", - WID->getdp_input[0]->value(), - WID->getdp_input[1]->value(), - GetDP_Info.postop[WID->getdp_choice[1]->value()]); - else - sprintf(arg, "%s -bin -pos %s", - WID->getdp_input[0]->value(), - GetDP_Info.postop[WID->getdp_choice[1]->value()]); - GetDP(arg); -} -void getdp_kill_cb(CALLBACK_ARGS){ - if(GetDP_Info.pid > 0){ - kill(GetDP_Info.pid, 9); - Msg(INFO, "Killed GetDP pid %d", GetDP_Info.pid); - } - GetDP_Info.pid = -1; -} -void getdp_choose_command_cb(CALLBACK_ARGS){ - char *newfile; -#if defined(WIN32) - newfile = fl_file_chooser("Choose executable", "*.[Ee][Xx][Ee]", NULL); -#else - newfile = fl_file_chooser("Choose executable", "*", NULL); -#endif - if (newfile != NULL) WID->getdp_input[2]->value(newfile); -} -void getdp_ok_cb(CALLBACK_ARGS){ - opt_solver_getdp_popupmessages(0, GMSH_SET, WID->getdp_butt[0]->value()); - opt_solver_getdp_mergeviews(0, GMSH_SET, WID->getdp_butt[1]->value()); - - int retry=0; - if(strcmp(opt_solver_getdp_command(0, GMSH_GET, NULL), - WID->getdp_input[2]->value())) retry=1; - opt_solver_getdp_command(0, GMSH_SET, (char*)WID->getdp_input[2]->value()); - if(retry) getdp_cb(NULL,NULL); -} - - -// Dynamic Post Menus - -void view_toggle_cb(CALLBACK_ARGS){ - opt_view_visible((int)data, GMSH_SET, WID->m_toggle_butt[(int)data]->value()); - Draw(); -} - -static int RELOAD_ALL_VIEWS = 0 ; - -void view_reload_all_cb(CALLBACK_ARGS) { - if(!Post_ViewList) return; - RELOAD_ALL_VIEWS = 1; - for(int i = 0 ; i<List_Nbr(Post_ViewList) ; i++) - view_reload_cb(NULL, (void *)i); - RELOAD_ALL_VIEWS = 0; - Draw(); -} - -void view_reload_visible_cb(CALLBACK_ARGS) { - if(!Post_ViewList) return; - RELOAD_ALL_VIEWS = 1; - for(int i = 0 ; i<List_Nbr(Post_ViewList) ; i++) - if(opt_view_visible(i, GMSH_GET, 0)) - view_reload_cb(NULL, (void *)i); - RELOAD_ALL_VIEWS = 0; - Draw(); -} - -void view_reload_cb(CALLBACK_ARGS){ - Post_View tmp ; - char filename[256]; - - if(!Post_ViewList) return; - - Post_View *v = (Post_View*)List_Pointer(Post_ViewList,(int)data); - strcpy(filename, v->FileName); - CopyViewOptions(v, &tmp); - - Post_ViewForceNumber = v->Num ; - FreeView(v); - MergeProblem(filename); - Post_ViewForceNumber = 0 ; - - v = (Post_View*)List_Pointer(Post_ViewList,(int)data); - CopyViewOptions(&tmp, v); - - // In case the reloaded view has a different number of time steps - if(v->TimeStep > v->NbTimeStep-1) v->TimeStep = 0; - - if(!RELOAD_ALL_VIEWS) - Draw(); -} - -static int REMOVE_ALL_VIEWS = 0 ; - -void view_remove_all_cb(CALLBACK_ARGS) { - if(!Post_ViewList) return; - REMOVE_ALL_VIEWS = 1; - while(List_Nbr(Post_ViewList)) - view_remove_cb(NULL, (void*)0); - REMOVE_ALL_VIEWS = 0; - Draw(); -} - -void view_remove_visible_cb(CALLBACK_ARGS) { - int i; - if(!Post_ViewList) return; - REMOVE_ALL_VIEWS = 1; - for(i=List_Nbr(Post_ViewList)-1 ; i>=0 ; i--) - if(opt_view_visible(i, GMSH_GET, 0)) - view_remove_cb(NULL, (void*)i); - REMOVE_ALL_VIEWS = 0; - Draw(); -} - -void view_remove_cb(CALLBACK_ARGS){ - int i, play=0; - - FreeView((int)data); - - for(i=0 ; i<List_Nbr(Post_ViewList) ; i++) - if(((Post_View*)List_Pointer(Post_ViewList,i))->NbTimeStep > 1){ - play = 1 ; - break ; - } - if(!play) WID->g_status_butt[5]->deactivate(); - - if(WID->get_context() == 3) - WID->set_context(menu_post, 0); - - if(!REMOVE_ALL_VIEWS) - Draw(); -} - -void view_save_ascii_cb(CALLBACK_ARGS){ - char *newfile; - if((newfile = fl_file_chooser("Save view in ASCII format", "*", NULL))) - Write_View(0, (Post_View*)List_Pointer(Post_ViewList,(int)data), newfile); -} - -void view_save_binary_cb(CALLBACK_ARGS){ - char *newfile; - if((newfile = fl_file_chooser("Save view in binary format", "*", NULL))) - Write_View(1, (Post_View*)List_Pointer(Post_ViewList,(int)data), newfile); -} - -static void _duplicate_view(int num, int options){ - Post_View v, *v1, *v2, *v3 ; - - if(!Post_ViewList) return; - - v1 = (Post_View*)List_Pointer(Post_ViewList,num); - - v2 = BeginView(0); - EndView(v2, 0, v1->FileName, v1->Name); - - if(!v1->DuplicateOf){ - v2->DuplicateOf = v1->Num ; - v1->Links++ ; - } - else{ - v.Num = v1->DuplicateOf ; - if(!(v3 = (Post_View*)List_PQuery(Post_ViewList, &v, fcmpPostViewNum))){ - v2->DuplicateOf = v1->Num ; - v1->Links++ ; - } - else{ - v2->DuplicateOf = v3->Num; - v3->Links++ ; - } - } - - v2->Time = v1->Time; - v2->NbSP = v1->NbSP; v2->SP = v1->SP; - v2->NbVP = v1->NbVP; v2->VP = v1->VP; - v2->NbTP = v1->NbTP; v2->TP = v1->TP; - v2->NbSL = v1->NbSL; v2->SL = v1->SL; - v2->NbVL = v1->NbVL; v2->VL = v1->VL; - v2->NbTL = v1->NbTL; v2->TL = v1->TL; - v2->NbST = v1->NbST; v2->ST = v1->ST; - v2->NbVT = v1->NbVT; v2->VT = v1->VT; - v2->NbTT = v1->NbTT; v2->TT = v1->TT; - v2->NbSS = v1->NbSS; v2->SS = v1->SS; - v2->NbVS = v1->NbVS; v2->VS = v1->VS; - v2->NbTS = v1->NbTS; v2->TS = v1->TS; - v2->ScalarOnly = v1->ScalarOnly; - v2->Min = v1->Min; - v2->Max = v1->Max; - v2->NbTimeStep = v1->NbTimeStep; - - if(options) CopyViewOptions(v1, v2); - AddViewInUI(List_Nbr(Post_ViewList), v2->Name, v2->Num); - Draw(); -} -void view_duplicate_cb(CALLBACK_ARGS){ - _duplicate_view((int)data,0); -} -void view_duplicate_with_options_cb(CALLBACK_ARGS){ - _duplicate_view((int)data,1); -} - -void view_applybgmesh_cb(CALLBACK_ARGS){ - Post_View *v = (Post_View*)List_Pointer(Post_ViewList,(int)data); - if(!v->ScalarOnly){ - Msg(GERROR, "Background mesh generation impossible with non-scalar view"); - return; - } - BGMWithView(v); -} -void view_options_cb(CALLBACK_ARGS){ - WID->create_view_options_window((int)data); -} - -void view_plugin_cb(CALLBACK_ARGS){ - char name[256]; - std::pair<int,GMSH_Plugin*> *pair = (std::pair<int,GMSH_Plugin*>*)data; - int iView = pair->first; - GMSH_Post_Plugin *p = (GMSH_Post_Plugin*)pair->second; - p->getName(name); - - if(p->dialogBox){//Get the values from the GUI - int n = p->getNbOptions(); - if(n > 20)Msg(GERROR,"Plugin has too much parameters"); - for(int i=0;i<n;i++){ - StringXNumber *sxn; - sxn = p->GetOption(i); - sxn->def = p->dialogBox->view_value[i]->value(); - } - } - - try{ - Post_View *v = (Post_View*)List_Pointer(Post_ViewList,iView); - p->execute(v); - Draw(); - } - catch (GMSH_Plugin *err){ - p->CatchErrorMessage(name); - Msg(WARNING,"%s",name); - } -} - -void view_options_plugin_cb(CALLBACK_ARGS){ - std::pair<int,GMSH_Plugin*> *pair = (std::pair<int,GMSH_Plugin*>*)data; - GMSH_Plugin *p = pair->second; - - if(!p->dialogBox)p->dialogBox = WID->create_plugin_window(p); - - p->dialogBox->run_button->callback(view_plugin_cb, (void*)pair); - - if(p->dialogBox->main_window->shown()) - p->dialogBox->main_window->redraw(); - else - p->dialogBox->main_window->show(); -} - -void view_options_custom_cb(CALLBACK_ARGS){ - if(WID->view_butt[0]->value()){ - WID->view_value[0]->activate(); - WID->view_value[1]->activate(); - } - else{ - WID->view_value[0]->deactivate(); - WID->view_value[1]->deactivate(); - } -} - -void view_options_timestep_cb(CALLBACK_ARGS){ - int links = (int)opt_post_link(0, GMSH_GET, 0); - for(int i=0 ; i<List_Nbr(Post_ViewList) ; i++){ - if((links == 2 || links == 4) || - ((links == 1 || links == 3) && opt_view_visible(i, GMSH_GET, 0)) || - (links == 0 && i == (int)data)){ - opt_view_timestep(i, GMSH_SET, (int)((Fl_Value_Input*)w)->value()); - } - } - Draw(); -} - -void view_options_ok_cb(CALLBACK_ARGS){ - int i, links, force=0; - - links = (int)opt_post_link(0, GMSH_GET, 0); - - for(i=0 ; i<List_Nbr(Post_ViewList) ; i++){ - if((links == 2 || links == 4) || - ((links == 1 || links == 3) && opt_view_visible(i, GMSH_GET, 0)) || - (links == 0 && i == (int)data)){ - - if(links == 3 || links == 4) force = 1; - - // view_butts - - //not this one. if(WID->view_butt[0]->changed()) - opt_view_range_type(i, GMSH_SET, - WID->view_butt[0]->value()?DRAW_POST_CUSTOM: - DRAW_POST_DEFAULT); - - if(force || WID->view_butt[1]->changed() || - WID->view_butt[2]->changed() || - WID->view_butt[3]->changed()) - opt_view_scale_type(i, GMSH_SET, - WID->view_butt[1]->value()?DRAW_POST_LINEAR: - WID->view_butt[2]->value()?DRAW_POST_LOGARITHMIC: - DRAW_POST_DOUBLELOGARITHMIC); - - if(force || WID->view_butt[25]->changed()) - opt_view_saturate_values(i, GMSH_SET, - WID->view_butt[25]->value()); - - if(force || WID->view_butt[3]->changed() || - WID->view_butt[4]->changed() || - WID->view_butt[5]->changed() || - WID->view_butt[6]->changed()) - opt_view_intervals_type(i, GMSH_SET, - WID->view_butt[3]->value()?DRAW_POST_ISO: - WID->view_butt[4]->value()?DRAW_POST_DISCRETE: - WID->view_butt[5]->value()?DRAW_POST_CONTINUOUS: - DRAW_POST_NUMERIC); - - if(force || WID->view_butt[7]->changed() || - WID->view_butt[8]->changed() || - WID->view_butt[9]->changed() || - WID->view_butt[10]->changed()) - opt_view_arrow_type(i, GMSH_SET, - WID->view_butt[7]->value()?DRAW_POST_SEGMENT: - WID->view_butt[8]->value()?DRAW_POST_ARROW: - WID->view_butt[9]->value()?DRAW_POST_CONE: - DRAW_POST_DISPLACEMENT); - - if(force || WID->view_butt[11]->changed() || - WID->view_butt[12]->changed()) - opt_view_arrow_location(i, GMSH_SET, - WID->view_butt[11]->value()?DRAW_POST_LOCATE_COG: - DRAW_POST_LOCATE_VERTEX); - - if(force || WID->view_butt[13]->changed()) - opt_view_show_element(i, GMSH_SET, WID->view_butt[13]->value()); - - if(force || WID->view_butt[14]->changed()) - opt_view_show_scale(i, GMSH_SET, WID->view_butt[14]->value()); - - if(force || WID->view_butt[15]->changed()) - opt_view_show_time(i, GMSH_SET, WID->view_butt[15]->value()); - - if(force || WID->view_butt[16]->changed()) - opt_view_transparent_scale(i, GMSH_SET, WID->view_butt[16]->value()); - - if(force || WID->view_butt[17]->changed()) - opt_view_light(i,GMSH_SET,WID->view_butt[17]->value()); - - if(force || WID->view_butt[27]->changed()) - opt_view_smooth_normals(i,GMSH_SET,WID->view_butt[27]->value()); - - if(force || WID->view_butt[18]->changed()) - opt_view_draw_points(i, GMSH_SET, WID->view_butt[18]->value()); - - if(force || WID->view_butt[19]->changed()) - opt_view_draw_lines(i, GMSH_SET, WID->view_butt[19]->value()); - - if(force || WID->view_butt[20]->changed()) - opt_view_draw_triangles(i, GMSH_SET, WID->view_butt[20]->value()); - - if(force || WID->view_butt[21]->changed()) - opt_view_draw_tetrahedra(i, GMSH_SET, WID->view_butt[21]->value()); - - if(force || WID->view_butt[22]->changed()) - opt_view_draw_scalars(i, GMSH_SET, WID->view_butt[22]->value()); - - if(force || WID->view_butt[23]->changed()) - opt_view_draw_vectors(i, GMSH_SET, WID->view_butt[23]->value()); - - if(force || WID->view_butt[24]->changed()) - opt_view_draw_tensors(i, GMSH_SET, WID->view_butt[24]->value()); - - // view_values - - if(force || WID->view_value[0]->changed()) - opt_view_custom_min(i, GMSH_SET, WID->view_value[0]->value()); - - if(force || WID->view_value[1]->changed()) - opt_view_custom_max(i, GMSH_SET, WID->view_value[1]->value()); - - if(force || WID->view_value[2]->changed()) - opt_view_nb_iso(i, GMSH_SET, WID->view_value[2]->value()); - - if(force || WID->view_value[3]->changed()) - opt_view_offset0(i, GMSH_SET, WID->view_value[3]->value()); - - if(force || WID->view_value[4]->changed()) - opt_view_offset1(i, GMSH_SET, WID->view_value[4]->value()); - - if(force || WID->view_value[5]->changed()) - opt_view_offset2(i, GMSH_SET, WID->view_value[5]->value()); - - if(force || WID->view_value[6]->changed()) - opt_view_raise0(i, GMSH_SET, WID->view_value[6]->value()); - - if(force || WID->view_value[7]->changed()) - opt_view_raise1(i, GMSH_SET, WID->view_value[7]->value()); - - if(force || WID->view_value[8]->changed()) - opt_view_raise2(i, GMSH_SET, WID->view_value[8]->value()); - - if(force || WID->view_value[9]->changed()) - opt_view_timestep(i, GMSH_SET, WID->view_value[9]->value()); - - if(force || WID->view_value[10]->changed()) - opt_view_arrow_scale(i, GMSH_SET, WID->view_value[10]->value()); - - if(force || WID->view_value[11]->changed()) - opt_view_boundary(i, GMSH_SET, WID->view_value[11]->value()); - - if(force || WID->view_value[12]->changed()) - opt_view_explode(i, GMSH_SET, WID->view_value[12]->value()); - - // view_inputs - - if(force || WID->view_input[0]->changed()) - opt_view_name(i, GMSH_SET, (char*)WID->view_input[0]->value()); - - if(force || WID->view_input[1]->changed()) - opt_view_format(i, GMSH_SET, (char*)WID->view_input[1]->value()); - - // colorbar window - - if(force || (WID->view_colorbar_window->changed() && i!=(int)data)){ - ColorTable_Copy(&((Post_View*)List_Pointer(Post_ViewList,(int)data))->CT); - ColorTable_Paste(&((Post_View*)List_Pointer(Post_ViewList,i))->CT); - } - } - } - - // we clear all the flags - for(i=0; i<VIEW_OPT_BUTT; i++){ - if(WID->view_butt[i]) WID->view_butt[i]->clear_changed(); - if(WID->view_value[i]) WID->view_value[i]->clear_changed(); - if(WID->view_input[i]) WID->view_input[i]->clear_changed(); - WID->view_colorbar_window->clear_changed(); - } - - Draw(); -} - -// Contextual windows for geometry - -void con_geometry_define_parameter_cb(CALLBACK_ARGS){ - add_param((char*)WID->context_geometry_input[0]->value(), - (char*)WID->context_geometry_input[1]->value(), - CTX.filename); -} - -void con_geometry_define_point_cb(CALLBACK_ARGS){ - strcpy(x_text, (char*)WID->context_geometry_input[2]->value()); - strcpy(y_text, WID->context_geometry_input[3]->value()); - strcpy(z_text, WID->context_geometry_input[4]->value()); - strcpy(l_text, WID->context_geometry_input[5]->value()); - add_point(CTX.filename); - ZeroHighlight(&M); - Replot(); -} - -void con_geometry_define_translation_cb(CALLBACK_ARGS){ - strcpy(tx_text, WID->context_geometry_input[6]->value()); - strcpy(ty_text, WID->context_geometry_input[7]->value()); - strcpy(tz_text, WID->context_geometry_input[8]->value()); -} - -void con_geometry_define_rotation_cb(CALLBACK_ARGS){ - strcpy(px_text, WID->context_geometry_input[9]->value()); - strcpy(py_text, WID->context_geometry_input[10]->value()); - strcpy(pz_text, WID->context_geometry_input[11]->value()); - strcpy(ax_text, WID->context_geometry_input[12]->value()); - strcpy(ay_text, WID->context_geometry_input[13]->value()); - strcpy(az_text, WID->context_geometry_input[14]->value()); - strcpy(angle_text, WID->context_geometry_input[15]->value()); -} - -void con_geometry_define_scale_cb(CALLBACK_ARGS){ - strcpy(dx_text, WID->context_geometry_input[16]->value()); - strcpy(dy_text, WID->context_geometry_input[17]->value()); - strcpy(dz_text, WID->context_geometry_input[18]->value()); - strcpy(df_text, WID->context_geometry_input[19]->value()); -} - -void con_geometry_define_symmetry_cb(CALLBACK_ARGS){ - strcpy(sa_text, WID->context_geometry_input[20]->value()); - strcpy(sb_text, WID->context_geometry_input[21]->value()); - strcpy(sc_text, WID->context_geometry_input[22]->value()); - strcpy(sd_text, WID->context_geometry_input[23]->value()); -} - - -// Contextual windows for mesh - -void con_mesh_define_length_cb(CALLBACK_ARGS){ - strcpy(char_length_text, WID->context_mesh_input[0]->value()); -} - -void con_mesh_define_transfinite_line_cb(CALLBACK_ARGS){ - strcpy(trsf_pts_text, WID->context_mesh_input[1]->value()); - strcpy(trsf_type_text, WID->context_mesh_input[2]->value()); -} - -void con_mesh_define_transfinite_volume_cb(CALLBACK_ARGS){ - strcpy(trsf_vol_text, WID->context_mesh_input[3]->value()); -} - diff --git a/Fltk/Callbacks.h b/Fltk/Callbacks.h deleted file mode 100644 index 791493badd344f52b913bc907281cbd76e5cdd75..0000000000000000000000000000000000000000 --- a/Fltk/Callbacks.h +++ /dev/null @@ -1,228 +0,0 @@ -#ifndef _CALLBACKS_H_ -#define _CALLBACKS_H_ - -#define CALLBACK_ARGS Fl_Widget* w, void* data - -int SetGlobalShortcut(int event); - -// Common callbacks - -void cancel_cb(CALLBACK_ARGS) ; -void color_cb(CALLBACK_ARGS) ; -void set_changed_cb(CALLBACK_ARGS); - -// Graphical window - -void status_xyz1p_cb(CALLBACK_ARGS) ; -void status_play_cb(CALLBACK_ARGS) ; -void status_pause_cb(CALLBACK_ARGS) ; -void status_cancel_cb(CALLBACK_ARGS) ; - -// File Menu - -void file_open_cb(CALLBACK_ARGS) ; -void file_merge_cb(CALLBACK_ARGS) ; -void file_save_as_auto_cb(CALLBACK_ARGS) ; -void file_save_as_geo_cb(CALLBACK_ARGS) ; -void file_save_as_geo_options_cb(CALLBACK_ARGS) ; -void file_save_as_msh_cb(CALLBACK_ARGS) ; -void file_save_as_unv_cb(CALLBACK_ARGS) ; -void file_save_as_gref_cb(CALLBACK_ARGS) ; -void file_save_as_eps_simple_cb(CALLBACK_ARGS) ; -void file_save_as_eps_accurate_cb(CALLBACK_ARGS) ; -void file_save_as_jpeg_cb(CALLBACK_ARGS) ; -void file_save_as_gif_cb(CALLBACK_ARGS) ; -void file_save_as_gif_dithered_cb(CALLBACK_ARGS) ; -void file_save_as_gif_transparent_cb(CALLBACK_ARGS) ; -void file_save_as_ppm_cb(CALLBACK_ARGS) ; -void file_save_as_yuv_cb(CALLBACK_ARGS) ; -void file_quit_cb(CALLBACK_ARGS) ; - -// Option General Menu - -void opt_general_cb(CALLBACK_ARGS) ; -void opt_general_color_scheme_cb(CALLBACK_ARGS) ; -void opt_general_ok_cb(CALLBACK_ARGS) ; - -// Option Geometry Menu - -void opt_geometry_cb(CALLBACK_ARGS) ; -void opt_geometry_show_by_entity_num_cb(CALLBACK_ARGS) ; -void opt_geometry_color_scheme_cb(CALLBACK_ARGS) ; -void opt_geometry_ok_cb(CALLBACK_ARGS) ; - -// Option Mesh Menu - -void opt_mesh_cb(CALLBACK_ARGS) ; -void opt_mesh_show_by_entity_num_cb(CALLBACK_ARGS) ; -void opt_mesh_color_scheme_cb(CALLBACK_ARGS) ; -void opt_mesh_ok_cb(CALLBACK_ARGS) ; - -// Option Solver Menu - -void opt_solver_cb(CALLBACK_ARGS) ; -void opt_solver_ok_cb(CALLBACK_ARGS) ; - -// Option Post Menu - -void opt_post_cb(CALLBACK_ARGS) ; -void opt_post_ok_cb(CALLBACK_ARGS) ; - -// Option Statistics Menu - -void opt_statistics_cb(CALLBACK_ARGS) ; -void opt_statistics_update_cb(CALLBACK_ARGS) ; -void opt_statistics_histogram_cb(CALLBACK_ARGS) ; - -// Option Message Menu - -void opt_message_cb(CALLBACK_ARGS) ; -void opt_message_clear_cb(CALLBACK_ARGS) ; -void opt_message_save_cb(CALLBACK_ARGS) ; - -void opt_save_cb(CALLBACK_ARGS) ; - -// Help Menu - -void help_short_cb(CALLBACK_ARGS) ; -void help_command_line_cb(CALLBACK_ARGS) ; -void help_about_cb(CALLBACK_ARGS) ; - -// Module Menu - -void mod_geometry_cb(CALLBACK_ARGS) ; -void mod_mesh_cb(CALLBACK_ARGS) ; -void mod_solver_cb(CALLBACK_ARGS) ; -void mod_post_cb(CALLBACK_ARGS) ; -void mod_back_cb(CALLBACK_ARGS) ; -void mod_forward_cb(CALLBACK_ARGS) ; - -// Dynamic Geometry Menus - -void geometry_elementary_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_new_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_new_parameter_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_new_point_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_new_line_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_new_spline_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_new_circle_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_new_ellipsis_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_new_planesurface_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_new_ruledsurface_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_new_volume_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_translate_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_translate_point_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_translate_curve_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_translate_surface_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_rotate_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_rotate_point_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_rotate_curve_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_rotate_surface_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_scale_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_scale_point_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_scale_curve_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_scale_surface_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_symmetry_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_symmetry_point_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_symmetry_curve_cb(CALLBACK_ARGS) ; -void geometry_elementary_add_symmetry_surface_cb(CALLBACK_ARGS) ; -void geometry_elementary_translate_cb(CALLBACK_ARGS) ; -void geometry_elementary_translate_point_cb(CALLBACK_ARGS) ; -void geometry_elementary_translate_curve_cb(CALLBACK_ARGS) ; -void geometry_elementary_translate_surface_cb(CALLBACK_ARGS) ; -void geometry_elementary_rotate_cb(CALLBACK_ARGS) ; -void geometry_elementary_rotate_point_cb(CALLBACK_ARGS) ; -void geometry_elementary_rotate_curve_cb(CALLBACK_ARGS) ; -void geometry_elementary_rotate_surface_cb(CALLBACK_ARGS) ; -void geometry_elementary_scale_cb(CALLBACK_ARGS) ; -void geometry_elementary_scale_point_cb(CALLBACK_ARGS) ; -void geometry_elementary_scale_curve_cb(CALLBACK_ARGS) ; -void geometry_elementary_scale_surface_cb(CALLBACK_ARGS) ; -void geometry_elementary_symmetry_cb(CALLBACK_ARGS) ; -void geometry_elementary_symmetry_point_cb(CALLBACK_ARGS) ; -void geometry_elementary_symmetry_curve_cb(CALLBACK_ARGS) ; -void geometry_elementary_symmetry_surface_cb(CALLBACK_ARGS) ; -void geometry_elementary_extrude_cb(CALLBACK_ARGS) ; -void geometry_elementary_extrude_translate_cb(CALLBACK_ARGS) ; -void geometry_elementary_extrude_translate_point_cb(CALLBACK_ARGS) ; -void geometry_elementary_extrude_translate_curve_cb(CALLBACK_ARGS) ; -void geometry_elementary_extrude_translate_surface_cb(CALLBACK_ARGS) ; -void geometry_elementary_extrude_rotate_cb(CALLBACK_ARGS) ; -void geometry_elementary_extrude_rotate_point_cb(CALLBACK_ARGS) ; -void geometry_elementary_extrude_rotate_curve_cb(CALLBACK_ARGS) ; -void geometry_elementary_extrude_rotate_surface_cb(CALLBACK_ARGS) ; -void geometry_elementary_delete_cb(CALLBACK_ARGS) ; -void geometry_elementary_delete_point_cb(CALLBACK_ARGS) ; -void geometry_elementary_delete_curve_cb(CALLBACK_ARGS) ; -void geometry_elementary_delete_surface_cb(CALLBACK_ARGS) ; -void geometry_physical_cb(CALLBACK_ARGS) ; -void geometry_physical_add_cb(CALLBACK_ARGS) ; -void geometry_physical_add_point_cb (CALLBACK_ARGS) ; -void geometry_physical_add_curve_cb (CALLBACK_ARGS) ; -void geometry_physical_add_surface_cb (CALLBACK_ARGS) ; -void geometry_physical_add_volume_cb (CALLBACK_ARGS) ; -void geometry_edit_cb(CALLBACK_ARGS) ; -void geometry_reload_cb(CALLBACK_ARGS) ; - -void con_geometry_define_parameter_cb(CALLBACK_ARGS) ; -void con_geometry_define_point_cb(CALLBACK_ARGS) ; -void con_geometry_define_translation_cb(CALLBACK_ARGS) ; -void con_geometry_define_rotation_cb(CALLBACK_ARGS) ; -void con_geometry_define_scale_cb(CALLBACK_ARGS) ; -void con_geometry_define_symmetry_cb(CALLBACK_ARGS) ; - -// Dynamic Mesh Menus - -void mesh_save_cb(CALLBACK_ARGS) ; -void mesh_define_cb(CALLBACK_ARGS) ; -void mesh_1d_cb(CALLBACK_ARGS) ; -void mesh_2d_cb(CALLBACK_ARGS) ; -void mesh_3d_cb(CALLBACK_ARGS) ; -void mesh_define_length_cb (CALLBACK_ARGS) ; -void mesh_define_recombine_cb (CALLBACK_ARGS) ; -void mesh_define_transfinite_cb (CALLBACK_ARGS) ; -void mesh_define_transfinite_line_cb(CALLBACK_ARGS) ; -void mesh_define_transfinite_surface_cb(CALLBACK_ARGS) ; -void mesh_define_transfinite_volume_cb(CALLBACK_ARGS) ; - -void con_mesh_define_length_cb(CALLBACK_ARGS) ; -void con_mesh_define_transfinite_line_cb(CALLBACK_ARGS) ; -void con_mesh_define_transfinite_volume_cb(CALLBACK_ARGS) ; - -// Dynamic Solver Menus - -void getdp_cb(CALLBACK_ARGS); -void getdp_file_open_cb(CALLBACK_ARGS); -void getdp_file_edit_cb(CALLBACK_ARGS); -void getdp_choose_mesh_cb(CALLBACK_ARGS); -void getdp_pre_cb(CALLBACK_ARGS); -void getdp_cal_cb(CALLBACK_ARGS); -void getdp_post_cb(CALLBACK_ARGS); -void getdp_kill_cb(CALLBACK_ARGS); -void getdp_choose_command_cb(CALLBACK_ARGS); -void getdp_ok_cb(CALLBACK_ARGS); - -// Dynamic post menus - -void view_toggle_cb(CALLBACK_ARGS) ; -void view_reload_cb(CALLBACK_ARGS) ; -void view_reload_all_cb(CALLBACK_ARGS) ; -void view_reload_visible_cb(CALLBACK_ARGS) ; -void view_remove_cb(CALLBACK_ARGS) ; -void view_remove_all_cb(CALLBACK_ARGS) ; -void view_remove_visible_cb(CALLBACK_ARGS) ; -void view_save_ascii_cb(CALLBACK_ARGS) ; -void view_save_binary_cb(CALLBACK_ARGS) ; -void view_duplicate_cb(CALLBACK_ARGS) ; -void view_duplicate_with_options_cb(CALLBACK_ARGS) ; -void view_applybgmesh_cb(CALLBACK_ARGS) ; -void view_options_cb(CALLBACK_ARGS) ; -void view_plugin_cb(CALLBACK_ARGS) ; -void view_options_plugin_cb(CALLBACK_ARGS) ; -void view_options_custom_cb(CALLBACK_ARGS) ; -void view_options_timestep_cb(CALLBACK_ARGS) ; -void view_options_ok_cb(CALLBACK_ARGS) ; - -#endif - diff --git a/Fltk/Colorbar_Window.cpp b/Fltk/Colorbar_Window.cpp deleted file mode 100644 index 0ca53097323844fc5583295e14cf054f21d2a676..0000000000000000000000000000000000000000 --- a/Fltk/Colorbar_Window.cpp +++ /dev/null @@ -1,602 +0,0 @@ -// $Id: Colorbar_Window.cpp,v 1.12 2001-08-11 23:28:31 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Numeric.h" -#include "GUI.h" -#include "ColorTable.h" -#include "Colorbar_Window.h" -#include "Context.h" - -extern Context_T CTX; - -#define UNDEFINED 0 -#define EPS 1.e-10 - -// This file defines the Colorbar_Window class (subclass of Fl_Window) - -// The constructor - -Colorbar_Window::Colorbar_Window(int x,int y,int w,int h,const char *l) - : Fl_Window(x,y,w,h,l){ - - ct = NULL; - label = NULL; - help_flag = 1; - font_height = CTX.fontsize ; - marker_height = font_height ; - wedge_height = marker_height ; - marker_pos = 0 ; - minval = maxval = 0.0 ; -} - - -// rgb on [0, 1], sv returned on [0, 1] and h on [0, 6]. -// Exception: h is returned UNDEFINED if S==0. - -#define RETURN_HSV(h,s,v) {*H=h; *S=s; *V=v; return;} - -static void RGB_to_HSV(double R, double G, double B, - double *H, double *S, double *V) { - double v, x, f; - int i; - - x = DMIN(DMIN(R, G), B); - v = DMAX(DMAX(R, G), B); - if(v == x) RETURN_HSV(UNDEFINED, 0, v); - f = (R == x) ? G - B : ((G == x) ? B - R : R - G); - i = (R == x) ? 3 : ((G == x) ? 5 : 1); - RETURN_HSV(i - f /(v - x), (v - x)/v, v); -} - -// h given on [0, 6] or UNDEFINED. s and v given on [0, 1]. -// rgb each returned on [0, 1]. - -#define RETURN_RGB(r,g,b) {*R=r; *G=g; *B=b; return;} - -static void HSV_to_RGB(double H, double S, double V, - double *R, double *G, double *B) { - double m, n, f; - int i; - - if (H == UNDEFINED) RETURN_RGB(V, V, V); - i = (int)floor(H); - f = H - i; - if ( !(i&1) ) f = 1 - f; // if i is even - m = V * (1 - S); - n = V * (1 - S * f); - - switch (i) { - case 6: - case 0: RETURN_RGB(V, n, m); - case 1: RETURN_RGB(n, V, m); - case 2: RETURN_RGB(m, V, n); - case 3: RETURN_RGB(m, n, V); - case 4: RETURN_RGB(n, m, V); - case 5: RETURN_RGB(V, m, n); - } -} - - -// Convert window X coordinate to color table index - -int Colorbar_Window::x_to_index(int x){ - int index; - index = (int) (x * (float) ct->size / (float)w()); - if (index<0) - index = 0; - else if (index >= ct->size) - index = ct->size-1; - return index; -} - -// Convert color table index to window X coordinate - -int Colorbar_Window::index_to_x(int index){ - int x; - x = (int) (index * (float)w() / (float)(ct->size-1)); - if (x >= w()) - x = w() - 1; - return x; -} - -// Convert a color intensity to a window Y coordinate - -int Colorbar_Window::intensity_to_y(int intensity){ - int y; - y = (int) (wedge_y - intensity * (float)wedge_y/255.); - if (y < 0) - y = 0; - else if (y >= wedge_y) - y = wedge_y - 1; - return y; -} - -// Convert a window Y coordinate to a color intensity - -int Colorbar_Window::y_to_intensity(int y){ - int intensity; - intensity = (int) ((wedge_y - y) * 255. / (float)wedge_y); - if (intensity < 0) - intensity = 0; - else if (intensity > 255) - intensity = 255; - return intensity; -} - -// Redraw part of the Colorbar_Window (between a and b) - -void Colorbar_Window::redraw_range(int a, int b){ - int i; - int x,y, px,py; - int x1, y1, x2, y2; - int intensity; - double H,S,V; - - make_current(); - - if(a < 0) a = 0; - if(b >= ct->size) b = ct->size-1; - - // calculate region to update - x1 = index_to_x(a); - x2 = index_to_x(b); - y1 = intensity_to_y(255); - y2 = intensity_to_y(0); - - // erase region - fl_color(color_bg); - fl_rectf(x1, y1, x2-x1+1, y2-y1+1); - - // redraw region of entries in interval [a,b] - if (a > 0) a--; - if (b < ct->size-1) b++; - - // draw red or hue levels - for (i=a ; i<=b ; i++) { - x = index_to_x(i); - if(ct->ipar[COLORTABLE_MODE] == COLORTABLE_RGB) - intensity = UNPACK_RED(ct->table[i]); - else if(ct->ipar[COLORTABLE_MODE] == COLORTABLE_HSV){ - RGB_to_HSV(UNPACK_RED (ct->table[i])/255., - UNPACK_GREEN(ct->table[i])/255., - UNPACK_BLUE (ct->table[i])/255., - &H,&S,&V); - intensity = (int)(H/6.*255.+EPS); - } - y = intensity_to_y(intensity); - if (i!=a){ - fl_color(FL_RED); - fl_line(px,py,x,y); - } - px = x; py = y; - } - - // draw green or saturation levels - for (i=a ; i<=b ; i++) { - x = index_to_x(i); - if(ct->ipar[COLORTABLE_MODE] == COLORTABLE_RGB) - intensity = UNPACK_GREEN(ct->table[i]); - else if(ct->ipar[COLORTABLE_MODE] == COLORTABLE_HSV){ - RGB_to_HSV(UNPACK_RED (ct->table[i])/255., - UNPACK_GREEN(ct->table[i])/255., - UNPACK_BLUE (ct->table[i])/255., - &H,&S,&V); - intensity = (int)(S*255.); - } - y = intensity_to_y(intensity); - if (i!=a){ - fl_color(FL_GREEN); - fl_line(px,py,x,y); - } - px = x; py = y; - } - - // draw blue or value levels - for (i=a ; i<=b ; i++) { - x = index_to_x(i); - if(ct->ipar[COLORTABLE_MODE] == COLORTABLE_RGB) - intensity = UNPACK_BLUE(ct->table[i]); - else if(ct->ipar[COLORTABLE_MODE] == COLORTABLE_HSV){ - RGB_to_HSV(UNPACK_RED (ct->table[i])/255., - UNPACK_GREEN(ct->table[i])/255., - UNPACK_BLUE (ct->table[i])/255., - &H,&S,&V); - intensity = (int)(V*255.); - } - y = intensity_to_y(intensity); - if (i!=a){ - fl_color(FL_BLUE); - fl_line(px,py,x,y); - } - px = x; py = y; - } - - // draw alpha levels - for (i=a ; i<=b ; i++) { - x = index_to_x(i); - y = intensity_to_y(UNPACK_ALPHA(ct->table[i])); - if (i!=a){ - fl_color(contrast(FL_BLACK,color_bg)); - fl_line(px,py,x,y); - } - px = x; py = y; - } - - // draw the color bar - for (x=x1 ; x<=x2 ; x++) { - int r, g, b; - unsigned int color; - i = x_to_index(x); - color = ct->table[i]; - r = UNPACK_RED(color); - g = UNPACK_GREEN(color); - b = UNPACK_BLUE(color); - fl_color(r,g,b); - fl_line(x, wedge_y, x, wedge_y + wedge_height-1); - } - - // print colortable mode and help - fl_font(FL_HELVETICA, font_height); - fl_color(contrast(FL_BLACK,color_bg)); - int xx0=10, xx1=12*font_height, yy0=10; - if (help_flag){ - i = 0; - fl_draw("1, 2, ..., 6", xx0,yy0+(i+1)*font_height); - fl_draw( "select predefined colormap", xx1,yy0+(i+1)*font_height); i++; - fl_draw("mouse1", xx0,yy0+(i+1)*font_height); - fl_draw( "draw red or hue channel", xx1,yy0+(i+1)*font_height); i++; - fl_draw("mouse2 or Shift+mouse1", xx0,yy0+(i+1)*font_height); - fl_draw( "draw green or saturation channel", xx1,yy0+(i+1)*font_height); i++; - fl_draw("mouse3", xx0,yy0+(i+1)*font_height); - fl_draw( "draw blue or value channel", xx1,yy0+(i+1)*font_height); i++; - fl_draw("Ctrl+mouse1", xx0,yy0+(i+1)*font_height); - fl_draw( "draw alpha channel", xx1,yy0+(i+1)*font_height); i++; - fl_draw("c, p, r", xx0,yy0+(i+1)*font_height); - fl_draw( "copy, paste or reset current colormap", xx1,yy0+(i+1)*font_height); i++; - fl_draw("m", xx0,yy0+(i+1)*font_height); - fl_draw( "toggle RGB/HSV mode", xx1,yy0+(i+1)*font_height); i++; - fl_draw("left, right", xx0,yy0+(i+1)*font_height); - fl_draw( "move or rotate colormap", xx1,yy0+(i+1)*font_height); i++; - fl_draw("up, down", xx0,yy0+(i+1)*font_height); - fl_draw( "modify color curvature", xx1,yy0+(i+1)*font_height); i++; - //fl_draw("Ctrl+up, Ctrl+down", xx0,yy0+(i+1)*font_height); - //fl_draw( "modify alpha curvature", xx1,yy0+(i+1)*font_height); i++; - fl_draw("i, Ctrl+i", xx0,yy0+(i+1)*font_height); - fl_draw( "invert x or y range", xx1,yy0+(i+1)*font_height); i++; - fl_draw("b, Ctrl+b", xx0,yy0+(i+1)*font_height); - fl_draw( "increase or decrease gamma", xx1,yy0+(i+1)*font_height); i++; - fl_draw("h", xx0,yy0+(i+1)*font_height); - fl_draw( "show this help message", xx1,yy0+(i+1)*font_height); i++; - } - else - if(ct->ipar[COLORTABLE_MODE] == COLORTABLE_RGB) - fl_draw("RGB", xx0, yy0+font_height); - else if(ct->ipar[COLORTABLE_MODE] == COLORTABLE_HSV) - fl_draw("HSV", xx0, yy0+font_height); -} - - -// Redraw the marker and the text - -void Colorbar_Window::redraw_marker(){ - int x, y0, y1; - char str[50]; - float val; - - make_current(); - - y0 = marker_y; - y1 = h() - 1; - - fl_color(color_bg); - fl_rectf(0, y0, w(), y1-y0+1); - - // draw marker below color wedge - x = index_to_x(marker_pos); - fl_color(contrast(FL_BLACK,color_bg)); - fl_line(x, marker_y, x, marker_y+marker_height); - fl_line(x, marker_y, x-3, marker_y+6); - fl_line(x, marker_y, x+3, marker_y+6); - - // draw marker value - fl_font(FL_HELVETICA, font_height); - val = minval + (maxval-minval) * ((float)marker_pos/(float)(ct->size-1)); - sprintf(str, "%g", val); - fl_draw(str, 10, label_y); -} - -// Draw everything - -void Colorbar_Window::draw(){ - if(ct){ - label_y = h() - 5; - marker_y = label_y - marker_height - font_height; - wedge_y = marker_y - wedge_height; - color_bg = fl_color_cube(UNPACK_RED(CTX.color.bg)*FL_NUM_RED/256, - UNPACK_GREEN(CTX.color.bg)*FL_NUM_GREEN/256, - UNPACK_BLUE(CTX.color.bg)*FL_NUM_BLUE/256); - redraw_range(0, ct->size-1); - redraw_marker(); - } -} - -// Update - -void Colorbar_Window::update(char *name, float min, float max, - ColorTable *table, int *changed){ - label = name; - ct = table; - viewchanged = changed; - minval = min; - maxval = max; - redraw(); -} - -// Handle - -int Colorbar_Window::handle(int event){ - static int p1=0, p2=0, p3=0, p4=0; - static int pentry, move_marker; - int i, ibut, xpos, ypos, modify, entry, compute; - - modify = 0; - compute = 0; - - switch(event){ - - case FL_SHORTCUT : - - if(Fl::test_shortcut('0')){ - ColorTable_InitParam(0, ct, 1, 1); compute=1; - } - else if(Fl::test_shortcut('1')){ - ColorTable_InitParam(1, ct, 1, 1); compute=1; - } - else if(Fl::test_shortcut('2')){ - ColorTable_InitParam(2, ct, 1, 1); compute=1; - } - else if(Fl::test_shortcut('3')){ - ColorTable_InitParam(3, ct, 1, 1); compute=1; - } - else if(Fl::test_shortcut('4')){ - ColorTable_InitParam(4, ct, 1, 1); compute=1; - } - else if(Fl::test_shortcut('5')){ - ColorTable_InitParam(5, ct, 1, 1); compute=1; - } - else if(Fl::test_shortcut('6')){ - ColorTable_InitParam(6, ct, 1, 1); compute=1; - } - else if(Fl::test_shortcut('7')){ - ColorTable_InitParam(7, ct, 1, 1); compute=1; - } - else if(Fl::test_shortcut('8')){ - ColorTable_InitParam(8, ct, 1, 1); compute=1; - } - else if(Fl::test_shortcut('9')){ - ColorTable_InitParam(9, ct, 1, 1); compute=1; - } - else if(Fl::test_shortcut('c')){ - ColorTable_Copy(ct); - } - else if(Fl::test_shortcut('p')){ - ColorTable_Paste(ct); - draw(); - } - else if(Fl::test_shortcut('h')){ - help_flag = !help_flag; - draw(); - } - else if(Fl::test_shortcut('r')){ - ColorTable_InitParam(ct->ipar[COLORTABLE_NUMBER], - ct, 1, 1); - compute=1; - } - else if(Fl::test_shortcut('m')){ - if(ct->ipar[COLORTABLE_MODE] == COLORTABLE_RGB) - ct->ipar[COLORTABLE_MODE] = COLORTABLE_HSV; - else - ct->ipar[COLORTABLE_MODE] = COLORTABLE_RGB; - draw(); - } - else if(Fl::test_shortcut('i')){ - ct->ipar[COLORTABLE_SWAP] = !ct->ipar[COLORTABLE_SWAP]; - compute=1; - } - else if(Fl::test_shortcut(FL_CTRL + 'i')){ - ct->ipar[COLORTABLE_INVERT] = !ct->ipar[COLORTABLE_INVERT]; - compute=1; - } - else if(Fl::test_shortcut('b')){ - ct->fpar[COLORTABLE_BETA] += 0.05; - if(ct->fpar[COLORTABLE_BETA]>1.0) - ct->fpar[COLORTABLE_BETA] = 1.0; - compute = 1; - } - else if(Fl::test_shortcut(FL_CTRL + 'b')){ - ct->fpar[COLORTABLE_BETA] -= 0.05; - if(ct->fpar[COLORTABLE_BETA]<-1.0) - ct->fpar[COLORTABLE_BETA] = -1.0; - compute = 1; - } - else if(Fl::test_shortcut(FL_Left)){ - ct->fpar[COLORTABLE_BIAS] -= 0.05; - compute = 1; - } - else if(Fl::test_shortcut(FL_CTRL + FL_Left)){ - ct->ipar[COLORTABLE_ROTATE] += 5; - if(ct->ipar[COLORTABLE_ROTATE] > ct->size-1) - ct->ipar[COLORTABLE_ROTATE] -= ct->size-1; - compute = 1; - } - else if(Fl::test_shortcut(FL_Right)){ - ct->fpar[COLORTABLE_BIAS] += 0.05; - compute = 1; - } - else if(Fl::test_shortcut(FL_CTRL + FL_Right)){ - ct->ipar[COLORTABLE_ROTATE] -= 5; - if(ct->ipar[COLORTABLE_ROTATE] < -(ct->size-1)) - ct->ipar[COLORTABLE_ROTATE] += ct->size-1; - compute = 1; - } - else if(Fl::test_shortcut(FL_Up)){ - ct->fpar[COLORTABLE_CURVE] -= 0.05; - compute = 1; - } - else if(Fl::test_shortcut(FL_CTRL + FL_Up)){ - ct->fpar[COLORTABLE_ALPHAPOW] -= 0.05; - if (ct->fpar[COLORTABLE_ALPHAPOW] < 0.0) - ct->fpar[COLORTABLE_ALPHAPOW] = 0.0; - compute = 1; - } - else if(Fl::test_shortcut(FL_Down)){ - ct->fpar[COLORTABLE_CURVE] += 0.05; - compute = 1; - } - else if(Fl::test_shortcut(FL_CTRL + FL_Down)){ - ct->fpar[COLORTABLE_ALPHAPOW] += 0.05; - compute = 1; - } - else{ - return Fl_Window::handle(event); - } - - if(compute){ - ColorTable_Recompute(ct, 1, 1); - draw(); - *viewchanged = 1; - set_changed(); - } - // discard the event for other uses - return 1; - - case FL_PUSH : - ibut = Fl::event_button(); - xpos = Fl::event_x(); - ypos = Fl::event_y(); - if(help_flag){ - help_flag = 0; - draw(); - } - // change color function or marker position - if (ypos < wedge_y) - move_marker = 0; - else - move_marker = 1; - - // determine which curve to modify - if (Fl::event_state(FL_CTRL)) - p4 = 1; - else if(ibut == 1 && !Fl::event_state(FL_SHIFT)) - p1 = 1 ; - else if(ibut == 2 || - ibut == 1 && Fl::event_state(FL_SHIFT)) - p2 = 1 ; - else - p3 = 1 ; - pentry = x_to_index(xpos); - modify = 1; - break; - - case FL_RELEASE : - ibut = Fl::event_button(); - xpos = Fl::event_x(); - ypos = Fl::event_y(); - p1 = 0 ; - p2 = 0 ; - p3 = 0 ; - p4 = 0; - break; - - case FL_DRAG : - ibut = Fl::event_button(); - xpos = Fl::event_x(); - ypos = Fl::event_y(); - modify = 1; - break; - - default: - // don't know what to do with the event: passing it to parent - return Fl_Window::handle(event); - - } - - // Modify one or more of the color curves - - if (modify && (p1 || p2 || p3 || p4)) { - // calculate which entry in color table to change - entry = x_to_index(xpos); - // update - if (move_marker) { - // changing marker position - marker_pos = entry; - redraw_marker(); - } - else { - // changing color graph - int a, b, value; - - *viewchanged = 1; - set_changed(); - - value = y_to_intensity(ypos); - - if (pentry<=entry) { - a = pentry; - b = entry; - } - else { - a = entry; - b = pentry; - } - - // update entries from 'pentry' to 'entry' - for (i=a; i<=b; i++) { - int red, green, blue, alpha; - double R,G,B,H,S,V; - - red = UNPACK_RED (ct->table[i]); - green = UNPACK_GREEN(ct->table[i]); - blue = UNPACK_BLUE (ct->table[i]); - alpha = UNPACK_ALPHA(ct->table[i]); - - if(ct->ipar[COLORTABLE_MODE]==COLORTABLE_RGB){ - if (p1) { red = value; } - if (p2) { green = value; } - if (p3) { blue = value; } - if (p4) { alpha = value; } - } - else if(ct->ipar[COLORTABLE_MODE]==COLORTABLE_HSV){ - RGB_to_HSV((double)red/255.,(double)green/255.,(double)blue/255., - &H,&S,&V); - if (p1) { H = 6.*(double)value/255.+EPS ; } - if (p2) { S = (double)value/255.; } - if (p3) { V = (double)value/255.; } - if (p4) { alpha = value; } - HSV_to_RGB(H, S, V, &R,&G,&B); - red = (int)(255 * R); - green = (int)(255 * G); - blue = (int)(255 * B); - } - - ct->table[i] = PACK_COLOR(red,green,blue,alpha); - } - - // redraw the color curves - if (pentry<entry) - redraw_range(pentry-1, entry+1); - else - redraw_range(entry-1, pentry+1); - - pentry = entry; - - } - return 1; - } - - return 1; - -} - - diff --git a/Fltk/Colorbar_Window.h b/Fltk/Colorbar_Window.h deleted file mode 100644 index ce037d5d5a55256cffce3f09f47fdf36413f2874..0000000000000000000000000000000000000000 --- a/Fltk/Colorbar_Window.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef _COLORBAR_WINDOW_H -#define _COLORBAR_WINDOW_H - -#include "ColorTable.h" - -class Colorbar_Window : public Fl_Window { - void draw(); - int handle(int); - - // new - int x_to_index(int x); - int index_to_x(int index); - int y_to_intensity(int y); - int intensity_to_y(int intensity); - void redraw_range(int a, int b); - void redraw_marker(); - - int font_height, marker_height, wedge_height; - char *label; - - float minval, maxval; // min and max data values - int wedge_y; // top coord of color wedge - int marker_y; // top coord of marker arrow - int label_y; // y coord of text labels - int help_flag; // if nonzero, print help message - int marker_pos; // position of marker as index into table - - ColorTable *ct; // pointer to the color table (allocated in Post_View) - int *viewchanged;// pointer to changed bit in view - Fl_Color color_bg; - -public: - - Colorbar_Window(int x,int y,int w,int h,const char *l=0); - void update(char *name, float min, float max, ColorTable *ct, int *changed); - -}; - -#endif diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp deleted file mode 100644 index 9f13c26af91a59847e60dc936cdc0b638f24b546..0000000000000000000000000000000000000000 --- a/Fltk/GUI.cpp +++ /dev/null @@ -1,2707 +0,0 @@ -// $Id: GUI.cpp,v 1.107 2001-08-12 14:23:36 geuzaine Exp $ - -// To make the interface as visually consistent as possible, please: -// - use the BH, BW, WB, IW values for button heights/widths, window borders, etc. -// - use CTX.fontsize for font sizes -// - examine what's already done before adding something new... - -#include "PluginManager.h" -#include "Plugin.h" - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Numeric.h" -#include "GmshVersion.h" -#include "Context.h" -#include "Options.h" -#include "Geo.h" -#include "Mesh.h" -#include "Draw.h" -#include "GUI.h" -#include "Callbacks.h" -#include "Bitmaps.h" -#include "Icon.h" -#include "OpenFile.h" -#include "GetOptions.h" - -#define WINDOW_BOX FL_FLAT_BOX - -#define IW (10*CTX.fontsize) // input field width -#define BW (3*IW/2) // width of a button with external label -#define BB (5*CTX.fontsize-2) // width of a button with internal label -#define BH (2*CTX.fontsize+1) // button height -#define WB (5) // window border - -extern Context_T CTX; - -//******************* Definition of the static menus *********************************** - -Fl_Menu_Item m_menubar_table[] = { - {"File", 0, 0, 0, FL_SUBMENU}, - {"Open...", FL_CTRL+'o', (Fl_Callback *)file_open_cb, 0}, - {"Merge...", FL_CTRL+'m', (Fl_Callback *)file_merge_cb, 0}, - {"Save as", 0, 0, 0, FL_MENU_DIVIDER|FL_SUBMENU}, - {"By extension...", FL_CTRL+'p', (Fl_Callback *)file_save_as_auto_cb, 0, FL_MENU_DIVIDER}, - {"MSH native mesh format...", 0, (Fl_Callback *)file_save_as_msh_cb, 0}, - {"UNV universal mesh format...", 0, (Fl_Callback *)file_save_as_unv_cb, 0}, - {"GREF gref mesh format...", 0, (Fl_Callback *)file_save_as_gref_cb, 0}, - {"GEO flattened geometry...", 0, (Fl_Callback *)file_save_as_geo_cb, 0}, - {"GEO complete options...", 0, (Fl_Callback *)file_save_as_geo_options_cb, 0}, - {"EPS simple sort postscript...", 0, (Fl_Callback *)file_save_as_eps_simple_cb, 0}, - {"EPS accurate sort postscript...", 0, (Fl_Callback *)file_save_as_eps_accurate_cb, 0}, - {"JPEG...", 0, (Fl_Callback *)file_save_as_jpeg_cb, 0}, - {"GIF...", 0, (Fl_Callback *)file_save_as_gif_cb, 0}, - {"GIF dithered...", 0, (Fl_Callback *)file_save_as_gif_dithered_cb, 0}, - {"GIF transparent...", 0, (Fl_Callback *)file_save_as_gif_transparent_cb, 0}, - {"PPM...", 0, (Fl_Callback *)file_save_as_ppm_cb, 0}, - {"UCB YUV...", 0, (Fl_Callback *)file_save_as_yuv_cb, 0}, - {0}, - {"Messages...", FL_SHIFT+'l', (Fl_Callback *)opt_message_cb, 0}, - {"Statistics...", FL_SHIFT+'i', (Fl_Callback *)opt_statistics_cb, 0, FL_MENU_DIVIDER}, - {"Quit", FL_CTRL+'q', (Fl_Callback *)file_quit_cb, 0}, - {0}, - {"Options",0,0,0,FL_SUBMENU}, - {"General...", FL_SHIFT+'o', (Fl_Callback *)opt_general_cb, 0, FL_MENU_DIVIDER}, - {"Geometry...", FL_SHIFT+'g', (Fl_Callback *)opt_geometry_cb, 0}, - {"Mesh...", FL_SHIFT+'m', (Fl_Callback *)opt_mesh_cb, 0}, - {"Solver...", FL_SHIFT+'s', (Fl_Callback *)opt_solver_cb, 0}, - {"Post-processing...", FL_SHIFT+'p', (Fl_Callback *)opt_post_cb, 0, FL_MENU_DIVIDER}, - {"Save options now", 0, (Fl_Callback *)opt_save_cb, 0}, - {0}, - {"Help",0,0,0,FL_SUBMENU}, - {"Current options...", 0, (Fl_Callback *)status_xyz1p_cb, (void*)4}, - {"Shortcuts...", 0, (Fl_Callback *)help_short_cb, 0}, - {"Command line options...", 0, (Fl_Callback *)help_command_line_cb, 0, FL_MENU_DIVIDER}, - {"About...", 0, (Fl_Callback *)help_about_cb, 0}, - {0}, - {0} -}; - -Fl_Menu_Item m_module_table[] = { - {"Geometry", 'g', (Fl_Callback *)mod_geometry_cb, 0}, - {"Mesh", 'm', (Fl_Callback *)mod_mesh_cb, 0}, - {"Solver", 's', (Fl_Callback *)mod_solver_cb, 0}, - {"Post-processing", 'p', (Fl_Callback *)mod_post_cb, 0}, - {0} -}; - -//********************* Definition of the dynamic contexts ***************************** - -Context_Item menu_geometry[] = -{ { "0Geometry", NULL } , - { "Elementary", (Fl_Callback *)geometry_elementary_cb } , - { "Physical", (Fl_Callback *)geometry_physical_cb } , - { "Edit", (Fl_Callback *)geometry_edit_cb } , - { "Reload", (Fl_Callback *)geometry_reload_cb } , - { NULL } -}; - Context_Item menu_geometry_elementary[] = - { { "0Geometry Elementary", NULL } , - { "Add", (Fl_Callback *)geometry_elementary_add_cb } , - { "Translate", (Fl_Callback *)geometry_elementary_translate_cb } , - { "Rotate", (Fl_Callback *)geometry_elementary_rotate_cb } , - { "Scale", (Fl_Callback *)geometry_elementary_scale_cb } , - { "Symmetry", (Fl_Callback *)geometry_elementary_symmetry_cb } , - { "Extrude", (Fl_Callback *)geometry_elementary_extrude_cb } , - { "Delete", (Fl_Callback *)geometry_elementary_delete_cb } , - { NULL } - }; - Context_Item menu_geometry_elementary_add[] = - { { "0Geometry Elementary Add", NULL } , - { "New", (Fl_Callback *)geometry_elementary_add_new_cb } , - { "Translate", (Fl_Callback *)geometry_elementary_add_translate_cb } , - { "Rotate", (Fl_Callback *)geometry_elementary_add_rotate_cb } , - { "Scale", (Fl_Callback *)geometry_elementary_add_scale_cb } , - { "Symmetry", (Fl_Callback *)geometry_elementary_add_symmetry_cb } , - { NULL } - }; - Context_Item menu_geometry_elementary_add_new[] = - { { "0Geometry Elementary Add New", NULL } , - { "Parameter", (Fl_Callback *)geometry_elementary_add_new_parameter_cb } , - { "Point", (Fl_Callback *)geometry_elementary_add_new_point_cb } , - { "Line", (Fl_Callback *)geometry_elementary_add_new_line_cb } , - { "Spline", (Fl_Callback *)geometry_elementary_add_new_spline_cb } , - { "Circle", (Fl_Callback *)geometry_elementary_add_new_circle_cb } , - { "Ellipsis", (Fl_Callback *)geometry_elementary_add_new_ellipsis_cb } , - { "Plane Surface", (Fl_Callback *)geometry_elementary_add_new_planesurface_cb } , - { "Ruled Surface", (Fl_Callback *)geometry_elementary_add_new_ruledsurface_cb } , - { "Volume", (Fl_Callback *)geometry_elementary_add_new_volume_cb } , - { NULL } - }; - Context_Item menu_geometry_elementary_add_translate[] = - { { "0Geometry Elementary Add Translate", NULL } , - { "Point", (Fl_Callback *)geometry_elementary_add_translate_point_cb } , - { "Curve", (Fl_Callback *)geometry_elementary_add_translate_curve_cb } , - { "Surface", (Fl_Callback *)geometry_elementary_add_translate_surface_cb } , - { NULL } - }; - Context_Item menu_geometry_elementary_add_rotate[] = - { { "0Geometry Elementary Add Rotate", NULL } , - { "Point", (Fl_Callback *)geometry_elementary_add_rotate_point_cb } , - { "Curve", (Fl_Callback *)geometry_elementary_add_rotate_curve_cb } , - { "Surface", (Fl_Callback *)geometry_elementary_add_rotate_surface_cb } , - { NULL } - }; - Context_Item menu_geometry_elementary_add_scale[] = - { { "0Geometry Elementary Add Scale", NULL } , - { "Point", (Fl_Callback *)geometry_elementary_add_scale_point_cb } , - { "Curve", (Fl_Callback *)geometry_elementary_add_scale_curve_cb } , - { "Surface", (Fl_Callback *)geometry_elementary_add_scale_surface_cb } , - { NULL } - }; - Context_Item menu_geometry_elementary_add_symmetry[] = - { { "0Geometry Elementary Add Symmetry", NULL } , - { "Point", (Fl_Callback *)geometry_elementary_add_symmetry_point_cb } , - { "Curve", (Fl_Callback *)geometry_elementary_add_symmetry_curve_cb } , - { "Surface", (Fl_Callback *)geometry_elementary_add_symmetry_surface_cb } , - { NULL } - }; - Context_Item menu_geometry_elementary_translate[] = - { { "0Geometry Elementary Translate", NULL } , - { "Point", (Fl_Callback *)geometry_elementary_translate_point_cb } , - { "Curve", (Fl_Callback *)geometry_elementary_translate_curve_cb } , - { "Surface", (Fl_Callback *)geometry_elementary_translate_surface_cb } , - { NULL } - }; - Context_Item menu_geometry_elementary_rotate[] = - { { "0Geometry Elementary Rotate", NULL } , - { "Point", (Fl_Callback *)geometry_elementary_rotate_point_cb } , - { "Curve", (Fl_Callback *)geometry_elementary_rotate_curve_cb } , - { "Surface", (Fl_Callback *)geometry_elementary_rotate_surface_cb } , - { NULL } - }; - Context_Item menu_geometry_elementary_scale[] = - { { "0Geometry Elementary Scale", NULL } , - { "Point", (Fl_Callback *)geometry_elementary_scale_point_cb } , - { "Curve", (Fl_Callback *)geometry_elementary_scale_curve_cb } , - { "Surface", (Fl_Callback *)geometry_elementary_scale_surface_cb } , - { NULL } - }; - Context_Item menu_geometry_elementary_symmetry[] = - { { "0Geometry Elementary Symmetry", NULL } , - { "Point", (Fl_Callback *)geometry_elementary_symmetry_point_cb } , - { "Curve", (Fl_Callback *)geometry_elementary_symmetry_curve_cb } , - { "Surface", (Fl_Callback *)geometry_elementary_symmetry_surface_cb } , - { NULL } - }; - Context_Item menu_geometry_elementary_extrude[] = - { { "0Geometry Elementary Extrude", NULL } , - { "Translate", (Fl_Callback *)geometry_elementary_extrude_translate_cb } , - { "Rotate", (Fl_Callback *)geometry_elementary_extrude_rotate_cb } , - { NULL } - }; - Context_Item menu_geometry_elementary_extrude_translate[] = - { { "0Geometry Elementary Extrude Translate", NULL } , - { "Point", (Fl_Callback *)geometry_elementary_extrude_translate_point_cb } , - { "Curve", (Fl_Callback *)geometry_elementary_extrude_translate_curve_cb } , - { "Surface", (Fl_Callback *)geometry_elementary_extrude_translate_surface_cb } , - { NULL } - }; - Context_Item menu_geometry_elementary_extrude_rotate[] = - { { "0Geometry Elementary Extrude Rotate", NULL } , - { "Point", (Fl_Callback *)geometry_elementary_extrude_rotate_point_cb } , - { "Curve", (Fl_Callback *)geometry_elementary_extrude_rotate_curve_cb } , - { "Surface", (Fl_Callback *)geometry_elementary_extrude_rotate_surface_cb } , - { NULL } - }; - Context_Item menu_geometry_elementary_delete[] = - { { "0Geometry Elementary Delete", NULL } , - { "Point", (Fl_Callback *)geometry_elementary_delete_point_cb } , - { "Curve", (Fl_Callback *)geometry_elementary_delete_curve_cb } , - { "Surface", (Fl_Callback *)geometry_elementary_delete_surface_cb } , - { NULL } - }; - Context_Item menu_geometry_physical[] = - { { "0Geometry Physical", NULL } , - { "Add", (Fl_Callback *)geometry_physical_add_cb } , - { NULL } - }; - Context_Item menu_geometry_physical_add[] = - { { "0Geometry Physical Add", NULL } , - { "Point", (Fl_Callback *)geometry_physical_add_point_cb } , - { "Curve", (Fl_Callback *)geometry_physical_add_curve_cb } , - { "Surface", (Fl_Callback *)geometry_physical_add_surface_cb } , - { "Volume", (Fl_Callback *)geometry_physical_add_volume_cb } , - { NULL } - }; - -Context_Item menu_mesh[] = -{ { "1Mesh", NULL } , - { "Define", (Fl_Callback *)mesh_define_cb } , - { "1D", (Fl_Callback *)mesh_1d_cb } , - { "2D", (Fl_Callback *)mesh_2d_cb } , - { "3D", (Fl_Callback *)mesh_3d_cb } , - { "Save", (Fl_Callback *)mesh_save_cb } , - { NULL } -}; - Context_Item menu_mesh_define[] = - { { "1Mesh Define", NULL } , - { "Length", (Fl_Callback *)mesh_define_length_cb } , - { "Recombine", (Fl_Callback *)mesh_define_recombine_cb } , - { "Transfinite", (Fl_Callback *)mesh_define_transfinite_cb } , - { NULL } - }; - Context_Item menu_mesh_define_transfinite[] = - { { "1Mesh Define Transfinite", NULL } , - { "Line", (Fl_Callback *)mesh_define_transfinite_line_cb } , - { "Surface", (Fl_Callback *)mesh_define_transfinite_surface_cb } , - { "Volume", (Fl_Callback *)mesh_define_transfinite_volume_cb } , - { NULL } - }; - -Context_Item menu_solver[] = -{ { "2Solver", NULL } , - { "GetDP", (Fl_Callback *)getdp_cb } , - { NULL } }; - -Context_Item menu_post[] = -{ { "3Post-processing", NULL } , - { NULL } }; - -//********************** Definition of global shortcuts ******************************** - -int GUI::global_shortcuts(int event){ - int i, j; - - // we only handle shortcuts here - if(event != FL_SHORTCUT) return 0 ; - - - if(Fl::test_shortcut(FL_SHIFT+FL_Escape) || - Fl::test_shortcut(FL_CTRL+FL_Escape) || - Fl::test_shortcut(FL_ALT+FL_Escape)){ - return 1; - } - if(Fl::test_shortcut('0') || Fl::test_shortcut(FL_Escape)){ - geometry_reload_cb(0,0); - mod_geometry_cb(0,0); - return 1; - } - else if(Fl::test_shortcut('1') || Fl::test_shortcut(FL_F+1)){ - mesh_1d_cb(0,0); - mod_mesh_cb(0,0); - return 1; - } - else if(Fl::test_shortcut('2') || Fl::test_shortcut(FL_F+2)){ - mesh_2d_cb(0,0); - mod_mesh_cb(0,0); - return 1; - } - else if(Fl::test_shortcut('3') || Fl::test_shortcut(FL_F+3)){ - mesh_3d_cb(0,0); - mod_mesh_cb(0,0); - return 1; - } - else if(Fl::test_shortcut('g')){ - mod_geometry_cb(0,0); - return 1; - } - else if(Fl::test_shortcut('m')){ - mod_mesh_cb(0,0); - return 1; - } - else if(Fl::test_shortcut('s')){ - mod_solver_cb(0,0); - return 1; - } - else if(Fl::test_shortcut('p')){ - mod_post_cb(0,0); - return 1; - } - else if(Fl::test_shortcut('b')){ - mod_back_cb(0,0); - return 1; - } - else if(Fl::test_shortcut('f')){ - mod_forward_cb(0,0); - return 1; - } - else if(Fl::test_shortcut('e')){ - end_selection = 1; - return 1; - } - else if(Fl::test_shortcut('q')){ - quit_selection = 1; - return 1; - } - else if(Fl::test_shortcut(FL_CTRL+'s')){ - mesh_save_cb(0,0); - return 1; - } - else if(Fl::test_shortcut(FL_CTRL+FL_SHIFT+'d')){ - opt_post_anim_delay(0,GMSH_SET|GMSH_GUI,opt_post_anim_delay(0,GMSH_GET,0) + 0.01); - return 1; - } - else if(Fl::test_shortcut(FL_SHIFT+'d')){ - opt_post_anim_delay(0,GMSH_SET|GMSH_GUI,opt_post_anim_delay(0,GMSH_GET,0) - 0.01); - return 1; - } - else if(Fl::test_shortcut(FL_CTRL+'z')){ - g_window->iconize() ; - return 1; - } - else if(Fl::test_shortcut(FL_ALT+'f')){ - opt_general_fast_redraw(0,GMSH_SET|GMSH_GUI,!opt_general_fast_redraw(0,GMSH_GET,0)); - redraw_opengl(); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+'b')){ - opt_post_scales(0,GMSH_SET|GMSH_GUI,!opt_post_scales(0,GMSH_GET,0)); - redraw_opengl(); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+'o')){ - opt_general_orthographic(0,GMSH_SET|GMSH_GUI,!opt_general_orthographic(0,GMSH_GET,0)); - redraw_opengl(); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+'c')){ - opt_general_color_scheme(0,GMSH_SET|GMSH_GUI,opt_general_color_scheme(0,GMSH_GET,0)+1); - opt_geometry_color_scheme(0,GMSH_SET|GMSH_GUI,opt_geometry_color_scheme(0,GMSH_GET,0)+1); - opt_mesh_color_scheme(0,GMSH_SET|GMSH_GUI,opt_mesh_color_scheme(0,GMSH_GET,0)+1); - redraw_opengl(); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+'d')){ - opt_mesh_aspect(0,GMSH_SET|GMSH_GUI,opt_mesh_aspect(0,GMSH_GET,0)+1); - redraw_opengl(); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+'x')){ - status_xyz1p_cb(0,(void*)0); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+'y')){ - status_xyz1p_cb(0,(void*)1); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+'z')){ - status_xyz1p_cb(0,(void*)2); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+FL_SHIFT+'a')){ - opt_general_axes(0,GMSH_SET|GMSH_GUI,!opt_general_axes(0,GMSH_GET,0)); - redraw_opengl(); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+'a')){ - opt_general_small_axes(0,GMSH_SET|GMSH_GUI,!opt_general_small_axes(0,GMSH_GET,0)); - redraw_opengl(); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+'p')){ - opt_geometry_points(0,GMSH_SET|GMSH_GUI,!opt_geometry_points(0,GMSH_GET,0)); - redraw_opengl(); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+'l')){ - opt_geometry_lines(0,GMSH_SET|GMSH_GUI,!opt_geometry_lines(0,GMSH_GET,0)); - redraw_opengl(); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+'s')){ - opt_geometry_surfaces(0,GMSH_SET|GMSH_GUI,!opt_geometry_surfaces(0,GMSH_GET,0)); - redraw_opengl(); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+'v')){ - opt_geometry_volumes(0,GMSH_SET|GMSH_GUI,!opt_geometry_volumes(0,GMSH_GET,0)); - redraw_opengl(); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+FL_SHIFT+'p')){ - opt_mesh_points(0,GMSH_SET|GMSH_GUI,!opt_mesh_points(0,GMSH_GET,0)); - redraw_opengl(); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+FL_SHIFT+'l')){ - opt_mesh_lines(0,GMSH_SET|GMSH_GUI,!opt_mesh_lines(0,GMSH_GET,0)); - redraw_opengl(); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+FL_SHIFT+'s')){ - opt_mesh_surfaces(0,GMSH_SET|GMSH_GUI,!opt_mesh_surfaces(0,GMSH_GET,0)); - redraw_opengl(); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+FL_SHIFT+'v')){ - opt_mesh_volumes(0,GMSH_SET|GMSH_GUI,!opt_mesh_volumes(0,GMSH_GET,0)); - redraw_opengl(); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+'m')){ - opt_mesh_points(0,GMSH_SET|GMSH_GUI,!opt_mesh_points(0,GMSH_GET,0)); - opt_mesh_lines(0,GMSH_SET|GMSH_GUI,!opt_mesh_lines(0,GMSH_GET,0)); - opt_mesh_surfaces(0,GMSH_SET|GMSH_GUI,!opt_mesh_surfaces(0,GMSH_GET,0)); - opt_mesh_volumes(0,GMSH_SET|GMSH_GUI,!opt_mesh_volumes(0,GMSH_GET,0)); - redraw_opengl(); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+'t')){ - for(i=0 ; i<List_Nbr(Post_ViewList) ; i++){ - if(opt_view_visible(i,GMSH_GET,0)){ - j = (int)opt_view_intervals_type(i, GMSH_GET, 0); - opt_view_intervals_type(i, GMSH_SET|GMSH_GUI, - (j == DRAW_POST_ISO) ? DRAW_POST_DISCRETE : - (j == DRAW_POST_DISCRETE) ? DRAW_POST_CONTINUOUS : - DRAW_POST_ISO); - } - } - redraw_opengl(); - return 1; - } - else if(Fl::test_shortcut(FL_ALT+'h')){ - static int show = 0; - for(i=0 ; i<List_Nbr(Post_ViewList) ; i++) - opt_view_visible(i, GMSH_SET|GMSH_GUI, show); - redraw_opengl(); - show = !show; - return 1; - } - - - return 0; -} - - -//***************************** The GUI constructor ************************************ - -GUI::GUI(int argc, char **argv) { - - init_menu_window = 0; - init_graphic_window = 0; - init_general_options_window = 0; - init_geometry_options_window = 0; - init_mesh_options_window = 0; - init_solver_options_window = 0; - init_post_options_window = 0; - init_statistics_window = 0; - init_message_window = 0; - init_about_window = 0; - init_view_window = 0; - init_geometry_context_window = 0; - init_mesh_context_window = 0; - init_getdp_window = 0; - - if(strlen(CTX.display)) Fl::display(CTX.display); - - Fl::add_handler(SetGlobalShortcut); - - // All static windows are contructed (even if some are not - // displayed) since the shortcuts should be valid even for hidden - // windows, and we don't want to test for widget existence every time - - create_menu_window(argc, argv); - create_graphic_window(argc, argv); - -#ifdef WIN32 - m_window->icon((char *)LoadImage(fl_display, MAKEINTRESOURCE(IDI_ICON), - IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR)); -#else - fl_open_display(); - Pixmap p1 = XCreateBitmapFromData(fl_display, DefaultRootWindow(fl_display), - g1_bits, g1_width, g1_height); - Pixmap p2 = XCreateBitmapFromData(fl_display, DefaultRootWindow(fl_display), - g2_bits, g2_width, g2_height); - m_window->icon((char *)p1); - g_window->icon((char *)p2); -#endif - - m_window->show(1, argv); - g_window->show(1, argv); - - create_general_options_window(); - create_geometry_options_window(); - create_mesh_options_window(); - create_solver_options_window(); - create_post_options_window(); - create_view_options_window(-1); - create_message_window(); - create_about_window(); - create_getdp_window(); - - // Draw the scene - g_opengl_window->redraw(); - -} - -// Run the GUI until no window is left - -void GUI::run(){ - Fl::run(); -} - -// Check (now) if any pending events and run them - -void GUI::check(){ - Fl::check(); -} - -// Wait for any events and run them - -void GUI::wait(){ - Fl::wait(); -} - -//********************************* Create the menu window ***************************** - - -void GUI::add_post_plugins (Fl_Menu_Button *button , int iView){ - char name[256],menuname[256]; - for(GMSH_PluginManager::iter it = GMSH_PluginManager::Instance()->begin(); - it != GMSH_PluginManager::Instance()->end(); - ++it){ - GMSH_Plugin *p = (*it).second; - if(p->getType() == GMSH_Plugin::GMSH_POST_PLUGIN){ - p->getName(name); - std::pair<int,GMSH_Plugin*> *pair = new std::pair<int,GMSH_Plugin*>(iView,p); - sprintf(menuname,"Plugins/%s...",name); - button->add(menuname, 0,(Fl_Callback *)view_options_plugin_cb, (void*)(pair), 0); - p->dialogBox = 0; - } - } -} - -void GUI::create_menu_window(int argc, char **argv){ - int i, y; - - if(!init_menu_window){ - init_menu_window = 1 ; - - int width = 13*CTX.fontsize-CTX.fontsize/2-2 ; - MH = BH + BH+6 ; // this is the initial height: no dynamic button is shown! - - m_window = new Fl_Window(width,MH); - m_window->box(WINDOW_BOX); - m_window->label("Gmsh"); - m_window->callback(file_quit_cb); - - m_menu_bar = new Fl_Menu_Bar(0,0,width,BH); - m_menu_bar->menu(m_menubar_table); - m_menu_bar->textsize(CTX.fontsize); - m_menu_bar->box(FL_UP_BOX); - m_menu_bar->global(); - - Fl_Box *o = new Fl_Box(0,BH,width,BH+6); - o->box(FL_UP_BOX); - - y = BH + 3; - - m_navig_butt[0] = new Fl_Button(1,y,18,BH/2,"@<"); - m_navig_butt[0]->labeltype(FL_SYMBOL_LABEL); - m_navig_butt[0]->box(FL_FLAT_BOX); - m_navig_butt[0]->selection_color(FL_WHITE); - m_navig_butt[0]->callback(mod_back_cb); - m_navig_butt[1] = new Fl_Button(1,y+BH/2,18,BH/2,"@>"); - m_navig_butt[1]->labeltype(FL_SYMBOL_LABEL); - m_navig_butt[1]->box(FL_FLAT_BOX); - m_navig_butt[1]->selection_color(FL_WHITE); - m_navig_butt[1]->callback(mod_forward_cb); - - m_module_butt = new Fl_Choice(19,y,width-24,BH); - m_module_butt->menu(m_module_table); - m_module_butt->textsize(CTX.fontsize); - m_module_butt->box(FL_THIN_DOWN_BOX); - - y = MH ; - - for(i=0; i<NB_BUTT_MAX; i++){ - m_push_butt[i] = new Fl_Button(0,y+i*BH,width,BH); - m_push_butt[i]->labelsize(CTX.fontsize); - m_push_butt[i]->hide(); - m_toggle_butt[i] = new Fl_Light_Button(0,y+i*BH,width,BH); - m_toggle_butt[i]->labelsize(CTX.fontsize); - m_toggle_butt[i]->callback(view_toggle_cb, (void*)i); - m_toggle_butt[i]->hide(); - m_popup_butt[i] = new Fl_Menu_Button(0,y+i*BH,width,BH); - m_popup_butt[i]->type(Fl_Menu_Button::POPUP3); - m_popup_butt[i]->add("Reload/View", 0, - (Fl_Callback *)view_reload_cb, (void*)i, 0); - m_popup_butt[i]->add("Reload/All views", 0, - (Fl_Callback *)view_reload_all_cb, (void*)i, 0); - m_popup_butt[i]->add("Reload/All visible views", 0, - (Fl_Callback *)view_reload_visible_cb, (void*)i, 0); - m_popup_butt[i]->add("Remove/View", 0, - (Fl_Callback *)view_remove_cb, (void*)i, 0); - m_popup_butt[i]->add("Remove/All views", 0, - (Fl_Callback *)view_remove_all_cb, (void*)i, 0); - m_popup_butt[i]->add("Remove/All visible views", 0, - (Fl_Callback *)view_remove_visible_cb, (void*)i, 0); - m_popup_butt[i]->add("Duplicate/View without options", 0, - (Fl_Callback *)view_duplicate_cb, (void*)i, 0) ; - m_popup_butt[i]->add("Duplicate/View with options", 0, - (Fl_Callback *)view_duplicate_with_options_cb, (void*)i, 0) ; - m_popup_butt[i]->add("Save as/ASCII view...", 0, - (Fl_Callback *)view_save_ascii_cb, (void*)i, 0) ; - m_popup_butt[i]->add("Save as/Binary view...", 0, - (Fl_Callback *)view_save_binary_cb, (void*)i, 0) ; - add_post_plugins ( m_popup_butt[i] , i); - m_popup_butt[i]->add("Apply as background mesh", 0, - (Fl_Callback *)view_applybgmesh_cb, (void*)i, FL_MENU_DIVIDER); - m_popup_butt[i]->add("Options...", 0, - (Fl_Callback *)view_options_cb, (void*)i, 0); - m_popup_butt[i]->textsize(CTX.fontsize); - m_popup_butt[i]->hide(); - } - - m_window->position(CTX.position[0],CTX.position[1]); - m_window->end(); - } - else{ - if(m_window->shown()) - m_window->redraw(); - else - m_window->show(1, argv); - - } - -} - -// Dynamically set the height of the menu window - -void GUI::set_menu_size(int nb_butt){ - m_window->size(m_window->w(), MH + nb_butt*BH); -} - -// Dynamically set the context - -void GUI::set_context(Context_Item *menu_asked, int flag){ - static int nb_back = 0, nb_forward = 0, init_context=0; - static Context_Item *menu_history[NB_HISTORY_MAX]; - Context_Item *menu; - Post_View *v; - int i; - - if(!init_context){ - init_context = 1; - for(i=0 ; i<NB_HISTORY_MAX ; i++){ - menu_history[i] = NULL ; - } - } - - if(nb_back > NB_HISTORY_MAX-2) nb_back = 1; // we should do a circular list - - if(flag == -1){ - if(nb_back > 1){ - nb_back--; - nb_forward++; - menu = menu_history[nb_back-1]; - } - else return; - } - else if(flag == 1){ - if(nb_forward > 0){ - nb_back++; - nb_forward--; - menu = menu_history[nb_back-1]; - } - else return; - } - else{ - menu = menu_asked; - if(!nb_back || menu_history[nb_back-1] != menu){ - menu_history[nb_back++] = menu; - } - nb_forward = 0; - } - - int nb = 0; - - if(menu[0].label[0] == '0') m_module_butt->value(0); - else if(menu[0].label[0] == '1') m_module_butt->value(1); - else if(menu[0].label[0] == '2') m_module_butt->value(2); - else if(menu[0].label[0] == '3') m_module_butt->value(3); - else { - Msg(WARNING, "Something is wrong in your dynamic context definition"); - return; - } - - Msg(STATUS2, menu[0].label+1); - - switch(m_module_butt->value()){ - case 3 : // post-processing contexts - for(i = 0 ; i < List_Nbr(Post_ViewList) ; i++) { - if(i == NB_BUTT_MAX) break; - nb++ ; - v = (Post_View*)List_Pointer(Post_ViewList,i); - m_push_butt[i]->hide(); - m_toggle_butt[i]->show(); - m_toggle_butt[i]->value(v->Visible); - m_toggle_butt[i]->label(v->Name); - m_popup_butt[i]->show(); - } - for(i = List_Nbr(Post_ViewList) ; i < NB_BUTT_MAX ; i++) { - m_push_butt[i]->hide(); - m_toggle_butt[i]->hide(); - m_popup_butt[i]->hide(); - } - break; - default : // geometry, mesh, solver contexts - for(i=0 ; i < NB_BUTT_MAX ; i++){ - m_toggle_butt[i]->hide(); - m_popup_butt[i]->hide(); - if(menu[i+1].label){ - m_push_butt[i]->label(menu[i+1].label); - m_push_butt[i]->callback(menu[i+1].callback); - m_push_butt[i]->redraw(); - m_push_butt[i]->show(); - nb++; - } - else - break; - } - for(i=nb ; i<NB_BUTT_MAX ; i++){ - m_toggle_butt[i]->hide(); - m_popup_butt[i]->hide(); - m_push_butt[i]->hide(); - } - break ; - } - - set_menu_size(nb); - -} - -int GUI::get_context(){ - return m_module_butt->value(); -} - - -//******************************** Create the graphic window *************************** - -void GUI::create_graphic_window(int argc, char **argv){ - int i, x; - - if(!init_graphic_window){ - init_graphic_window = 1 ; - - int sh = 2*CTX.fontsize-4; // status bar height - int sw = CTX.fontsize+4; //status button width - int width = CTX.viewport[2]-CTX.viewport[0]; - int glheight = CTX.viewport[3]-CTX.viewport[1]; - int height = glheight + sh; - - g_window = new Fl_Window(width, height); - g_window->callback(file_quit_cb); - - g_opengl_window = new Opengl_Window(0,0,width,glheight); - if(!opt_general_double_buffer(0,GMSH_GET,0)){ - Msg(INFO, "Setting OpenGL visual to single buffered"); - g_opengl_window->mode(FL_RGB | FL_DEPTH | FL_SINGLE); - } - g_opengl_window->end(); - - { - Fl_Group *o = new Fl_Group(0,glheight,width,sh); - o->box(FL_THIN_UP_BOX); - - x = 2; - - g_status_butt[0] = new Fl_Button(x,glheight+2,sw,sh-4,"X"); x+=sw; - g_status_butt[0]->callback(status_xyz1p_cb, (void*)0); - //g_status_butt[0]->tooltip("Set X view"); - g_status_butt[1] = new Fl_Button(x,glheight+2,sw,sh-4,"Y"); x+=sw; - g_status_butt[1]->callback(status_xyz1p_cb, (void*)1); - g_status_butt[2] = new Fl_Button(x,glheight+2,sw,sh-4,"Z"); x+=sw; - g_status_butt[2]->callback(status_xyz1p_cb, (void*)2); - g_status_butt[3] = new Fl_Button(x,glheight+2,2*CTX.fontsize,sh-4,"1:1"); x+=2*CTX.fontsize; - g_status_butt[3]->callback(status_xyz1p_cb, (void*)3); - g_status_butt[4] = new Fl_Button(x,glheight+2,sw,sh-4,"?"); x+=sw; - g_status_butt[4]->callback(status_xyz1p_cb, (void*)4); - g_status_butt[5] = new Fl_Button(x,glheight+2,sw,sh-4); x+=sw; - g_status_butt[5]->callback(status_play_cb); - start_bmp = new Fl_Bitmap(start_bits,start_width,start_height); - start_bmp->label(g_status_butt[5]); - stop_bmp = new Fl_Bitmap(stop_bits,stop_width,stop_height); - g_status_butt[5]->deactivate(); - g_status_butt[6] = new Fl_Button(x,glheight+2,sw,sh-4); x+=sw; - g_status_butt[6]->callback(status_cancel_cb); - abort_bmp = new Fl_Bitmap(abort_bits,abort_width,abort_height); - abort_bmp->label(g_status_butt[6]); - g_status_butt[6]->deactivate(); - for(i = 0 ; i<7 ; i++){ - g_status_butt[i]->box(FL_FLAT_BOX); - g_status_butt[i]->selection_color(FL_WHITE); - g_status_butt[i]->labelsize(CTX.fontsize); - g_status_butt[i]->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE|FL_ALIGN_CLIP); - } - - g_status_label[0] = new Fl_Box(x,glheight+2,(width-x)/3,sh-4); - g_status_label[1] = new Fl_Box(x+(width-x)/3,glheight+2,(width-x)/3,sh-4); - g_status_label[2] = new Fl_Box(x+2*(width-x)/3,glheight+2,(width-x)/3-2,sh-4); - for(i = 0 ; i<3 ; i++){ - g_status_label[i]->box(FL_FLAT_BOX); - g_status_label[i]->labelsize(CTX.fontsize); - g_status_label[i]->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP); - } - - o->end(); - } - - g_window->resizable(g_opengl_window); - g_window->position(CTX.gl_position[0],CTX.gl_position[1]); - g_window->end(); - } - else{ - if(g_window->shown()) - g_window->redraw(); - else - g_window->show(1, argv); - - } -} - -// Set the size of the graphical window - -void GUI::set_size(int new_w, int new_h){ - g_window->size(new_w,new_h+g_window->h()-g_opengl_window->h()); -} - -// Set graphic window title - -void GUI::set_title(char *str){ - g_window->label(str); -} - -// Set animation button - -void GUI::set_anim(int mode){ - if(mode){ - g_status_butt[5]->callback(status_play_cb); - start_bmp->label(g_status_butt[5]); - } - else{ - g_status_butt[5]->callback(status_pause_cb); - stop_bmp->label(g_status_butt[5]); - } -} - -// Set the status messages - -void GUI::set_status(char *msg, int num){ - g_status_label[num]->label(msg); - g_status_label[num]->redraw(); -} - -// set the current drawing context - -void GUI::make_opengl_current(){ - g_opengl_window->make_current(); -} - -void GUI::make_overlay_current(){ - g_opengl_window->make_overlay_current(); -} - -// Draw the opengl window - -void GUI::redraw_opengl(){ - g_opengl_window->redraw(); -} - -// Draw the opengl overlay window - -void GUI::redraw_overlay(){ - g_opengl_window->redraw_overlay(); -} - -//************************ Create the window for general options *********************** - -void GUI::create_general_options_window(){ - int i; - - if(!init_general_options_window){ - init_general_options_window = 1 ; - - int width = 25*CTX.fontsize; - int height = 5*WB+11*BH ; - - gen_window = new Fl_Window(width,height); - gen_window->box(WINDOW_BOX); - gen_window->label("General options"); - { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Display"); - o->labelsize(CTX.fontsize); - gen_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Show moving axes"); - gen_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Show small axes"); - gen_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Enable fast redraw"); - gen_butt[3] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Enable double buffering"); - gen_butt[4] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW, BH, "Use display lists"); - gen_butt[5] = new Fl_Check_Button(2*WB, 2*WB+6*BH, BW, BH, "Enable alpha blending"); - gen_butt[6] = new Fl_Check_Button(2*WB, 2*WB+7*BH, BW, BH, "Use trackball rotation mode"); - for(i=0 ; i<7 ; i++){ - gen_butt[i]->type(FL_TOGGLE_BUTTON); - gen_butt[i]->down_box(FL_DOWN_BOX); - gen_butt[i]->labelsize(CTX.fontsize); - gen_butt[i]->selection_color(FL_YELLOW); - } - o->end(); - } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Output"); - o->labelsize(CTX.fontsize); - gen_butt[7] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Print messages on terminal"); - gen_butt[8] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Save session information on exit"); - gen_butt[9] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Save options on exit"); - for(i=7 ; i<10 ; i++){ - gen_butt[i]->type(FL_TOGGLE_BUTTON); - gen_butt[i]->down_box(FL_DOWN_BOX); - gen_butt[i]->labelsize(CTX.fontsize); - gen_butt[i]->selection_color(FL_YELLOW); - } - gen_value[5] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Message verbosity"); - gen_value[5]->minimum(0); - gen_value[5]->maximum(10); - gen_value[5]->step(1); - gen_value[5]->labelsize(CTX.fontsize); - gen_value[5]->textsize(CTX.fontsize); - gen_value[5]->type(FL_HORIZONTAL); - gen_value[5]->align(FL_ALIGN_RIGHT); - gen_input[0] = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Default file name"); - gen_input[1] = new Fl_Input(2*WB, 2*WB+6*BH, IW, BH, "Temporary file"); - gen_input[2] = new Fl_Input(2*WB, 2*WB+7*BH, IW, BH, "Error file"); - gen_input[3] = new Fl_Input(2*WB, 2*WB+8*BH, IW, BH, "Option file"); - gen_input[4] = new Fl_Input(2*WB, 2*WB+9*BH, IW, BH, "Text editor command"); - for(i=0 ; i<5 ; i++){ - gen_input[i]->labelsize(CTX.fontsize); - gen_input[i]->textsize(CTX.fontsize); - gen_input[i]->align(FL_ALIGN_RIGHT); - } - o->end(); - } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Projection"); - o->labelsize(CTX.fontsize); - o->hide(); - gen_butt[10] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Orthographic"); - gen_butt[11] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Perspective"); - for(i=10 ; i<12 ; i++){ - gen_butt[i]->type(FL_RADIO_BUTTON); - gen_butt[i]->labelsize(CTX.fontsize); - gen_butt[i]->selection_color(FL_YELLOW); - } - o->end(); - } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors"); - o->labelsize(CTX.fontsize); - o->hide(); - gen_value[0] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Predefined color scheme"); - gen_value[0]->minimum(0); - gen_value[0]->maximum(2); - gen_value[0]->step(1); - gen_value[0]->labelsize(CTX.fontsize); - gen_value[0]->textsize(CTX.fontsize); - gen_value[0]->type(FL_HORIZONTAL); - gen_value[0]->align(FL_ALIGN_RIGHT); - gen_value[0]->callback(opt_general_color_scheme_cb); - - Fl_Scroll* s = new Fl_Scroll(2*WB, 3*WB+2*BH, IW+20, height-3*WB-4*BH); - i = 0; - while(GeneralOptions_Color[i].str){ - gen_col[i] = new Fl_Button(2*WB, 3*WB+(2+i)*BH, IW, BH, GeneralOptions_Color[i].str); - gen_col[i]->callback(color_cb, (void*)GeneralOptions_Color[i].function) ; - gen_col[i]->labelsize(CTX.fontsize); - i++; - } - s->end(); - o->end(); - } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Light"); - o->labelsize(CTX.fontsize); - o->hide(); - gen_value[1] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Material shininess"); - gen_value[1]->minimum(0); - gen_value[1]->maximum(10); - gen_value[1]->step(0.1); - gen_butt[12] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Moving light"); - gen_butt[12]->type(FL_TOGGLE_BUTTON); - gen_butt[12]->down_box(FL_DOWN_BOX); - gen_butt[12]->labelsize(CTX.fontsize); - gen_butt[12]->selection_color(FL_YELLOW); - gen_value[2] = new Fl_Value_Input(2*WB, 2*WB+3*BH, IW, BH, "Light position X"); - gen_value[2]->minimum(-1); - gen_value[2]->maximum(1); - gen_value[2]->step(0.01); - gen_value[3] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Light position Y"); - gen_value[3]->minimum(-1); - gen_value[3]->maximum(1); - gen_value[3]->step(0.01); - gen_value[4] = new Fl_Value_Input(2*WB, 2*WB+5*BH, IW, BH, "Light position Z"); - gen_value[4]->minimum(-1); - gen_value[4]->maximum(1); - gen_value[4]->step(0.01); - for(i=1 ; i<5 ; i++){ - gen_value[i]->labelsize(CTX.fontsize); - gen_value[i]->textsize(CTX.fontsize); - gen_value[i]->type(FL_HORIZONTAL); - gen_value[i]->align(FL_ALIGN_RIGHT); - } - o->end(); - } - o->end(); - } - - { - Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK"); - o->labelsize(CTX.fontsize); - o->callback(opt_general_ok_cb); - } - { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); - o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)gen_window); - } - - if(CTX.center_windows) - gen_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - gen_window->end(); - } - else{ - if(gen_window->shown()) - gen_window->redraw(); - else - gen_window->show(); - - } - -} - -//************************ Create the window for geometry options ********************** - -void GUI::create_geometry_options_window(){ - int i; - - if(!init_geometry_options_window){ - init_geometry_options_window = 1 ; - - int width = 25*CTX.fontsize; - int height = 5*WB+9*BH ; - - geo_window = new Fl_Window(width,height); - geo_window->box(WINDOW_BOX); - geo_window->label("Geometry options"); - { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Visibility"); - o->labelsize(CTX.fontsize); - geo_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, IW, BH, "Points"); - geo_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, IW, BH, "Curves"); - geo_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, IW, BH, "Surfaces"); - geo_butt[3] = new Fl_Check_Button(2*WB, 2*WB+4*BH, IW, BH, "Volumes"); - geo_butt[4] = new Fl_Check_Button(width/2, 2*WB+1*BH, IW, BH, "Point numbers"); - geo_butt[5] = new Fl_Check_Button(width/2, 2*WB+2*BH, IW, BH, "Curve numbers"); - geo_butt[6] = new Fl_Check_Button(width/2, 2*WB+3*BH, IW, BH, "Surface numbers"); - geo_butt[7] = new Fl_Check_Button(width/2, 2*WB+4*BH, IW, BH, "Volume numbers"); - for(i=0 ; i<8 ; i++){ - geo_butt[i]->type(FL_TOGGLE_BUTTON); - geo_butt[i]->down_box(FL_DOWN_BOX); - geo_butt[i]->labelsize(CTX.fontsize); - geo_butt[i]->selection_color(FL_YELLOW); - } - - geo_input = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Show by entity number"); - geo_input->labelsize(CTX.fontsize); - geo_input->textsize(CTX.fontsize); - geo_input->align(FL_ALIGN_RIGHT); - geo_input->callback(opt_geometry_show_by_entity_num_cb); - geo_input->when(FL_WHEN_ENTER_KEY|FL_WHEN_NOT_CHANGED); - - geo_value[0] = new Fl_Value_Input(2*WB, 2*WB+6*BH, IW, BH, "Normals"); - geo_value[0]->minimum(0); - geo_value[0]->maximum(100); - geo_value[0]->step(0.1); - geo_value[1] = new Fl_Value_Input(2*WB, 2*WB+7*BH, IW, BH, "Tangents"); - geo_value[1]->minimum(0); - geo_value[1]->maximum(100); - geo_value[1]->step(0.1); - for(i=0 ; i<2 ; i++){ - geo_value[i]->labelsize(CTX.fontsize); - geo_value[i]->textsize(CTX.fontsize); - geo_value[i]->type(FL_HORIZONTAL); - geo_value[i]->align(FL_ALIGN_RIGHT); - } - o->end(); - } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors"); - o->labelsize(CTX.fontsize); - o->hide(); - geo_value[2] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Predefined color scheme"); - geo_value[2]->minimum(0); - geo_value[2]->maximum(2); - geo_value[2]->step(1); - geo_value[2]->labelsize(CTX.fontsize); - geo_value[2]->textsize(CTX.fontsize); - geo_value[2]->type(FL_HORIZONTAL); - geo_value[2]->align(FL_ALIGN_RIGHT); - geo_value[2]->callback(opt_geometry_color_scheme_cb); - - Fl_Scroll* s = new Fl_Scroll(2*WB, 3*WB+2*BH, IW+20, height-3*WB-4*BH); - i = 0; - while(GeometryOptions_Color[i].str){ - geo_col[i] = new Fl_Button(2*WB, 3*WB+(2+i)*BH, IW, BH, GeometryOptions_Color[i].str); - geo_col[i]->callback(color_cb, (void*)GeometryOptions_Color[i].function) ; - geo_col[i]->labelsize(CTX.fontsize); - i++; - } - s->end(); - o->end(); - } - o->end(); - } - - { - Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK"); - o->labelsize(CTX.fontsize); - o->callback(opt_geometry_ok_cb); - } - { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); - o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)geo_window); - } - - if(CTX.center_windows) - geo_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - geo_window->end(); - } - else{ - if(geo_window->shown()) - geo_window->redraw(); - else - geo_window->show(); - - } - -} - -//****************************** Create the window for mesh options ******************** - -void GUI::create_mesh_options_window(){ - int i; - - if(!init_mesh_options_window){ - init_mesh_options_window = 1 ; - - int width = 25*CTX.fontsize; - int height = 5*WB+10*BH ; - - mesh_window = new Fl_Window(width,height); - mesh_window->box(WINDOW_BOX); - mesh_window->label("Mesh options"); - { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Algorithm"); - o->labelsize(CTX.fontsize); - o->hide(); - mesh_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Second order elements"); - mesh_butt[0]->deactivate();//2nd order elements do not work. Disable the graphical option. - mesh_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Interactive"); - mesh_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Anisotropic"); - mesh_butt[3] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Constrained background mesh"); - for(i=0 ; i<4 ; i++){ - mesh_butt[i]->type(FL_TOGGLE_BUTTON); - mesh_butt[i]->down_box(FL_DOWN_BOX); - mesh_butt[i]->labelsize(CTX.fontsize); - mesh_butt[i]->selection_color(FL_YELLOW); - } - mesh_value[0] = new Fl_Value_Input(2*WB, 2*WB+5*BH, IW, BH, "Number of smoothing steps"); - mesh_value[0]->minimum(0); - mesh_value[0]->maximum(100); - mesh_value[0]->step(1); - mesh_value[1] = new Fl_Value_Input(2*WB, 2*WB+6*BH, IW, BH, "Mesh scaling factor"); - mesh_value[1]->minimum(0.001); - mesh_value[1]->maximum(1000); - mesh_value[1]->step(0.001); - mesh_value[2] = new Fl_Value_Input(2*WB, 2*WB+7*BH, IW, BH, "Characteristic length factor"); - mesh_value[2]->minimum(0.001); - mesh_value[2]->maximum(1000); - mesh_value[2]->step(0.001); - mesh_value[3] = new Fl_Value_Input(2*WB, 2*WB+8*BH, IW, BH, "Random perturbation factor"); - mesh_value[3]->minimum(1.e-6); - mesh_value[3]->maximum(1.e-1); - mesh_value[3]->step(1.e-6); - for(i = 0 ; i<4 ; i++){ - mesh_value[i]->labelsize(CTX.fontsize); - mesh_value[i]->textsize(CTX.fontsize); - mesh_value[i]->type(FL_HORIZONTAL); - mesh_value[i]->align(FL_ALIGN_RIGHT); - } - o->end(); - } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Visibility"); - o->labelsize(CTX.fontsize); - mesh_butt[4] = new Fl_Check_Button(2*WB, 2*WB+1*BH, IW, BH, "Points"); - mesh_butt[5] = new Fl_Check_Button(2*WB, 2*WB+2*BH, IW, BH, "Curves"); - mesh_butt[6] = new Fl_Check_Button(2*WB, 2*WB+3*BH, IW, BH, "Surfaces"); - mesh_butt[7] = new Fl_Check_Button(2*WB, 2*WB+4*BH, IW, BH, "Volumes"); - mesh_butt[8] = new Fl_Check_Button(width/2, 2*WB+1*BH, IW, BH, "Point numbers"); - mesh_butt[9] = new Fl_Check_Button(width/2, 2*WB+2*BH, IW, BH, "Curve numbers"); - mesh_butt[10] = new Fl_Check_Button(width/2, 2*WB+3*BH, IW, BH, "Surface numbers"); - mesh_butt[11] = new Fl_Check_Button(width/2, 2*WB+4*BH, IW, BH, "Volume numbers"); - for(i=4 ; i<12 ; i++){ - mesh_butt[i]->type(FL_TOGGLE_BUTTON); - mesh_butt[i]->down_box(FL_DOWN_BOX); - mesh_butt[i]->labelsize(CTX.fontsize); - mesh_butt[i]->selection_color(FL_YELLOW); - } - mesh_input = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Show by entity Number"); - mesh_input->labelsize(CTX.fontsize); - mesh_input->textsize(CTX.fontsize); - mesh_input->align(FL_ALIGN_RIGHT); - mesh_input->callback(opt_mesh_show_by_entity_num_cb); - mesh_input->when(FL_WHEN_ENTER_KEY|FL_WHEN_NOT_CHANGED); - - mesh_value[4] = new Fl_Value_Input(2*WB, 2*WB+6*BH, IW/2, BH); - mesh_value[4]->minimum(0); - mesh_value[4]->maximum(1); - mesh_value[4]->step(0.001); - mesh_value[5] = new Fl_Value_Input(2*WB+IW/2, 2*WB+6*BH, IW/2, BH, "Quality range"); - mesh_value[5]->minimum(0); - mesh_value[5]->maximum(1); - mesh_value[5]->step(0.001); - - mesh_value[6] = new Fl_Value_Input(2*WB, 2*WB+7*BH, IW/2, BH); - mesh_value[7] = new Fl_Value_Input(2*WB+IW/2, 2*WB+7*BH, IW/2, BH, "Size range"); - - mesh_value[8] = new Fl_Value_Input(2*WB, 2*WB+8*BH, IW, BH, "Normals"); - mesh_value[8]->minimum(0); - mesh_value[8]->maximum(100); - mesh_value[8]->step(1); - for(i=4 ; i<9 ; i++){ - mesh_value[i]->labelsize(CTX.fontsize); - mesh_value[i]->textsize(CTX.fontsize); - mesh_value[i]->type(FL_HORIZONTAL); - mesh_value[i]->align(FL_ALIGN_RIGHT); - } - o->end(); - } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Aspect"); - o->labelsize(CTX.fontsize); - o->hide(); - mesh_butt[12] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Wireframe"); - mesh_butt[13] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Hidden lines"); - mesh_butt[14] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Solid"); - for(i=12 ; i<15 ; i++){ - mesh_butt[i]->type(FL_RADIO_BUTTON); - mesh_butt[i]->down_box(FL_DOWN_BOX); - mesh_butt[i]->labelsize(CTX.fontsize); - mesh_butt[i]->selection_color(FL_YELLOW); - } - mesh_value[9] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Explode elements"); - mesh_value[9]->minimum(0); - mesh_value[9]->maximum(1); - mesh_value[9]->step(0.01); - mesh_value[9]->labelsize(CTX.fontsize); - mesh_value[9]->textsize(CTX.fontsize); - mesh_value[9]->type(FL_HORIZONTAL); - mesh_value[9]->align(FL_ALIGN_RIGHT); - o->end(); - } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors"); - o->labelsize(CTX.fontsize); - o->hide(); - mesh_butt[15] = new Fl_Check_Button(2*WB, 2*WB+1*BH, IW, BH, "Switch color by entity"); - mesh_butt[15]->type(FL_TOGGLE_BUTTON); - mesh_butt[15]->down_box(FL_DOWN_BOX); - mesh_butt[15]->labelsize(CTX.fontsize); - mesh_butt[15]->selection_color(FL_YELLOW); - - mesh_value[10] = new Fl_Value_Input(2*WB, 2*WB+2*BH, IW, BH, "Predefined color scheme"); - mesh_value[10]->minimum(0); - mesh_value[10]->maximum(2); - mesh_value[10]->step(1); - mesh_value[10]->labelsize(CTX.fontsize); - mesh_value[10]->textsize(CTX.fontsize); - mesh_value[10]->type(FL_HORIZONTAL); - mesh_value[10]->align(FL_ALIGN_RIGHT); - mesh_value[10]->callback(opt_mesh_color_scheme_cb); - - Fl_Scroll* s = new Fl_Scroll(2*WB, 3*WB+3*BH, IW+20, height-3*WB-5*BH); - i = 0; - while(MeshOptions_Color[i].str){ - mesh_col[i] = new Fl_Button(2*WB, 3*WB+(3+i)*BH, IW, BH, MeshOptions_Color[i].str); - mesh_col[i]->callback(color_cb, (void*)MeshOptions_Color[i].function) ; - mesh_col[i]->labelsize(CTX.fontsize); - i++; - } - s->end(); - o->end(); - } - o->end(); - } - - { - Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK"); - o->labelsize(CTX.fontsize); - o->callback(opt_mesh_ok_cb); - } - { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); - o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)mesh_window); - } - - if(CTX.center_windows) - mesh_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - mesh_window->end(); - } - else{ - if(mesh_window->shown()) - mesh_window->redraw(); - else - mesh_window->show(); - - } - -} - -//******************** Create the window for solver options ******************* - -void GUI::create_solver_options_window(){ - - if(!init_solver_options_window){ - init_solver_options_window = 1 ; - - int width = 20*CTX.fontsize; - int height = 5*WB+8*BH ; - - solver_window = new Fl_Window(width,height); - solver_window->box(WINDOW_BOX); - solver_window->label("Solver options"); - { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Solvers"); - o->labelsize(CTX.fontsize); - Fl_Box *text = new Fl_Box(FL_NO_BOX, 2*WB, 3*WB+1*BH, width-4*WB, 2*BH, - "There are no global solver options available yet"); - text->align(FL_ALIGN_LEFT|FL_ALIGN_TOP|FL_ALIGN_INSIDE|FL_ALIGN_WRAP); - text->labelsize(CTX.fontsize); - o->end(); - } - o->end(); - } - - { - Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK"); - o->labelsize(CTX.fontsize); - o->callback(opt_solver_ok_cb); - } - { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); - o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)solver_window); - } - - if(CTX.center_windows) - solver_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - solver_window->end(); - } - else{ - if(solver_window->shown()) - solver_window->redraw(); - else - solver_window->show(); - - } - -} - - -//******************** Create the window for post-processing options ******************* - -void GUI::create_post_options_window(){ - int i; - - if(!init_post_options_window){ - init_post_options_window = 1 ; - - int width = 24*CTX.fontsize; - int height = 5*WB+10*BH ; - - post_window = new Fl_Window(width,height); - post_window->box(WINDOW_BOX); - post_window->label("Post-processing options"); - { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Views"); - o->labelsize(CTX.fontsize); - post_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Independent views"); - post_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Apply next changes to all visible views"); - post_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Apply next changes to all views"); - post_butt[3] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Force same options for all visible views"); - post_butt[4] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW, BH, "Force same options for all views"); - for(i=0 ; i<5 ; i++){ - post_butt[i]->type(FL_RADIO_BUTTON); - post_butt[i]->labelsize(CTX.fontsize); - post_butt[i]->selection_color(FL_YELLOW); - } - Fl_Box *text = new Fl_Box(FL_NO_BOX, 2*WB, 3*WB+6*BH, width-4*WB, 2*BH, - "Individual view options are available " - "by right-clicking on each view button " - "in the post-processing menu"); - text->align(FL_ALIGN_LEFT|FL_ALIGN_TOP|FL_ALIGN_INSIDE|FL_ALIGN_WRAP); - text->labelsize(CTX.fontsize); - o->end(); - } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Smoothing"); - o->labelsize(CTX.fontsize); - post_butt[3] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Smooth views during merge"); - post_butt[3]->type(FL_TOGGLE_BUTTON); - post_butt[3]->down_box(FL_DOWN_BOX); - post_butt[3]->labelsize(CTX.fontsize); - post_butt[3]->selection_color(FL_YELLOW); - o->end(); - } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Animation"); - o->labelsize(CTX.fontsize); - o->hide(); - post_value[0] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Delay"); - post_value[0]->minimum(0); - post_value[0]->maximum(10); - post_value[0]->step(0.01); - post_value[0]->labelsize(CTX.fontsize); - post_value[0]->textsize(CTX.fontsize); - post_value[0]->type(FL_HORIZONTAL); - post_value[0]->align(FL_ALIGN_RIGHT); - o->end(); - } - o->end(); - } - - { - Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK"); - o->labelsize(CTX.fontsize); - o->callback(opt_post_ok_cb); - } - { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); - o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)post_window); - } - - if(CTX.center_windows) - post_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - post_window->end(); - } - else{ - if(post_window->shown()) - post_window->redraw(); - else - post_window->show(); - - } - -} - -//*********************** Create the window for the statistics ************************* - -void GUI::create_statistics_window(){ - int i; - - if(!init_statistics_window){ - init_statistics_window = 1 ; - - int width = 24*CTX.fontsize; - int height = 5*WB+16*BH ; - - stat_window = new Fl_Window(width,height); - stat_window->box(WINDOW_BOX); - stat_window->label("Statistics"); - { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Geometry"); - o->labelsize(CTX.fontsize); - o->hide(); - stat_value[0] = new Fl_Output(2*WB, 2*WB+1*BH, IW, BH, "Points"); - stat_value[1] = new Fl_Output(2*WB, 2*WB+2*BH, IW, BH, "Curves"); - stat_value[2] = new Fl_Output(2*WB, 2*WB+3*BH, IW, BH, "Surfaces"); - stat_value[3] = new Fl_Output(2*WB, 2*WB+4*BH, IW, BH, "Volumes"); - o->end(); - } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Mesh"); - o->labelsize(CTX.fontsize); - stat_value[4] = new Fl_Output(2*WB, 2*WB+1*BH, IW, BH, "Nodes on curves"); - stat_value[5] = new Fl_Output(2*WB, 2*WB+2*BH, IW, BH, "Nodes on surfaces"); - stat_value[6] = new Fl_Output(2*WB, 2*WB+3*BH, IW, BH, "Nodes in volumes"); - stat_value[7] = new Fl_Output(2*WB, 2*WB+4*BH, IW, BH, "Triangles"); - stat_value[8] = new Fl_Output(2*WB, 2*WB+5*BH, IW, BH, "Quadrangles"); - stat_value[9] = new Fl_Output(2*WB, 2*WB+6*BH, IW, BH, "Tetrahedra"); - stat_value[10] = new Fl_Output(2*WB, 2*WB+7*BH, IW, BH, "Hexahedra"); - stat_value[11] = new Fl_Output(2*WB, 2*WB+8*BH, IW, BH, "Prisms"); - stat_value[12] = new Fl_Output(2*WB, 2*WB+9*BH, IW, BH, "Time for 1D mesh"); - stat_value[13] = new Fl_Output(2*WB, 2*WB+10*BH, IW, BH, "Time for 2D mesh"); - stat_value[14] = new Fl_Output(2*WB, 2*WB+11*BH, IW, BH, "Time for 3D mesh"); - stat_value[15] = new Fl_Output(2*WB, 2*WB+12*BH, IW, BH, "Gamma factor"); - stat_value[16] = new Fl_Output(2*WB, 2*WB+13*BH, IW, BH, "Eta factor"); - stat_value[17] = new Fl_Output(2*WB, 2*WB+14*BH, IW, BH, "Rho factor"); - - Fl_Button* b0 = new Fl_Button(width-BB-2*WB, 2*WB+12*BH, BB, BH, "List"); - b0->labelsize(CTX.fontsize); - b0->callback(opt_statistics_histogram_cb, (void*)0); - Fl_Button* b1 = new Fl_Button(width-BB-2*WB, 2*WB+13*BH, BB, BH, "List"); - b1->labelsize(CTX.fontsize); - b1->callback(opt_statistics_histogram_cb, (void*)1); - Fl_Button* b2 = new Fl_Button(width-BB-2*WB, 2*WB+14*BH, BB, BH, "List"); - b2->labelsize(CTX.fontsize); - b2->callback(opt_statistics_histogram_cb, (void*)2); - - o->end(); - } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Post-processing"); - o->labelsize(CTX.fontsize); - o->hide(); - stat_value[18] = new Fl_Output(2*WB, 2*WB+1*BH, IW, BH, "Views"); - stat_value[19] = new Fl_Output(2*WB, 2*WB+2*BH, IW, BH, "Visible points"); - stat_value[20] = new Fl_Output(2*WB, 2*WB+3*BH, IW, BH, "Visible lines"); - stat_value[21] = new Fl_Output(2*WB, 2*WB+4*BH, IW, BH, "Visible triangles"); - stat_value[22] = new Fl_Output(2*WB, 2*WB+5*BH, IW, BH, "Visible tetrahedra"); - o->end(); - } - o->end(); - } - - for(i=0 ; i<23 ; i++){ - stat_value[i]->labelsize(CTX.fontsize); - stat_value[i]->textsize(CTX.fontsize); - stat_value[i]->type(FL_HORIZONTAL); - stat_value[i]->align(FL_ALIGN_RIGHT); - stat_value[i]->value(0); - } - - { - Fl_Button* o = new Fl_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "Update"); - o->labelsize(CTX.fontsize); - o->callback(opt_statistics_update_cb); - } - { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); - o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)stat_window); - } - - if(CTX.center_windows) - stat_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - stat_window->end(); - set_statistics(); - stat_window->show(); - } - else{ - if(stat_window->shown()) - stat_window->redraw(); - else{ - set_statistics(); - stat_window->show(); - } - } - -} - -void GUI::set_statistics(){ - - int i; - static double s[50], p[20]; - static char label[50][256]; - - GetStatistics(s); - - // geom - sprintf(label[0], "%g", s[0]); stat_value[0]->value(label[0]); - sprintf(label[1], "%g", s[1]); stat_value[1]->value(label[1]); - sprintf(label[2], "%g", s[2]); stat_value[2]->value(label[2]); - sprintf(label[3], "%g", s[3]); stat_value[3]->value(label[3]); - - // mesh - sprintf(label[4], "%g", s[4]); stat_value[4]->value(label[4]); - sprintf(label[5], "%g", s[5]); stat_value[5]->value(label[5]); - sprintf(label[6], "%g", s[6]); stat_value[6]->value(label[6]); - sprintf(label[7], "%g", s[7]-s[8]); stat_value[7]->value(label[7]); - sprintf(label[8], "%g", s[8]); stat_value[8]->value(label[8]); - sprintf(label[9], "%g", s[9]); stat_value[9]->value(label[9]); - sprintf(label[10], "%g", s[10]); stat_value[10]->value(label[10]); - sprintf(label[11], "%g", s[11]); stat_value[11]->value(label[11]); - sprintf(label[12], "%g", s[12]); stat_value[12]->value(label[12]); - sprintf(label[13], "%g", s[13]); stat_value[13]->value(label[13]); - sprintf(label[14], "%g", s[14]); stat_value[14]->value(label[14]); - sprintf(label[15], "%.4g (%.4g->%.4g)", s[17], s[19], s[18]); - stat_value[15]->value(label[15]); - sprintf(label[16], "%.4g (%.4g->%.4g)", s[20], s[22], s[21]); - stat_value[16]->value(label[16]); - sprintf(label[17], "%.4g (%.4g->%.4g)", s[23], s[25], s[24]); - stat_value[17]->value(label[17]); - - // post - p[0] = List_Nbr(Post_ViewList) ; - sprintf(label[18], "%g", p[0]); stat_value[18]->value(label[18]); - p[1] = p[2] = p[3] = p[4] = p[5] = p[6] = p[7] = p[8] = 0 ; - for(i=0 ; i<List_Nbr(Post_ViewList) ; i++){ - Post_View *v = (Post_View*)List_Pointer(Post_ViewList, i); - p[1] += v->NbSP + v->NbVP + v->NbTP; - p[2] += v->NbSL + v->NbVL + v->NbTL; - p[3] += v->NbST + v->NbVT + v->NbTT; - p[4] += v->NbSS + v->NbVS + v->NbTS; - if(v->Visible){ - if(v->DrawPoints) p[5] += (v->DrawScalars ? v->NbSP : 0) + - (v->DrawVectors ? v->NbVP : 0) + - (v->DrawTensors ? v->NbTP : 0) ; - if(v->DrawLines) p[6] += (v->DrawScalars ? v->NbSL : 0) + - (v->DrawVectors ? v->NbVL : 0) + - (v->DrawTensors ? v->NbTL : 0) ; - if(v->DrawTriangles) p[7] += (v->DrawScalars ? v->NbST : 0) + - (v->DrawVectors ? v->NbVT : 0) + - (v->DrawTensors ? v->NbTT : 0) ; - if(v->DrawTetrahedra) p[8] += (v->DrawScalars ? v->NbSS : 0) + - (v->DrawVectors ? v->NbVS : 0) + - (v->DrawTensors ? v->NbTS : 0) ; - } - } - sprintf(label[19], "%g/%g", p[5],p[1]); stat_value[19]->value(label[19]); - sprintf(label[20], "%g/%g", p[6],p[2]); stat_value[20]->value(label[20]); - sprintf(label[21], "%g/%g", p[7],p[3]); stat_value[21]->value(label[21]); - sprintf(label[22], "%g/%g", p[8],p[4]); stat_value[22]->value(label[22]); -} - - -//*********************** Create the window for the plugins ************************* - -void GUI::add_multiline_in_browser(Fl_Browser *o, char* prefix, char *str){ - int start = 0, len; - char *buff; - if(!strlen(str) || !strcmp(str, "\n")){ - o->add(""); - return; - } - for(unsigned int i=0 ; i<strlen(str) ; i++){ - if(i==strlen(str)-1 || str[i]=='\n'){ - len = i-start+(str[i]=='\n'?0:1); - buff = new char[len+strlen(prefix)+2]; - strcpy(buff, prefix); - strncat(buff, &str[start], len); - buff[len+strlen(prefix)]='\0'; - o->add(buff); - start = i+1; - } - } -} - -PluginDialogBox * GUI::create_plugin_window(GMSH_Plugin *p){ - char buffer[1024],namep[1024],copyright[256],author[256],help[1024]; - - // get plugin info - - int n = p->getNbOptions(); - p->getName(namep); - p->getInfos(author,copyright,help); - - // create window - - int width = 20*CTX.fontsize; - int height = ((n>5?n:5)+2)*BH + 5*WB; - - PluginDialogBox *pdb = new PluginDialogBox; - pdb->main_window = new Fl_Window(width,height); - pdb->main_window->box(WINDOW_BOX); - sprintf(buffer,"%s Plugin",namep); - char *nbuffer = new char[strlen(buffer)+1]; - strcpy(nbuffer,buffer); - pdb->main_window->label(nbuffer); - - { - Fl_Tabs *o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-1*BH); - { - Fl_Group *g = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Options"); - g->labelsize(CTX.fontsize); - - if(n > 20)Msg(GERROR, "Plugin has too many parameters"); - - for(int i=0;i<n;i++){ - StringXNumber *sxn; - sxn = p->GetOption(i); - pdb->view_value[i] = new Fl_Value_Input(2*WB, 2*WB+(i+1)*BH, IW, BH, sxn->str); - pdb->view_value[i]->labelsize(CTX.fontsize); - pdb->view_value[i]->textsize(CTX.fontsize); - pdb->view_value[i]->type(FL_HORIZONTAL); - pdb->view_value[i]->align(FL_ALIGN_RIGHT); - pdb->view_value[i]->value(sxn->def); - } - - g->end(); - } - { - Fl_Group *g = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "About"); - g->labelsize(CTX.fontsize); - - Fl_Browser *o = new Fl_Browser(2*WB, 2*WB+1*BH, width-4*WB, height-5*WB-2*BH); - - o->add(""); - add_multiline_in_browser(o, "@c@b@.", namep); - o->add(""); - add_multiline_in_browser(o, "", help); - o->add(""); - add_multiline_in_browser(o, "Author(s): ", author); - add_multiline_in_browser(o, "Copyright: ", copyright); - o->textsize(CTX.fontsize); - - pdb->main_window->resizable(o); - - g->end(); - } - o->end(); - } - - Fl_Button* cancel = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Close"); - cancel->labelsize(CTX.fontsize); - cancel->callback(cancel_cb, (void*)pdb->main_window); - - pdb->run_button = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "Run"); - pdb->run_button->labelsize(CTX.fontsize); - - if(CTX.center_windows) - pdb->main_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - - pdb->main_window->end(); - - return pdb; -} - -//********************** Create the window for the messages **************************** - -void GUI::create_message_window(){ - - if(!init_message_window){ - init_message_window = 1 ; - - int width = CTX.msg_size[0]; - int height = CTX.msg_size[1]; - - msg_window = new Fl_Window(width,height); - msg_window->box(WINDOW_BOX); - msg_window->label("Messages"); - - msg_browser = new Fl_Browser(WB, WB, width-2*WB, height-3*WB-BH); - msg_browser->textfont(FL_COURIER); - msg_browser->textsize(CTX.fontsize); - - { - Fl_Return_Button* o = new Fl_Return_Button(width-3*BB-3*WB, height-BH-WB, BB, BH, "Save"); - o->labelsize(CTX.fontsize); - o->callback(opt_message_save_cb); - } - { - Fl_Button* o = new Fl_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "Clear"); - o->labelsize(CTX.fontsize); - o->callback(opt_message_clear_cb); - } - { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); - o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)msg_window); - } - - msg_window->resizable(msg_browser); - - msg_window->position(CTX.msg_position[0], CTX.msg_position[1]); - msg_window->end(); - } - else{ - if(msg_window->shown()) - msg_window->redraw(); - else - msg_window->show(); - } - -} - -void GUI::add_message(char *msg){ - msg_browser->add(msg,0); - msg_browser->bottomline(msg_browser->size()); -} - -void GUI::save_message(char *filename){ - FILE *fp; - - if(!(fp = fopen(filename,"w"))) { - Msg(WARNING, "Unable to open file '%s'", filename); - return; - } - for(int i = 1 ; i<=msg_browser->size() ; i++){ - const char *c=msg_browser->text(i); - if(c[0]=='@') fprintf(fp, "%s\n", &c[3]); - else fprintf(fp, "%s\n", c); - } - - Msg(INFO, "Log creation complete '%s'", filename); - Msg(STATUS2, "Wrote '%s'", filename); - fclose(fp); -} - -void GUI::fatal_error(char *filename){ - fl_alert("A fatal error has occurred, which will force Gmsh to exit " - "(all messages have been saved in the error log file '%s')", filename); -} - -//******************************* Create the about window ****************************** - -void GUI::create_about_window(){ - char buffer[1024]; - - if(!init_about_window){ - init_about_window = 1 ; - - int width = 40*CTX.fontsize; - int height = 10*BH ; - - about_window = new Fl_Window(width,height); - about_window->box(WINDOW_BOX); - about_window->label("About Gmsh"); - - { - Fl_Box *o = new Fl_Box(2*WB, WB, about_width, height-3*WB-BH); - about_bmp = new Fl_Bitmap(about_bits,about_width,about_height); - about_bmp->label(o); - } - - { - Fl_Browser *o = new Fl_Browser(WB+80, WB, width-2*WB-80, height-3*WB-BH); - o->add(""); - o->add("@c@b@.Gmsh"); - o->add("@c@.A three-dimensional finite element mesh generator"); - o->add("@c@.with built-in pre- and post-processing facilities"); - o->add(""); - o->add("@c@.Copyright (c) 1997-2001"); - o->add("@c@.Christophe Geuzaine and Jean-Fran�ois Remacle"); - o->add(""); - o->add("@c@.Please send all questions and bug reports to"); - o->add("@c@b@.gmsh@geuz.org"); - o->add(""); - sprintf(buffer, "@c@.Version: %.2f", GMSH_VERSION); o->add(buffer); - sprintf(buffer, "@c@.Build date: %s", GMSH_DATE); o->add(buffer); - sprintf(buffer, "@c@.Build OS: %s", GMSH_OS); o->add(buffer); - sprintf(buffer, "@c@.Graphical user interface toolkit: FLTK %d.%d.%d", - FL_MAJOR_VERSION, FL_MINOR_VERSION, FL_PATCH_VERSION); o->add(buffer); - sprintf(buffer, "@c@.Build host: %s", GMSH_HOST); o->add(buffer); - sprintf(buffer, "@c@.Packaged by: %s", GMSH_PACKAGER); o->add(buffer); - o->add(""); - o->add("@c@.Visit http://www.geuz.org/gmsh/ for more information"); - o->textsize(CTX.fontsize); - } - - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-WB, height-BH-WB, BB, BH, "OK"); - o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)about_window); - } - - if(CTX.center_windows) - about_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - about_window->end(); - } - else{ - if(about_window->shown()) - about_window->redraw(); - else - about_window->show(); - } - -} - -//************************* Create the window for view options ************************* - -// WARNING! Don't forget to add the set_changed_cb() callback to any new widget! - -void GUI::create_view_options_window(int num){ - int i; - - if(!init_view_window){ - init_view_window = 1 ; - - // initialise all buttons to NULL (see the clear_changed() in opt_view_options_bd) - for(i=0; i<VIEW_OPT_BUTT; i++){ - view_butt[i] = NULL; - view_value[i] = NULL; - view_input[i] = NULL; - } - - int width = 32*CTX.fontsize; - int height = 5*WB+11*BH; - - view_window = new Fl_Window(width,height); - view_window->box(WINDOW_BOX); - - { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); - // General - { - Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "General"); - o->labelsize(CTX.fontsize); - o->hide(); - - view_input[0] = new Fl_Input(2*WB, 2*WB+1*BH, IW, BH, "Name"); - view_input[1] = new Fl_Input(2*WB, 2*WB+2*BH, IW, BH, "Format"); - for(i=0 ; i<2 ; i++){ - view_input[i]->labelsize(CTX.fontsize); - view_input[i]->textsize(CTX.fontsize); - view_input[i]->align(FL_ALIGN_RIGHT); - view_input[i]->callback(set_changed_cb, 0); - } - - view_butt[13] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Show elements"); - view_butt[14] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Show color bar"); - view_butt[15] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW, BH, "Display time"); - view_butt[16] = new Fl_Check_Button(2*WB, 2*WB+6*BH, BW, BH, "Transparent color bar"); - view_butt[17] = new Fl_Check_Button(2*WB, 2*WB+7*BH, BW, BH, "Enable Lighting"); - - view_butt[27] = new Fl_Check_Button(2*WB, 2*WB+8*BH, BW, BH, "Smooth normals"); - view_butt[27]->type(FL_TOGGLE_BUTTON); - view_butt[27]->down_box(FL_DOWN_BOX); - view_butt[27]->labelsize(CTX.fontsize); - view_butt[27]->selection_color(FL_YELLOW); - view_butt[27]->callback(set_changed_cb, 0); - - view_value[11] = new Fl_Value_Input(width/2, 2*WB+ 1*BH, IW, BH, "Boundary"); - view_value[11]->labelsize(CTX.fontsize); - view_value[11]->textsize(CTX.fontsize); - view_value[11]->type(FL_HORIZONTAL); - view_value[11]->align(FL_ALIGN_RIGHT); - view_value[11]->minimum(0); - view_value[11]->step(1); - view_value[11]->maximum(3); - view_value[11]->callback(set_changed_cb, 0); - - view_value[12] = new Fl_Value_Input(width/2, 2*WB+ 2*BH, IW, BH, "Explode"); - view_value[12]->labelsize(CTX.fontsize); - view_value[12]->textsize(CTX.fontsize); - view_value[12]->type(FL_HORIZONTAL); - view_value[12]->align(FL_ALIGN_RIGHT); - view_value[12]->minimum(0.); - view_value[12]->step(0.01); - view_value[12]->maximum(1.); - view_value[12]->callback(set_changed_cb, 0); - - view_butt[18] = new Fl_Check_Button(width/2, 2*WB+3*BH, BW, BH, "Draw points"); - view_butt[19] = new Fl_Check_Button(width/2, 2*WB+4*BH, BW, BH, "Draw lines"); - view_butt[20] = new Fl_Check_Button(width/2, 2*WB+5*BH, BW, BH, "Draw triangles"); - view_butt[21] = new Fl_Check_Button(width/2, 2*WB+6*BH, BW, BH, "Draw tetrahedra"); - view_butt[22] = new Fl_Check_Button(width/2, 2*WB+7*BH, BW, BH, "Draw scalar values"); - view_butt[23] = new Fl_Check_Button(width/2, 2*WB+8*BH, BW, BH, "Draw vector values"); - view_butt[24] = new Fl_Check_Button(width/2, 2*WB+9*BH, BW, BH, "Draw tensor values"); - for(i=13 ; i<25 ; i++){ - view_butt[i]->type(FL_TOGGLE_BUTTON); - view_butt[i]->down_box(FL_DOWN_BOX); - view_butt[i]->labelsize(CTX.fontsize); - view_butt[i]->selection_color(FL_YELLOW); - view_butt[i]->callback(set_changed_cb, 0); - } - - o->end(); - } - // Range - { - Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Range"); - o->labelsize(CTX.fontsize); - o->hide(); - view_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Custom range"); - view_butt[0]->type(FL_TOGGLE_BUTTON); - view_butt[0]->down_box(FL_DOWN_BOX); - view_butt[0]->labelsize(CTX.fontsize); - view_butt[0]->selection_color(FL_YELLOW); - //no set_changed since customrange has its own callback - - view_value[0] = new Fl_Value_Input(2*WB, 2*WB+2*BH, IW, BH, "Minimum"); - view_value[1] = new Fl_Value_Input(2*WB, 2*WB+3*BH, IW, BH, "Maximum"); - for(i=0 ; i<2 ; i++){ - view_value[i]->labelsize(CTX.fontsize); - view_value[i]->textsize(CTX.fontsize); - view_value[i]->type(FL_HORIZONTAL); - view_value[i]->align(FL_ALIGN_RIGHT); - view_value[i]->callback(set_changed_cb, 0); - } - - view_butt[1] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Linear"); - view_butt[2] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW, BH, "Logarithmic"); - for(i=1 ; i<3 ; i++){ - view_butt[i]->type(FL_RADIO_BUTTON); - view_butt[i]->labelsize(CTX.fontsize); - view_butt[i]->selection_color(FL_YELLOW); - view_butt[i]->callback(set_changed_cb, 0); - } - - view_butt[26] = new Fl_Check_Button(2*WB, 2*WB+6*BH, BW, BH, "Double logarithmic"); - view_butt[26]->type(FL_RADIO_BUTTON); - view_butt[26]->labelsize(CTX.fontsize); - view_butt[26]->selection_color(FL_YELLOW); - view_butt[26]->callback(set_changed_cb, 0); - - view_butt[25] = new Fl_Check_Button(2*WB, 2*WB+7*BH, BW, BH, "Saturate values"); - view_butt[25]->type(FL_TOGGLE_BUTTON); - view_butt[25]->down_box(FL_DOWN_BOX); - view_butt[25]->labelsize(CTX.fontsize); - view_butt[25]->selection_color(FL_YELLOW); - view_butt[25]->callback(set_changed_cb, 0); - - o->end(); - } - // Intervals - { - Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Intervals"); - o->labelsize(CTX.fontsize); - //view_intervals->hide(); - view_value[2] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Number of intervals"); - view_value[2]->labelsize(CTX.fontsize); - view_value[2]->textsize(CTX.fontsize); - view_value[2]->type(FL_HORIZONTAL); - view_value[2]->align(FL_ALIGN_RIGHT); - view_value[2]->minimum(1); - view_value[2]->maximum(256); - view_value[2]->step(1); - view_value[2]->callback(set_changed_cb, 0); - - view_butt[3] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Iso-values"); - view_butt[4] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Filled iso-values"); - view_butt[5] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Continuous map"); - view_butt[6] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW, BH, "Numeric values"); - for(i=3 ; i<7 ; i++){ - view_butt[i]->type(FL_RADIO_BUTTON); - view_butt[i]->labelsize(CTX.fontsize); - view_butt[i]->selection_color(FL_YELLOW); - view_butt[i]->callback(set_changed_cb, 0); - } - o->end(); - } - // Offset and Raise - { - Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Offset"); - o->labelsize(CTX.fontsize); - o->hide(); - view_value[3] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "X offset"); - view_value[4] = new Fl_Value_Input(2*WB, 2*WB+2*BH, IW, BH, "Y offset"); - view_value[5] = new Fl_Value_Input(2*WB, 2*WB+3*BH, IW, BH, "Z offset"); - view_value[6] = new Fl_Value_Input(width/2, 2*WB+1*BH, IW, BH, "X raise"); - view_value[7] = new Fl_Value_Input(width/2, 2*WB+2*BH, IW, BH, "Y raise"); - view_value[8] = new Fl_Value_Input(width/2, 2*WB+3*BH, IW, BH, "Z raise"); - for(i=3 ; i<9 ; i++){ - view_value[i]->labelsize(CTX.fontsize); - view_value[i]->textsize(CTX.fontsize); - view_value[i]->type(FL_HORIZONTAL); - view_value[i]->align(FL_ALIGN_RIGHT); - view_value[i]->callback(set_changed_cb, 0); - } - o->end(); - } - // Time step - { - view_timestep = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Time step"); - view_timestep->labelsize(CTX.fontsize); - view_timestep->hide(); - view_value[9] = new Fl_Value_Input(2*WB, 2*WB+BH, IW, BH, "Time step number"); - view_value[9]->labelsize(CTX.fontsize); - view_value[9]->textsize(CTX.fontsize); - view_value[9]->type(FL_HORIZONTAL); - view_value[9]->align(FL_ALIGN_RIGHT); - view_value[9]->minimum(0); - view_value[9]->maximum(0); - view_value[9]->step(1); - view_timestep->end(); - //no set_changed since timestep has its own callback - } - // Vector display - { - view_vector = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Vector"); - view_vector->labelsize(CTX.fontsize); - view_vector->hide(); - - { - Fl_Group *o = new Fl_Group(2*WB, WB+BH, width-4*WB, 2*BH, 0); - view_butt[7] = new Fl_Check_Button(2*WB, 2*WB+1*BH, IW, BH, "Line"); - view_butt[8] = new Fl_Check_Button(2*WB, 2*WB+2*BH, IW, BH, "Arrow"); - view_butt[9] = new Fl_Check_Button(width/2, 2*WB+1*BH, IW, BH, "Cone"); - view_butt[10] = new Fl_Check_Button(width/2, 2*WB+2*BH, IW, BH, "Displacement"); - for(i=7 ; i<11 ; i++){ - view_butt[i]->type(FL_RADIO_BUTTON); - view_butt[i]->labelsize(CTX.fontsize); - view_butt[i]->selection_color(FL_YELLOW); - view_butt[i]->callback(set_changed_cb, 0); - } - o->end(); - } - { - Fl_Group *o = new Fl_Group(2*WB, WB+3*BH, width-4*WB, 2*BH, 0); - view_butt[11] = new Fl_Check_Button(2*WB, 2*WB+3*BH, IW, BH, "Cell centered"); - view_butt[12] = new Fl_Check_Button(2*WB, 2*WB+4*BH, IW, BH, "Vertex centered"); - for(i=11 ; i<13 ; i++){ - view_butt[i]->type(FL_RADIO_BUTTON); - view_butt[i]->labelsize(CTX.fontsize); - view_butt[i]->selection_color(FL_YELLOW); - view_butt[i]->callback(set_changed_cb, 0); - } - o->end(); - } - view_value[10] = new Fl_Value_Input(2*WB, 2*WB+ 5*BH, IW, BH, "Vector scale"); - view_value[10]->labelsize(CTX.fontsize); - view_value[10]->textsize(CTX.fontsize); - view_value[10]->type(FL_HORIZONTAL); - view_value[10]->align(FL_ALIGN_RIGHT); - view_value[10]->minimum(0); - view_value[10]->callback(set_changed_cb, 0); - view_vector->end(); - } - // Colors - { - Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors"); - o->labelsize(CTX.fontsize); - o->hide(); - view_colorbar_window = new Colorbar_Window(2*WB, 2*WB+1*BH, - width-4*WB, height-5*WB-2*BH); - view_colorbar_window->end(); - //no set_changed since colorbarwindow has its own callbacks - o->end(); - } - o->end(); - } - - { view_ok = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK"); - view_ok->labelsize(CTX.fontsize); - } - { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); - o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)view_window); - } - - if(CTX.center_windows) - view_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - - //view_window->resizable(view_colorbar_window); - view_window->end(); - } - else{ - update_view_window(num); - if(view_window->shown()) - view_window->redraw(); - else - view_window->show(); - } - -} - -void GUI::update_view_window(int num){ - int i; - double val; - - view_number = num ; - Post_View *v = (Post_View*)List_Pointer(Post_ViewList, num); - - static char buffer[1024]; - sprintf(buffer, "Options for \"%s\" (\"%s\")", v->Name, v->FileName); - view_window->label(buffer); - - // general - opt_view_show_element(num, GMSH_GUI, 0); - opt_view_show_scale(num, GMSH_GUI, 0); - opt_view_show_time(num, GMSH_GUI, 0); - opt_view_transparent_scale(num, GMSH_GUI, 0); - opt_view_name(num, GMSH_GUI, NULL); - opt_view_format(num, GMSH_GUI, NULL); - opt_view_draw_points(num, GMSH_GUI, 0); - opt_view_draw_lines(num, GMSH_GUI, 0); - opt_view_draw_triangles(num, GMSH_GUI, 0); - opt_view_draw_tetrahedra(num, GMSH_GUI, 0); - opt_view_draw_scalars(num, GMSH_GUI, 0); - opt_view_draw_vectors(num, GMSH_GUI, 0); - opt_view_draw_tensors(num, GMSH_GUI, 0); - - // range - opt_view_range_type(num, GMSH_GUI, 0); - view_butt[0]->callback(view_options_custom_cb, (void*)num); - view_options_custom_cb(0,0); - view_butt[0]->clear_changed(); - opt_view_custom_min(num, GMSH_GUI, 0); - opt_view_custom_max(num, GMSH_GUI, 0); - for(i=0 ; i<2 ; i++){ - view_value[i]->minimum(v->CustomMin); - view_value[i]->maximum(v->CustomMax); - } - opt_view_scale_type(num, GMSH_GUI, 0); - opt_view_saturate_values(num, GMSH_GUI, 0); - - // intervals - opt_view_nb_iso(num, GMSH_GUI, 0); - opt_view_intervals_type(num, GMSH_GUI, 0); - opt_view_boundary(num, GMSH_GUI, 0); - opt_view_explode(num, GMSH_GUI, 0); - - // offset/raise - opt_view_offset0(num, GMSH_GUI, 0); - opt_view_offset1(num, GMSH_GUI, 0); - opt_view_offset2(num, GMSH_GUI, 0); - opt_view_raise0(num, GMSH_GUI, 0); - opt_view_raise1(num, GMSH_GUI, 0); - opt_view_raise2(num, GMSH_GUI, 0); - val = 10.*CTX.lc ; - for(i=3 ; i<9 ; i++){ - view_value[i]->step(val,1000); - view_value[i]->minimum(-val); - view_value[i]->maximum(val); - } - - // timestep - if(v->NbTimeStep==1) view_timestep->deactivate(); - else view_timestep->activate(); - view_value[9]->callback(view_options_timestep_cb, (void*)num); - view_value[9]->maximum(v->NbTimeStep-1); - opt_view_timestep(num, GMSH_GUI, 0); - - // vector - if(v->ScalarOnly) view_vector->deactivate(); - else view_vector->activate(); - opt_view_arrow_type(num, GMSH_GUI, 0); - opt_view_arrow_scale(num, GMSH_GUI, 0); - opt_view_arrow_location(num, GMSH_GUI, 0); - - // colors - view_colorbar_window->update(v->Name, v->Min, v->Max, &v->CT, &v->Changed); - - // light - opt_view_light(num, GMSH_GUI, 0); - opt_view_smooth_normals(num, GMSH_GUI, 0); - - // OK - view_ok->callback(view_options_ok_cb, (void*)num); - -} - -//*************** Create the window for geometry context dependant definitions ********* - -void GUI::create_geometry_context_window(int num){ - static Fl_Group *g[10]; - int i; - - if(!init_geometry_context_window){ - init_geometry_context_window = 1 ; - - int width = 31*CTX.fontsize; - int height = 5*WB+9*BH ; - - context_geometry_window = new Fl_Window(width,height); - context_geometry_window->box(WINDOW_BOX); - context_geometry_window->label("Contextual geometry definitions"); - { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); - // 0: Parameter - { - g[0] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Parameter"); - g[0]->labelsize(CTX.fontsize); - context_geometry_input[0] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "Name"); - context_geometry_input[1] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Value"); - for(i=0 ; i<2 ; i++){ - context_geometry_input[i]->labelsize(CTX.fontsize); - context_geometry_input[i]->textsize(CTX.fontsize); - context_geometry_input[i]->align(FL_ALIGN_RIGHT); - } - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "Add"); - o->labelsize(CTX.fontsize); - o->callback(con_geometry_define_parameter_cb); - } - g[0]->end(); - } - // 1: Point - { - g[1] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Point"); - g[1]->labelsize(CTX.fontsize); - context_geometry_input[2] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "X coordinate"); - context_geometry_input[3] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Y coordinate"); - context_geometry_input[4] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "Z coordinate"); - context_geometry_input[5] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "Characteristic length"); - for(i=2 ; i<6 ; i++){ - context_geometry_input[i]->labelsize(CTX.fontsize); - context_geometry_input[i]->textsize(CTX.fontsize); - context_geometry_input[i]->align(FL_ALIGN_RIGHT); - } - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "Add"); - o->labelsize(CTX.fontsize); - o->callback(con_geometry_define_point_cb); - } - g[1]->end(); - } - // 2: Translation - { - g[2] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Translation"); - g[2]->labelsize(CTX.fontsize); - context_geometry_input[6] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "X component"); - context_geometry_input[7] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Y component"); - context_geometry_input[8] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "Z component"); - for(i=6 ; i<9 ; i++){ - context_geometry_input[i]->labelsize(CTX.fontsize); - context_geometry_input[i]->textsize(CTX.fontsize); - context_geometry_input[i]->align(FL_ALIGN_RIGHT); - } - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "Set"); - o->labelsize(CTX.fontsize); - o->callback(con_geometry_define_translation_cb); - } - g[2]->end(); - } - // 3: Rotation - { - g[3] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Rotation"); - g[3]->labelsize(CTX.fontsize); - context_geometry_input[9] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "X coordinate of an axis point"); - context_geometry_input[10] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Y coordinate of an axis point"); - context_geometry_input[11] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "Z coordinate of an axis point"); - context_geometry_input[12] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "X component of direction"); - context_geometry_input[13] = new Fl_Input (2*WB, 2*WB+5*BH, IW, BH, "Y component of direction"); - context_geometry_input[14] = new Fl_Input (2*WB, 2*WB+6*BH, IW, BH, "Z component of direction"); - context_geometry_input[15] = new Fl_Input (2*WB, 2*WB+7*BH, IW, BH, "Angle in radians"); - for(i=9 ; i<16 ; i++){ - context_geometry_input[i]->labelsize(CTX.fontsize); - context_geometry_input[i]->textsize(CTX.fontsize); - context_geometry_input[i]->align(FL_ALIGN_RIGHT); - } - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "Set"); - o->labelsize(CTX.fontsize); - o->callback(con_geometry_define_rotation_cb); - } - g[3]->end(); - } - // 4: Scale - { - g[4] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Scale"); - g[4]->labelsize(CTX.fontsize); - context_geometry_input[16] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "X component of direction"); - context_geometry_input[17] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Y component of direction"); - context_geometry_input[18] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "Z component of direction"); - context_geometry_input[19] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "Factor"); - for(i=16 ; i<20 ; i++){ - context_geometry_input[i]->labelsize(CTX.fontsize); - context_geometry_input[i]->textsize(CTX.fontsize); - context_geometry_input[i]->align(FL_ALIGN_RIGHT); - } - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "Set"); - o->labelsize(CTX.fontsize); - o->callback(con_geometry_define_scale_cb); - } - g[4]->end(); - } - // 5: Symmetry - { - g[5] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Symmetry"); - g[5]->labelsize(CTX.fontsize); - context_geometry_input[20] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "1st plane equation coefficient"); - context_geometry_input[21] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "2nd plane equation coefficient"); - context_geometry_input[22] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "3rd plane equation coefficient"); - context_geometry_input[23] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "4th plane equation coefficient"); - for(i=20 ; i<24 ; i++){ - context_geometry_input[i]->labelsize(CTX.fontsize); - context_geometry_input[i]->textsize(CTX.fontsize); - context_geometry_input[i]->align(FL_ALIGN_RIGHT); - } - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "Set"); - o->labelsize(CTX.fontsize); - o->callback(con_geometry_define_symmetry_cb); - } - g[5]->end(); - } - o->end(); - } - - { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); - o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)context_geometry_window); - } - - for(i=0 ; i<6 ; i++) g[i]->hide(); - g[num]->show(); - - if(CTX.center_windows) - context_geometry_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - context_geometry_window->end(); - context_geometry_window->show(); - } - else{ - if(context_geometry_window->shown()){ - for(i=0 ; i<6 ; i++) g[i]->hide(); - g[num]->show(); - } - else{ - for(i=0 ; i<6 ; i++) g[i]->hide(); - g[num]->show(); - context_geometry_window->show(); - } - - } - -} - -//************** Create the window for mesh context dependant definitions ************** - -void GUI::create_mesh_context_window(int num){ - static Fl_Group *g[10]; - int i; - - if(!init_mesh_context_window){ - init_mesh_context_window = 1 ; - - int width = 31*CTX.fontsize; - int height = 5*WB+5*BH ; - - context_mesh_window = new Fl_Window(width,height); - context_mesh_window->box(WINDOW_BOX); - context_mesh_window->label("Contextual mesh definitions"); - { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); - // 0: Characteristic length - { - g[0] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Characteristic length"); - g[0]->labelsize(CTX.fontsize); - context_mesh_input[0] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "Value"); - context_mesh_input[0]->labelsize(CTX.fontsize); - context_mesh_input[0]->textsize(CTX.fontsize); - context_mesh_input[0]->align(FL_ALIGN_RIGHT); - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+3*BH, BB, BH, "Set"); - o->labelsize(CTX.fontsize); - o->callback(con_mesh_define_length_cb); - } - g[0]->end(); - } - // 1: Transfinite line - { - g[1] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Transfinite line"); - g[1]->labelsize(CTX.fontsize); - context_mesh_input[1] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "Number of points"); - context_mesh_input[2] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Distribution"); - for(i=1 ; i<3 ; i++){ - context_mesh_input[i]->labelsize(CTX.fontsize); - context_mesh_input[i]->textsize(CTX.fontsize); - context_mesh_input[i]->align(FL_ALIGN_RIGHT); - } - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+3*BH, BB, BH, "Set"); - o->labelsize(CTX.fontsize); - o->callback(con_mesh_define_transfinite_line_cb); - } - g[1]->end(); - } - // 2: Transfinite volume - { - g[2] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Transfinite volume"); - g[2]->labelsize(CTX.fontsize); - context_mesh_input[3] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "Volume number"); - context_mesh_input[3]->labelsize(CTX.fontsize); - context_mesh_input[3]->textsize(CTX.fontsize); - context_mesh_input[3]->align(FL_ALIGN_RIGHT); - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+3*BH, BB, BH, "Set"); - o->labelsize(CTX.fontsize); - o->callback(con_mesh_define_transfinite_line_cb); - } - g[2]->end(); - } - o->end(); - } - - { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); - o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)context_mesh_window); - } - - for(i=0 ; i<3 ; i++) g[i]->hide(); - g[num]->show(); - - if(CTX.center_windows) - context_mesh_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - context_mesh_window->end(); - context_mesh_window->show(); - } - else{ - if(context_mesh_window->shown()){ - for(i=0 ; i<3 ; i++) g[i]->hide(); - g[num]->show(); - } - else{ - for(i=0 ; i<3 ; i++) g[i]->hide(); - g[num]->show(); - context_mesh_window->show(); - } - - } -} - - -//************** Create the window for the getdp solver ************** - -void GUI::create_getdp_window(){ - int i; - static Fl_Group *g[10]; - - int LL = (int)(1.75*IW); - - if(!init_getdp_window){ - init_getdp_window = 1 ; - - int width = 5*BB+6*WB; - int height = 10*WB+ 8*BH ; - - getdp_window = new Fl_Window(width,height); - getdp_window->box(WINDOW_BOX); - getdp_window->label("GetDP solver"); - { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-1*BH); - { - g[0] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "General"); - g[0]->labelsize(CTX.fontsize); - - getdp_input[0] = new Fl_Input(2*WB, 2*WB+1*BH, LL, BH, "Problem"); - Fl_Button *b1 = new Fl_Button(2*WB, 3*WB+2*BH, BB, BH, "Choose"); - b1->callback(getdp_file_open_cb); - b1->labelsize(CTX.fontsize); - Fl_Button *b2 = new Fl_Button(3*WB+BB, 3*WB+2*BH, BB, BH, "Edit"); - b2->callback(getdp_file_edit_cb); - b2->labelsize(CTX.fontsize); - - getdp_choice[0] = new Fl_Choice(2*WB, 4*WB+3*BH, LL, BH,"Resolution"); - getdp_choice[1] = new Fl_Choice(2*WB, 5*WB+4*BH, LL, BH,"Post operation"); - - getdp_input[1] = new Fl_Input(2*WB, 6*WB+5*BH, LL, BH, "Mesh"); - Fl_Button *b3 = new Fl_Button(2*WB, 7*WB+6*BH, BB, BH, "Choose"); - b3->callback(getdp_choose_mesh_cb); - b3->labelsize(CTX.fontsize); - - for(i=0 ; i<2 ; i++){ - getdp_input[i]->labelsize(CTX.fontsize); - getdp_input[i]->textsize(CTX.fontsize); - getdp_input[i]->align(FL_ALIGN_RIGHT); - } - for(i=0 ; i<2 ; i++){ - getdp_choice[i]->textsize(CTX.fontsize); - getdp_choice[i]->labelsize(CTX.fontsize); - getdp_choice[i]->align(FL_ALIGN_RIGHT); - } - - g[0]->end(); - } - { - g[1] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Options"); - g[1]->labelsize(CTX.fontsize); - - getdp_input[2] = new Fl_Input(2*WB, 2*WB+1*BH, LL, BH, "Command"); - Fl_Button *b = new Fl_Button(2*WB, 3*WB+2*BH, BB, BH, "Choose"); - b->callback(getdp_choose_command_cb); - b->labelsize(CTX.fontsize); - - getdp_butt[0] = new Fl_Check_Button(2*WB, 4*WB+3*BH, LL, BH, - "Automatic message display"); - getdp_butt[1] = new Fl_Check_Button(2*WB, 4*WB+4*BH, LL, BH, - "Automatic view merge"); - - getdp_input[2]->labelsize(CTX.fontsize); - getdp_input[2]->textsize(CTX.fontsize); - getdp_input[2]->align(FL_ALIGN_RIGHT); - for(i=0 ; i<2 ; i++){ - getdp_butt[i]->type(FL_TOGGLE_BUTTON); - getdp_butt[i]->down_box(FL_DOWN_BOX); - getdp_butt[i]->labelsize(CTX.fontsize); - getdp_butt[i]->selection_color(FL_YELLOW); - } - - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "OK"); - o->labelsize(CTX.fontsize); - o->callback(getdp_ok_cb); - - g[1]->end(); - } - { - g[2] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "About"); - g[2]->labelsize(CTX.fontsize); - - Fl_Browser *o = new Fl_Browser(2*WB, 2*WB+1*BH, width-4*WB, height-5*WB-2*BH); - o->add(""); - o->add("@c@b@.GetDP"); - o->add("@c@.A General environment for the treatment"); - o->add("@c@.of Discrete Problems"); - o->add(""); - o->add("@c@.Experimental solver plugin for Gmsh"); - o->add(""); - o->add("@c@.Visit http://www.geuz.org/getdp/ for more info"); - o->textsize(CTX.fontsize); - - g[2]->end(); - } - o->end(); - } - - { - Fl_Button* o = new Fl_Button(width-5*BB-5*WB, height-BH-WB, BB, BH, "Pre"); - o->labelsize(CTX.fontsize); - o->callback(getdp_pre_cb); - } - { - Fl_Button* o = new Fl_Button(width-4*BB-4*WB, height-BH-WB, BB, BH, "Cal"); - o->labelsize(CTX.fontsize); - o->callback(getdp_cal_cb); - } - { - Fl_Button* o = new Fl_Button(width-3*BB-3*WB, height-BH-WB, BB, BH, "Post"); - o->labelsize(CTX.fontsize); - o->callback(getdp_post_cb); - } - { - Fl_Button* o = new Fl_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "Kill"); - o->labelsize(CTX.fontsize); - o->callback(getdp_kill_cb); - } - { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); - o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)getdp_window); - } - - - if(CTX.center_windows) - getdp_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - getdp_window->end(); - } - else{ - if(getdp_window->shown()) - getdp_window->redraw(); - else - getdp_window->show(); - } -} - diff --git a/Fltk/GUI.h b/Fltk/GUI.h deleted file mode 100644 index 79c601a8ac720a5456a9ad34da1b33d451da0779..0000000000000000000000000000000000000000 --- a/Fltk/GUI.h +++ /dev/null @@ -1,235 +0,0 @@ -#ifndef _GUI_H_ -#define _GUI_H_ - -#include <FL/Fl_Window.H> -#include <FL/Fl_Box.H> -#include <FL/Fl_Menu_Bar.H> -#include <FL/fl_draw.H> -#include <FL/gl.h> -#include <FL/Fl_Gl_Window.H> -#include <FL/Fl_Choice.H> -#include <FL/Fl_Scroll.H> -#include <FL/Fl_Tabs.H> -#include <FL/Fl_Button.H> -#include <FL/Fl_Return_Button.H> -#include <FL/Fl_Light_Button.H> -#include <FL/Fl_Menu_Button.H> -#include <FL/Fl_Check_Button.H> -#include <FL/Fl_Input.H> -#include <FL/Fl_Value_Input.H> -#include <FL/Fl_Output.H> -#include <FL/Fl_Multiline_Output.H> -#include <FL/Fl_Bitmap.H> -#include <FL/Fl_Browser.H> -#include <FL/x.H> -#include <FL/Fl_Color_Chooser.H> -#include <FL/fl_ask.H> - -#include "Opengl_Window.h" -#include "Colorbar_Window.h" - -#define NB_BUTT_MAX 100 -#define NB_HISTORY_MAX 1000 - -// The dynamic contexts - -typedef struct{ - char *label; - Fl_Callback* callback; -} Context_Item; - -extern Context_Item menu_geometry[]; -extern Context_Item menu_geometry_elementary[]; -extern Context_Item menu_geometry_elementary_add[]; -extern Context_Item menu_geometry_elementary_add_new[]; -extern Context_Item menu_geometry_elementary_add_translate[]; -extern Context_Item menu_geometry_elementary_add_rotate[]; -extern Context_Item menu_geometry_elementary_add_scale[]; -extern Context_Item menu_geometry_elementary_add_symmetry[]; -extern Context_Item menu_geometry_elementary_translate[]; -extern Context_Item menu_geometry_elementary_rotate[]; -extern Context_Item menu_geometry_elementary_scale[]; -extern Context_Item menu_geometry_elementary_symmetry[]; -extern Context_Item menu_geometry_elementary_extrude[]; -extern Context_Item menu_geometry_elementary_extrude_translate[]; -extern Context_Item menu_geometry_elementary_extrude_rotate[]; -extern Context_Item menu_geometry_elementary_delete[]; -extern Context_Item menu_geometry_physical[]; -extern Context_Item menu_geometry_physical_add[]; -extern Context_Item menu_mesh[]; -extern Context_Item menu_mesh_define[]; -extern Context_Item menu_mesh_define_transfinite[]; -extern Context_Item menu_solver[]; -extern Context_Item menu_post[]; - -// Forward Declarations - -class GMSH_Plugin; - -// A generalized dialogbox for plugins - -struct PluginDialogBox -{ - Fl_Window *main_window; - Fl_Return_Button *run_button; - int nb_viewvalue; - Fl_Value_Input *view_value[20]; -}; - -// The GUI class contains only the important widgets (which can be set/queried). - -class GUI{ - - int MH ; - - // Bitmaps - Fl_Bitmap *abort_bmp, *start_bmp, *stop_bmp, *about_bmp ; - void add_post_plugins ( Fl_Menu_Button *button , int iView); - void add_multiline_in_browser(Fl_Browser *o, char* prefix, char *str); - -public: - - // menu window - int init_menu_window; - Fl_Window *m_window ; - Fl_Menu_Bar *m_menu_bar ; - Fl_Choice *m_module_butt ; - Fl_Button *m_navig_butt [2] ; - Fl_Button *m_push_butt [NB_BUTT_MAX] ; - Fl_Light_Button *m_toggle_butt [NB_BUTT_MAX] ; - Fl_Menu_Button *m_popup_butt [NB_BUTT_MAX] ; - - // graphic window - int init_graphic_window; - Fl_Window *g_window ; - Opengl_Window *g_opengl_window ; - Fl_Button *g_status_butt[7] ; - Fl_Box *g_status_label[3] ; - - // general options window - int init_general_options_window; - Fl_Window *gen_window ; - Fl_Check_Button *gen_butt[20] ; - Fl_Value_Input *gen_value[10] ; - Fl_Button *gen_col[50] ; - Fl_Input *gen_input[10] ; - - // geometry options window - int init_geometry_options_window; - Fl_Window *geo_window ; - Fl_Check_Button *geo_butt[10] ; - Fl_Input *geo_input ; - Fl_Value_Input *geo_value[10] ; - Fl_Button *geo_col[50] ; - - // mesh options window - int init_mesh_options_window; - Fl_Window *mesh_window ; - Fl_Check_Button *mesh_butt[20] ; - Fl_Input *mesh_input ; - Fl_Value_Input *mesh_value[20] ; - Fl_Button *mesh_col[50] ; - - // solver options window - int init_solver_options_window; - Fl_Window *solver_window ; - Fl_Check_Button *solver_butt[20] ; - Fl_Value_Input *solver_value[20] ; - - // post-processing options window - int init_post_options_window; - Fl_Window *post_window ; - Fl_Check_Button *post_butt[20] ; - Fl_Value_Input *post_value[20] ; - - // statistics window - int init_statistics_window; - Fl_Window *stat_window ; - Fl_Output *stat_value[50] ; - - // message window - int init_message_window; - Fl_Window *msg_window ; - Fl_Browser *msg_browser ; - - // about window - int init_about_window; - Fl_Window *about_window ; - - // view options window - int init_view_window, view_number ; - Fl_Window *view_window ; - Fl_Group *view_timestep, *view_vector ; -#define VIEW_OPT_BUTT 50 - Fl_Check_Button *view_butt[VIEW_OPT_BUTT] ; - Fl_Value_Input *view_value[VIEW_OPT_BUTT] ; - Fl_Input *view_input[VIEW_OPT_BUTT] ; - Colorbar_Window *view_colorbar_window ; - Fl_Return_Button *view_ok ; - - // geometry context window - int init_geometry_context_window; - Fl_Window *context_geometry_window ; - Fl_Input *context_geometry_input[30] ; - - // mesh context window - int init_mesh_context_window; - Fl_Window *context_mesh_window ; - Fl_Input *context_mesh_input[20] ; - - // solver windows - int init_getdp_window; - Fl_Window *getdp_window ; - Fl_Input *getdp_input[50] ; - Fl_Choice *getdp_choice[10] ; - Fl_Check_Button *getdp_butt[10] ; - - // the constructor - GUI(int argc, char **argv); - - // create the windows - void create_menu_window(int argc, char **argv); - void create_graphic_window(int argc, char **argv); - void create_general_options_window(); - void create_geometry_options_window(); - void create_mesh_options_window(); - void create_solver_options_window(); - void create_post_options_window(); - PluginDialogBox *create_plugin_window(GMSH_Plugin *p); - void create_view_options_window(int numview); - void create_statistics_window(); - void create_message_window(); - void create_about_window(); - void create_geometry_context_window(int num); - void create_mesh_context_window(int num); - void create_getdp_window(); - - // general purpose interaction - void run(); - void check(); - void wait(); - void make_opengl_current(); - void make_overlay_current(); - void redraw_opengl(); - void redraw_overlay(); - void set_size(int w, int h); - void set_menu_size(int nb_butt); - void set_context(Context_Item menu[], int flag); - int get_context(); - void set_anim(int mode); - void set_status(char *msg, int num); - void add_message(char *msg); - void save_message(char *filename); - void fatal_error(char *filename); - void set_statistics(); - void update_view_window(int numview); - void set_title(char *str); - void add_handler(); - int global_shortcuts(int event); - int selection, try_selection, quit_selection, end_selection; - -}; - - -#endif - diff --git a/Fltk/Main.cpp b/Fltk/Main.cpp deleted file mode 100644 index ddc68207480b82bc1cf631d271db468609b4f659..0000000000000000000000000000000000000000 --- a/Fltk/Main.cpp +++ /dev/null @@ -1,203 +0,0 @@ -// $Id: Main.cpp,v 1.32 2001-08-03 14:58:04 geuzaine Exp $ - -#include <signal.h> -#include <time.h> - -#include "PluginManager.h" -#include "Gmsh.h" -#include "GmshUI.h" -#include "GmshVersion.h" - -#include "Geo.h" -#include "Verif.h" -#include "Mesh.h" -#include "Draw.h" -#include "Context.h" -#include "Options.h" -#include "ColorTable.h" -#include "Parser.h" -#include "Static.h" -#include "GUI.h" -#include "OpenFile.h" -#include "GetOptions.h" - -GUI *WID = NULL; - -int main(int argc, char *argv[]){ - int i, nbf; - char cmdline[1000]="", currtime[100]; - time_t now; - - // log some info - - time(&now); - strcpy(currtime, ctime(&now)); - currtime[strlen(currtime)-1] = '\0'; - - for(i=0;i<argc;i++){ - if(i) strcat(cmdline, " "); - strcat(cmdline, argv[i]); - } - - // Gmsh default options - - Init_Options(0); - - // Configuration files and command line options - - Get_Options(argc, argv, &nbf); - - // This does not work with FLTK right now... - - CTX.overlay = 0 ; - CTX.geom.highlight = 0 ; - - // Always print info on terminal for non-interactive execution - - if(CTX.batch) - CTX.terminal = 1; - - if(CTX.verbosity && CTX.terminal) - fprintf(stderr, "%s, version %.2f, started %s\n", - gmsh_progname, GMSH_VERSION, currtime); - - // Register Default Plugins (in test ...) - if(CTX.default_plugins) - GMSH_PluginManager::Instance()->RegisterDefaultPlugins(); - - // Initialize the static Mesh - - M.Vertices = NULL ; - M.VertexEdges = NULL ; - M.Simplexes = NULL ; - M.Points = NULL ; - M.Curves = NULL ; - M.SurfaceLoops = NULL ; - M.EdgeLoops = NULL ; - M.Surfaces = NULL ; - M.Volumes = NULL ; - M.PhysicalGroups = NULL ; - M.Metric = NULL ; - - // Signal handling - - signal(SIGINT, Signal); - signal(SIGSEGV, Signal); - signal(SIGFPE, Signal); - - // Non-interactive Gmsh - - if(CTX.batch){ - Msg(DIRECT, "Command line : %s", cmdline); - OpenProblem(CTX.filename); - if(yyerrorstate) - exit(1); - else { - for(i=1;i<nbf;i++) MergeProblem(TheFileNameTab[i]); - if(TheBgmFileName){ - MergeProblem(TheBgmFileName); - if(List_Nbr(Post_ViewList)) - BGMWithView((Post_View*)List_Pointer(Post_ViewList, List_Nbr(Post_ViewList)-1)); - else - Msg(GERROR, "Invalid background mesh (no view)"); - } - if(CTX.batch > 0){ - mai3d(THEM, CTX.batch); - Print_Mesh(THEM, CTX.output_filename, CTX.mesh.format); - } - else - Print_Geo(THEM, CTX.output_filename); - if(CTX.mesh.histogram) - Print_Histogram(THEM->Histogram[0]); - exit(1); - } - } - - - // Interactive Gmsh - - CTX.batch = -1 ; // The GUI is not ready yet for interactivity - - // Create the GUI - - WID = new GUI(argc, argv); - - // Set all previously defined options in the GUI - - Init_Options_GUI(0); - - // The GUI is ready - - CTX.batch = 0 ; - - // Say welcome! - - Msg(STATUS3N, "Ready"); - Msg(STATUS1, "Gmsh %.2f", GMSH_VERSION); - - // Log the following for bug reports - - Msg(LOG_INFO, "-------------------------------------------------------"); - Msg(LOG_INFO, gmsh_os); - Msg(LOG_INFO, gmsh_date); - Msg(LOG_INFO, gmsh_host); - Msg(LOG_INFO, gmsh_packager); - Msg(LOG_INFO, "Home directory : %s", CTX.home_dir); - Msg(LOG_INFO, "Launch date : %s", currtime); - Msg(LOG_INFO, "Command line : %s", cmdline); - Msg(LOG_INFO, "-------------------------------------------------------"); - - // Display the GUI immediately to have a quick "a la Windows" launch time - - WID->check(); - - // Open project file - - OpenProblem(CTX.filename); - - // Merge all other input files - - for(i=1;i<nbf;i++) MergeProblem(TheFileNameTab[i]); - - // Init first context - - switch(CTX.initial_context){ - case 1 : - WID->set_context(menu_geometry, 0); - break; - case 2 : - WID->set_context(menu_mesh, 0); - break; - case 3 : - WID->set_context(menu_solver, 0); - break; - case 4 : - WID->set_context(menu_post, 0); - break; - default : // automatic - if(List_Nbr(Post_ViewList)) - WID->set_context(menu_post, 0); - else - WID->set_context(menu_geometry, 0); - break; - } - - // Read background mesh on disk - - if(TheBgmFileName){ - MergeProblem(TheBgmFileName); - if(List_Nbr(Post_ViewList)) - BGMWithView((Post_View*)List_Pointer(Post_ViewList, List_Nbr(Post_ViewList)-1)); - else - Msg(GERROR, "Invalid background mesh (no view)"); - } - - // Draw the actual scene - Draw(); - CTX.expose = 1 ; - - // loop - WID->run(); - -} - diff --git a/Fltk/Makefile b/Fltk/Makefile deleted file mode 100644 index c47a140677f1b4f5b67424e0a1872555fef81da8..0000000000000000000000000000000000000000 --- a/Fltk/Makefile +++ /dev/null @@ -1,130 +0,0 @@ -# $Id: Makefile,v 1.25 2001-08-11 23:32:19 geuzaine Exp $ -# -# Makefile for "libFltk.a" -# - -.IGNORE: - -CC = c++ -AR = ar ruvs -RM = rm -RANLIB = ranlib - -LIB = ../lib/libFltk.a -INCLUDE = -I../Common -I../DataStr -I../Graphics -I../Geo\ - -I../Mesh -I../Parser -I../Fltk -I../Plugin - -C_FLAGS = -g -Wall -OS_FLAGS = -D_LITTLE_ENDIAN -VERSION_FLAGS = -D_NOTHREADS -D_FLTK - -GL_INCLUDE = -I$(HOME)/SOURCES/Mesa-3.1/include\ - -I$(HOME)/SOURCES/Mesa-3.1/include/GL -GUI_INCLUDE = -I$(HOME)/SOURCES/fltk - -RMFLAGS = -f -CFLAGS = $(C_FLAGS) $(OS_FLAGS) $(VERSION_FLAGS) $(INCLUDE)\ - $(GUI_INCLUDE) $(GL_INCLUDE) - -SRC = Main.cpp \ - Message.cpp \ - GUI.cpp\ - Callbacks.cpp\ - Opengl.cpp\ - Opengl_Window.cpp\ - Colorbar_Window.cpp\ - Socket.cpp\ - Solvers.cpp - - -OBJ = $(SRC:.cpp=.o) - -.SUFFIXES: .o .cpp - -$(LIB): $(OBJ) - $(AR) $(LIB) $(OBJ) - $(RANLIB) $(LIB) - -.cpp.o: - $(CC) $(CFLAGS) -c $< - -clean: - $(RM) $(RMFLAGS) *.o - -lint: - $(LINT) $(CFLAGS) $(SRC) - -depend: - (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ - $(CC) -MM $(CFLAGS) ${SRC} \ - ) >Makefile.new - cp Makefile Makefile.bak - cp Makefile.new Makefile - $(RM) $(RMFLAGS) Makefile.new - -# DO NOT DELETE THIS LINE -Main.o: Main.cpp ../Plugin/PluginManager.h ../Common/Gmsh.h \ - ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \ - ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ - ../Common/GmshUI.h ../Common/GmshVersion.h ../Geo/Geo.h \ - ../Geo/Verif.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h \ - ../Graphics/Draw.h ../Common/Views.h ../Common/ColorTable.h \ - ../Common/Context.h ../Common/Options.h ../Parser/Parser.h \ - ../Common/Static.h GUI.h Opengl_Window.h Colorbar_Window.h \ - ../Parser/OpenFile.h ../Common/GetOptions.h -Message.o: Message.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ - ../Common/GmshVersion.h ../Common/Context.h ../Common/Options.h GUI.h \ - Opengl_Window.h Colorbar_Window.h ../Common/ColorTable.h -GUI.o: GUI.cpp ../Plugin/PluginManager.h ../Plugin/Plugin.h \ - ../Common/Options.h ../Common/Message.h ../Common/Gmsh.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ - ../Common/Numeric.h ../Common/GmshVersion.h ../Common/Context.h \ - ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h \ - ../Graphics/Draw.h ../Common/Views.h ../Common/ColorTable.h GUI.h \ - Opengl_Window.h Colorbar_Window.h Callbacks.h ../Common/Bitmaps.h \ - ../Common/Icon.h ../Common/GetOptions.h -Callbacks.o: Callbacks.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Geo/Geo.h \ - ../Geo/Verif.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h \ - ../Graphics/Draw.h ../Common/Views.h ../Common/ColorTable.h \ - ../Common/Timer.h ../Geo/Visibility.h ../Graphics/CreateFile.h \ - ../Parser/OpenFile.h ../Common/GetOptions.h ../Common/Context.h \ - ../Common/Options.h GUI.h Opengl_Window.h Colorbar_Window.h \ - Callbacks.h ../Plugin/Plugin.h Solvers.h -Opengl.o: Opengl.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ - ../Common/Numeric.h ../Common/Context.h ../Geo/Geo.h ../Mesh/Mesh.h \ - ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Graphics/Draw.h \ - ../Common/Views.h ../Common/ColorTable.h GUI.h Opengl_Window.h \ - Colorbar_Window.h ../Graphics/gl2ps.h -Opengl_Window.o: Opengl_Window.cpp ../Common/Gmsh.h \ - ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \ - ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ - ../Common/Numeric.h ../Common/GmshUI.h ../Common/Context.h \ - ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h \ - ../Graphics/Draw.h ../Common/Views.h ../Common/ColorTable.h GUI.h \ - Opengl_Window.h Colorbar_Window.h -Colorbar_Window.o: Colorbar_Window.cpp ../Common/Gmsh.h \ - ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \ - ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ - ../Common/GmshUI.h ../Common/Numeric.h GUI.h Opengl_Window.h \ - Colorbar_Window.h ../Common/ColorTable.h ../Common/Context.h -Socket.o: Socket.cpp ../Common/Message.h -Solvers.o: Solvers.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h Socket.h ../Parser/OpenFile.h \ - Solvers.h ../Common/GmshUI.h GUI.h Opengl_Window.h Colorbar_Window.h \ - ../Common/ColorTable.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ - ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/Metric.h ../Graphics/Draw.h ../Common/Views.h \ - ../Common/Context.h diff --git a/Fltk/Message.cpp b/Fltk/Message.cpp deleted file mode 100644 index 71370a4ee65e1940f7bcbdc2895e916853940fdc..0000000000000000000000000000000000000000 --- a/Fltk/Message.cpp +++ /dev/null @@ -1,210 +0,0 @@ -// $Id: Message.cpp,v 1.23 2001-08-12 20:45:30 geuzaine Exp $ - -#include <unistd.h> -#include <signal.h> -#if !defined(WIN32) || defined(__CYGWIN__) -#include <sys/resource.h> -#endif - -#include "Gmsh.h" -#include "GmshUI.h" -#include "GmshVersion.h" -#include "Context.h" -#include "Options.h" -#include "GUI.h" - -extern GUI *WID; -extern Context_T CTX; - -/* ------------------------------------------------------------------------ */ -/* S i g n a l */ -/* ------------------------------------------------------------------------ */ - -void Signal (int sig_num){ - - switch (sig_num){ - case SIGSEGV : - Msg(FATAL1, "Segmentation violation (invalid memory reference)"); - Msg(FATAL2, "------------------------------------------------------"); - Msg(FATAL2, "You have discovered a bug in Gmsh! You may report it"); - Msg(FATAL2, "by e-mail (together with any helpful data permitting to"); - Msg(FATAL3, "reproduce it) to <gmsh@geuz.org>"); - break; - case SIGFPE : - Msg(FATAL, "Floating point exception (division by zero?)"); - break; - case SIGINT : - Msg(INFO, "Interrupt (generated from terminal special character)"); - Exit(1); - break; - default : - Msg(FATAL, "Unknown signal"); - break; - } -} - - -/* ------------------------------------------------------------------------ */ -/* M s g */ -/* ------------------------------------------------------------------------ */ - -void Debug(){ -} - -void Msg(int level, char *fmt, ...){ - va_list args; - int abort = 0, verb = 0, window = -1, log = 1; - char *str = NULL; - - switch(level){ - case DIRECT : verb = 2; break ; - - case STATUS1N : log = 0; //fallthrough - case STATUS1 : verb = 1; window = 0; break ; - case STATUS2N : log = 0; //fallthrough - case STATUS2 : verb = 1; window = 1; break ; - case STATUS3N : log = 0; //fallthrough - case STATUS3 : verb = 1; window = 2; break ; - - case FATAL : str = FATAL_STR; abort = 1; break ; - case FATAL1 : str = FATAL_STR; break ; - case FATAL2 : str = FATAL_NIL; break ; - case FATAL3 : str = FATAL_NIL; abort = 1; break ; - - case GERROR : - case GERROR1 : str = ERROR_STR; break ; - case GERROR2 : - case GERROR3 : str = ERROR_NIL; break ; - - case WARNING : - case WARNING1 : str = WARNING_STR; verb = 1; break ; - case WARNING2 : - case WARNING3 : str = WARNING_NIL; verb = 1; break ; - - case INFO : - case INFO1 : str = INFO_STR; verb = 2; break ; - case INFO2 : - case INFO3 : str = INFO_NIL; verb = 2; break ; - - case DEBUG : - case DEBUG1 : str = DEBUG_STR; verb = 3; break ; - case DEBUG2 : - case DEBUG3 : str = DEBUG_NIL; verb = 3; break ; - - case PARSER_ERROR : str = PARSER_ERROR_STR ; break ; - - case PARSER_INFO : str = PARSER_INFO_STR ; verb = 2; break ; - - case LOG_INFO : verb = 2 ; window = 3; break ; - - default : return; - } - - static char buff1[1024], buff2[1024], buff[4][1024]; - - if(!WID) - window = -1; - else - WID->check(); - - if(CTX.verbosity >= verb){ - va_start (args, fmt); - - if(window >= 0){ - vsprintf(buff[window], fmt, args); - if(window <= 2) WID->set_status(buff[window], window); - if(log && strlen(buff[window])) WID->add_message(buff[window]); - } - else{ - strcpy(buff1, "@C1"); - if(str) strcat(buff1, str); - vsprintf(buff2, fmt, args); - strcat(buff1,buff2); - if(CTX.terminal) fprintf(stderr, "%s\n", &buff1[3]); - if(WID){ - if(verb<2) - WID->add_message(buff1); - else - WID->add_message(&buff1[3]); - if(!verb) WID->create_message_window(); - } - } - va_end (args); - } - - if(abort){ - Debug(); - if(WID){ - WID->save_message(CTX.error_filename); - WID->fatal_error(CTX.error_filename); - } - Exit(1); - } -} - - -/* ------------------------------------------------------------------------ */ -/* Exit */ -/* ------------------------------------------------------------------------ */ - -void Exit(int level){ - if(WID && !CTX.batch){ - if(CTX.session_save){ - CTX.position[0] = WID->m_window->x(); - CTX.position[1] = WID->m_window->y(); - CTX.gl_position[0] = WID->g_window->x(); - CTX.gl_position[1] = WID->g_window->y(); - CTX.msg_position[0] = WID->msg_window->x(); - CTX.msg_position[1] = WID->msg_window->y(); - CTX.msg_size[0] = WID->msg_window->w(); - CTX.msg_size[1] = WID->msg_window->h(); - Print_Options(0, GMSH_SESSIONRC, CTX.sessionrc_filename); - } - if(CTX.options_save) - Print_Options(0, GMSH_OPTIONSRC, CTX.optionsrc_filename); - } - unlink(CTX.tmp_filename);//delete temp file - exit(level); -} - -/* ------------------------------------------------------------------------ */ -/* C p u */ -/* ------------------------------------------------------------------------ */ - -void GetResources(long *s, long *us, long *mem){ -#if !defined(WIN32) || defined(__CYGWIN__) - static struct rusage r; - - getrusage(RUSAGE_SELF,&r); - *s = (long)r.ru_utime.tv_sec ; - *us = (long)r.ru_utime.tv_usec ; - *mem = (long)r.ru_maxrss ; -#else - *s = *us = *mem = 0; -#endif - -} - -void PrintResources(char *fmt, long s, long us, long mem){ - Msg(DIRECT, "Resources = %scpu %ld.%ld s / mem %ld kb\n", fmt, s, us, mem); -} - -double Cpu(void){ - long s, us, mem; - GetResources(&s, &us, &mem); - return (double)s + (double)us/1.e6 ; -} - -/* ------------------------------------------------------------------------ */ -/* P r o g r e s s */ -/* ------------------------------------------------------------------------ */ - -void Progress(int i){ -} - -/* ------------------------------------------------------------------------ */ -/* E d i t G e o m e t r y */ -/* ------------------------------------------------------------------------ */ - -void AddALineInTheEditGeometryForm (char* line){ -} diff --git a/Fltk/Opengl.cpp b/Fltk/Opengl.cpp deleted file mode 100644 index 4adbc4fa260fbf97caf31c56ee116de1ea818741..0000000000000000000000000000000000000000 --- a/Fltk/Opengl.cpp +++ /dev/null @@ -1,143 +0,0 @@ -// $Id: Opengl.cpp,v 1.20 2001-08-11 23:28:31 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Numeric.h" -#include "Context.h" -#include "Geo.h" -#include "Mesh.h" -#include "Draw.h" -#include "GUI.h" -#include "gl2ps.h" - -extern GUI *WID; -extern Mesh M; -extern Context_T CTX; - -void Process_SelectionBuffer(int x, int y, int *n, GLuint *ii, GLuint *jj); -void Filter_SelectionBuffer(int n, GLuint *typ, GLuint *ient, Vertex **thev, - Curve **thec, Surface **thes, Mesh *m); -void myZoom(GLdouble X1, GLdouble X2, GLdouble Y1, GLdouble Y2, - GLdouble Xc1, GLdouble Xc2, GLdouble Yc1, GLdouble Yc2); - -/* ------------------------------------------------------------------------ */ -/* Draw */ -/* ------------------------------------------------------------------------ */ - -void InitOpengl(void){ - WID->make_opengl_current(); - Orthogonalize(0,0); -} - -void InitOverlay(void){ - WID->make_overlay_current(); - Orthogonalize(0,0); -} - -void ClearOpengl(void){ - glClearColor(UNPACK_RED(CTX.color.bg)/255., - UNPACK_GREEN(CTX.color.bg)/255., - UNPACK_BLUE(CTX.color.bg)/255., - 0.); - glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT); -} - -void Draw(void){ - WID->redraw_opengl(); -} - -void DrawUI(void){ - WID->check(); -} - -void Draw_String(char *s){ - - if(CTX.stream == TO_FILE){ - if(!CTX.print.gl_fonts && CTX.print.eps_quality > 0){ - gl2psText(s,CTX.print.font,CTX.print.font_size); - return ; - } - } - - gl_font(FL_HELVETICA, CTX.gl_fontsize); - CTX.gl_fontheight = gl_height() ; - CTX.gl_fontascent = gl_height()-gl_descent() ; - gl_draw(s); - -} - -/* ------------------------------------------------------------------------ - set_XXX - ------------------------------------------------------------------------ */ - -void set_r(int i, double val){ - if(!CTX.useTrackball){ - if(!CTX.rlock[i]){ - CTX.r[i] = val; - } - } -} - -void set_t(int i, double val){ - if(!CTX.tlock[i]){ - CTX.t[i] = val; - } -} - -void set_s(int i, double val){ - if(!CTX.slock[i]){ - CTX.s[i] = val; - } -} - - -/* ------------------------------------------------------------------------ */ -/* SelectEntity */ -/* ------------------------------------------------------------------------ */ - -int check_type(int type, Vertex *v, Curve *c, Surface *s){ - return ( (type==ENT_POINT && v) || - (type==ENT_LINE && c) || - (type==ENT_SURFACE && s) ) ; -} - -int SelectEntity(int type, Vertex **v, Curve **c, Surface **s){ - int hits; - GLuint ii[SELECTION_BUFFER_SIZE],jj[SELECTION_BUFFER_SIZE]; - - *v = NULL; *c = NULL; *s = NULL; - - WID->selection = type; - WID->try_selection = 0; - WID->quit_selection = 0; - WID->end_selection = 0; - - while(1){ - WID->wait(); - if(WID->quit_selection){ - WID->quit_selection = 0; - WID->selection = 0; - return 0; - } - if(WID->end_selection){ - WID->end_selection = 0; - WID->selection = 0; - return -1; - } - if(WID->try_selection){ - WID->try_selection = 0; - Process_SelectionBuffer(Fl::event_x(), Fl::event_y(), &hits, ii, jj); - Filter_SelectionBuffer(hits,ii,jj,v,c,s,&M); - if(check_type(type,*v,*c,*s)){ - BeginHighlight(); - HighlightEntity(*v,*c,*s,1); - EndHighlight(1); - WID->selection = 0; - return(1); - } - } - } - -} - - diff --git a/Fltk/Opengl_Window.cpp b/Fltk/Opengl_Window.cpp deleted file mode 100644 index e18556e66ea826d31ae3859d2fcc60c038e63115..0000000000000000000000000000000000000000 --- a/Fltk/Opengl_Window.cpp +++ /dev/null @@ -1,287 +0,0 @@ -// $Id: Opengl_Window.cpp,v 1.17 2001-08-11 23:28:31 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "GmshUI.h" -#include "Context.h" -#include "Geo.h" -#include "Mesh.h" -#include "Draw.h" -#include "GUI.h" -#include "Opengl_Window.h" - -// This file defines the Opengl_Window class (subclass of Fl_GL_Window) - -extern GUI *WID; -extern Mesh M; -extern Context_T CTX; - -void Process_SelectionBuffer(int x, int y, int *n, GLuint *ii, GLuint *jj); -void Filter_SelectionBuffer(int n, GLuint *typ, GLuint *ient, Vertex **thev, - Curve **thec, Surface **thes, Mesh *m); -void myZoom(GLdouble X1, GLdouble X2, GLdouble Y1, GLdouble Y2, - GLdouble Xc1, GLdouble Xc2, GLdouble Yc1, GLdouble Yc2); -int check_type(int type, Vertex *v, Curve *c, Surface *s); - -static int ZOOM = 0 ; -static double ZOOM_X0, ZOOM_Y0, ZOOM_X1, ZOOM_Y1; - -void Opengl_Window::draw() { - if(!valid()){ - valid(1); - CTX.viewport[0] = 0 ; CTX.viewport[1] = 0 ; - CTX.viewport[2] = w() ; CTX.viewport[3] = h() ; - glViewport(CTX.viewport[0], CTX.viewport[1], - CTX.viewport[2], CTX.viewport[3]); - } - if((w() != CTX.viewport[2]-CTX.viewport[0]) || - (h() != CTX.viewport[3]-CTX.viewport[1])){ - WID->set_size(CTX.viewport[2]-CTX.viewport[0], - CTX.viewport[3]-CTX.viewport[1]); - glViewport(CTX.viewport[0], CTX.viewport[1], - CTX.viewport[2], CTX.viewport[3]); - } - if(!ZOOM){ - Orthogonalize(0,0); - ClearOpengl(); - Draw3d(); - Draw2d(); - } - else{ - glPopMatrix(); - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - gluOrtho2D(CTX.vxmin, CTX.vxmax, CTX.vymin, CTX.vymax); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - glDisable(GL_DEPTH_TEST); - glColor3f(1.,1.,1.); - glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO); - glEnable(GL_BLEND); - glBegin(GL_LINE_STRIP); - glVertex2d(ZOOM_X0, ZOOM_Y0); - glVertex2d(ZOOM_X1, ZOOM_Y0); - glVertex2d(ZOOM_X1, ZOOM_Y1); - glVertex2d(ZOOM_X0, ZOOM_Y1); - glVertex2d(ZOOM_X0, ZOOM_Y0); - glEnd(); - ZOOM_X1 = CTX.vxmin + ((double)Fl::event_x()/(double)w()) * (CTX.vxmax - CTX.vxmin); - ZOOM_Y1 = CTX.vymax - ((double)Fl::event_y()/(double)h()) * (CTX.vymax - CTX.vymin); - glBegin(GL_LINE_STRIP); - glVertex2d(ZOOM_X0, ZOOM_Y0); - glVertex2d(ZOOM_X1, ZOOM_Y0); - glVertex2d(ZOOM_X1, ZOOM_Y1); - glVertex2d(ZOOM_X0, ZOOM_Y1); - glVertex2d(ZOOM_X0, ZOOM_Y0); - glEnd(); - glDisable(GL_BLEND); - glEnable(GL_DEPTH_TEST); - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - ZOOM = 0; - } -} - -void Opengl_Window::draw_overlay() { -} - -void Opengl_Window::clear_overlay() { -} - - -// le principe de FLTK est assez different des autres toolkits: les -// events sont passes au handle du widget qui a le focus. Si ce handle -// revoie 1, alors l'event est considere comme traite, et est -// supprime. Si le handle retourne 0, l'event est passe au handle du -// parent. - -int Opengl_Window::handle(int event) { - static int xpos, ypos, xmov, ymov, ibut, hits; - static int ZoomClick=0, FirstClick=0; - static GLdouble xc, yc, xc1, yc1, xc2, yc2, xt1, yt1, xscale1, yscale1; - static Vertex *v=NULL, *ov; - static Curve *c=NULL, *oc; - static Surface *s=NULL, *os; - - GLuint ii[SELECTION_BUFFER_SIZE], jj[SELECTION_BUFFER_SIZE]; - - switch (event) { - - case FL_PUSH: - FirstClick = 1; - ibut = Fl::event_button(); - xpos = Fl::event_x(); - ypos = Fl::event_y(); - - if(ibut == 1 && !Fl::event_state(FL_SHIFT)){ - if(!ZoomClick && Fl::event_state(FL_CTRL)){ - ZOOM_X0 = ZOOM_X1 = CTX.vxmin + ((double)xpos/(double)w()) * (CTX.vxmax - CTX.vxmin); - ZOOM_Y0 = ZOOM_Y1 = CTX.vymax - ((double)ypos/(double)h()) * (CTX.vymax - CTX.vymin); - xc1 = ZOOM_X0/CTX.s[0] - CTX.t[0]; - yc1 = ZOOM_Y0/CTX.s[1] - CTX.t[1]; - ZoomClick = 1; - } - else if(ZoomClick){ - xc2 = ZOOM_X1/CTX.s[0] - CTX.t[0]; - yc2 = ZOOM_Y1/CTX.s[1] - CTX.t[1]; - ZoomClick = 0; - clear_overlay(); - if(ZOOM_X0 != ZOOM_X1 && ZOOM_Y0 != ZOOM_Y1) - myZoom(ZOOM_X0,ZOOM_X1,ZOOM_Y0,ZOOM_Y1,xc1,xc2,yc1,yc2); - } - else{ - WID->try_selection = 1 ; - } - } - else if(ibut == 2 || (ibut == 1 && Fl::event_state(FL_SHIFT))){ - if(Fl::event_state(FL_CTRL) && !ZoomClick){ - set_s(1, CTX.s[0]); - set_s(2, CTX.s[0]); - redraw(); - } - else{ - ZoomClick = 0; - clear_overlay(); - } - } - else{ - if(Fl::event_state(FL_CTRL) && !ZoomClick){ - if(CTX.useTrackball) - CTX.setQuaternion(0.,0.,0.,1.); - else{ - set_r(0,0.); set_r(1,0.); set_r(2,0.); - } - set_t(0,0.); set_t(1,0.); set_t(2,0.); - set_s(0,1.); set_s(1,1.); set_s(2,1.); - redraw(); - } - else{ - ZoomClick = 0; - clear_overlay(); - } - } - return 1; - - case FL_RELEASE: - ibut = Fl::event_button(); - xpos = Fl::event_x(); - ypos = Fl::event_y(); - if(!ZoomClick){ - CTX.mesh.draw = 1 ; - CTX.post.draw = 1 ; - redraw(); - } - return 1; - - case FL_DRAG: - xmov = Fl::event_x() - xpos; - ymov = Fl::event_y() - ypos; - - if(ZoomClick) { - ZOOM = 1; - redraw(); - } - else { - clear_overlay(); - - if(FirstClick){ - xc1 = (((double)xpos/(double)w()) * (CTX.vxmax-CTX.vxmin) + CTX.vxmin) - / CTX.s[0] - CTX.t[0]; - yc1 = (CTX.vymax - ((double)ypos/(double)h()) * (CTX.vymax-CTX.vymin)) - / CTX.s[1] - CTX.t[1]; - xt1 = CTX.t[0]; - yt1 = CTX.t[1]; - xscale1 = CTX.s[0]; - yscale1 = CTX.s[1]; - FirstClick=0; - } - - if(ibut == 1 && !Fl::event_state(FL_SHIFT)){ - if(CTX.useTrackball) - CTX.addQuaternion((2.0*xpos - w()) / w(), - (h() - 2.0*ypos) / h(), - (2.0*Fl::event_x() - w()) / w(), - (h() - 2.0*Fl::event_y()) / h()); - else{ - set_r(1, CTX.r[1] + ((abs(xmov) > abs(ymov))?180*(float)xmov/(float)w():0)); - set_r(0, CTX.r[0] + ((abs(xmov) > abs(ymov))?0:180*(float)ymov/(float)h())); - } - } - else if(ibut == 2 || (ibut == 1 && Fl::event_state(FL_SHIFT))){ - if(!CTX.useTrackball) - set_r(2, CTX.r[2] + ((abs(ymov) > abs(xmov))?0:-180*(float)xmov/(float)w())); - set_s(0, CTX.s[0] * ( (abs(ymov) > abs(xmov)) ? - ( (ymov>0) ? (float)(CTX.zoom_factor*(abs(ymov)+h()))/(float)h() - : (float)(h())/(float)(CTX.zoom_factor*(abs(ymov)+h())) ) - : 1.) ); - set_s(1, CTX.s[0]); - set_s(2, CTX.s[0]); - if(abs(ymov) > abs(xmov)){ - set_t(0, xt1*(xscale1/CTX.s[0])-xc1*(1.-(xscale1/CTX.s[0]))); - set_t(1, yt1*(yscale1/CTX.s[1])-yc1*(1.-(yscale1/CTX.s[1]))); - } - } - else{ - xc = ( ((double)xpos/(double)w()) * (CTX.vxmax - CTX.vxmin) + CTX.vxmin ) - / CTX.s[0]; - yc = ( CTX.vymax - ((double)ypos/(double)h()) * (CTX.vymax - CTX.vymin)) - / CTX.s[1]; - set_t(0, xc-xc1); - set_t(1, yc-yc1); - set_t(2, 0.); - } - - if(CTX.fast){ - CTX.mesh.draw = 0 ; - CTX.post.draw = 0; - } - - redraw(); - } - - xpos += xmov; - ypos += ymov; - return 1; - - - case FL_MOVE: - xmov = Fl::event_x()-xpos; - ymov = Fl::event_y()-ypos; - - if(ZoomClick) { - ZOOM = 1; - redraw(); - } - else { - WID->make_opengl_current(); - Process_SelectionBuffer(Fl::event_x(), Fl::event_y(), &hits, ii, jj); - ov = v; oc = c; os = s; v = NULL; c = NULL; s = NULL; - Filter_SelectionBuffer(hits,ii,jj,&v,&c,&s,&M); - if(ov != v || oc != c || os != s) { - if(check_type(WID->selection, v, c, s)) - WID->g_window->cursor(FL_CURSOR_CROSS,FL_BLACK,FL_WHITE); - else - WID->g_window->cursor(FL_CURSOR_DEFAULT,FL_BLACK,FL_WHITE); - BeginHighlight(); - HighlightEntity(v,c,s,0); - EndHighlight(0); - } - } - - xpos += xmov; - ypos += ymov; - return 1; - - default: - return Fl_Gl_Window::handle(event); - - } - -} - diff --git a/Fltk/Opengl_Window.h b/Fltk/Opengl_Window.h deleted file mode 100644 index ae48f4df5425ea781a199cd6a00a6fe86fe64216..0000000000000000000000000000000000000000 --- a/Fltk/Opengl_Window.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef _OPENGL_WINDOW_H_ -#define _OPENGL_WINDOW_H_ - -class Opengl_Window : public Fl_Gl_Window { - void draw(); - void draw_overlay(); - int handle(int); - - // new - void clear_overlay(); - -public: - Opengl_Window(int x,int y,int w,int h,const char *l=0) - : Fl_Gl_Window(x, y, w, h, l) {} -}; - -#endif diff --git a/Fltk/Socket.cpp b/Fltk/Socket.cpp deleted file mode 100644 index 625f78ce977288e7e68f35f303fd4f02008054e7..0000000000000000000000000000000000000000 --- a/Fltk/Socket.cpp +++ /dev/null @@ -1,215 +0,0 @@ -/* $Id: Socket.cpp,v 1.11 2001-05-21 13:01:13 geuzaine Exp $ */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#ifdef _AIX -#include <strings.h> -#endif -#include <sys/types.h> -#include <sys/socket.h> -#include <sys/stat.h> -#include <sys/un.h> -#include <sys/time.h> -#include <unistd.h> - -#include "Message.h" - -int Socket_ReceiveData(int socket, void *buffer, int bytes){ - int sofar, remaining, len; - char *buf; - - buf = (char*)buffer; - sofar = 0; - remaining = bytes; - do { - len = read(socket, buf + sofar, remaining); - if (len<=0) return 0; - sofar += len; - remaining -= len; - } while (remaining>0); - return bytes; -} - -void Socket_SendData(int socket, void *buffer, int bytes){ - int sofar, remaining, len; - char *buf; - - buf = (char*)buffer; - sofar = 0; - remaining = bytes; - do { - len = write(socket, buf + sofar, remaining); - sofar += len; - remaining -= len; - } while (remaining>0); -} - -int Socket_ReceiveInt(int socket, int *i){ - return Socket_ReceiveData(socket, i, sizeof(int)); -} - -void Socket_SendInt(int socket, int i){ - Socket_SendData(socket, &i, sizeof(int)); -} - -int Socket_ReceiveDouble(int socket, double *x){ - return Socket_ReceiveData(socket, x, sizeof(double)); -} - -void Socket_SendDouble(int socket, double x){ - Socket_SendData(socket, &x, sizeof(double)); -} - -int Socket_ReceiveString(int socket, char str[]){ - int len; - - if (Socket_ReceiveInt(socket, &len)) { - if (Socket_ReceiveData(socket, str, len)==len) { - str[len] = '\0'; - return 1; - } - } - return 0; -} - -void Socket_SendString(int socket, char str[]){ - int len; - - len = strlen(str); - Socket_SendInt(socket, len); - Socket_SendData(socket, str, len); -} - -int Socket_UnlinkName(char *name){ -#ifdef _AIX - char name2[1000]; - strcpy(name2,name); - name2[strlen(name2)-1] = '\0'; - return unlink(name2); -#else - return unlink(name); -#endif -} - -int Socket_StartProgram(char *progname, char *sockname){ - int s, sock; -#ifdef linux - socklen_t len ; -#else - int len; -#endif - struct sockaddr_un addr, from; - char command[1000]; - fd_set rfds; - struct timeval tv; - int retval; - - /* first delete the socket's name if it exists */ - Socket_UnlinkName(sockname); - - /* make the socket */ - s = socket(PF_UNIX, SOCK_STREAM, 0); - if (s<0) { - Msg(GERROR, "Couldn't create socket"); - return -1; - } - - /* bind the socket to its name */ - strcpy(addr.sun_path, sockname); - addr.sun_family = AF_UNIX; - if(bind(s, (struct sockaddr *)&addr, strlen(addr.sun_path)+sizeof(addr.sun_family)) < 0) { - Msg(GERROR, "Couldn't bind socket to name '%s'", sockname); - return -1; - } - - /* change permissions on the socket name in case it has to be rm'd later */ - chmod(sockname, 0666); - - /* Start the external function via system() call */ - sprintf(command, "%s -socket %s &", progname, sockname); - system(command); - - /* wait for external function to connect */ - if(listen(s, 20)) Msg(GERROR, "Socket listen failed"); - - /* Watch s to see when it has input. */ - /* Wait up to 2 seconds */ - tv.tv_sec = 2; - tv.tv_usec = 0; - FD_ZERO(&rfds); - FD_SET(s, &rfds); - retval = select(s+1, &rfds, NULL, NULL, &tv); - - if(!retval){ - Msg(GERROR, "Socket listening timeout"); - return -1; - } - - len = sizeof(from); - if ( (sock = accept(s, (struct sockaddr *)&from, &len)) < 0) { - Msg(GERROR, "Socket accept failed"); - return -1; - } - - close(s); /* don't need this socket anymore */ - - return sock; -} - -int Socket_StopProgram(char *progname, char *sockname, int sock){ - if(Socket_UnlinkName(sockname)==-1) - Msg(WARNING, "Impossible to unlink the socket '%s'", sockname); - close(sock); - return 0; -} - -long Socket_GetTime(){ - struct timeval tp; - gettimeofday(&tp, (struct timezone *)0); - return (long)tp.tv_sec * 1000000 + (long)tp.tv_usec; -} - -void Socket_Idle(double delay){ - long t1 = Socket_GetTime(); - while(1){ - if(Socket_GetTime() - t1 > 1.e6*delay) break; - } -} - -int Socket_Connect(char *sockname){ - struct sockaddr_un addr; - int len, sock; - int tries; - - /* slight delay to be sure that the socket is bind by the - server before we attempt to connect to it... */ - Socket_Idle(0.1); - - /* create socket */ - sock = socket(PF_UNIX, SOCK_STREAM, 0); - if (sock<0){ - Msg(GERROR, "Couldn't create socket"); - return -1; - } - - /* try to connect socket to given name */ - strcpy(addr.sun_path, sockname); - addr.sun_family = AF_UNIX; - len = strlen(addr.sun_path)+sizeof(addr.sun_family); - for (tries=0;tries<5;tries++) { - if (connect(sock, (struct sockaddr *)&addr, len) < 0) { - Msg(WARNING, "Socket connect failed on '%s'", sockname); - } - else { - return sock; - } - } - - return -1; -} - - -void Socket_Close(int sock){ - close(sock); -} diff --git a/Fltk/Socket.h b/Fltk/Socket.h deleted file mode 100644 index a25f56bb97bffa24c37c7a8b9cd80e3d4ae0f4f5..0000000000000000000000000000000000000000 --- a/Fltk/Socket.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef _SOCKET_H_ -#define _SOCKET_H_ - -int Socket_ReceiveData(int socket, void *buffer, int bytes); -void Socket_SendData(int socket, void *buffer, int bytes); -int Socket_ReceiveInt(int socket, int *i); -void Socket_SendInt(int socket, int i); -int Socket_ReceiveDouble(int socket, double *x); -void Socket_SendDouble(int socket, double x); -int Socket_ReceiveString(int socket, char str[]); -void Socket_SendString(int socket, char str[]); -int Socket_StartProgram(char *progname, char *sockname); -int Socket_StopProgram(char *progname, char *sockname, int sock); -int Socket_Connect(char *sockname); -void Socket_Close(int sock); - -#endif diff --git a/Fltk/Solvers.cpp b/Fltk/Solvers.cpp deleted file mode 100644 index 36850d2b11853d1fc66a48c247aaa819f37dc1ba..0000000000000000000000000000000000000000 --- a/Fltk/Solvers.cpp +++ /dev/null @@ -1,116 +0,0 @@ -// $Id: Solvers.cpp,v 1.7 2001-05-21 13:01:13 geuzaine Exp $ - -#include "Gmsh.h" - -#include <sys/types.h> -#include <sys/socket.h> -#include <sys/stat.h> -#include <sys/un.h> -#include <unistd.h> - -#include "Socket.h" -#include "OpenFile.h" -#include "Solvers.h" -#include "GmshUI.h" -#include "GUI.h" -#include "Mesh.h" -#include "Draw.h" -#include "Context.h" - -extern Context_T CTX; -extern GUI *WID; - - -// interface to GetDP - -_GetDP_Info GetDP_Info ; - -int GetDP(char *args){ - int sock, type, i, n; - char progname[1000], sockname[1000], str[1000]; - - strcpy(sockname, CTX.home_dir); - strcat(sockname, ".gmshsock"); - - sprintf(progname, "%s %s", GetDP_Info.command, args); - sock = Socket_StartProgram(progname, sockname); - if(sock<0){ - Msg(GERROR, "Could not execute '%s'", progname); - WID->getdp_choice[0]->clear(); - WID->getdp_choice[1]->clear(); - return 0; - } - - Socket_ReceiveInt(sock, &GetDP_Info.pid); - - Msg(INFO, "GetDP start (%s)", progname); - - GetDP_Info.nbres = 0; - GetDP_Info.nbpostop = 0; - - while(1){ - if(GetDP_Info.pid < 0) break; - - Socket_ReceiveInt(sock, &type); - - if(type == GETDP_END) break; - - Socket_ReceiveString(sock, str); - - switch(type){ - case GETDP_PROGRESS : - Msg(STATUS3N, "GetDP %s", str); - break ; - case GETDP_RESOLUTION_NAME : - strcpy(GetDP_Info.res[GetDP_Info.nbres++],str); - break ; - case GETDP_POSTOPERATION_NAME : - strcpy(GetDP_Info.postop[GetDP_Info.nbpostop++],str); - break ; - case GETDP_LOAD_VIEW : - if(GetDP_Info.mergeviews){ - n = List_Nbr(Post_ViewList); - MergeProblem(str); - Draw(); - if(n != List_Nbr(Post_ViewList)) - WID->set_context(menu_post, 0); - } - break ; - case GETDP_INFO : - Msg(DIRECT, "GetDP > %s", str); - break; - default : - Msg(WARNING, "Unknown type of message received from GetDP"); - Msg(DIRECT, "GetDP > %s", str); - break ; - } - - } - - if(GetDP_Info.nbres){ - WID->getdp_choice[0]->clear(); - for(i=0;i<GetDP_Info.nbres;i++) - WID->getdp_choice[0]->add(GetDP_Info.res[i]); - WID->getdp_choice[0]->value(0); - } - - if(GetDP_Info.nbpostop){ - WID->getdp_choice[1]->clear(); - for(i=0;i<GetDP_Info.nbpostop;i++) - WID->getdp_choice[1]->add(GetDP_Info.postop[i]); - WID->getdp_choice[1]->value(0); - } - - Msg(STATUS3N, "Ready"); - - Socket_StopProgram(progname, sockname, sock); - - GetDP_Info.pid = -1; - - Msg(INFO, "GetDP stop (%s)", progname); - - return 1; -} - - - diff --git a/Fltk/Solvers.h b/Fltk/Solvers.h deleted file mode 100644 index 9cfdc646e907ea5f18e9c59d67db88c167bba4e2..0000000000000000000000000000000000000000 --- a/Fltk/Solvers.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef _SOLVERS_H_ -#define _SOLVERS_H_ - -// Message protocol for GetDP - -#define GETDP_END -1 -#define GETDP_INFO 1 -#define GETDP_PROGRESS 2 -#define GETDP_RESOLUTION_NAME 3 -#define GETDP_POSTOPERATION_NAME 4 -#define GETDP_LOAD_VIEW 5 - -typedef struct{ - char command[256]; - int popupmessages, mergeviews; - int pid; - int nbres, nbpostop; - char res[100][100]; - char postop[100][100]; -} _GetDP_Info ; - -extern _GetDP_Info GetDP_Info ; - -int GetDP(char *args); - - -#endif - diff --git a/Geo/CAD.cpp b/Geo/CAD.cpp deleted file mode 100644 index 85df308ff7e6b25b5c4d4a03f0f0247bc67d18e5..0000000000000000000000000000000000000000 --- a/Geo/CAD.cpp +++ /dev/null @@ -1,1740 +0,0 @@ -// $Id: CAD.cpp,v 1.27 2001-08-12 12:30:49 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "Mesh.h" -#include "DataBase.h" -#include "Interpolation.h" -#include "Create.h" -#include "CAD.h" -#include "Edge.h" -#include "Context.h" - -extern Mesh *THEM; -extern Context_T CTX; -extern int CurrentNodeNumber; - -static int MAXREG,MAXPOINT; -static List_T *ListOfTransformedPoints=NULL; - -int compare2Lists (List_T *List1, List_T *List2, - int (*fcmp)(const void *a, const void *b)){ - int i,found; - - if(List_Nbr(List1) != List_Nbr(List2))return List_Nbr(List1) - List_Nbr(List2); - - List_T *List1Prime = List_Create(List_Nbr(List1),1,List1->size); - List_T *List2Prime = List_Create(List_Nbr(List2),1,List2->size); - List_Copy(List1,List1Prime); - List_Copy(List2,List2Prime); - List_Sort(List1Prime,fcmp); - List_Sort(List2Prime,fcmp); - - for(i=0;i<List_Nbr(List1Prime);i++){ - found = fcmp(List_Pointer(List1Prime,i), - List_Pointer(List2Prime,i)); - if(found != 0){ - List_Delete(List1Prime); - List_Delete(List2Prime); - return found; - } - } - List_Delete(List1Prime); - List_Delete(List2Prime); - return 0; -} - -void MaxNumCurve(void *a, void *b){ - Curve *c = *(Curve**)a; - MAXREG = (c->Num>MAXREG)?c->Num:MAXREG; -} - -void MaxNumSurface(void *a, void *b){ - Surface *s = *(Surface**)a; - MAXREG = (s->Num>MAXREG)?s->Num:MAXREG; -} - -void MaxNumEdgeLoop(void *a, void *b){ - EdgeLoop *s = *(EdgeLoop**)a; - MAXREG = (s->Num>MAXREG)?s->Num:MAXREG; -} - -void MaxNumSurfaceLoop(void *a, void *b){ - SurfaceLoop *s = *(SurfaceLoop**)a; - MAXREG = (s->Num>MAXREG)?s->Num:MAXREG; -} - -void MaxNumPoint(void *a, void *b){ - Vertex *v = *(Vertex**)a; - MAXPOINT = (v->Num>MAXPOINT)?v->Num:MAXPOINT; -} - -void dist_ddg(double x1,double y1,double z1, - double x2,double y2,double z2, - double x3,double y3,double z3, - double x4,double y4,double z4, - double *x,double *y,double *z){ - - double v[3],u[3],d; - - u[0] = x1-x3; - u[1] = y1-y3; - u[2] = z1-z3; - - v[0] = x4-x3; - v[1] = y4-y3; - v[2] = z4-z3; - - norme(v); - prosca(u,v,&d); - - *x = d* x4 + x3 * (1.-d); - *y = d* y4 + y3 * (1.-d); - *z = d* z4 + z3 * (1.-d); -} - - -int NEWREG(void){ - MAXREG = 0; - PhysicalGroup *p; - Tree_Action(THEM->Curves,MaxNumCurve); - Tree_Action(THEM->Surfaces,MaxNumSurface); - Tree_Action(THEM->EdgeLoops,MaxNumEdgeLoop); - Tree_Action(THEM->SurfaceLoops,MaxNumSurfaceLoop); - for(int i=0;i<List_Nbr(THEM->PhysicalGroups);i++){ - List_Read( THEM->PhysicalGroups , i, &p); - MAXREG = IMAX(MAXREG,p->Num); - } - return MAXREG+1; -} - -int NEWPOINT(void){ - MAXPOINT = 0; - Tree_Action(THEM->Points,MaxNumPoint); - return MAXPOINT+1; -} - -Vertex *FindPoint(int inum, Mesh *M){ - Vertex C,*pc; - pc = &C; - pc->Num = inum; - if(Tree_Query(M->Points,&pc)){ - return pc; - } - return NULL; -} - -Vertex *FindVertex(int inum, Mesh *M){ - Vertex C,*pc; - pc = &C; - pc->Num = inum; - if(Tree_Query(M->Vertices,&pc)){ - return pc; - } - return NULL; -} - - - -Curve *FindCurve(int inum, Mesh *M){ - Curve C,*pc; - pc = &C; - pc->Num = inum; - if(Tree_Query(M->Curves,&pc)){ - return pc; - } - return NULL; -} - -Surface *FindSurface(int inum, Mesh *M){ - Surface S,*ps; - ps = &S; - ps->Num = inum; - if(Tree_Query(M->Surfaces,&ps)){ - return ps; - } - return NULL; -} - -Volume *FindVolume(int inum, Mesh *M){ - Volume V,*pv; - pv = &V; - pv->Num = inum; - if(Tree_Query(M->Volumes,&pv)){ - return pv; - } - return NULL; -} - -EdgeLoop *FindEdgeLoop(int inum, Mesh *M){ - EdgeLoop S,*ps; - ps = &S; - ps->Num = inum; - if(Tree_Query(M->EdgeLoops,&ps)){ - return ps; - } - return NULL; -} - -SurfaceLoop *FindSurfaceLoop(int inum, Mesh *M){ - SurfaceLoop S,*ps; - ps = &S; - ps->Num = inum; - if(Tree_Query(M->SurfaceLoops,&ps)){ - return ps; - } - return NULL; -} - -/* - S = (sx(u,v),sy(u,v),sz(u,v)) - C = (cx(w),cy(w),cz(w)) - - sx - cx = 0 - sy - cy = 0 - sz - cz = 0 - - 3eqs 3incs -*/ - -static Curve *CURVE, *CURVE_2; -static Surface *SURFACE; -static Vertex *VERTEX; -extern double min1d (int, double (*funct)(double), double *xmin); -extern void newt(float x[], int n, int *check, - void (*vecfunc)(int, float [], float [])); - -static void intersectCS (int N, float x[], float res[]){ - //x[1] = u x[2] = v x[3] = w - Vertex s,c; - s = InterpolateSurface(SURFACE,x[1],x[2],0,0); - c = InterpolateCurve (CURVE,x[3],0); - res[1] = s.Pos.X - c.Pos.X; - res[2] = s.Pos.Y - c.Pos.Y; - res[3] = s.Pos.Z - c.Pos.Z; -} - -static void intersectCC (int N, float x[], float res[]){ - //x[1] = u x[2] = v - Vertex c2,c; - c2 = InterpolateCurve(CURVE_2,x[2],0); - c = InterpolateCurve (CURVE,x[1],0); - res[1] = c2.Pos.X - c.Pos.X; - res[2] = c2.Pos.Y - c.Pos.Y; -} - -static void projectPS (int N, float x[], float res[]){ - //x[1] = u x[2] = v - Vertex du,dv,c; - c = InterpolateSurface(SURFACE,x[1],x[2],0,0); - du = InterpolateSurface(SURFACE,x[1],x[2],1,1); - dv = InterpolateSurface(SURFACE,x[1],x[2],1,2); - res[1] = - (c.Pos.X - VERTEX->Pos.X)*du.Pos.X + - (c.Pos.Y - VERTEX->Pos.Y)*du.Pos.Y + - (c.Pos.Z - VERTEX->Pos.Z)*du.Pos.Z; - res[2] = - (c.Pos.X - VERTEX->Pos.X)*dv.Pos.X + - (c.Pos.Y - VERTEX->Pos.Y)*dv.Pos.Y + - (c.Pos.Z - VERTEX->Pos.Z)*dv.Pos.Z; -} - -static double projectPC (double u){ - //x[1] = u x[2] = v - if(u<CURVE->ubeg)u = CURVE->ubeg; - if(u<CURVE->ubeg)u = CURVE->ubeg; - Vertex c; - c = InterpolateCurve(CURVE,u,0); - return sqrt( DSQR(c.Pos.X -VERTEX->Pos.X)+ - DSQR(c.Pos.Y -VERTEX->Pos.Y)+ - DSQR(c.Pos.Z -VERTEX->Pos.Z)); -} - -static int UFIXED=0; -static double FIX; -static double projectPCS (double u){ - //x[1] = u x[2] = v - double tmin,tmax; - if(UFIXED){ - tmin = SURFACE->kv[0]; - tmax = SURFACE->kv[SURFACE->Nv+SURFACE->OrderV]; - } - else{ - tmin = SURFACE->ku[0]; - tmax = SURFACE->ku[SURFACE->Nu+SURFACE->OrderU]; - } - - if(u<tmin)u = tmin; - if(u>tmax)u = tmax; - Vertex c; - if(UFIXED) - c = InterpolateSurface(SURFACE,FIX,u,0,0); - else - c = InterpolateSurface(SURFACE,u,FIX,0,0); - return sqrt(DSQR(c.Pos.X -VERTEX->Pos.X)+ - DSQR(c.Pos.Y -VERTEX->Pos.Y)+ - DSQR(c.Pos.Z -VERTEX->Pos.Z)); -} - -bool ProjectPointOnCurve (Curve *c, Vertex *v, Vertex *RES, Vertex *DER){ - double xmin; - CURVE = c; - VERTEX = v; - min1d (0, projectPC, &xmin); - *RES = InterpolateCurve(CURVE,xmin,0); - *DER = InterpolateCurve(CURVE,xmin,1); - if(xmin > c->uend){ - *RES = InterpolateCurve(CURVE,c->uend,0); - *DER = InterpolateCurve(CURVE,c->uend,1); - } - else if(xmin < c->ubeg){ - *RES = InterpolateCurve(CURVE,c->ubeg,0); - *DER = InterpolateCurve(CURVE,c->ubeg,1); - } - return true; -} - -bool search_in_boundary ( Surface *s, Vertex *p, double t, int Fixu, - double *uu, double *vv){ - double l,umin,vmin,lmin = 1.e24; - int i,N; - Vertex vr; - double tmin, tmax,u,v; - - if(Fixu){ - tmin = s->kv[0]; - tmax = s->kv[s->Nv+s->OrderV]; - N = 3*s->Nu; - } - else{ - tmin = s->ku[0]; - tmax = s->ku[s->Nu+s->OrderU]; - N = 3*s->Nv; - } - for(i=0;i<N;i++){ - if(Fixu){ - u = t; - v = tmin + (tmax-tmin)*(double)(i)/(double)(N-1); - } - else { - v = t; - u = tmin + (tmax-tmin)*(double)(i)/(double)(N-1); - } - vr = InterpolateSurface(SURFACE,u,v,0,0); - l = sqrt(DSQR(vr.Pos.X - p->Pos.X) + - DSQR(vr.Pos.Y - p->Pos.Y) + - DSQR(vr.Pos.Z - p->Pos.Z)); - if(l<lmin){ - lmin = l; - umin = u; - vmin = v; - } - } - - FIX = t; - UFIXED = Fixu; - double xm; - if(Fixu)xm = vmin; - else xm = umin; - if(lmin > 1.e-3) min1d (0, projectPCS, &xm); - if(Fixu){ - *uu = t; - *vv = xm; - } - else{ - *vv = t; - *uu = xm; - } - vr = InterpolateSurface(SURFACE,*uu,*vv,0,0); - l = sqrt(DSQR(vr.Pos.X - p->Pos.X) + - DSQR(vr.Pos.Y - p->Pos.Y) + - DSQR(vr.Pos.Z - p->Pos.Z)); - if(l<1.e-3)return true; - return false; -} - -bool try_a_value(Surface *s, Vertex *p, double u, double v,double *uu, double *vv){ - Vertex vr = InterpolateSurface(s,u,v,0,0); - double l = sqrt(DSQR(vr.Pos.X - p->Pos.X) + - DSQR(vr.Pos.Y - p->Pos.Y) + - DSQR(vr.Pos.Z - p->Pos.Z)); - *uu = u;*vv=v; - if(l<1.e-3)return true; - return false; -} - -bool ProjectPointOnSurface (Surface *s, Vertex &p){ - float x[3] = {0.5,0.5,0.5}; - Vertex vv; - int check; - SURFACE = s; - VERTEX = &p; - double UMIN = 0.; - double UMAX = 1.; - double VMIN = 0.; - double VMAX = 1.; - while(1){ - newt(x,2,&check,projectPS); - vv = InterpolateSurface(s,x[1],x[2],0,0); - if(x[1] >= UMIN && x[1] <= UMAX && x[2] >=VMIN && x[2] <= VMAX)break; - x[1] = UMIN + (UMAX-UMIN)*((rand() % 10000)/10000.); - x[2] = VMIN + (VMAX-VMIN)*((rand() % 10000)/10000.); - } - p.Pos.X = vv.Pos.X; - p.Pos.Y = vv.Pos.Y; - p.Pos.Z = vv.Pos.Z; - if(!check){ - return false; - } - return true; -} - -bool ProjectPointOnSurface (Surface *s, Vertex *p,double *u, double *v){ - static float x[3]; - int check; - static int deb = 1; - double VMIN,VMAX,UMIN,UMAX,l, lmin; - Vertex vv; - - SURFACE = s; - VERTEX = p; - lmin = 1.e24; - UMAX = s->ku[s->Nu + s->OrderU]; - UMIN = s->ku[0]; - VMAX = s->kv[s->Nv + s->OrderV]; - VMIN = s->kv[0]; - if(deb){ - x[1] = UMIN + (UMAX-UMIN)*((rand() % 10000)/10000.); - x[2] = VMIN + (VMAX-VMIN)*((rand() % 10000)/10000.); - deb = 0; - } - - if(p->Num == 160){ - lmin += 1.e90; - if(p->Num == 133)UMAX = s->ku[s->Nu + s->OrderU]; - } - - if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0]+VERTEX->u, - SURFACE->kv[0],u,v)) - return true; - if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0]+VERTEX->u, - SURFACE->kv[SURFACE->Nv+SURFACE->OrderV],u,v)) - return true; - if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU]-VERTEX->u, - SURFACE->kv[0],u,v)) - return true; - if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU]-VERTEX->u, - SURFACE->kv[SURFACE->Nv+SURFACE->OrderV],u,v)) - return true; - if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0],SURFACE->kv[0]+VERTEX->u,u,v)) - return true; - if(try_a_value(SURFACE,VERTEX,SURFACE->ku[0], - SURFACE->kv[SURFACE->Nv+SURFACE->OrderV]-VERTEX->u,u,v)) - return true; - if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU], - SURFACE->kv[0]+VERTEX->u,u,v)) - return true; - if(try_a_value(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU], - SURFACE->kv[SURFACE->Nv+SURFACE->OrderV]-VERTEX->u,u,v)) - return true; - - - if(search_in_boundary(SURFACE,VERTEX,SURFACE->kv[0],0,u,v)) - return true; - if(search_in_boundary(SURFACE,VERTEX,SURFACE->kv[SURFACE->Nv+SURFACE->OrderV],0,u,v)) - return true; - if(search_in_boundary(SURFACE,VERTEX,SURFACE->ku[0],1,u,v)) - return true; - if(search_in_boundary(SURFACE,VERTEX,SURFACE->ku[SURFACE->Nu+SURFACE->OrderU],1,u,v)) - return true; - - while(1){ - newt(x,2,&check,projectPS); - vv = InterpolateSurface(s,x[1],x[2],0,0); - l = sqrt(DSQR(vv.Pos.X - p->Pos.X) + - DSQR(vv.Pos.Y - p->Pos.Y) + - DSQR(vv.Pos.Z - p->Pos.Z)); - if(l < 1.e-1)break; - else { - x[1] = UMIN + (UMAX-UMIN)*((rand() % 10000)/10000.); - x[2] = VMIN + (VMAX-VMIN)*((rand() % 10000)/10000.); - } - } - *u = x[1]; - *v = x[2]; - - if(!check){ - return false; - } - return true; -} - -bool IntersectCurveSurface (Curve *c, Surface *s){ - float x[4]; - int check; - SURFACE = s; - CURVE = c; - newt(x,3,&check,intersectCS); - if(!check)return false; - return true; -} - -void CopyVertex (Vertex *v, Vertex *vv){ - vv->lc = v->lc; - vv->u = v->u; - vv->Pos.X = v->Pos.X; - vv->Pos.Y = v->Pos.Y; - vv->Pos.Z = v->Pos.Z; - vv->Freeze.X = v->Freeze.X; - vv->Freeze.Y = v->Freeze.Y; - vv->Freeze.Z = v->Freeze.Z; -} - -Vertex *DuplicateVertex (Vertex *v){ - Vertex *pv; - pv = Create_Vertex(MAXPOINT++,0,0,0,0,0); - - CopyVertex (v,pv); - CurrentNodeNumber = (CurrentNodeNumber>pv->Num)?CurrentNodeNumber:pv->Num; - Tree_Insert(THEM->Points,&pv); - return pv; -} - -void CopyCurve (Curve *c, Curve *cc){ - int i,j; - cc->Typ = c->Typ; - cc->Method = c->Method; - for(i=0;i<4;i++)cc->ipar[i] = c->ipar[i]; - for(i=0;i<4;i++)cc->dpar[i] = c->dpar[i]; - cc->l = c->l; - for(i=0;i<4;i++)for(j=0;j<4;j++)cc->mat[i][j] = c->mat[i][j]; - cc->beg = c->beg; - cc->end = c->end; - cc->ubeg = c->ubeg; - cc->uend = c->uend; - cc->Control_Points = List_Create(List_Nbr(c->Control_Points),1,sizeof(Vertex*)); - List_Copy(c->Control_Points,cc->Control_Points); - End_Curve(cc); - Tree_Insert(THEM->Curves,&cc); -} - -Curve *DuplicateCurve (Curve *c){ - Curve *pc; - Vertex *v,*newv; - pc = Create_Curve(MAXREG++,0,1,NULL,NULL,-1,-1,0.,1.); - CopyCurve(c,pc); - for(int i=0;i<List_Nbr(c->Control_Points);i++){ - List_Read(pc->Control_Points,i,&v); - newv = DuplicateVertex(v); - List_Write(pc->Control_Points,i,&newv); - } - pc->beg = DuplicateVertex(c->beg); - pc->end = DuplicateVertex(c->end); - CreateReversedCurve (THEM,pc); - - return pc; -} - -void CopySurface (Surface *s, Surface *ss){ - int i,j; - ss->Typ = s->Typ; - ss->Mat = s->Mat; - ss->Method = s->Method; - ss->Recombine = s->Recombine; - ss->RecombineAngle = s->RecombineAngle; - for(i=0;i<4;i++)ss->ipar[i] = s->ipar[i]; - ss->Nu = s->Nu; - ss->Nv = s->Nv; - ss->a = s->a;ss->b = s->b;ss->c = s->c; ss->d = s->d; - for(i=0;i<3;i++)for(j=0;j<3;j++)ss->plan[i][j] = s->plan[i][j]; - for(i=0;i<3;i++)for(j=0;j<3;j++)ss->invplan[i][j] = s->invplan[i][j]; - ss->Generatrices = List_Create(List_Nbr(s->Generatrices),1,sizeof(Curve*)); - List_Copy(s->Generatrices,ss->Generatrices); - if( s->Control_Points ){ - ss->Control_Points = List_Create(List_Nbr(s->Control_Points),1,sizeof(Vertex*)); - List_Copy(s->Control_Points,ss->Control_Points); - } - End_Surface(ss); - Tree_Insert(THEM->Surfaces,&ss); -} - -Surface *DuplicateSurface (Surface *s, int addthesurf){ - Surface *ps; - Curve *c,*newc; - Vertex *v,*newv; - int i; - - ps = Create_Surface(addthesurf?MAXREG++:-MAXREG,0,0); - CopySurface(s,ps); - for(i=0;i<List_Nbr(ps->Generatrices);i++){ - List_Read(ps->Generatrices,i,&c); - newc = DuplicateCurve(c); - List_Write(ps->Generatrices,i,&newc); - } - - for(i=0;i<List_Nbr(ps->Control_Points);i++){ - List_Read(ps->Control_Points,i,&v); - newv = DuplicateVertex(v); - List_Write(ps->Control_Points,i,&newv); - } - - return ps; -} - -static void vecmat4x4(double mat[4][4],double vec[4], double res[4]){ - int i,j; - for(i=0;i<4;i++){ - res[i] = 0.0; - for(j=0;j<4;j++){ - res[i] += mat[i][j] * vec[j]; - } - } -} - -void ApplyTransformationToPoint ( double matrix[4][4], Vertex *v ){ - double pos[4],vec[4]; - - if(!ListOfTransformedPoints) - ListOfTransformedPoints = List_Create(2,2,sizeof(int)); - - if(!List_Search(ListOfTransformedPoints,&v->Num,fcmp_absint)){ - List_Add(ListOfTransformedPoints,&v->Num); - } - else - return; - - vec[0] = v->Pos.X; - vec[1] = v->Pos.Y; - vec[2] = v->Pos.Z; - vec[3] = v->w; - vecmat4x4(matrix,vec,pos); - v->Pos.X = pos[0]; - v->Pos.Y = pos[1]; - v->Pos.Z = pos[2]; - v->w = pos[3]; -} - -/* Linear Applications */ - -void SetTranslationMatrix (double matrix[4][4],double T[3]){ - int i, j; - - for(i=0;i<4;i++){ - for(j=0;j<4;j++){ - matrix[i][j] = (i==j)? 1.0:0.0; - } - } - for(i=0;i<3;i++)matrix[i][3] = T[i]; -} - -void SetSymmetryMatrix (double matrix[4][4],double A, double B, double C, double D){ - double F = -2.0 / (A*A+B*B+C*C); - matrix[0][0] = 1. + A*A*F; - matrix[0][1] = A*B*F; - matrix[0][2] = A*C*F; - matrix[0][3] = A*D*F; - matrix[1][0] = A*B*F; - matrix[1][1] = 1. + B*B*F; - matrix[1][2] = B*C*F; - matrix[1][3] = B*D*F; - matrix[2][0] = A*C*F; - matrix[2][1] = B*C*F; - matrix[2][2] = 1. + C*C*F; - matrix[2][3] = C*D*F; - matrix[3][0] = B*C*F; - matrix[3][1] = 0.0; - matrix[3][2] = 0.0; - matrix[3][3] = 1.0; -} - -void SetDilatationMatrix (double matrix[4][4],double T[3],double A){ - matrix[0][0] = A; - matrix[0][1] = 0.0; - matrix[0][2] = 0.0; - matrix[0][3] = T[0]*(1.0-A); - matrix[1][0] = 0.0; - matrix[1][1] = A; - matrix[1][2] = 0.0; - matrix[1][3] = T[1]*(1.0-A); - matrix[2][0] = 0.0; - matrix[2][1] = 0.0; - matrix[2][2] = A; - matrix[2][3] = T[2]*(1.0-A); - matrix[3][0] = 0.0; - matrix[3][1] = 0.0; - matrix[3][2] = 0.0; - matrix[3][3] = 1.0; -} - -void GramSchmidt (double v1[3], double v2[3], double v3[3]){ - double tmp[3]; - norme(v1); - prodve(v3,v1,tmp); - norme(tmp); - v2[0] = tmp[0];v2[1] = tmp[1];v2[2] = tmp[2]; - prodve(v1,v2,v3); - norme(v3); -} - -void SetRotationMatrix( double matrix[4][4],double Axe[3], double alpha){ - double t1[3],t2[3]; - if(Axe[0] != 0.0){ - t1[0] = 0.0; - t1[1] = 1.0; - t1[2] = 0.0; - t2[0] = 0.0; - t2[1] = 0.0; - t2[2] = 1.0; - } - else if(Axe[1] != 0.0){ - t1[0] = 1.0; - t1[1] = 0.0; - t1[2] = 0.0; - t2[0] = 0.0; - t2[1] = 0.0; - t2[2] = 1.0; - } - else { - t1[0] = 1.0; - t1[1] = 0.0; - t1[2] = 0.0; - t2[0] = 0.0; - t2[1] = 1.0; - t2[2] = 0.0; - } - GramSchmidt(Axe,t1,t2); - double rot[3][3],plan[3][3],invplan[3][3]; - plan[0][0] = Axe[0]; plan[0][1] = Axe[1]; plan[0][2] = Axe[2]; - plan[1][0] = t1[0] ; plan[1][1] = t1[1]; plan[1][2] = t1[2]; - plan[2][0] = t2[0] ; plan[2][1] = t2[1]; plan[2][2] = t2[2]; - rot[2][2] = cos(alpha) ; rot[2][1] = sin(alpha) ; rot[2][0] = 0.; - rot[1][2] = -sin(alpha); rot[1][1] = cos(alpha) ; rot[1][0] = 0.; - rot[0][2] = 0. ; rot[0][1] = 0. ; rot[0][0] = 1.; - int i,j,k; - for(i=0;i<3;i++)for(j=0;j<3;j++)invplan[i][j] = plan[j][i]; - double interm[3][3]; - for(i=0;i<3;i++)for(j=0;j<3;j++){ - interm[i][j] = 0.0; - for(k=0;k<3;k++)interm[i][j] += invplan[i][k] * rot[k][j]; - } - for(i=0;i<4;i++)for(j=0;j<4;j++)matrix[i][j] = 0.0; - for(i=0;i<3;i++)for(j=0;j<3;j++){ - for(k=0;k<3;k++)matrix[i][j] += interm[i][k] * plan[k][j]; - } - matrix[3][3] = 1.0; -} - -void SetRotationMatrixs(double matrix[4][4],double Axe[3], double alpha){ - double phi,C,S,C2,S2; - double teta; - double a,b,c,d,e,f,g,h,ii; - double Ax=Axe[0],Ay=Axe[1],Az=Axe[2]; - if(Ax != 0.0){ - phi = atan2(Ay,Ax); - teta = atan2(Az,myhypot(Ax,Ay)); - C = cos(phi); - S = sin(phi); - C2= cos(teta); - S2= sin(teta); - } - else if(Ay != 0.0){ - teta = atan2(Az,myhypot(Ax,Ay)); - C = 0.0; - S = 1.0; - C2= cos(teta); - S2= sin(teta); - } - else{ - C = 1.0; - S = 0.0; - C2= 0.0; - S2= 1.0; - } - - a = C2*C; - b = -C2*S; - c = S2; - d = cos(alpha)*S + sin(alpha)*S2*C; - e = cos(alpha)*C - sin(alpha)*S*S2; - f = -sin(alpha)*C2; - g = sin(alpha)*S - cos(alpha)*S2*C; - h = sin(alpha)*C + cos(alpha)*S*S2; - ii=cos(alpha)*C2; - - matrix[0][0] = a*a + S*d -C*S2*g; - matrix[0][1] = a*b+S*e-C*S2*h; - matrix[0][2] = a*c+S*f-C*S2*ii; - matrix[0][3] = 0.0; - matrix[1][0] = -S*C2*a+C*d+S*S2*g; - matrix[1][1] = -S*C2*b+C*e+S*S2*h; - matrix[1][2] = -S*C2*c+C*f+S*S2*ii; - matrix[1][3] = 0.0; - matrix[2][0] = S2*a+C2*g; - matrix[2][1] = S2*b+C2*h; - matrix[2][2] = S2*c+C2*ii; - matrix[2][3] = 0.0; - matrix[3][0] = 0.; - matrix[3][1] = 0.; - matrix[3][2] = 0.; - matrix[3][3] = 1.0; -} - -void ApplyTransformationToCurve (double matrix[4][4],Curve *c){ - Vertex *v; - - ApplyTransformationToPoint (matrix,c->beg); - ApplyTransformationToPoint (matrix,c->end); - - for(int i=0;i<List_Nbr(c->Control_Points);i++){ - List_Read(c->Control_Points,i,&v); - ApplyTransformationToPoint (matrix,v); - } - End_Curve(c); -} - -void printCurve(Curve *c){ - Vertex *v; - int N = List_Nbr(c->Control_Points); - Msg(DEBUG,"Curve %d %d cp (%d->%d)",c->Num,N,c->beg->Num,c->end->Num); - for(int i=0;i<N;i++){ - List_Read(c->Control_Points,i,&v); - Msg(DEBUG,"Vertex %d (%g,%g,%g,%g)",v->Num,v->Pos.X,v->Pos.Y,v->Pos.Z,v->lc); - } -} - -void printSurface(Surface*s){ - Curve *c; - int N = List_Nbr(s->Generatrices); - - Msg(DEBUG,"Surface %d, %d generatrices",s->Num,N); - for(int i=0;i<N;i++){ - List_Read(s->Generatrices,i,&c); - printCurve(c); - } -} - - -void ApplyTransformationToSurface (double matrix[4][4],Surface *s){ - Curve *c; - Vertex *v; - int i; - - for(i=0;i<List_Nbr(s->Generatrices);i++){ - List_Read(s->Generatrices,i,&c); - ApplyTransformationToCurve (matrix,c); - } - for(i=0;i<List_Nbr(s->Control_Points);i++){ - List_Read(s->Control_Points,i,&v); - ApplyTransformationToPoint (matrix,v); - } - End_Surface(s); -} - - -void ProtudeXYZ ( double &x, double &y, double &z, ExtrudeParams *e){ - double matrix[4][4]; - double T[3]; - Vertex v(x,y,z); - T[0] = -e->geo.pt[0]; - T[1] = -e->geo.pt[1]; - T[2] = -e->geo.pt[2]; - List_Reset(ListOfTransformedPoints); - SetTranslationMatrix(matrix,T); - ApplyTransformationToPoint(matrix,&v); - List_Reset(ListOfTransformedPoints); - SetRotationMatrix(matrix,e->geo.axe,e->geo.angle); - ApplyTransformationToPoint(matrix,&v); - List_Reset(ListOfTransformedPoints); - T[0] = -T[0]; T[1] = -T[1]; T[2] = -T[2]; - SetTranslationMatrix(matrix,T); - ApplyTransformationToPoint(matrix,&v); - List_Reset(ListOfTransformedPoints); - x = v.Pos.X; - y = v.Pos.Y; - z = v.Pos.Z; -} - -void Extrude_ProtudePoint(int ep, int ip, double A, double B, double C, - double X, double Y, double Z, double alpha, - Curve **pc, Curve **prc, ExtrudeParams *e){ - double xnew,ynew,znew,matrix[4][4],T[3],Ax[3]; - Vertex V,*pv, *chapeau; - Curve *c; - - MAXREG = NEWREG(); - MAXPOINT = NEWPOINT(); - - pv= &V; - pv->Num = ip; - *pc = *prc = NULL; - if(!Tree_Query(THEM->Points, &pv) )return; - - Msg(DEBUG, "Extrude Point %d", ip); - - chapeau = DuplicateVertex(pv); - if(ep){ - T[0] = A; T[1] = B; T[2] = C; - SetTranslationMatrix(matrix,T); - ApplyTransformationToPoint(matrix,chapeau); - List_Reset(ListOfTransformedPoints); - } - else{ - T[0] = -X; T[1] = -Y; T[2] = -Z; - SetTranslationMatrix(matrix,T); - ApplyTransformationToPoint(matrix,chapeau); - List_Reset(ListOfTransformedPoints); - - Ax[0] = A; Ax[1] = B; Ax[2] = C; - SetRotationMatrix(matrix,Ax,alpha); - ApplyTransformationToPoint(matrix,chapeau); - List_Reset(ListOfTransformedPoints); - - T[0] = X; T[1] = Y; T[2] = Z; - SetTranslationMatrix(matrix,T); - ApplyTransformationToPoint(matrix,chapeau); - List_Reset(ListOfTransformedPoints); - Msg(DEBUG,"Angle %g Point (%g,%g,%g) Axis (%g,%g,%g)",alpha,X,Y,Z,A,B,C); - } - - if(!comparePosition(&pv,&chapeau)) return ; - - c = Create_Curve(MAXREG++,(ep)?MSH_SEGM_LINE:MSH_SEGM_CIRC,1,NULL,NULL,-1,-1,0.,1.); - c->Control_Points = List_Create((ep)?2:3,1,sizeof(Vertex*)); - - // je me souviens - c->Extrude = new ExtrudeParams; - c->Extrude->fill(ep,A,B,C,X,Y,Z,alpha); - if(e)c->Extrude->mesh = e->mesh; - - if(ep){ - List_Add(c->Control_Points,&pv); - List_Add(c->Control_Points,&chapeau); - c->beg = pv; - c->end = chapeau; - } - else{ - List_Add(c->Control_Points,&pv); - - dist_ddg(pv->Pos.X,pv->Pos.Y,pv->Pos.Z, - chapeau->Pos.X,chapeau->Pos.Y,chapeau->Pos.Z, - X,Y,Z,X+A,Y+B,Z+C,&xnew,&ynew,&znew); - Vertex *newp = DuplicateVertex(pv); - newp->Pos.X = xnew; - newp->Pos.Y = ynew; - newp->Pos.Z = znew; - List_Add(c->Control_Points,&newp); - List_Add(c->Control_Points,&chapeau); - c->beg = pv; - c->end = chapeau; - printCurve(c); - } - End_Curve(c); - Tree_Add(THEM->Curves,&c); - CreateReversedCurve (THEM,c); - *pc = c; - *prc = FindCurve(-c->Num,THEM); -} - -Surface *Extrude_ProtudeCurve(int ep, int ic, - double A, double B, double C, - double X, double Y, double Z, - double alpha, ExtrudeParams *e){ - double matrix[4][4],T[3],Ax[3]; - Curve *CurveBeg,*CurveEnd; - Curve *ReverseChapeau,*ReverseBeg,*ReverseEnd; - Curve *pc, *revpc, *chapeau; - Surface *s; - - MAXREG = NEWREG(); - MAXPOINT = NEWPOINT(); - - pc = FindCurve(ic,THEM); - revpc = FindCurve(-ic,THEM); - - if(!pc || !revpc) return NULL; - - Msg(DEBUG, "Extrude Curve %d", ic); - - chapeau = DuplicateCurve(pc); - - chapeau->Extrude = new ExtrudeParams(COPIED_ENTITY); - chapeau->Extrude->fill(ep,A,B,C,X,Y,Z,alpha); - chapeau->Extrude->geo.Source = pc->Num; - if(e) chapeau->Extrude->mesh = e->mesh; - - if(ep){ - T[0] = A; T[1] = B; T[2] = C; - SetTranslationMatrix(matrix,T); - ApplyTransformationToCurve(matrix,chapeau); - } - else{ - T[0] = -X; T[1] = -Y; T[2] = -Z; - SetTranslationMatrix(matrix,T); - ApplyTransformationToCurve(matrix,chapeau); - List_Reset(ListOfTransformedPoints); - - Ax[0] = A; Ax[1] = B; Ax[2] = C; - SetRotationMatrix(matrix,Ax,alpha); - ApplyTransformationToCurve(matrix,chapeau); - List_Reset(ListOfTransformedPoints); - - T[0] = X; T[1] = Y; T[2] = Z; - SetTranslationMatrix(matrix,T); - ApplyTransformationToCurve(matrix,chapeau); - List_Reset(ListOfTransformedPoints); - } - Extrude_ProtudePoint(ep,pc->beg->Num,A,B,C,X,Y,Z,alpha, - &CurveBeg,&ReverseBeg,e); - Extrude_ProtudePoint(ep,pc->end->Num,A,B,C,X,Y,Z,alpha, - &CurveEnd,&ReverseEnd,e); - List_Reset(ListOfTransformedPoints); - - if(!CurveBeg && !CurveEnd) return NULL; - - s = Create_Surface(MAXREG++,MSH_SURF_REGL,0); - s->Generatrices = List_Create(4,1,sizeof(Curve*)); - - // je me souviens - s->Extrude = new ExtrudeParams; - s->Extrude->fill(ep,A,B,C,X,Y,Z,alpha); - s->Extrude->geo.Source = pc->Num; - if(e) s->Extrude->mesh = e->mesh; - - ReverseChapeau = FindCurve(-chapeau->Num,THEM); - - if(!CurveBeg){ - List_Add(s->Generatrices,&pc); - List_Add(s->Generatrices,&CurveEnd); - List_Add(s->Generatrices,&ReverseChapeau); - } - else if(!CurveEnd){ - List_Add(s->Generatrices,&ReverseChapeau); - List_Add(s->Generatrices,&ReverseBeg); - List_Add(s->Generatrices,&pc); - } - else{ - List_Add(s->Generatrices,&pc); - List_Add(s->Generatrices,&CurveEnd); - List_Add(s->Generatrices,&ReverseChapeau); - List_Add(s->Generatrices,&ReverseBeg); - } - - End_Surface(s); - Tree_Add(THEM->Surfaces,&s); - return s; -} - -void Extrude_ProtudeSurface(int ep, int is, - double A, double B, double C, - double X, double Y, double Z, - double alpha, - int NewVolume, ExtrudeParams *e){ - double matrix[4][4],T[3],Ax[3]; - Curve *c,*c2; - int i; - Surface *s,*ps, *chapeau; - Volume *pv = NULL; - - if(!(ps = FindSurface(is,THEM)) )return; - - Msg(DEBUG, "Extrude Surface %d", is); - - if(NewVolume){ - pv = Create_Volume(NewVolume,0,0); - pv->Extrude = new ExtrudeParams; - pv->Extrude->fill(ep,A,B,C,X,Y,Z,alpha); - pv->Extrude->geo.Source = is; - if(e)pv->Extrude->mesh = e->mesh; - if(pv)List_Add(pv->Surfaces,&ps); - } - - MAXREG = NEWREG(); - MAXPOINT = NEWPOINT(); - - chapeau = DuplicateSurface(ps,1); - chapeau->Extrude = new ExtrudeParams(COPIED_ENTITY); - chapeau->Extrude->fill(ep,A,B,C,X,Y,Z,alpha); - chapeau->Extrude->geo.Source = ps->Num; - if(e) chapeau->Extrude->mesh = e->mesh; - - for(i=0;i<List_Nbr(chapeau->Generatrices);i++) { - List_Read(ps->Generatrices,i,&c2); - List_Read(chapeau->Generatrices,i,&c); - if(c->Num<0) - if(!(c = FindCurve(-c->Num,THEM))){ - Msg(GERROR, "Unknown Curve %d", -c->Num); - return; - } - c->Extrude = new ExtrudeParams(COPIED_ENTITY); - c->Extrude->fill(ep,A,B,C,X,Y,Z,alpha); - //pas de abs()! il faut le signe pour copy_mesh dans ExtrudeMesh - c->Extrude->geo.Source = c2->Num; - if(e)c->Extrude->mesh = e->mesh; - } - - if(pv)List_Add(pv->Surfaces,&chapeau); - - // filling extrude params - - for(i=0;i<List_Nbr(ps->Generatrices);i++){ - List_Read(ps->Generatrices,i,&c); - s = Extrude_ProtudeCurve(ep,c->Num,A,B,C,X,Y,Z,alpha,e); - if(pv && s)List_Add(pv->Surfaces,&s); - //printSurface(s); - } - - if(ep){ - T[0] = A; T[1] = B; T[2] = C; - SetTranslationMatrix(matrix,T); - ApplyTransformationToSurface(matrix,chapeau); - } - else{ - T[0] = -X; T[1] = -Y; T[2] = -Z; - SetTranslationMatrix(matrix,T); - ApplyTransformationToSurface(matrix,chapeau); - List_Reset(ListOfTransformedPoints); - - Ax[0] = A; Ax[1] = B; Ax[2] = C; - SetRotationMatrix(matrix,Ax,alpha); - ApplyTransformationToSurface(matrix,chapeau); - List_Reset(ListOfTransformedPoints); - - T[0] = X; T[1] = Y; T[2] = Z; - SetTranslationMatrix(matrix,T); - ApplyTransformationToSurface(matrix,chapeau); - List_Reset(ListOfTransformedPoints); - } - Tree_Suppress(THEM->Surfaces,&chapeau); - chapeau->Num = NEWREG(); - Tree_Add(THEM->Surfaces,&chapeau); - - if(pv)Tree_Add(THEM->Volumes,&pv); - - ReplaceAllDuplicates ( THEM ); - List_Reset(ListOfTransformedPoints); - -} - -void DivideCurve (Curve *c , double u, Vertex *v, Curve **c1, Curve **c2){ - (*c1) = Create_Curve(MAXREG++,c->Typ,1,NULL,NULL,-1,-1,0.,1.); - (*c2) = Create_Curve(MAXREG++,c->Typ,1,NULL,NULL,-1,-1,0.,1.); - CopyCurve(c,*c1); - CopyCurve(c,*c2); - (*c1)->uend = u; - (*c2)->ubeg = u; - (*c1)->end = v; - (*c2)->beg = v; -} - -bool IntersectCurves (Curve *c1, Curve *c2, - Curve **c11, Curve **c12, - Curve **c21, Curve **c22, Vertex **v){ - float x[3]; - Vertex v1,v2; - Vertex V,*pv; - int check; - - if(!compareVertex(&c1->beg,&c2->beg))return false; - if(!compareVertex(&c1->end,&c2->end))return false; - if(!compareVertex(&c1->beg,&c2->end))return false; - if(!compareVertex(&c2->beg,&c1->end))return false; - - CURVE_2 = c2; - CURVE = c1; - x[1] = x[2] = 0.0; - newt(x,2,&check,intersectCC); - if(check)return false; - v1 = InterpolateCurve(c1,x[1],0); - v2 = InterpolateCurve(c2,x[2],0); - if(x[1] <= c1->ubeg)return false; - if(x[1] >= c1->uend)return false; - if(x[2] <= c2->ubeg)return false; - if(x[2] >= c2->uend)return false; - if(fabs(v1.Pos.Z - v2.Pos.Z) > 1.e-06 * CTX.lc)return false; - pv = &V; - pv->Num = MAXPOINT++; - Cdbpts101(pv->Num,v1.Pos.X,v1.Pos.Y,v1.Pos.Z,v1.lc,x[1]); - v = (Vertex**)Tree_PQuery(THEM->Points,&pv); - DivideCurve(c1,x[1],*v,c11,c12); - DivideCurve(c2,x[2],*v,c21,c22); - return true; -} - -bool IntersectAllSegmentsTogether (void) { - bool intersectionfound = true; - List_T *TempList; - Curve *c1,*c2,*c11,*c12,*c21,*c22; - Vertex *v; - int i,j; - - while(intersectionfound){ - TempList = Tree2List(THEM->Curves); - if(!List_Nbr(TempList))return true; - for(i=0;i<List_Nbr(TempList);i++){ - List_Read(TempList,i,&c1); - intersectionfound = false; - for(j=0;j<List_Nbr(TempList);j++){ - List_Read(TempList,j,&c2); - if(c1->Num > 0 && c2->Num >0 && i!=j && intersectionfound == false){ - if(IntersectCurves(c1,c2,&c11,&c12,&c21,&c22,&v)){ - Msg(INFO, "Intersection Curve %d->%d",c1->Num,c2->Num); - intersectionfound = true; - DeleteCurve(c1->Num); - DeleteCurve(c2->Num); - Tree_Add(THEM->Curves,&c11); - Tree_Add(THEM->Curves,&c12); - Tree_Add(THEM->Curves,&c21); - Tree_Add(THEM->Curves,&c22); - - CreateReversedCurve(THEM,c11); - CreateReversedCurve(THEM,c12); - CreateReversedCurve(THEM,c21); - CreateReversedCurve(THEM,c22); - return true; - } - } - } - if(intersectionfound) break; - } - List_Delete(TempList); - } - return false; - -} - -void IntersectSurfaces (Surface *s1, Surface *s2){ - - -} - -int compareTwoCurves (const void *a, const void *b){ - Curve *c1, *c2; - c1 = *(Curve**)a; - c2 = *(Curve**)b; - int comp; - - if(c1->Typ != c2->Typ)return c1->Typ - c2->Typ; - comp = compareVertex(&c1->beg,&c2->beg); - if(comp)return comp; - comp = compareVertex(&c1->end,&c2->end); - if(comp)return comp; - // a finir pour des splines !! - return 0; - //return c1->Num - c2->Num; -} - -int compareAbsCurve (const void *a, const void *b){ - Curve **q, **w; - - q = (Curve **) a; - w = (Curve **) b; - return (abs((*q)->Num) - abs((*w)->Num)); -} - -int compareTwoSurfaces (const void *a, const void *b){ - Surface *s1, *s2; - s1 = *(Surface**)a; - s2 = *(Surface**)b; - return compare2Lists(s1->Generatrices, - s2->Generatrices, - compareAbsCurve); -} - - -/* Fonction eliminant les doublons dans une - geometrie*/ - -void Coherence_PS(void){ - ReplaceAllDuplicates (THEM); -} - -void ReplaceAllDuplicates ( Mesh *m ){ - List_T *All; - Tree_T *allNonDulpicatedPoints; - Vertex *v; - Curve *c,*c2; - Surface *s; - Volume *vol; - int i,j,start,end; - - List_T *points2delete = List_Create(100,100,sizeof(Vertex*)); - - /* Create unique points */ - - All = Tree2List(m->Points); - start = List_Nbr(All); - - allNonDulpicatedPoints = Tree_Create(sizeof(Vertex*),comparePosition); - for(i=0;i<List_Nbr(All);i++){ - List_Read(All,i,&v); - if(!Tree_Search(allNonDulpicatedPoints,&v)){ - Tree_Insert(allNonDulpicatedPoints,&v); - } - else{ - Tree_Suppress(m->Points,&v); - Tree_Suppress(m->Vertices,&v); - // List_Add(points2delete,&v); - } - } - - List_Delete(All); - - end = Tree_Nbr(m->Points); - - if(start-end) Msg(DEBUG, "Removed %d duplicate points", start-end); - - /* Replace old points in curves */ - - All = Tree2List(m->Curves); - start = List_Nbr(All); - - for(i=0;i<List_Nbr(All);i++){ - List_Read(All,i,&c); - Tree_Query( allNonDulpicatedPoints,&c->beg); - Tree_Query( allNonDulpicatedPoints,&c->end); - for(j=0;j<List_Nbr(c->Control_Points);j++){ - List_Write(c->Control_Points,j, - Tree_PQuery( allNonDulpicatedPoints, - List_Pointer(c->Control_Points,j))); - } - } - List_Delete(All); - - /* Replace old points in surfaces */ - - All = Tree2List(m->Surfaces); - for(i=0;i<List_Nbr(All);i++){ - List_Read(All,i,&s); - for(j=0;j<List_Nbr(s->Control_Points);j++){ - List_Write(s->Control_Points,j, - Tree_PQuery( allNonDulpicatedPoints, - List_Pointer(s->Control_Points,j))); - } - } - - List_Delete(All); - - /* Create unique curves */ - - All = Tree2List(m->Curves); - Tree_T *allNonDulpicatedCurves; - allNonDulpicatedCurves = Tree_Create(sizeof(Curve*),compareTwoCurves); - for(i=0;i<List_Nbr(All);i++){ - List_Read(All,i,&c); - if(c->Num > 0){ - if(!Tree_Search(allNonDulpicatedCurves,&c)){ - Tree_Insert(allNonDulpicatedCurves,&c); - if(!(c2 = FindCurve(-c->Num,m))){ - Msg(GERROR, "Unknown Curve %d", -c->Num); - List_Delete(All); - return; - } - Tree_Insert(allNonDulpicatedCurves,&c2); - } - else{ - Tree_Suppress(m->Curves,&c); - if(!(c2 = FindCurve(-c->Num,m))){ - Msg(GERROR, "Unknown Curve %d", -c->Num); - List_Delete(All); - return; - } - Tree_Suppress(m->Curves,&c2); - } - } - } - - List_Delete(All); - - end = Tree_Nbr(m->Curves); - - if(start-end) Msg(DEBUG, "Removed %d duplicate curves", start-end); - - /* Replace old curves in surfaces */ - - All = Tree2List(m->Surfaces); - for(i=0;i<List_Nbr(All);i++){ - List_Read(All,i,&s); - for(j=0;j<List_Nbr(s->Generatrices);j++){ - List_Write(s->Generatrices,j, - Tree_PQuery( allNonDulpicatedCurves, - List_Pointer(s->Generatrices,j))); - - // Arghhh. Revoir compareTwoCurves ! - End_Curve(*(Curve**)List_Pointer(s->Generatrices,j)); - } - } - - /* Create unique surfaces */ - - start = List_Nbr(All); - - Tree_T *allNonDulpicatedSurfaces; - allNonDulpicatedSurfaces = Tree_Create(sizeof(Curve*),compareTwoSurfaces); - for(i=0;i<List_Nbr(All);i++){ - List_Read(All,i,&s); - if(s->Num > 0){ - if(!Tree_Search(allNonDulpicatedSurfaces,&s)){ - Tree_Insert(allNonDulpicatedSurfaces,&s); - } - else{ - Tree_Suppress(m->Surfaces,&s); - } - } - } - - List_Delete(All); - - end = Tree_Nbr(m->Surfaces); - - if(start-end) Msg(DEBUG, "Removed %d duplicate surfaces", start-end); - - /* Replace old surfaces in volumes */ - - All = Tree2List(m->Volumes); - for(i=0;i<List_Nbr(All);i++){ - List_Read(All,i,&vol); - for(j=0;j<List_Nbr(vol->Surfaces);j++){ - List_Write(vol->Surfaces,j, - Tree_PQuery( allNonDulpicatedSurfaces, - List_Pointer(vol->Surfaces,j))); - } - } - - for(int k = 0; k < List_Nbr(points2delete);k++) - { - List_Read(points2delete,i,&v); - Free_Vertex(&v,0); - } - - -} - -/* NEW CAD FUNCTIONS */ - -void ModifyLcPoint(int ip, double lc){ - Vertex *v = FindPoint(ip,THEM); - if(v)v->lc = lc; -} - -void ApplicationOnPoint(int ip,double matrix[4][4]){ - Vertex *v = FindPoint(ip,THEM); - if(v)ApplyTransformationToPoint ( matrix, v ); -} - -void ApplicationOnLine(int ip, double matrix[4][4]){ - Curve *c = FindCurve(ip,THEM); - if(c)ApplyTransformationToCurve ( matrix, c ); -} - -void ApplicationOnSurface(int ip, double matrix[4][4]){ - Surface *s = FindSurface(ip,THEM); - if(s)ApplyTransformationToSurface ( matrix, s ); -} - -void ApplicationOnShapes(double matrix[4][4], List_T *ListShapes){ - int i; - Shape O; - - for(i=0;i<List_Nbr(ListShapes);i++){ - List_Read(ListShapes,i,&O); - switch(O.Type){ - case MSH_POINT: - ApplicationOnPoint(O.Num,matrix); - break; - case MSH_SEGM_LINE: - case MSH_SEGM_SPLN: - case MSH_SEGM_CIRC: - case MSH_SEGM_ELLI: - case MSH_SEGM_NURBS: - ApplicationOnLine(O.Num,matrix); - break; - case MSH_SURF_NURBS : - case MSH_SURF_REGL : - case MSH_SURF_TRIC : - case MSH_SURF_PLAN : - ApplicationOnSurface(O.Num,matrix); - break; - default: - Msg(GERROR, "Impossible to apply transformation on entity %d (of type %d)", - O.Num, O.Type); - break; - } - } - List_Reset(ListOfTransformedPoints); -} - -void TranslateShapes(double X,double Y,double Z, - List_T *ListShapes, int isFinal){ - double T[3],matrix[4][4]; - T[0] = X;T[1] = Y;T[2] = Z; - SetTranslationMatrix(matrix,T); - ApplicationOnShapes(matrix,ListShapes); - if(isFinal)ReplaceAllDuplicates ( THEM ); -} - -void DilatShapes(double X,double Y,double Z, double A, - List_T *ListShapes, int isFinal){ - double T[3],matrix[4][4]; - T[0] = X;T[1] = Y;T[2] = Z; - SetDilatationMatrix(matrix,T,A); - ApplicationOnShapes(matrix,ListShapes); - ReplaceAllDuplicates ( THEM ); -} - - -void RotateShapes (double Ax,double Ay,double Az, - double Px,double Py, double Pz, - double alpha, List_T *ListShapes){ - double A[3],matrix[4][4]; - A[0] = Ax;A[1] = Ay;A[2] = Az; - TranslateShapes(-Px,-Py,-Pz,ListShapes,0); - List_Reset(ListOfTransformedPoints); - SetRotationMatrix(matrix,A,alpha); - ApplicationOnShapes(matrix,ListShapes); - TranslateShapes(Px,Py,Pz,ListShapes,0); - List_Reset(ListOfTransformedPoints); - ReplaceAllDuplicates ( THEM ); -} - -void SymmetryShapes (double A,double B,double C, - double D, List_T *ListShapes, int x){ - double matrix[4][4]; - SetSymmetryMatrix(matrix,A,B,C,D); - ApplicationOnShapes(matrix,ListShapes); - ReplaceAllDuplicates ( THEM ); -} - - -void CopyShape(int Type, int Num, int *New){ - Surface *s,*news; - Curve *c, *newc; - Vertex *v,*newv; - - MAXREG = NEWREG(); - MAXPOINT = NEWPOINT(); - - switch(Type){ - case MSH_POINT: - if(!(v = FindPoint(Num,THEM))){ - Msg(GERROR, "Unknown Vertex %d", Num); - return; - } - newv = DuplicateVertex(v); - *New = newv->Num; - break; - case MSH_SEGM_LINE: - case MSH_SEGM_SPLN: - case MSH_SEGM_CIRC: - case MSH_SEGM_ELLI: - case MSH_SEGM_NURBS: - if(!(c = FindCurve(Num,THEM))){ - Msg(GERROR, "Unknown Curve %d", Num); - return; - } - newc = DuplicateCurve(c); - *New = newc->Num; - break; - case MSH_SURF_NURBS: - case MSH_SURF_TRIC: - case MSH_SURF_REGL: - case MSH_SURF_PLAN: - if(!(s = FindSurface(Num,THEM))){ - Msg(GERROR, "Unknown Surface %d", Num); - return; - } - news = DuplicateSurface(s,1); - *New = news->Num; - break; - default: - Msg(GERROR, "Impossible to copy entity %d (of type %d)", Num, Type); - break; - } -} - -void DeletePoint(int ip){ - Vertex *v = FindPoint(ip,THEM); - if(!v) return; - List_T *Curves = Tree2List(THEM->Curves); - for(int i=0;i<List_Nbr(Curves);i++){ - Curve *c; - List_Read(Curves,i,&c); - for(int j=0;j<List_Nbr(c->Control_Points);j++){ - if(!compareVertex(List_Pointer(c->Control_Points,j),&v))return; - } - } - List_Delete(Curves); - Tree_Suppress(THEM->Points,&v); -} - -void DeleteCurve(int ip){ - Curve *c = FindCurve(ip,THEM); - if(!c) return; - List_T *Surfs = Tree2List(THEM->Surfaces); - for(int i=0;i<List_Nbr(Surfs);i++){ - Surface *s; - List_Read(Surfs,i,&s); - for(int j=0;j<List_Nbr(s->Generatrices);j++){ - if(!compareCurve(List_Pointer(s->Generatrices,j),&c))return; - } - } - List_Delete(Surfs); - Tree_Suppress(THEM->Curves,&c); -} - -void DeleteSurf( int is ){ - - // Il faut absolument coder une - // structure coherente pour les volumes. - Surface *s = FindSurface(is,THEM); - if(!s) return; - List_T *Vols = Tree2List(THEM->Volumes); - for(int i=0;i<List_Nbr(Vols);i++){ - Volume *v; - List_Read(Vols,i,&v); - for(int j=0;j<List_Nbr(v->Surfaces);j++){ - if(!compareCurve(List_Pointer(v->Surfaces,j),&s))return; - } - } - List_Delete(Vols); - //s->Num = 1000000000; - Tree_Suppress(THEM->Surfaces,&s); -} - -void DeleteLine(int ip, int i){DeleteCurve(ip);} - -void DeleteShape(int Type, int Num){ - - switch(Type){ - case MSH_POINT: - DeletePoint(Num); - break; - case MSH_SEGM_LINE: - case MSH_SEGM_SPLN: - case MSH_SEGM_CIRC: - case MSH_SEGM_ELLI: - case MSH_SEGM_NURBS: - DeleteCurve(Num); - break; - case MSH_SURF_NURBS: - case MSH_SURF_TRIC: - case MSH_SURF_REGL: - case MSH_SURF_PLAN: - DeleteSurf(Num); - break; - default: - Msg(GERROR, "Impossible to delete entity %d (of type %d)", Num, Type); - break; - } -} - -Curve * CreateReversedCurve (Mesh *M,Curve *c){ - Curve *newc; - Vertex *e1,*e2,*e3,*e4; - int i; - newc = Create_Curve(-c->Num, c->Typ,1,NULL,NULL,-1,-1,0.,1.); - newc->Control_Points = List_Create(List_Nbr(c->Control_Points), 1, sizeof(Vertex*)); - if (c->Typ == MSH_SEGM_ELLI || c->Typ == MSH_SEGM_ELLI_INV){ - List_Read(c->Control_Points,0,&e1); - List_Read(c->Control_Points,1,&e2); - List_Read(c->Control_Points,2,&e3); - List_Read(c->Control_Points,3,&e4); - List_Add(newc->Control_Points,&e4); - List_Add(newc->Control_Points,&e2); - List_Add(newc->Control_Points,&e3); - List_Add(newc->Control_Points,&e1); - } - else - List_Invert(c->Control_Points, newc->Control_Points); - - if (c->Typ == MSH_SEGM_NURBS && c->k){ - newc->k = (float*)malloc((c->degre + List_Nbr(c->Control_Points)+1)*sizeof(float)); - for(i=0;i<c->degre + List_Nbr(c->Control_Points)+1;i++) - newc->k[c->degre + List_Nbr(c->Control_Points)-i] = c->k[i]; - } - - if (c->Typ == MSH_SEGM_CIRC) newc->Typ = MSH_SEGM_CIRC_INV; - if (c->Typ == MSH_SEGM_CIRC_INV) newc->Typ = MSH_SEGM_CIRC; - if (c->Typ == MSH_SEGM_ELLI) newc->Typ = MSH_SEGM_ELLI_INV; - if (c->Typ == MSH_SEGM_ELLI_INV) newc->Typ = MSH_SEGM_ELLI; - newc->Vertices = List_Create(10 ,1 ,sizeof(Vertex*)); - newc->Method = c->Method; - newc->degre = c->degre; - newc->beg = c->end; - newc->end = c->beg; - newc->ubeg = 1. - c->uend; - newc->uend = 1. - c->ubeg; - End_Curve(newc); - - Curve **pc; - - if((pc = (Curve**)Tree_PQuery(M->Curves,&newc))) - { - Free_Curve(&newc,0); - return *pc; - } - else Tree_Insert(M->Curves, &newc); - return newc; -} - -int recognize_seg(int typ, List_T * liste, int *seg){ - int i,beg,end; - Curve *pc; - - List_T *temp = Tree2List(THEM->Curves); - List_Read(liste,0,&beg); - List_Read(liste,List_Nbr(liste)-1,&end); - for(i=0;i<List_Nbr(temp);i++){ - List_Read(temp,i,&pc); - if(pc->Typ == typ && - pc->beg->Num == beg && - pc->end->Num == end){ - List_Delete(temp); - *seg = pc->Num; - return 1; - } - } - List_Delete(temp); - return 0; -} - - - -int recognize_loop(List_T * liste, int *loop){ - int i,res; - EdgeLoop *pe; - - res = 0; - *loop = 0; - List_T *temp = Tree2List(THEM->EdgeLoops); - for(i=0;i<List_Nbr(temp);i++){ - List_Read(temp,i,&pe); - if(!compare2Lists(pe->Curves,liste,fcmp_absint)){ - res = 1; - *loop = pe->Num; - break; - } - } - List_Delete(temp); - return res; -} - -int recognize_surfloop(List_T * liste, int *loop){ - int i,res; - EdgeLoop *pe; - - res = 0; - *loop = 0; - List_T *temp = Tree2List(THEM->SurfaceLoops); - for(i=0;i<List_Nbr(temp);i++){ - List_Read(temp,i,&pe); - if(!compare2Lists(pe->Curves,liste,fcmp_absint)){ - res = 1; - *loop = pe->Num; - break; - } - } - List_Delete(temp); - return res; -} - diff --git a/Geo/CAD.h b/Geo/CAD.h deleted file mode 100644 index 05ec3e9bf48f18b719624a23c110fe832db7e12f..0000000000000000000000000000000000000000 --- a/Geo/CAD.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef _CAD_H_ -#define _CAD_H_ - -#include "Mesh.h" - -int NEWREG(void); -int NEWPOINT(void); - -Vertex *FindPoint(int inum, Mesh *M); -Vertex *FindVertex(int inum, Mesh *M); -Curve *FindCurve(int inum, Mesh *M); -Surface *FindSurface(int inum, Mesh *M); -Volume *FindVolume(int inum, Mesh *M); -EdgeLoop *FindEdgeLoop(int inum, Mesh *M); -SurfaceLoop *FindSurfaceLoop(int inum, Mesh *M); - -bool ProjectPointOnCurve (Curve *c, Vertex *v, Vertex *RES, Vertex *DER); -bool ProjectPointOnSurface (Surface *s, Vertex &p); -bool ProjectPointOnSurface (Surface *s, Vertex *p,double *u, double *v); - -void Extrude_ProtudePoint(int ep, int ip, double A, double B, double C, - double X, double Y, double Z, double alpha, - Curve **pc, Curve **prc, ExtrudeParams *e); -Surface *Extrude_ProtudeCurve(int ep, int ic, - double A, double B, double C, - double X, double Y, double Z, - double alpha, ExtrudeParams *e); -void Extrude_ProtudeSurface(int ep, int is, - double A, double B, double C, - double X, double Y, double Z, - double alpha, - int NewVolume, ExtrudeParams *e); -void ProtudeXYZ ( double &x, double &y, double &z, ExtrudeParams *e); -void ReplaceAllDuplicates ( Mesh *m ); -void Coherence_PS(void); -bool IntersectAllSegmentsTogether(void); - -void ModifyLcPoint(int ip, double lc); -void TranslateShapes(double X,double Y,double Z, - List_T *ListShapes, int isFinal); -void DilatShapes(double X,double Y,double Z, double A, - List_T *ListShapes, int isFinal); -void RotateShapes (double Ax,double Ay,double Az, - double Px,double Py, double Pz, - double alpha, List_T *ListShapes); -void SymmetryShapes (double A,double B,double C, - double D, List_T *ListShapes, int x); -void CopyShape(int Type, int Num, int *New); - -void DeletePoint(int ip); -void DeleteCurve(int ip); -void DeleteSurf( int is ); -void DeleteShape(int Type, int Num); - -Curve * CreateReversedCurve (Mesh *M,Curve *c); - -int recognize_seg(int typ, List_T * liste, int *seg); -int recognize_loop(List_T * liste, int *loop); -int recognize_surfloop(List_T * liste, int *loop); - - -#endif diff --git a/Geo/DataBase.cpp b/Geo/DataBase.cpp deleted file mode 100644 index f8316ba966203cf6dc6701f3ba2520a3f7b5c43b..0000000000000000000000000000000000000000 --- a/Geo/DataBase.cpp +++ /dev/null @@ -1,567 +0,0 @@ -// $Id: DataBase.cpp,v 1.16 2001-08-11 23:28:31 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "Mesh.h" -#include "CAD.h" -#include "Create.h" -#include "Verif.h" -#include "Context.h" - - -extern Context_T CTX ; -extern int CurrentNodeNumber; -extern Mesh *THEM; - -/* POINTS */ - -void Cdbpts101(int ip, double x, double y, double z, double l, double w){ - Vertex *v; - CurrentNodeNumber = IMAX(CurrentNodeNumber, ip); - v = Create_Vertex(ip, - CTX.geom.scaling_factor*x, - CTX.geom.scaling_factor*y, - CTX.geom.scaling_factor*z, - CTX.geom.scaling_factor*l, - 0.0); - v->w = w; - Tree_Insert(THEM->Points,&v); -} - -/* CURVES */ - -void AddCurveInDataBase (int NumCurve, int TypCurve, int Order, - List_T *ControlPoints, List_T *Knots, - int VertexBeg, int VertexEnd, - double uBeg, double uEnd){ - Curve *c; - - if(NumCurve<0) return; /* Negative Curves are reversed from positive ones*/ - - c = Create_Curve(NumCurve,TypCurve,Order,ControlPoints,Knots, - VertexBeg,VertexEnd,uBeg,uEnd); - - /* Courbe dans l'autre sens */ - - Curve *rc = CreateReversedCurve(THEM,c); - Tree_Insert(THEM->Curves,&c); - Tree_Insert(THEM->Curves,&rc); -} - -void AddCircleInDataBase (int NumCurve, int TypCurve, List_T *ControlPoints, - double n[3]){ - Curve *c; - - if(NumCurve<0) return; /* Negative Curves are reversed from positive ones*/ - - c = Create_Curve(NumCurve,TypCurve,2,ControlPoints,NULL,-1,-1,0.,1.); - - c->Circle.n[0] = n[0]; - c->Circle.n[1] = n[1]; - c->Circle.n[2] = n[2]; - - End_Curve(c); - - /* Courbe dans l'autre sens */ - - Curve *rc = CreateReversedCurve(THEM,c); - - rc->Circle.n[0] = n[0]; - rc->Circle.n[1] = n[1]; - rc->Circle.n[2] = n[2]; - End_Curve(rc); - - Tree_Insert(THEM->Curves,&c); - Tree_Insert(THEM->Curves,&rc); -} - -void Cdbseg101(int iseg, int typseg, int degre, List_T *liste, List_T *listint, - int i1,int i2,double u1 ,double u2,char *c1, char *c2, char *c3){ - int i,j; - double d; - List_T *Temp; - if(listint){ - AddCurveInDataBase (iseg,typseg,degre,listint,NULL,i1,i2,u1,u2); - } - else{ - Temp = List_Create(List_Nbr(liste),1,sizeof(int)); - for(i=0;i<List_Nbr(liste);i++){ - List_Read(liste,i,&d); - j = (int)d; - List_Add(Temp,&j); - } - AddCurveInDataBase (iseg,typseg,degre,Temp,NULL,i1,i2,u1,u2); - List_Delete(Temp); - } - -} - - -/* SURFACES AND VOLUMES */ - -void AddQuadricSurfaceInDataBase (int Typ, int NumQuadric, double zaxis[3], - double xaxis[3], double center[3], - double radius1, double radius2, List_T *loops){ - int ic,i,j,NbLoop,iLoop; - Surface *s; - Curve *c; - EdgeLoop *el; - - s = Create_Surface(NumQuadric,Typ,0); - s->Method = LIBRE; - for(i=0;i<3;i++)s->Cyl.xaxis[i] = xaxis[i]; - for(i=0;i<3;i++)s->Cyl.zaxis[i] = zaxis[i]; - for(i=0;i<3;i++)s->Cyl.center[i] = center[i]; - s->Cyl.radius1 = radius1; - s->Cyl.radius2 = radius2; - s->Generatrices = List_Create(4, 1, sizeof(Curve*)); - - NbLoop = List_Nbr(loops); - s->Generatrices = List_Create(4, 1, sizeof(Curve*)); - for(i=0;i<NbLoop;i++){ - List_Read(loops,i,&iLoop); - if(!(el = FindEdgeLoop(iLoop,THEM))){ - Msg(GERROR, "Unknown Line Loop %d", iLoop); - List_Delete(s->Generatrices); - Free(s); - return; - } - else{ - for(j=0;j<List_Nbr(el->Curves);j++){ - List_Read(el->Curves,j,&ic); - if(!(c = FindCurve(ic,THEM))){ - Msg(GERROR, "Unknown Curve %d", ic); - List_Delete(s->Generatrices); - Free(s); - return; - } - else - List_Add (s->Generatrices, &c); - } - } - } - s->Support = s; - End_Surface(s); - Tree_Insert (THEM->Surfaces , &s); -} - -void CreateSurfaceFromOldCrappyDatabase (int izon, int typzon, int o1, int o2, - int nbu, int nbv, int sup, - List_T *liste, List_T *loops, Mesh *M){ - - int ic,i,j,l,NbLoop,iLoop; - Surface *s,*pS; - Curve *c; - Vertex V,*v; - EdgeLoop *el; - - s = Create_Surface(izon,typzon,0); - s->Method = LIBRE; - - NbLoop = List_Nbr(loops); - s->Generatrices = List_Create(4, 1, sizeof(Curve*)); - for(i=0;i<NbLoop;i++){ - List_Read(loops,i,&iLoop); - if(!(el = FindEdgeLoop(iLoop,THEM))){ - Msg(GERROR, "Unknown Line Loop %d", iLoop); - List_Delete(s->Generatrices); - Free(s); - return; - } - else{ - for(j=0;j<List_Nbr(el->Curves);j++){ - List_Read(el->Curves,j,&ic); - if(!(c = FindCurve(ic,THEM))){ - Msg(GERROR, "Unknown Curve %d", ic); - List_Delete(s->Generatrices); - Free(s); - return; - } - else - List_Add (s->Generatrices, &c); - } - } - } - - if((pS = FindSurface(sup,THEM))){ - s->Support = pS; - } - else{ - s->Support = s; - } - - if(typzon == MSH_SURF_NURBS && !pS){ - s->Control_Points = List_Create(4, 1, sizeof(Vertex*)); - s->OrderU = o1; - s->OrderV = o2; - s->Nu = nbu; - s->Nv = nbv; - for(l=0;l<List_Nbr(liste);l++){ - List_Read(liste,l,&iLoop); - v = &V; - v->Num = iLoop; - List_Add (s->Control_Points, Tree_PQuery(M->Points, &v)); - } - } - - End_Surface(s); - Tree_Insert (M->Surfaces , &s); -} - -void CreateVolumeFromOldCrappyDatabase (int izon, List_T *loops, Mesh *M){ - SurfaceLoop *sl; - int i,j,iLoop,is; - Surface *s; - Volume *v; - - v = Create_Volume(izon,MSH_VOLUME,0); - v->Surfaces = List_Create(4, 1, sizeof(Surface*)); - for(i=0;i<List_Nbr(loops);i++){ - List_Read(loops,i,&iLoop); - if(!(sl = FindSurfaceLoop(iLoop,THEM))){ - Msg(GERROR, "Unknown Surface Loop %d", iLoop); - List_Delete(v->Surfaces); - Free(v); - return; - } - else{ - for(j=0;j<List_Nbr(sl->Surfaces);j++){ - List_Read(sl->Surfaces,j,&is); - if(!(s = FindSurface(abs(is),THEM))){ - Msg(GERROR, "Unknown Surface %d", is); - List_Delete(v->Surfaces); - Free(v); - return; - } - else - List_Add (v->Surfaces, &s); - } - } - } - Tree_Add(M->Volumes,&v); -} - - -void Cdbz101(int izon, int typzon,int o1, int o2, int nbu, int nbv, - int support, List_T *ListCP, List_T *liste, - List_T *intlist){ - - int i,j; - double f; - List_T *templist; - Curve *c, *c0, *c1, *c2; - - if(liste){ - templist = List_Create(List_Nbr(liste),1,sizeof(int)); - for(i=0;i<List_Nbr(liste);i++){ - List_Read (liste, i, &f); - j = (int)f; - List_Add(templist,&j); - } - } - else if (intlist){ - templist = intlist; - } - - if(typzon == MSH_SURF_REGL || typzon == MSH_SURF_TRIC || - typzon == MSH_SURF_PLAN || typzon == MSH_SURF_TRIMMED || - typzon == MSH_SURF_NURBS ){ - CreateSurfaceFromOldCrappyDatabase (izon, typzon, o1,o2, nbu, nbv, - support, ListCP,templist,THEM); - } - else if(typzon == MSH_SURF_LOOP){ - Add_SurfaceLoop(izon,templist,THEM); - } - else if(typzon == MSH_SEGM_LOOP){ - - // We sort the lines in the line loops. Without this sort, it very - // difficult to write general scriptable surface generation in - // complex cases. - - int NbCurves = List_Nbr(templist) ; - List_T *curves = List_Create(NbCurves,1,sizeof(Curve*)); - for(i=0 ; i<NbCurves ; i++){ - if((c = FindCurve(*(int*)List_Pointer(templist,i), THEM))) - List_Add(curves, &c); - else - Msg(GERROR, "Unknown Curve %d in Line Loop %d", - *(int*)List_Pointer(templist,i), izon); - } - List_Reset(templist); - - int j = 0, k = 0; - c0 = c1 = *(Curve**)List_Pointer(curves, 0); - List_Add(templist, &c1->Num); - List_PSuppress(curves, 0); - while(List_Nbr(templist) < NbCurves){ - for(i=0 ; i<List_Nbr(curves); i++){ - c2 = *(Curve**)List_Pointer(curves, i); - if(c1->end == c2->beg){ - List_Add(templist, &c2->Num); - List_PSuppress(curves, i); - c1 = c2 ; - if(c2->end == c0->beg){ - if(List_Nbr(curves)){ - Msg(INFO, "Starting subloop %d in Line Loop %d (are you sure about this?)", - ++k, izon); - c0 = c1 = *(Curve**)List_Pointer(curves, 0); - List_Add(templist, &c1->Num); - List_PSuppress(curves, 0); - } - } - break; - } - } - if(j++ > NbCurves){ - Msg(GERROR, "Line Loop %d is wrong", izon); - break; - } - } - List_Delete(curves); - - /* - printf("Line Loop %d = {", izon); - for(i=0 ; i<List_Nbr(templist); i++){ - printf(" %d", *(int*)List_Pointer(templist, i)); - } - printf("}\n"); - */ - - Add_EdgeLoop(izon,templist,THEM); - } - else if(typzon == MSH_VOLUME){ - CreateVolumeFromOldCrappyDatabase (izon,templist,THEM); - } - else{ - Add_PhysicalGroup(izon,typzon,templist,THEM); - } - - if(liste)List_Delete (templist); - - -} - -void CreateNurbsSurfaceSupport (int Num , int Order1, int Order2 , - List_T *List, List_T *ku, List_T *kv){ - - List_T *ListOfDouble_L; - List_T *ListCP; - int i,j,Nv,Nu,N; - Surface *s; - double d; - float f; - ListCP = List_Create(2,2,sizeof(int)); - - for(j=0;j<List_Nbr(List);j++){ - List_Read(List,j,&ListOfDouble_L); - for(i=0;i<List_Nbr(ListOfDouble_L);i++){ - List_Read(ListOfDouble_L,i,&d); - N = (int)d; - List_Add(ListCP,&N); - } - } - List_Read(List,0,&ListOfDouble_L); - Nu = List_Nbr(List); - Nv = List_Nbr(ListOfDouble_L); - Cdbz101(Num,MSH_SURF_NURBS,Order1,Order2,Nv,Nu,0,ListCP,NULL,NULL); - - if(!(s = FindSurface(Num,THEM))){ - Msg(GERROR, "Unknown Surface Loop %d", Num); - return; - } - else{ - s->ku = (float*)malloc(List_Nbr(ku)*sizeof(float)); - s->kv = (float*)malloc(List_Nbr(kv)*sizeof(float)); - s->Support = NULL; - - double kumin = 0., kumax = 1.; - double kvmin = 0., kvmax = 1.; - /* - List_Read(ku,0,&kumin); - List_Read(ku,List_Nbr(ku)-1,&kumax); - List_Read(kv,0,&kvmin); - List_Read(kv,List_Nbr(kv)-1,&kvmax); - */ - - for(i=0;i<List_Nbr(ku);i++){ - List_Read(ku,i,&d); - f = (float) ((d-kumin)/(kumax-kumin)); - s->ku[i] = f; - } - for(i=0;i<List_Nbr(kv);i++) { - List_Read(kv,i,&d); - f = (float) ((d-kvmin)/(kvmax-kvmin)); - s->kv[i] = f; - } - } - - List_Delete(ListCP); -} - -void CreateNurbsSurface (int Num , int Order1 , int Order2 , List_T *List, - List_T *ku, List_T *kv ){ - List_T *ListOfDouble_L; - List_T *Listint,*ListCP; - int i,j,Loop[4],N,Nu,Nv; - double d; - int TypLine = MSH_SEGM_NURBS; - Curve *cc; - - Listint = List_Create(2,2,sizeof(int)); - ListCP = List_Create(2,2,sizeof(int)); - - double kumin, kumax; - List_Read(ku,0,&kumin); - List_Read(ku,List_Nbr(ku)-1,&kumax); - double kvmin, kvmax; - List_Read(kv,0,&kvmin); - List_Read(kv,List_Nbr(kv)-1,&kvmax); - for(j=0;j<List_Nbr(List);j++){ - List_Read(List,j,&ListOfDouble_L); - for(i=0;i<List_Nbr(ListOfDouble_L);i++){ - List_Read(ListOfDouble_L,i,&d); - N = (int)d; - List_Add(ListCP,&N); - } - } - - List_Read(List,0,&ListOfDouble_L); - Nu = List_Nbr(List); - Nv = List_Nbr(ListOfDouble_L); - - for(i=0;i<List_Nbr(ListOfDouble_L);i++){ - List_Read(ListOfDouble_L,i,&d); - j = (int)d; - List_Add(Listint,&j); - } - if(recognize_seg(TypLine,Listint,&Loop[0])){ - } - else{ - Loop[0] = NEWREG(); - Cdbseg101(Loop[0],TypLine,Order1,ListOfDouble_L,NULL,-1,-1,kumin,kumax,NULL,NULL,NULL); - if(!(cc = FindCurve(Loop[0],THEM))){ - Msg(GERROR, "Unknown Curve %d", Loop[0]); - List_Delete(Listint); - List_Delete(ListCP); - return; - } - else{ - cc->k = (float*)malloc(4*List_Nbr(ku)*sizeof(float)); - for(i=0;i<List_Nbr(ku);i++){ - List_Read(ku,i,&d); - cc->k[i] = (float)d/*((d-kumin)/(kumax-kumin))*/; - } - } - } - List_Reset(Listint); - - List_Read(List,List_Nbr(List)-1,&ListOfDouble_L); - for(i=0;i<List_Nbr(ListOfDouble_L);i++){ - List_Read(ListOfDouble_L,i,&d); - j = (int)d; - List_Add(Listint,&j); - } - if(recognize_seg(TypLine,Listint,&Loop[2])){ - } - else{ - Loop[2] = NEWREG(); - Cdbseg101(Loop[2],TypLine,Order1,ListOfDouble_L,NULL,-1,-1,kumin,kumax,NULL,NULL,NULL); - if(!(cc = FindCurve(Loop[2],THEM))){ - Msg(GERROR, "Unknown Curve %d", Loop[2]); - List_Delete(Listint); - List_Delete(ListCP); - return; - } - else{ - cc->k = (float*)malloc(4*List_Nbr(ku)*sizeof(float)); - for(i=0;i<List_Nbr(ku);i++){ - List_Read(ku,i,&d); - cc->k[i] = (float)d/*((d-kumin)/(kumax-kumin))*/; - } - } - } - List_Reset(Listint); - - List_T *List1 = List_Create(List_Nbr(List),1,sizeof(double)); - List_T *List2 = List_Create(List_Nbr(List),1,sizeof(double)); - - for(i=0;i<List_Nbr(List);i++){ - List_Read(List,i,&ListOfDouble_L); - List_Add(List1,List_Pointer(ListOfDouble_L,0)); - List_Add(List2,List_Pointer(ListOfDouble_L,List_Nbr(ListOfDouble_L)-1)); - } - - for(i=0;i<List_Nbr(List1);i++){ - List_Read(List1,i,&d); - j = (int)d; - List_Add(Listint,&j); - } - if(recognize_seg(TypLine,Listint,&Loop[1])){ - } - else{ - Loop[1] = NEWREG(); - Cdbseg101(Loop[1],TypLine,Order2,List1,NULL,-1,-1,kvmin,kvmax,NULL,NULL,NULL); - if(!(cc = FindCurve(Loop[1],THEM))){ - Msg(GERROR, "Unknown Curve %d", Loop[1]); - List_Delete(List1); - List_Delete(List2); - List_Delete(Listint); - List_Delete(ListCP); - return; - } - else{ - cc->k = (float*)malloc(4*List_Nbr(kv) * sizeof(float)); - for(i=0;i<List_Nbr(kv);i++){ - List_Read(kv,i,&d); - cc->k[i] = (float)d/*((d-kvmin)/(kvmax-kvmin))*/; - } - } - } - List_Reset(Listint); - - for(i=0;i<List_Nbr(List2);i++){ - List_Read(List2,i,&d); - j = (int)d; - List_Add(Listint,&j); - } - if(recognize_seg(TypLine,Listint,&Loop[3])){ - } - else{ - Loop[3] = NEWREG(); - Cdbseg101(Loop[3],TypLine,Order2,List2,NULL,-1,-1,kvmin,kvmax,NULL,NULL,NULL); - if(!(cc = FindCurve(Loop[3],THEM))) - Msg(GERROR, "Unknown Curve %d", Loop[3]); - else{ - cc->k = (float*)malloc(4*List_Nbr(kv)*sizeof(float)); - for(i=0;i<List_Nbr(kv);i++){ - List_Read(kv,i,&d); - cc->k[i] = (float)d/*((d-kvmin)/(kvmax-kvmin))*/; - } - } - } - - List_Reset(Listint); - List_Delete(List1); - List_Reset(List2); - double f = (double)-Loop[0]; - List_Add(List2,&f); - f = (double)Loop[1]; - List_Add(List2,&f); - f = (double)Loop[2]; - List_Add(List2,&f); - f = (double)-Loop[3]; - List_Add(List2,&f); - - int topnew = NEWREG(); - CreateNurbsSurfaceSupport (topnew,Order1 , Order2 ,List,ku,kv); - j = NEWREG(); - Cdbz101(j,MSH_SEGM_LOOP,0,0,0,0,0,NULL,List2,NULL); - List_Delete(List2); - List_Add(Listint,&j); - j = NEWREG(); - Cdbz101(j,MSH_SURF_TRIMMED,Order1,Order2,Nv,Nu,topnew,ListCP,NULL,Listint); - List_Delete(Listint); - List_Delete(ListCP); -} - diff --git a/Geo/DataBase.h b/Geo/DataBase.h deleted file mode 100644 index 2b4099027fd425e100dbd2c6a8fd06fc6cb0812d..0000000000000000000000000000000000000000 --- a/Geo/DataBase.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef _DATABASE_H_ -#define _DATABASE_H_ - -void Cdbpts101 (int ip, double x, double y, double z, double l, double w); -void Cdbpts105 (int ip, double x, double y, double z, double l, double w); -void Cdbseg102 (int iseg, int ip, int newp); -void Cdbz102 (int izon, int ip, int newp, int oldp); -void Cdbseg101 (int iseg, int typseg, int degre, List_T * liste, List_T * listint, - int, int, double, double, char *, char *, char *); -void Cdbpts201 (int ip); -void Cdbseg201 (int ip); -void Cdbz201 (int ip); -void Cdbz101 (int izon, int typzon, int o1, int o2, int nbu, int nbv, - int support, List_T * ListCP, List_T * liste, List_T * intlist); -void CreateNurbsSurface (int Num, int Order1, int Order2, List_T *, List_T *, List_T *); -void CreateNurbsSurfaceSupport (int Num, int Order2, int Order1, - List_T * List, List_T *, List_T *); -void Cdbseg301 (int ip); -void Cdbz301 (int ip); -void Cdbn101 (int in, double X, double Y, double Z); -void Cdbe101 (int nElm, int iEnt, int nnoe[4]); - -void AddCurveInDataBase (int NumCurve, int TypCurve, int Order, List_T * ControlPoints, - List_T * Knots, int VertexBeg, int VertexEnd, double uBeg, - double uEnd); -void AddCircleInDataBase (int NumCurve, int TypCurve, List_T * ControlPoints, - double n[3]); -void AddQuadricSurfaceInDataBase (int Typ, int NumCyl, double zaxis[3], - double xaxis[3], double center[3], - double radius1, double radius2, - List_T * loops); - -#endif diff --git a/Geo/ExtrudeParams.cpp b/Geo/ExtrudeParams.cpp deleted file mode 100644 index a3404cab8e48565aa3ab1de2e6d4541a6bd724d6..0000000000000000000000000000000000000000 --- a/Geo/ExtrudeParams.cpp +++ /dev/null @@ -1,95 +0,0 @@ -// $Id: ExtrudeParams.cpp,v 1.4 2001-01-08 08:05:42 geuzaine Exp $ - -#include "Gmsh.h" -#include "Geo.h" -#include "CAD.h" -#include "ExtrudeParams.h" - -void Projette (double p[3],double mat[3][3]) { - double X, Y, Z ; - - X = p[0] * mat[0][0] + p[1] * mat[0][1] + p[2] * mat[0][2]; - Y = p[0] * mat[1][0] + p[1] * mat[1][1] + p[2] * mat[1][2]; - Z = p[0] * mat[2][0] + p[1] * mat[2][1] + p[2] * mat[2][2]; - p[0] = X; - p[1] = Y; - p[2] = Z; -} - -ExtrudeParams :: ExtrudeParams (int ModeEx){ - mesh.ExtrudeMesh = false; - geo.Mode = ModeEx; - mesh.Simplexes = true; - mesh.Recombine = false; -} - - -void ExtrudeParams :: fill (int ep , double A, double B, double C, - double X, double Y, double Z, double angle){ - geo.axe[0] = A; - geo.axe[1] = B; - geo.axe[2] = C; - geo.pt[0] = X; - geo.pt[1] = Y; - geo.pt[2] = Z; - geo.angle = angle; - geo.Type = ep; -} - -void ExtrudeParams :: Extrude ( int iLayer, int iElemLayer, - double &x, double &y, double &z){ - - double dx0,dy0,dz0,dx1,dy1,dz1; - double dx,dy,dz; - if(!iLayer){ - dx0=dy0=dz0=0.0; - dx1 = mesh.hLayer[0]; - dy1 = mesh.hLayer[0]; - dz1 = mesh.hLayer[0]; - } - else{ - dx0 = mesh.hLayer[iLayer-1]; - dy0 = mesh.hLayer[iLayer-1]; - dz0 = mesh.hLayer[iLayer-1]; - dx1 = mesh.hLayer[iLayer]; - dy1 = mesh.hLayer[iLayer]; - dz1 = mesh.hLayer[iLayer]; - } - double t = (double) iElemLayer /(double)mesh.NbElmLayer[iLayer]; - if(geo.Type){ - dx = geo.axe[0]*(dx0 + t * (dx1-dx0)); - dy = geo.axe[1]*(dy0 + t * (dy1-dy0)); - dz = geo.axe[2]*(dz0 + t * (dz1-dz0)); - x+=dx;y+=dy;z+=dz; - } - else{ - double angle = geo.angle; - geo.angle = geo.angle*(dx0 + t * (dx1-dx0)); - ProtudeXYZ(x,y,z,this); - geo.angle = angle; - } -} - -void ExtrudeParams :: Rotate(double matr[3][3]){ - Projette(geo.axe,matr); - Projette(geo.pt,matr); - geo.angle = -geo.angle; -} - -void ExtrudeParams :: Extrude (double t, double &x, double &y, double &z){ - - double dx,dy,dz; - if(geo.Type){ - dx = geo.axe[0]*t; - dy = geo.axe[1]*t; - dz = geo.axe[2]*t; - x+=dx;y+=dy;z+=dz; - } - else{ - double angle = geo.angle; - geo.angle = geo.angle*t; - ProtudeXYZ(x,y,z,this); - geo.angle = angle; - } -} - diff --git a/Geo/ExtrudeParams.h b/Geo/ExtrudeParams.h deleted file mode 100644 index faabfcf88ccf8c4d38da34a5c1195957c9c024f3..0000000000000000000000000000000000000000 --- a/Geo/ExtrudeParams.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef _EXTRUDE_PARAMS_H_ -#define _EXTRUDE_PARAMS_H_ - -#define NB_LAYER_MAX 30 - -#define EXTRUDED_ENTITY 1 -#define COPIED_ENTITY 2 - -class ExtrudeParams{ - -public : - ExtrudeParams(int Mode = EXTRUDED_ENTITY); - void fill (int ep,double A, double B, double C, - double X, double Y, double Z, double angle); - void Extrude ( int iLayer, int iElemLayer, - double &dx, double &dy, double &dz); - void Extrude (double t, double &x, double &y, double &z); - void Rotate(double matr[3][3]); - struct{ - bool ExtrudeMesh; - bool Simplexes, Recombine; - int NbLayer; - int NbElmLayer [NB_LAYER_MAX]; - int ZonLayer [NB_LAYER_MAX]; - double hLayer [NB_LAYER_MAX]; - }mesh; - struct{ - int Mode; - int Type; - int Source; - double axe[3]; - double pt[3]; - double angle; - }geo; - -}; - -#endif diff --git a/Geo/Geo.cpp b/Geo/Geo.cpp deleted file mode 100644 index 74dd149932d5272aacba0ea3d1ea696bad70aa07..0000000000000000000000000000000000000000 --- a/Geo/Geo.cpp +++ /dev/null @@ -1,492 +0,0 @@ -// $Id: Geo.cpp,v 1.22 2001-08-12 14:24:50 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "CAD.h" -#include "DataBase.h" -#include "Parser.h" -#include "Context.h" - -extern Context_T CTX ; - -#define BUFFSIZE 32000 - -// Ceci, c'est horrible. Des que Motif est completement zingle, je -// vire et je refais une routine generique. - -char x_text[100] = "0.0", y_text[100] = "0.0", z_text[100] = "0.0"; -char l_text[100] = "1.0" ; -char tx_text[100] = "0.0", ty_text[100] = "0.0", tz_text[100] = "0.0"; -char attrx_text[100] = "1.0", attry_text[100] = "1.0", attrz_text[100] = "1.0" ; -char attrdec_text[100] = "2.0"; -char px_text[100] = "0.0", py_text[100] = "0.0", pz_text[100] = "0.0" ; -char angle_text[100] = "3.14159/2" ; -char ax_text[100] = "0.0", ay_text[100] = "0.0", az_text[100] = "1.0"; -char dx_text[100] = "0.0", dy_text[100] = "0.0", dz_text[100] = "0.0", df_text[100] = "1.0"; -char sa_text[100] = "0.0", sb_text[100] = "0.0", sc_text[100] = "0.0", sd_text[100] = "0.0"; -char trsf_pts_text[100] = "2", trsf_type_text[100] = "Progression 1."; -char trsf_vol_text[100] = "1"; -char char_length_text[100] = "1."; - -double evaluate_scalarfunction (char *var, double val, char *funct){ - FILE *tempf; - tempf = yyin; - - if(!(yyin = fopen(CTX.tmp_filename,"w"))){ - Msg(GERROR, "Unable to open temporary file '%s'", CTX.tmp_filename); - return 0.; - } - - /* On pose la variable = la fonction et on evalue la fonction */ - - fprintf(yyin,"%s = %g ;\n",var,val); - fprintf(yyin,"ValeurTemporaire__ = %s ;\n",funct); - fclose(yyin); - yyin = fopen(CTX.tmp_filename,"r"); - while(!feof(yyin)){ - yyparse(); - } - fclose(yyin); - Symbol TheSymbol; - TheSymbol.Name = (char*)malloc(100); - strcpy(TheSymbol.Name,"ValeurTemporaire__"); - yyin = tempf; - if (!List_Query(Symbol_L, &TheSymbol, CompareSymbols)) { - free(TheSymbol.Name); - return 0.0; - } - free(TheSymbol.Name); - return *(double*)List_Pointer_Fast(TheSymbol.val,0); -} - -void add_infile(char *text, char *fich){ - FILE *file; - - if(!(yyin = fopen(CTX.tmp_filename,"w"))){ - Msg(GERROR, "Unable to open temporary file '%s'", CTX.tmp_filename); - return; - } - if(!(file = fopen(fich,"a"))){ - Msg(GERROR, "Unable to open file '%s'", fich); - return; - } - fprintf(yyin,"%s\n",text); - Msg(STATUS1,"%s",text); - fclose(yyin); - yyin = fopen(CTX.tmp_filename,"r"); - while(!feof(yyin)){ - yyparse(); - } - fclose(yyin); - fprintf(file,"%s\n",text); - fclose(file); - AddALineInTheEditGeometryForm (text); -} - -void delet(int p1, char *fich, char *what){ - char text[BUFFSIZE]; - - sprintf(text,"Delete {\n %s{%d};\n}",what,p1); - add_infile(text,fich); -} - -void add_trsfsurf (int N, int *l, char *fich){ - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i; - sprintf(text,"Transfinite Surface {%d} = {",l[0]); - for(i=1;i<N;i++){ - if(i==1)sprintf(text2,"%d",l[i]); - else sprintf(text2,",%d",l[i]); - strcat(text,text2); - } - sprintf(text2,"};"); - strcat(text,text2); - add_infile(text,fich); -} - -void add_ellipticsurf (int N, int *l, char *fich){ - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i; - sprintf(text,"Elliptic Surface {%d} = {",l[0]); - for(i=1;i<N;i++){ - if(i==1)sprintf(text2,"%d",l[i]); - else sprintf(text2,",%d",l[i]); - strcat(text,text2); - } - sprintf(text2,"};"); - strcat(text,text2); - add_infile(text,fich); -} - -void add_charlength (int N, int *l, char *fich){ - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i; - sprintf(text,"Characteristic Length {"); - for(i=0;i<N;i++){ - if(i==0)sprintf(text2,"%d",l[i]); - else sprintf(text2,",%d",l[i]); - strcat(text,text2); - } - sprintf(text2,"} = %s;", char_length_text); - strcat(text,text2); - add_infile(text,fich); -} - -void add_recosurf (int N, int *l, char *fich){ - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i; - sprintf(text,"Recombine Surface {"); - for(i=0;i<N;i++){ - if(i==0)sprintf(text2,"%d",l[i]); - else sprintf(text2,",%d",l[i]); - strcat(text,text2); - } - sprintf(text2,"};"); - strcat(text,text2); - add_infile(text,fich); -} - - -void add_trsfline (int N, int *l, char *fich){ - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i; - sprintf(text,"Transfinite Line {"); - for(i=0;i<N;i++){ - if(!i)sprintf(text2,"%d",l[i]); - else sprintf(text2,",%d",l[i]); - strcat(text,text2); - } - if(strlen(trsf_type_text)) - sprintf(text2,"} = %s Using %s;", trsf_pts_text, trsf_type_text); - else - sprintf(text2,"} = %s;", trsf_pts_text); - strcat(text,text2); - add_infile(text,fich); -} - - -void add_param (char *par, char *value, char *fich){ - char text[BUFFSIZE]; - sprintf(text,"%s = %s;",par,value); - add_infile(text,fich); -} - -void add_point(char *fich){ - char text[BUFFSIZE]; - int ip; - - ip = NEWPOINT(); - sprintf(text,"Point(%d) = {%s,%s,%s,%s};",ip,x_text,y_text,z_text,l_text); - add_infile(text,fich); -} - -void add_attractor(char *fich, int ip, int typ){ - char text[BUFFSIZE]; - if(typ == 0) { - sprintf(text,"Attractor Point {%d} = {%s,%s,%s} = ;", - ip,attrx_text,attry_text,attrdec_text); - } - else if(typ == 1){ - sprintf(text,"Attractor Line {%d} = {%s,%s,%s};", - ip, attrx_text,attry_text,attrdec_text); - } - else if(typ == 2) { - sprintf(text,"Attractor Surface {%d} = {%s,%s,%s};", - ip,attrx_text,attry_text,attrdec_text); - } - add_infile(text,fich); -} - - -void add_line(int p1, int p2, char *fich){ - char text[BUFFSIZE]; - int iseg; - List_T *list = List_Create(2,2,sizeof(int)); - List_Add(list,&p1); - List_Add(list,&p2); - if((recognize_seg(MSH_SEGM_LINE,list,&iseg))){ - List_Delete(list); - return; - } - List_Delete(list); - - sprintf(text,"Line(%d) = {%d,%d};",NEWREG(),p1,p2); - add_infile(text,fich); -} - -void add_circ(int p1, int p2, int p3, char *fich){ - char text[BUFFSIZE]; - - sprintf(text,"Circle(%d) = {%d,%d,%d};",NEWREG(),p1,p2,p3); - add_infile(text,fich); -} - -void add_ell(int p1, int p2, int p3, int p4, char *fich){ - char text[BUFFSIZE]; - - sprintf(text,"Ellipsis(%d) = {%d,%d,%d,%d};",NEWREG(),p1,p2,p3,p4); - add_infile(text,fich); -} - -void add_spline(int N, int *p, char *fich){ - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i; - - sprintf(text,"CatmullRom(%d) = {",NEWREG()); - for(i=0;i<N;i++){ - if(i != N-1) - sprintf(text2,"%d,",p[i]); - else - sprintf(text2,"%d};",p[i]); - strcat(text,text2); - } - add_infile(text,fich); -} - -void add_bezier(int N, int *p, char *fich){ - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i; - - sprintf(text,"Bezier(%d) = {",NEWREG()); - for(i=0;i<N;i++){ - if(i != N-1) - sprintf(text2,"%d,",p[i]); - else - sprintf(text2,"%d};",p[i]); - strcat(text,text2); - } - add_infile(text,fich); -} - - -void add_bspline(int N, int *p, char *fich){ - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i; - - sprintf(text,"BSpline(%d) = {",NEWREG()); - for(i=0;i<N;i++){ - if(i != N-1) - sprintf(text2,"%d,",p[i]); - else - sprintf(text2,"%d};",p[i]); - strcat(text,text2); - } - add_infile(text,fich); -} - -void add_multline(int N, int *p, char *fich){ - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i; - - int iseg; - List_T *list = List_Create(N,2,sizeof(int)); - for(i=0;i<N;i++) - List_Add(list,&p[i]); - if((recognize_seg(MSH_SEGM_LINE,list,&iseg))){ - List_Delete(list); - return; - } - List_Delete(list); - - sprintf(text,"Line(%d) = {",NEWREG()); - for(i=0;i<N;i++){ - if(i != N-1) - sprintf(text2,"%d,",p[i]); - else - sprintf(text2,"%d};",p[i]); - strcat(text,text2); - } - add_infile(text,fich); -} - -void add_loop(List_T *list, char *fich, int *numloop){ - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i,seg; - - if((recognize_loop(list,numloop))) return; - - *numloop = NEWREG(); - sprintf(text,"Line Loop(%d) = {",NEWREG()); - for(i=0;i<List_Nbr(list);i++){ - List_Read(list,i,&seg); - if(i != List_Nbr(list)-1) - sprintf(text2,"%d,",seg); - else - sprintf(text2,"%d};",seg); - strcat(text,text2); - } - add_infile(text,fich); -} - - -void add_surf(List_T *list, char *fich, int support, int typ){ - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i,seg; - - if(typ ==1){ - sprintf(text,"Ruled Surface(%d) = {",NEWREG()); - } - else if (typ == 2){ - sprintf(text,"Plane Surface(%d) = {",NEWREG()); - } - else - { - sprintf(text,"Trimmed Surface(%d) = %d {",NEWREG(),support); - } - for(i=0;i<List_Nbr(list);i++){ - List_Read(list,i,&seg); - if(i != List_Nbr(list)-1) - sprintf(text2,"%d,",seg); - else - sprintf(text2,"%d};",seg); - strcat(text,text2); - } - add_infile(text,fich); -} - -void add_vol(List_T *list, char *fich, int *numvol){ - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i,seg; - - if((recognize_surfloop(list,numvol))) return; - - *numvol = NEWREG(); - sprintf(text,"Surface Loop(%d) = {",*numvol); - for(i=0;i<List_Nbr(list);i++){ - List_Read(list,i,&seg); - if(i != List_Nbr(list)-1) - sprintf(text2,"%d,",seg); - else - sprintf(text2,"%d};",seg); - strcat(text,text2); - } - add_infile(text,fich); -} - -void add_multvol(List_T *list, char *fich){ - char text[BUFFSIZE]; - char text2[BUFFSIZE]; - int i,seg; - - sprintf(text,"Volume(%d) = {",NEWREG()); - for(i=0;i<List_Nbr(list);i++){ - List_Read(list,i,&seg); - if(i != List_Nbr(list)-1) - sprintf(text2,"%d,",seg); - else - sprintf(text2,"%d};",seg); - strcat(text,text2); - } - add_infile(text,fich); -} - -void add_trsfvol(int N, int *l, char *fich){ - char text[BUFFSIZE], text2[BUFFSIZE]; - int i; - - sprintf(text,"Transfinite Volume{%s} = {", trsf_vol_text); - for(i=0;i<N;i++){ - if(i==0)sprintf(text2,"%d",l[i]); - else sprintf(text2,",%d",l[i]); - strcat(text,text2); - } - sprintf(text2,"};"); - strcat(text,text2); - add_infile(text,fich); -} - - -void add_physical(List_T *list, char *fich, int type, int *num){ - char text[BUFFSIZE], text2[BUFFSIZE]; - int i, elementary_entity; - - *num = NEWREG(); - switch(type){ - case ENT_POINT : sprintf(text, "Physical Point(%d) = {", *num); break; - case ENT_LINE : sprintf(text, "Physical Line(%d) = {", *num); break; - case ENT_SURFACE : sprintf(text, "Physical Surface(%d) = {", *num); break; - case ENT_VOLUME : sprintf(text, "Physical Volume(%d) = {", *num); break; - } - - for(i=0; i<List_Nbr(list); i++){ - List_Read(list, i, &elementary_entity); - if(i != List_Nbr(list)-1) - sprintf(text2, "%d,", elementary_entity); - else - sprintf(text2, "%d};", elementary_entity); - strcat(text, text2); - } - add_infile(text, fich); -} - -void translate(int add, int s, char *fich, char *what){ - char text[BUFFSIZE]; - - if(add) - sprintf(text,"Translate {%s,%s,%s} {\n Duplicata { %s{%d}; }\n}", - tx_text,ty_text,tz_text,what,s); - else - sprintf(text,"Translate {%s,%s,%s} {\n %s{%d};\n}", - tx_text,ty_text,tz_text,what,s); - add_infile(text,fich); -} -void rotate(int add, int s, char *fich, char *quoi){ - char text[BUFFSIZE]; - - if(add) - sprintf(text,"Rotate { {%s,%s,%s},{%s,%s,%s},%s } {\n Duplicata { %s{%d}; }\n}", - ax_text,ay_text,az_text,px_text,py_text,pz_text,angle_text, quoi,s); - else - sprintf(text,"Rotate { {%s,%s,%s},{%s,%s,%s},%s } {\n %s{%d};\n }", - ax_text,ay_text,az_text,px_text,py_text,pz_text,angle_text, quoi,s); - add_infile(text,fich); -} -void dilate(int add, int s, char *fich, char *quoi){ - char text[BUFFSIZE]; - - if(add) - sprintf(text,"Dilate { {%s,%s,%s},%s } {\n Duplicata { %s{%d}; }\n}", - dx_text,dy_text,dz_text,df_text, quoi,s); - else - sprintf(text,"Dilate { {%s,%s,%s},%s } {\n %s{%d};\n }", - dx_text,dy_text,dz_text,df_text, quoi,s); - add_infile(text,fich); -} -void symmetry(int add, int s, char *fich, char *quoi){ - char text[BUFFSIZE]; - - if(add) - sprintf(text,"Symmetry { %s,%s,%s,%s } {\n Duplicata { %s{%d}; }\n}", - sa_text,sb_text,sc_text,sd_text, quoi,s); - else - sprintf(text,"Symmetry { %s,%s,%s,%s } {\n %s{%d};\n }", - sa_text,sb_text,sc_text,sd_text, quoi,s); - add_infile(text,fich); - -} -void extrude(int s, char *fich, char *what){ - char text[BUFFSIZE]; - - sprintf(text,"Extrude %s {%d, {%s,%s,%s}};",what,s,tx_text,ty_text,tz_text); - add_infile(text,fich); -} -void protude(int s, char *fich, char *what){ - char text[BUFFSIZE]; - - sprintf(text,"Extrude %s {%d, {%s,%s,%s}, {%s,%s,%s}, %s};",what,s,ax_text,ay_text, - az_text,px_text,py_text,pz_text,angle_text); - add_infile(text,fich); -} diff --git a/Geo/Geo.h b/Geo/Geo.h deleted file mode 100644 index cb421bc249d0cd46c9523664648066c45129ca6e..0000000000000000000000000000000000000000 --- a/Geo/Geo.h +++ /dev/null @@ -1,121 +0,0 @@ -#ifndef _GEO_H_ -#define _GEO_H_ - -#define ELEMENTARY 1 -#define PHYSICAL 2 - -#define INFILE 1 -#define INSTRING 2 -#define STRINGMAX 1024 - -#define NMAX_SPLINE 100 - -#define ENT_POINT 1 -#define ENT_LINE 2 -#define ENT_SURFACE 3 -#define ENT_VOLUME 4 - -#define MSH_TRSF_LINE 1 -#define MSH_TRSF_SURFACE 2 -#define MSH_TRSF_VOLUME 3 - -#define MSH_ASSOCIATION 6 - -#define MSH_RECOMBINE 5 - -#define MSH_POINT 1 - -#define MSH_SEGM_LINE 2 -#define MSH_SEGM_SPLN 3 -#define MSH_SEGM_CIRC 4 -#define MSH_SEGM_CIRC_INV 5 -#define MSH_SEGM_ELLI 6 -#define MSH_SEGM_ELLI_INV 7 -#define MSH_SEGM_LOOP 8 -#define MSH_SEGM_PARAMETRIC 888 -#define MSH_SEGM_MERGEDSEGS 889 - -#define MSH_SURF_PLAN 9 -#define MSH_SURF_REGL 10 -#define MSH_SURF_TRIC 11 -#define MSH_SURF_NURBS 12 -#define MSH_SURF_LOOP 13 -#define MSH_SURF_CYLNDR 1299 -#define MSH_SURF_TORUS 1399 -#define MSH_SURF_CONE 1499 -#define MSH_SURF_TRIMMED 1599 -#define MSH_SURF_STL 1699 -#define MSH_SURF_DISCRETE 1799 - -#define MSH_VOLUME 14 -#define MSH_SEGM_BSPLN 15 -#define MSH_SEGM_URBS 16 -#define MSH_SEGM_NURBS 17 -#define MSH_SEGM_BEZIER 18 -#define MSH_SEGM_DISCRETE 19 - -#define MSH_PHYSICAL_POINT 300 -#define MSH_PHYSICAL_LINE 310 -#define MSH_PHYSICAL_SURFACE 320 -#define MSH_PHYSICAL_VOLUME 330 - -typedef struct { - int Type; - int Num; - union { - int I; - double F; - double V[4]; - List_T *ListDouble; - } obj; -} Shape; - -// static strings for parser interaction -extern char x_text[100], y_text[100], z_text[100]; -extern char l_text[100]; -extern char tx_text[100], ty_text[100], tz_text[100]; -extern char attrx_text[100], attry_text[100], attrz_text[100]; -extern char attrdec_text[100]; -extern char px_text[100], py_text[100], pz_text[100]; -extern char angle_text[100] ; -extern char ax_text[100], ay_text[100], az_text[100]; -extern char dx_text[100], dy_text[100], dz_text[100], df_text[100]; -extern char sa_text[100], sb_text[100], sc_text[100], sd_text[100]; -extern char nb_pts[100], mode_value[100]; -extern char trsf_pts_text[100], trsf_type_text[100]; -extern char trsf_vol_text[100]; -extern char char_length_text[100]; - -double evaluate_scalarfunction (char *var, double val, char *funct); - -void delet(int p1, char *fich, char *what); -void add_infile(char *text, char *fich); -void add_trsfsurf (int N, int *l, char *fich); -void add_trsfvol (int N, int *l, char *fich); -void add_ellipticsurf (int N, int *l, char *fich); -void add_charlength (int N, int *l, char *fich); -void add_recosurf (int N, int *l, char *fich); -void add_trsfline (int N, int *l, char *fich); -void add_param (char *par, char *value, char *fich); -void add_point(char *fich); -void add_attractor(char *fich, int ip, int typ); -void add_line(int p1, int p2, char *fich); -void add_circ(int p1, int p2, int p3, char *fich); -void add_ell(int p1, int p2, int p3, int p4, char *fich); -void add_spline(int N, int *p, char *fich); -void add_bezier(int N, int *p, char *fich); -void add_bspline(int N, int *p, char *fich); -void add_multline(int N, int *p, char *fich); -void add_loop(List_T *list, char *fich, int *numloop); -void add_surf(List_T *list, char *fich, int support, int typ); -void add_vol(List_T *list, char *fich, int *numvol); -void add_multvol(List_T *list, char *fich); -void add_physical(List_T *list, char *fich, int type, int *num); -void translate(int add, int s, char *fich, char*what); -void rotate(int add, int s, char *fich, char *what); -void dilate(int add, int s, char *fich, char *what); -void symmetry(int add, int s, char *fich, char *what); -void extrude(int s, char *fich, char *what); -void protude(int s, char *fich, char *what); - -#endif diff --git a/Geo/Makefile b/Geo/Makefile deleted file mode 100644 index 460debceade2b8cff2cef73c187add3b5871f8c2..0000000000000000000000000000000000000000 --- a/Geo/Makefile +++ /dev/null @@ -1,106 +0,0 @@ -# $Id: Makefile,v 1.23 2001-08-11 23:32:20 geuzaine Exp $ -# -# Makefile for "libGeo.a" -# - -.IGNORE: - -CC = c++ -AR = ar ruvs -RANLIB = ranlib -RM = rm - -LIB = ../lib/libGeo.a -INCLUDE = -I../Common -I../DataStr -I../Geo -I../Mesh -I../Parser\ - -I../Motif -I../Fltk - -C_FLAGS = -g -Wall -OS_FLAGS = -VERSION_FLAGS = - -RMFLAGS = -f -CFLAGS = $(C_FLAGS) $(OS_FLAGS) $(VERSION_FLAGS) $(INCLUDE) - -SRC = CAD.cpp \ - DataBase.cpp \ - MinMax.cpp \ - ExtrudeParams.cpp \ - Geo.cpp \ - StepGeomDatabase.cpp \ - Verif.cpp \ - Visibility.cpp \ - Print_Geo.cpp - -OBJ = $(SRC:.cpp=.o) - -.SUFFIXES: .o .cpp - -$(LIB): $(OBJ) - $(AR) $(LIB) $(OBJ) - $(RANLIB) $(LIB) - -.cpp.o: - $(CC) $(CFLAGS) -c $< - -clean: - $(RM) $(RMFLAGS) *.o - -lint: - $(LINT) $(CFLAGS) $(SRC) - -depend: - (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ - $(CC) -MM $(CFLAGS) ${SRC} \ - ) >Makefile.new - cp Makefile Makefile.bak - cp Makefile.new Makefile - $(RM) $(RMFLAGS) Makefile.new - -# DO NOT DELETE THIS LINE -CAD.o: CAD.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h Geo.h \ - ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h DataBase.h \ - ../Mesh/Interpolation.h ../Mesh/Create.h CAD.h ../Common/Context.h -DataBase.o: DataBase.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h Geo.h \ - ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h CAD.h ../Mesh/Create.h \ - Verif.h ../Common/Context.h -MinMax.o: MinMax.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h \ - ../Mesh/Vertex.h ../Common/Context.h -ExtrudeParams.o: ExtrudeParams.cpp ../Common/Gmsh.h \ - ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \ - ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h Geo.h CAD.h \ - ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h ExtrudeParams.h -Geo.o: Geo.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h Geo.h CAD.h \ - ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h DataBase.h ../Parser/Parser.h \ - ../Common/Context.h -StepGeomDatabase.o: StepGeomDatabase.cpp ../Common/Gmsh.h \ - ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \ - ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ - ../Common/Numeric.h Geo.h StepGeomDatabase.h DataBase.h \ - ../Common/Context.h -Verif.o: Verif.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h Geo.h CAD.h ../Mesh/Mesh.h \ - ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h DataBase.h -Visibility.o: Visibility.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h Geo.h CAD.h ../Mesh/Mesh.h \ - ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h DataBase.h -Print_Geo.o: Print_Geo.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h Geo.h ../Mesh/Mesh.h \ - ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h CAD.h ../Common/Context.h diff --git a/Geo/MinMax.cpp b/Geo/MinMax.cpp deleted file mode 100644 index a66d23f3e4a69a077ba8630f0148bce9de5701a7..0000000000000000000000000000000000000000 --- a/Geo/MinMax.cpp +++ /dev/null @@ -1,114 +0,0 @@ -// $Id: MinMax.cpp,v 1.6 2001-08-11 23:28:31 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Vertex.h" -#include "Context.h" - -extern Context_T CTX ; - -/* ------------------------------------------------------------------------ */ -/* m i n m a x */ -/* ------------------------------------------------------------------------ */ - -void minmax(void *a , void*b){ - Vertex *v; - v = *(Vertex**)a; - CTX.min[0] = (CTX.min[0] < v->Pos.X) ? CTX.min[0] : v->Pos.X; - CTX.max[0] = (CTX.max[0] > v->Pos.X) ? CTX.max[0] : v->Pos.X; - CTX.min[1] = (CTX.min[1] < v->Pos.Y) ? CTX.min[1] : v->Pos.Y; - CTX.max[1] = (CTX.max[1] > v->Pos.Y) ? CTX.max[1] : v->Pos.Y; - CTX.min[2] = (CTX.min[2] < v->Pos.Z) ? CTX.min[2] : v->Pos.Z; - CTX.max[2] = (CTX.max[2] > v->Pos.Z) ? CTX.max[2] : v->Pos.Z; -} - -void CalculateMinMax (Tree_T *t, double *bbox){ - Vertex *v; - double frac; - int exp; - - if(!Tree_Nbr(t)){ - if(!bbox || (bbox[0] > bbox[1])){ //the bbox is wrong - CTX.min[0] = CTX.min[1] = CTX.min[2] = -1.; - CTX.max[0] = CTX.max[1] = CTX.max[2] = 1.; - CTX.range[0] = CTX.range[1] = CTX.range[2] = 0.; - CTX.lc = CTX.lc_middle = 1.; - return; - } - else{ - CTX.min[0] = bbox[0] ; CTX.max[0] = bbox[1] ; - CTX.min[1] = bbox[2] ; CTX.max[1] = bbox[3] ; - CTX.min[2] = bbox[4] ; CTX.max[2] = bbox[5] ; - } - } - else{ - Tree_Right(t,&v); - CTX.min[0] = CTX.max[0] = v->Pos.X; - CTX.min[1] = CTX.max[1] = v->Pos.Y; - CTX.min[2] = CTX.max[2] = v->Pos.Z; - Tree_Action(t,minmax); - } - - CTX.range[0] = CTX.max[0]-CTX.min[0]; - CTX.range[1] = CTX.max[1]-CTX.min[1]; - CTX.range[2] = CTX.max[2]-CTX.min[2]; - - if(CTX.range[0] == 0. && CTX.range[1] == 0. && CTX.range[2] == 0.){ - CTX.min[0] -= 1. ; - CTX.min[1] -= 1. ; - CTX.max[0] += 1. ; - CTX.max[1] += 1. ; - CTX.lc = 1.; - CTX.lc_middle = 0.; - } - else if(CTX.range[0] == 0. && CTX.range[1] == 0.){ - CTX.lc = CTX.lc_middle = CTX.range[2]; - CTX.min[0] -= CTX.lc; - CTX.min[1] -= CTX.lc; - CTX.max[0] += CTX.lc; - CTX.max[1] += CTX.lc; - } - else if(CTX.range[0] == 0. && CTX.range[2] == 0.){ - CTX.lc = CTX.lc_middle = CTX.range[1]; - CTX.min[0] -= CTX.lc; - CTX.max[0] += CTX.lc; - } - else if(CTX.range[1] == 0. && CTX.range[2] == 0.){ - CTX.lc = CTX.lc_middle = CTX.range[0]; - CTX.min[1] -= CTX.lc; - CTX.max[1] += CTX.lc; - } - else if(CTX.range[0] == 0.){ - CTX.lc = sqrt(DSQR(CTX.range[1])+DSQR(CTX.range[2])); - CTX.lc_middle = DMIN(CTX.range[1], CTX.range[2]); - CTX.min[0] -= CTX.lc; - CTX.max[0] += CTX.lc; - } - else if(CTX.range[1] == 0.){ - CTX.lc = sqrt(DSQR(CTX.range[0])+DSQR(CTX.range[2])); - CTX.lc_middle = DMIN(CTX.range[0], CTX.range[2]); - CTX.min[1] -= CTX.lc; - CTX.max[1] += CTX.lc; - } - else if(CTX.range[2] == 0.){ - CTX.lc = sqrt(DSQR(CTX.range[0])+DSQR(CTX.range[1])); - CTX.lc_middle = DMIN(CTX.range[0], CTX.range[1]); - } - else{ - CTX.lc = sqrt(DSQR(CTX.range[0])+DSQR(CTX.range[1])+DSQR(CTX.range[2])); - if((CTX.range[1] <= CTX.range[0] && CTX.range[0] <= CTX.range[2]) || - (CTX.range[2] <= CTX.range[0] && CTX.range[0] <= CTX.range[1])) - CTX.lc_middle = CTX.range[0]; - else if((CTX.range[0] <= CTX.range[1] && CTX.range[1] <= CTX.range[2]) || - (CTX.range[2] <= CTX.range[1] && CTX.range[1] <= CTX.range[0])) - CTX.lc_middle = CTX.range[1]; - else - CTX.lc_middle = CTX.range[2]; - } - - /* CTX.lc_order : CTX.lc == f * 10^CTX.lc_order with -1<f<1 */ - - frac = frexp(CTX.lc, &exp); - CTX.lc_order = (int)floor(log10(ldexp(frac,exp))); -} - diff --git a/Geo/MinMax.h b/Geo/MinMax.h deleted file mode 100644 index 0cf17cf830aec529d3fc16c788795850f26116de..0000000000000000000000000000000000000000 --- a/Geo/MinMax.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _MINMAX_H_ -#define _MINMAX_H_ - -void CalculateMinMax (Tree_T *t, double *bbox); - -#endif diff --git a/Geo/Print_Geo.cpp b/Geo/Print_Geo.cpp deleted file mode 100644 index e126fa39668ca30a8f8fffb9c45f9d3d685724e3..0000000000000000000000000000000000000000 --- a/Geo/Print_Geo.cpp +++ /dev/null @@ -1,250 +0,0 @@ -// $Id: Print_Geo.cpp,v 1.17 2001-08-13 07:22:15 geuzaine Exp $ - -#include "Gmsh.h" -#include "Geo.h" -#include "Mesh.h" -#include "Vertex.h" -#include "CAD.h" -#include "Context.h" - -FILE *FOUT; - -void Print_Point(void *a, void *b){ - Vertex *v; - v = *(Vertex**)a; - fprintf(FOUT, "Point(%d) = {%g, %g, %g, %g};\n", - v->Num,v->Pos.X,v->Pos.Y,v->Pos.Z,v->lc); -} - -void Print_Nurbs (Curve *c, FILE *f){ - int i,j; - Vertex *v; - - fprintf(f,"Nurbs (%d) = {",c->Num); - for(i=0;i<List_Nbr(c->Control_Points);i++){ - List_Read(c->Control_Points,i,&v); - if(!i) - fprintf(FOUT,"%d",v->Num); - else - fprintf(FOUT,", %d",v->Num); - if(i%8 == 7 && i!=List_Nbr(c->Control_Points)-1)fprintf(FOUT,"\n"); - } - fprintf(f,"}\n"); - fprintf(f,"Knots {"); - for(j=0;j<List_Nbr(c->Control_Points)+c->degre+1;j++){ - if(!j)fprintf(f,"%g",c->k[j]); - else fprintf(f,", %g",c->k[j]); - if(j%5 == 4 && j!=List_Nbr(c->Control_Points)+c->degre)fprintf(FOUT,"\n"); - } - fprintf(f,"}"); - fprintf(f,"Order %d;\n\n",c->degre); -} - -void Print_Curve(void *a, void *b){ - Curve *c; - Vertex *v; - int i; - c = *(Curve**)a; - - if(c->Num < 0)return; - - switch(c->Typ){ - case MSH_SEGM_LINE: - fprintf(FOUT,"Line (%d) = ",c->Num); - break; - case MSH_SEGM_CIRC: - case MSH_SEGM_CIRC_INV: - fprintf(FOUT,"Circle (%d) = ",c->Num); - break; - case MSH_SEGM_ELLI: - case MSH_SEGM_ELLI_INV: - fprintf(FOUT,"Ellipsis (%d) = ",c->Num); - break; - case MSH_SEGM_NURBS: - Print_Nurbs(c,FOUT); - return; - case MSH_SEGM_SPLN: - fprintf(FOUT,"CatmullRom (%d) = ",c->Num); - break; - default: - Msg(GERROR, "Unknown Curve type %d", c->Typ); - return; - } - - for(i=0;i<List_Nbr(c->Control_Points);i++){ - List_Read(c->Control_Points,i,&v); - if(i) - fprintf(FOUT,", %d",v->Num); - else - fprintf(FOUT,"{%d",v->Num); - if(i%6 == 7)fprintf(FOUT,"\n"); - } - - switch(c->Typ){ - case MSH_SEGM_CIRC: - case MSH_SEGM_CIRC_INV: - case MSH_SEGM_ELLI: - case MSH_SEGM_ELLI_INV: - fprintf(FOUT,"} Plane{%g, %g, %g};\n", - c->Circle.n[0],c->Circle.n[1],c->Circle.n[2]); - break; - default : - fprintf(FOUT,"};\n"); - break; - } - -} - -void Print_Surface(void *a, void *b){ - Curve *c; - Surface *s; - Vertex *v; - int i,j; - s = *(Surface**)a; - - int NUMLOOP = s->Num + 1000000; - - if(s->Typ != MSH_SURF_NURBS){ - fprintf(FOUT,"Line Loop (%d) = ",NUMLOOP); - - for(i=0;i<List_Nbr(s->Generatrices);i++){ - List_Read(s->Generatrices,i,&c); - if(i) - fprintf(FOUT,", %d",c->Num); - else - fprintf(FOUT,"{%d",c->Num); - } - fprintf(FOUT,"};\n"); - } - - switch(s->Typ){ - case MSH_SURF_REGL: - case MSH_SURF_TRIC: - fprintf(FOUT,"Ruled Surface (%d) = {%d};\n",s->Num,NUMLOOP); - break; - case MSH_SURF_PLAN: - fprintf(FOUT,"Plane Surface (%d) = {%d};\n",s->Num,NUMLOOP); - break; - case MSH_SURF_TRIMMED: - fprintf(FOUT,"Trimmed Surface (%d) = %d {%d};\n",s->Num,s->Support->Num,NUMLOOP); - break; - case MSH_SURF_NURBS: - fprintf(FOUT,"Nurbs Surface (%d) = {\n",s->Num); - for(i=0;i<s->Nv;i++){ - fprintf(FOUT,"\t\t{"); - for(j=0;j<s->Nu;j++){ - List_Read(s->Control_Points,j+s->Nu *i,&v); - if(!j) - fprintf(FOUT,"%d",v->Num); - else - fprintf(FOUT,", %d",v->Num); - } - if(i!=s->Nv-1) - fprintf(FOUT,"},\n"); - else - fprintf(FOUT,"}}\n"); - } - fprintf(FOUT,"\t\tKnots\n\t\t{"); - for(j=0;j<s->Nu+s->OrderU+1;j++){ - if(!j)fprintf(FOUT,"%g",s->ku[j]); - else fprintf(FOUT,", %g",s->ku[j]); - if(j%5 == 4 && j!=s->Nu + s->OrderU)fprintf(FOUT,"\n\t\t"); - } - fprintf(FOUT,"}\n\t\t{"); - for(j=0;j<s->Nv+s->OrderV+1;j++){ - if(!j)fprintf(FOUT,"%g",s->kv[j]); - else fprintf(FOUT,", %g",s->kv[j]); - if(j%5 == 4 && j!=s->Nv + s->OrderV)fprintf(FOUT,"\n\t\t"); - } - fprintf(FOUT,"}\n\t\tOrder %d %d;\n\n",s->OrderU,s->OrderV); - break; - } -} - -void Print_Volume(void *a, void *b){ - Surface *s; - Volume *vol; - int i; - vol = *(Volume**)a; - - int NUMLOOP = vol->Num + 1000000; - - if(!List_Nbr(vol->Surfaces)) return; - - fprintf(FOUT,"Surface Loop (%d) = ",NUMLOOP); - - for(i=0;i<List_Nbr(vol->Surfaces);i++){ - List_Read(vol->Surfaces,i,&s); - if(i) - fprintf(FOUT,", %d",s->Num); - else - fprintf(FOUT,"{%d",s->Num); - } - fprintf(FOUT,"};\n"); - - switch(vol->Typ){ - case MSH_VOLUME: - fprintf(FOUT,"Volume (%d) = {%d};\n",vol->Num,NUMLOOP); - break; - } -} - -void Print_PhysicalGroups(void *a, void *b){ - PhysicalGroup *pg ; - int i, j; - - pg = *(PhysicalGroup**)a; - - switch(pg->Typ){ - case MSH_PHYSICAL_POINT : - fprintf(FOUT,"Physical Point (%d) = ",pg->Num); - break; - case MSH_PHYSICAL_LINE : - fprintf(FOUT,"Physical Line (%d) = ",pg->Num); - break; - case MSH_PHYSICAL_SURFACE : - fprintf(FOUT,"Physical Surface (%d) = ",pg->Num); - break; - case MSH_PHYSICAL_VOLUME : - fprintf(FOUT,"Physical Volume (%d) = ",pg->Num); - break; - } - - for(i=0;i<List_Nbr(pg->Entities);i++){ - List_Read(pg->Entities,i,&j); - if(i) - fprintf(FOUT,", %d",j); - else - fprintf(FOUT,"{%d",j); - } - fprintf(FOUT,"};\n"); - -} - -void Print_Geo(Mesh *M, char *filename){ - Coherence_PS(); - - if(filename){ - FOUT = fopen(filename,"w"); - if(!FOUT){ - Msg(WARNING, "Unable to open file '%s'", filename); - return; - } - } - else - FOUT = stdout; - - Tree_Action(M->Points,Print_Point); - Tree_Action(M->Curves,Print_Curve); - Tree_Action(M->Surfaces,Print_Surface); - Tree_Action(M->Volumes,Print_Volume); - List_Action(M->PhysicalGroups,Print_PhysicalGroups); - - if(filename){ - Msg(INFO, "Geo output complete '%s'", filename); - Msg(STATUS2, "Wrote '%s'", filename); - fclose(FOUT); - } - -} - diff --git a/Geo/StepGeomDatabase.cpp b/Geo/StepGeomDatabase.cpp deleted file mode 100644 index 913f4c49ea16ca5c328477620b38398f160deeb0..0000000000000000000000000000000000000000 --- a/Geo/StepGeomDatabase.cpp +++ /dev/null @@ -1,672 +0,0 @@ -// $Id: StepGeomDatabase.cpp,v 1.6 2001-08-11 23:28:31 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "StepGeomDatabase.h" -#include "DataBase.h" -#include "Context.h" - -extern Context_T CTX; - -static Step_Solid_BRep_t *BREP=NULL; - - -Step_Solid_BRep_t *Create_Step_Solid_BRep(void){ - Step_Solid_BRep_t *NEWBREP; - NEWBREP = (Step_Solid_BRep_t *)Malloc(sizeof(Step_Solid_BRep_t)); - NEWBREP->AllDirections = List_Create(10,10,sizeof(Step_Direction_t)); - NEWBREP->AllVectors = List_Create(10,10,sizeof(Step_Vector_t)); - NEWBREP->AllCartesian_Points = List_Create(10,10,sizeof(Step_Cartesian_Point_t)); - NEWBREP->AllVertex_Points = List_Create(10,10,sizeof(Step_Vertex_Point_t)); - NEWBREP->AllCurves = List_Create(10,10,sizeof(Step_Curve_t)); - NEWBREP->AllSurfaces = List_Create(10,10,sizeof(Step_Surface_t)); - NEWBREP->AllClosed_Shells = List_Create(10,10,sizeof(Step_Closed_Shell_t)); - NEWBREP->AllFaces_Outer_Bound = List_Create(10,10,sizeof(Step_Face_Outer_Bound_t)); - NEWBREP->AllOriented_Edges = List_Create(10,10,sizeof(Step_Oriented_Edge_t)); - NEWBREP->AllEdge_Loops = List_Create(10,10,sizeof(Step_Edge_Loop_t)); - NEWBREP->AllEdge_Curves = List_Create(10,10,sizeof(Step_Edge_Curve_t)); - NEWBREP->AllAdvanced_Faces = List_Create(10,10,sizeof(Step_Advanced_Face_t)); - NEWBREP->AllAxis2_Placement3D = List_Create(10,10,sizeof(Step_Axis2_Placement3D_t)); - NEWBREP->AllClosed_Shells = List_Create(10,10,sizeof(Step_Closed_Shell_t)); - BREP = NEWBREP; - return NEWBREP; -} - -/*---------------- Directions --------------------------------------------*/ - -void Add_Direction (int Num , char *name , double x, double y, double z ){ - Step_Direction_t Dir; - if(!BREP)return; - Dir.Pos.X = x; - Dir.Pos.Y = y; - Dir.Pos.Z = z; - Dir.Num = Num; - List_Add(BREP->AllDirections,&Dir); -} - -static int comparedir (const void *a, const void *b){ - return (((Step_Direction_t *)a)->Num - - ((Step_Direction_t *)b)->Num); -} - -Step_Direction_t *Get_Direction (int Num){ - Step_Direction_t Dir; - if(!BREP)return NULL; - Dir.Num = Num; - return (Step_Direction_t*)List_PQuery ( BREP->AllDirections,&Dir, comparedir ); -} - -/*---------------- Axis2_Placement3D--------------------------------------*/ - -void Add_Axis2_Placement3D (int Num, int dir1, int dir2, int ver){ - Step_Axis2_Placement3D_t Axe; - if(!BREP)return; - Axe.Num = Num; - Axe.Step_Cartesian_Point = ver; - Axe.Step_Direction1 = dir1; - Axe.Step_Direction2 = dir2; - List_Add(BREP->AllAxis2_Placement3D,&Axe); -} - -static int compareax (const void *a, const void *b){ - return (((Step_Axis2_Placement3D_t *)a)->Num - - ((Step_Axis2_Placement3D_t *)b)->Num); -} - -Step_Axis2_Placement3D_t *Get_Axis2_Placement3D (int Num){ - Step_Axis2_Placement3D_t Axe; - if(!BREP)return NULL; - Axe.Num = Num; - return (Step_Axis2_Placement3D_t*)List_PQuery ( BREP->AllAxis2_Placement3D, - &Axe, compareax ); -} - -/*---------------- Vectors -----------------------------------------------*/ - -void Add_Vector (int Num , char *name , int Dir, double l ){ - Step_Vector_t Vec; - if(!BREP)return; - Vec.Lenght = l; - Vec.Step_Direction = Dir; - Vec.Num = Num; - List_Add(BREP->AllVectors,&Vec); -} - -static int comparevec (const void *a, const void *b){ - return (((Step_Vector_t *)a)->Num - - ((Step_Vector_t *)b)->Num); -} - -Step_Vector_t *Get_Vector (int Num){ - Step_Vector_t Vec; - if(!BREP)return NULL; - Vec.Num = Num; - return (Step_Vector_t*)List_PQuery ( BREP->AllVectors,&Vec, comparevec ); -} - -/*---------------- Cartesian_Points --------------------------------------*/ - -void Add_Cartesian_Point (int Num , char *name , double x, double y, double z){ - Step_Cartesian_Point_t CP; - - if(!BREP){ - return; - } - CP.Pos.X = x; - CP.Pos.Y = y; - CP.Pos.Z = z; - CP.Num = Num; - - List_Add(BREP->AllCartesian_Points,&CP); -} -static int comparecp (const void *a, const void *b){ - return (((Step_Cartesian_Point_t *)a)->Num - - ((Step_Cartesian_Point_t *)b)->Num); -} -Step_Cartesian_Point_t *Get_Cartesian_Point (int Num){ - Step_Cartesian_Point_t CP; - if(!BREP)return NULL; - CP.Num = Num; - return (Step_Cartesian_Point_t*)List_PQuery ( BREP->AllCartesian_Points,&CP, comparecp ); -} - -/*---------------- Vertex_Points -----------------------------------------*/ - -void Add_Vertex_Point (int Num , char *name, int cp){ - Step_Vertex_Point_t VP; - if(!BREP)return; - VP.Cartesian_Point = cp; - VP.Num = Num; - List_Add(BREP->AllVertex_Points,&VP); -} -static int comparevp (const void *a, const void *b){ - return (((Step_Vertex_Point_t *)a)->Num - - ((Step_Vertex_Point_t *)b)->Num); -} -Step_Vertex_Point_t *Get_Vertex_Point (int Num){ - Step_Vertex_Point_t VP; - if(!BREP)return NULL; - VP.Num = Num; - return (Step_Vertex_Point_t*)List_PQuery ( BREP->AllVertex_Points,&VP, comparevp ); -} - - -/*---------------- Curves ------------------------------------------------*/ - -void Add_Line (int Num, char *name , int begin, int dir){ - Step_Curve_t Curve; - if(!BREP)return; - Curve.Num = Num; - Curve.Typ = STEP_LINE; - Curve.Curve.Line.Step_Cartesian_Point = begin; - Curve.Curve.Line.Step_Vector = dir; - List_Add(BREP->AllCurves,&Curve); -} - -void Add_Circle (int Num, char *name , int axis, double radius){ - Step_Curve_t Curve; - if(!BREP)return; - Curve.Num = Num; - Curve.Typ = STEP_CIRC; - Curve.Curve.Circle.Radius1 = radius; - Curve.Curve.Circle.Radius2 = radius; - Curve.Curve.Circle.Step_Axis2_Placement3D = axis; - List_Add(BREP->AllCurves,&Curve); -} - -void Add_Ellipsis (int Num, char *name , int axis, double radius1, double radius2){ - Step_Curve_t Curve; - if(!BREP)return; - Curve.Num = Num; - Curve.Typ = STEP_ELLP; - Curve.Curve.Circle.Radius1 = radius1; - Curve.Curve.Circle.Radius2 = radius2; - Curve.Curve.Circle.Step_Axis2_Placement3D = axis; - List_Add(BREP->AllCurves,&Curve); -} - -void Add_BSpline_Curve_With_Knots (int Num, char *name, int Order, List_T *lcp, - List_T *multk, List_T *knots, double udeb, double uend){ - Step_Curve_t Curve; - int i,j,mult; - double d; - - if(!BREP)return; - Curve.Num = Num; - Curve.Typ = STEP_BSPL; - Curve.Curve.BSpline.ListOf_Knots = List_Create (List_Nbr(lcp) + Order + 1 - ,1,sizeof(double)); - /* Adding knots with their multiplicity */ - for(i=0;i<List_Nbr(multk);i++){ - List_Read(multk,i,&d); - mult = (int)d; - List_Read(knots,i,&d); - for(j=0;j<mult;j++){ - List_Add(Curve.Curve.BSpline.ListOf_Knots,&d); - } - } - Curve.Curve.BSpline.ListOf_Cartesian_Points = List_Create(List_Nbr(lcp),1,sizeof(int)); - for(i=0;i<List_Nbr(lcp);i++){ - List_Read(lcp,i,&d); - j = (int)d; - List_Add(Curve.Curve.BSpline.ListOf_Cartesian_Points,&j); - } - Curve.Curve.BSpline.Order = Order; - Curve.Curve.BSpline.Ubeg = udeb; - Curve.Curve.BSpline.Uend = uend; - List_Add(BREP->AllCurves,&Curve); -} - -static int comparecur (const void *a, const void *b){ - return (((Step_Curve_t *)a)->Num - - ((Step_Curve_t *)b)->Num); -} -Step_Curve_t *Get_Curve (int Num){ - Step_Curve_t C; - if(!BREP)return NULL; - C.Num = Num; - return (Step_Curve_t*)List_PQuery ( BREP->AllCurves,&C, comparecur ); -} - -/*---------------- Edge_Curves -------------------------------------------*/ - -void Add_Edge_Curve (int Num, char *name , int beg, int end, int curve ){ - Step_Edge_Curve_t EC; - if(!BREP)return; - EC.Num = Num; - EC.Step_Vertex_Point_Begin = beg; - EC.Step_Vertex_Point_End = end; - EC.Step_Curve = curve; - List_Add(BREP->AllEdge_Curves,&EC); -} - -static int compareec (const void *a, const void *b){ - return (((Step_Edge_Curve_t *)a)->Num - - ((Step_Edge_Curve_t *)b)->Num); -} -Step_Edge_Curve_t *Get_Edge_Curve (int Num){ - Step_Edge_Curve_t EC; - if(!BREP)return NULL; - EC.Num = Num; - return (Step_Edge_Curve_t*)List_PQuery ( BREP->AllEdge_Curves,&EC, compareec ); -} - -/*---------------- Oriented_Edges ----------------------------------------*/ - -void Add_Oriented_Edge (int Num, char *name , int ec, bool dir ){ - Step_Oriented_Edge_t OE; - if(!BREP)return; - OE.Num = Num; - OE.Step_Edge_Curve = ec; - OE.dir = dir; - List_Add(BREP->AllOriented_Edges,&OE); -} - -static int compareoe (const void *a, const void *b){ - return (((Step_Oriented_Edge_t *)a)->Num - - ((Step_Oriented_Edge_t *)b)->Num); -} -Step_Oriented_Edge_t *Get_Oriented_Edge (int Num){ - Step_Oriented_Edge_t OE; - if(!BREP)return NULL; - OE.Num = Num; - return (Step_Oriented_Edge_t*)List_PQuery ( BREP->AllOriented_Edges,&OE, compareoe ); -} - -/*---------------- Edge_Loops --------------------------------------------*/ - -void Add_Edge_Loop (int Num, char *name , List_T *list ){ - Step_Edge_Loop_t EL; - if(!BREP)return; - EL.Num = Num; - EL.ListOf_Step_Oriented_Edge = list; - List_Add(BREP->AllEdge_Loops,&EL); -} - -static int compareel (const void *a, const void *b){ - return (((Step_Edge_Loop_t *)a)->Num - - ((Step_Edge_Loop_t *)b)->Num); -} -Step_Edge_Loop_t *Get_Edge_Loop (int Num){ - Step_Edge_Loop_t EL; - if(!BREP)return NULL; - EL.Num = Num; - return (Step_Edge_Loop_t*)List_PQuery ( BREP->AllEdge_Loops,&EL, compareel ); -} - -/*---------------- Faces_Outer_Bounds ------------------------------------*/ - -void Add_Face_Outer_Bound (int Num, char *name , int el, bool dir, bool outer ){ - Step_Face_Outer_Bound_t F; - if(!BREP)return; - F.Num = Num; - F.Step_Edge_Loop = el; - F.dir = dir; - F.outer = outer; - List_Add(BREP->AllFaces_Outer_Bound,&F); -} - -static int comparefab (const void *a, const void *b){ - return (((Step_Face_Outer_Bound_t *)a)->Num - - ((Step_Face_Outer_Bound_t *)b)->Num); -} -Step_Face_Outer_Bound_t *Get_Face_Outer_Bound (int Num){ - Step_Face_Outer_Bound_t F; - if(!BREP)return NULL; - F.Num = Num; - return (Step_Face_Outer_Bound_t*)List_PQuery ( BREP->AllFaces_Outer_Bound,&F, comparefab ); -} - -/*---------------- Advanced_Faces ----------------------------------------*/ - -void Add_Advanced_Face (int Num, char *name , List_T *el, int surf, bool dir ){ - Step_Advanced_Face_t F; - if(!BREP)return; - F.Num = Num; - F.ListOf_Step_Face_Outer_Bound = el; - F.Step_Surface = surf; - F.dir = dir; - List_Add(BREP->AllAdvanced_Faces,&F); -} - -static int compareaf (const void *a, const void *b){ - return (((Step_Advanced_Face_t *)a)->Num - - ((Step_Advanced_Face_t *)b)->Num); -} -Step_Advanced_Face_t *Get_Advanced_Face (int Num){ - Step_Advanced_Face_t F; - if(!BREP)return NULL; - F.Num = Num; - return (Step_Advanced_Face_t*)List_PQuery ( BREP->AllAdvanced_Faces,&F, compareaf ); -} - -/*---------------- Surfaces ----------------------------------------------*/ - -void Add_Plane (int Num, char *name , int axis){ - Step_Surface_t Surface; - if(!BREP)return; - Surface.Num = Num; - Surface.Typ = STEP_PLAN; - Surface.Surface.Plane.Step_Axis2_Placement3D = axis; - List_Add(BREP->AllSurfaces,&Surface); -} - -void Add_Cylinder (int Num, char *name , int axis, double radius){ - Step_Surface_t S; - if(!BREP)return; - S.Num = Num; - S.Typ = STEP_CYLD; - S.Surface.Quadric.Radius1 = radius; - S.Surface.Quadric.Radius2 = 0.0; - S.Surface.Quadric.Step_Axis2_Placement3D = axis; - List_Add(BREP->AllSurfaces,&S); -} - -void Add_Torus (int Num, char *name , int axis, double radius1, double radius2){ - Step_Surface_t S; - if(!BREP)return; - S.Num = Num; - S.Typ = STEP_TORD; - S.Surface.Quadric.Radius1 = radius1; - S.Surface.Quadric.Radius2 = radius2; - S.Surface.Quadric.Step_Axis2_Placement3D = axis; - List_Add(BREP->AllSurfaces,&S); -} - -void Add_Cone (int Num, char *name , int axis, double radius1, double radius2){ - Step_Surface_t S; - if(!BREP)return; - S.Num = Num; - S.Typ = STEP_CONE; - S.Surface.Quadric.Radius1 = radius1; - S.Surface.Quadric.Radius2 = radius2; - S.Surface.Quadric.Step_Axis2_Placement3D = axis; - List_Add(BREP->AllSurfaces,&S); -} - - -void Add_BSpline_Surface_With_Knots (int Num,char *name, int OrderU,int OrderV, - List_T *lcp,List_T *lmu, List_T *lmv, List_T *lku, - List_T *lkv, double udeb, double uend, double vdeb, - double vend){ - Step_Surface_t Surface; - int i,j,mult; - double d; - - if(!BREP)return; - - Surface.Surface.BSpline.ListOf_KnotsU = - List_Create (List_Nbr(lku) + OrderU + 1,1,sizeof(double)); - Surface.Surface.BSpline.ListOf_KnotsV = - List_Create (List_Nbr(lkv) + OrderV + 1,1,sizeof(double)); - - /* Adding knots with their multiplicity */ - for(i=0;i<List_Nbr(lmu);i++){ - List_Read(lmu,i,&d); - mult = (int)d; - List_Read(lku,i,&d); - for(j=0;j<mult;j++){ - List_Add(Surface.Surface.BSpline.ListOf_KnotsU,&d); - } - } - for(i=0;i<List_Nbr(lmv);i++){ - List_Read(lmv,i,&d); - mult = (int)d; - List_Read(lkv,i,&d); - for(j=0;j<mult;j++){ - List_Add(Surface.Surface.BSpline.ListOf_KnotsV,&d); - } - } - - /*Adding the points !*/ - Surface.Surface.BSpline.ListOf_Cartesian_Points = lcp; - - Surface.Num = Num; - Surface.Typ = STEP_BSPL; - Surface.Surface.BSpline.OrderU = OrderU; - Surface.Surface.BSpline.OrderV = OrderV; - Surface.Surface.BSpline.Ubeg = udeb; - Surface.Surface.BSpline.Uend = uend; - Surface.Surface.BSpline.Vbeg = vdeb; - Surface.Surface.BSpline.Vend = vend; - List_Add(BREP->AllSurfaces,&Surface); -} - -static int comparesur (const void *a, const void *b){ - return (((Step_Surface_t *)a)->Num - - ((Step_Surface_t *)b)->Num); -} -Step_Surface_t *Get_Surface (int Num){ - Step_Surface_t S; - if(!BREP)return NULL; - S.Num = Num; - return (Step_Surface_t*)List_PQuery ( BREP->AllSurfaces,&S, comparesur ); -} - -/*---------------- Closed_Shells ----------------------------------------*/ - -void Add_Closed_Shell (int Num, char *name , List_T *list ){ - Step_Closed_Shell_t S; - if(!BREP)return; - S.Num = Num; - S.ListOf_Step_Advanced_Face = list; - List_Add(BREP->AllClosed_Shells,&S); -} - -static int comparecs (const void *a, const void *b){ - return (((Step_Closed_Shell_t *)a)->Num - - ((Step_Closed_Shell_t *)b)->Num); -} -Step_Closed_Shell_t *Get_Closed_Shell (int Num){ - Step_Closed_Shell_t F; - if(!BREP)return NULL; - F.Num = Num; - return (Step_Closed_Shell_t*)List_PQuery ( BREP->AllClosed_Shells,&F, comparecs ); -} - -/*---------------- Closed_Shells ----------------------------------------*/ - -void Resolve_BREP (void){ - int i,j,k,l; - double d; - int obj,err,typ; - Step_Vertex_Point_t vp; - Step_Direction_t *d1,*d2; - Step_Cartesian_Point_t *pcp,cp; - Step_Edge_Curve_t ec; - Step_Curve_t *pc; - Step_Advanced_Face_t af, *paf; - Step_Surface_t s; - Step_Surface_t *ps; - Step_Face_Outer_Bound_t *pfab; - Step_Edge_Loop_t *pel; - Step_Oriented_Edge_t *poe; - Step_Axis2_Placement3D_t *axs; - Step_Closed_Shell_t cs; - List_T *ListInt,*ListIntBis; - double ubeg,uend,n[3],t[3],p[3],XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX,L; - int fob; - - ListInt = List_Create(2,2,sizeof(int)); - ListIntBis = List_Create(2,2,sizeof(int)); - - for(i=0;i<List_Nbr(BREP->AllCartesian_Points);i++){ - List_Read(BREP->AllCartesian_Points,i,&cp); - XMAX = MAX(cp.Pos.X,XMAX); - YMAX = MAX(cp.Pos.Y,YMAX); - ZMAX = MAX(cp.Pos.Z,ZMAX); - XMIN = MIN(cp.Pos.X,XMIN); - YMIN = MIN(cp.Pos.Y,YMIN); - ZMIN = MIN(cp.Pos.Z,ZMIN); - } - CTX.lc = L = sqrt(SQR(XMIN-XMAX) + SQR(YMIN-YMAX) + SQR(ZMIN-ZMAX)); - - /* resolving cartesian_points */ - for(i=0;i<List_Nbr(BREP->AllCartesian_Points);i++){ - List_Read(BREP->AllCartesian_Points,i,&cp); - Cdbpts101(cp.Num,cp.Pos.X,cp.Pos.Y,cp.Pos.Z,L*.01,1); - } - - /* resolving vertex_points */ - for(i=0;i<List_Nbr(BREP->AllVertex_Points);i++){ - List_Read(BREP->AllVertex_Points,i,&vp); - if((pcp = Get_Cartesian_Point(vp.Cartesian_Point))){ - Cdbpts101(vp.Num,pcp->Pos.X,pcp->Pos.Y,pcp->Pos.Z,L*.01,1); - } - } - - /* resolving Edge_Curves*/ - for(i=0;i<List_Nbr(BREP->AllEdge_Curves);i++){ - List_Read(BREP->AllEdge_Curves,i,&ec); - if((pc = Get_Curve(ec.Step_Curve))){ - if(pc->Typ == STEP_LINE){ - List_Add(ListInt,&ec.Step_Vertex_Point_Begin); - List_Add(ListInt,&ec.Step_Vertex_Point_End); - Cdbseg101(ec.Num,MSH_SEGM_LINE,1,NULL,ListInt,-1,-1,0.,1.,NULL,NULL,NULL); - List_Reset(ListInt); - } - else if(pc->Typ == STEP_BSPL){ - List_Read( pc->Curve.BSpline.ListOf_Knots , 0, &ubeg); - List_Read( pc->Curve.BSpline.ListOf_Knots , - List_Nbr(pc->Curve.BSpline.ListOf_Knots)-1, &uend); - AddCurveInDataBase (ec.Num, - MSH_SEGM_NURBS, - pc->Curve.BSpline.Order, - pc->Curve.BSpline.ListOf_Cartesian_Points, - pc->Curve.BSpline.ListOf_Knots, - ec.Step_Vertex_Point_Begin, - ec.Step_Vertex_Point_End, - ubeg, - uend); - } - else if(pc->Typ == STEP_CIRC || pc->Typ == STEP_ELLP){ - axs = Get_Axis2_Placement3D(pc->Curve.Circle.Step_Axis2_Placement3D); - pcp = Get_Cartesian_Point(axs->Step_Cartesian_Point); - d1 = Get_Direction(axs->Step_Direction1); - d2 = Get_Direction(axs->Step_Direction2); - n[0] = d1->Pos.X; - n[1] = d1->Pos.Y; - n[2] = d1->Pos.Z; - - List_Add(ListInt,&ec.Step_Vertex_Point_Begin); - List_Add(ListInt,&pcp->Num); - List_Add(ListInt,&ec.Step_Vertex_Point_End); - AddCircleInDataBase ( ec.Num,MSH_SEGM_CIRC , - ListInt,n); - /*Cdbseg101(ec.Num,MSH_SEGM_CIRC,1,NULL, - ListInt,-1,-1,0.,1.,NULL,NULL,NULL); - */ - List_Reset(ListInt); - } - } - } - - /* resolving Surfaces */ - for(i=0;i<List_Nbr(BREP->AllSurfaces);i++){ - List_Read(BREP->AllSurfaces,i,&s); - if(s.Typ == STEP_BSPL){ - CreateNurbsSurfaceSupport ( - s.Num , - s.Surface.BSpline.OrderV , - s.Surface.BSpline.OrderU , - s.Surface.BSpline.ListOf_Cartesian_Points , - s.Surface.BSpline.ListOf_KnotsV , - s.Surface.BSpline.ListOf_KnotsU ); - - } - } - - /*resolving Advanced_Faces*/ - - for(i=0;i<List_Nbr(BREP->AllAdvanced_Faces);i++){ - err = 0; - List_Read(BREP->AllAdvanced_Faces,i,&af); - fob = 0; - for(j=0;j<List_Nbr(af.ListOf_Step_Face_Outer_Bound);j++){ - List_Read(af.ListOf_Step_Face_Outer_Bound,j,&d); - obj = (int)d; - if((pfab = Get_Face_Outer_Bound(obj)) && - (!j || fob)){ - if(pfab->outer)fob = 1; - if((pel = Get_Edge_Loop(pfab->Step_Edge_Loop))){ - for(k=0;k<List_Nbr(pel->ListOf_Step_Oriented_Edge);k++){ - List_Read(pel->ListOf_Step_Oriented_Edge,k,&d); - obj = (int)d; - if((poe = Get_Oriented_Edge(obj))){ - l = (poe->dir)?poe->Step_Edge_Curve:-poe->Step_Edge_Curve; - List_Add(ListInt,&l); - } - else err = 1; - } - } - else err = 1; - if(!err){ - Cdbz101(pfab->Num,MSH_SEGM_LOOP,0,0,0,0,0,NULL,NULL,ListInt); - List_Add(ListIntBis,& pfab->Num); - } - List_Reset(ListInt); - } - else err = 0; - } - if(!err && (ps = Get_Surface(af.Step_Surface))){ - if(ps->Typ == STEP_PLAN){ - Cdbz101(af.Num,MSH_SURF_PLAN,0,0,0,0,0,NULL,NULL,ListIntBis); - } - else if(ps->Typ == STEP_CYLD || ps->Typ == STEP_CONE - /*|| ps->Typ == STEP_TORD || ps->Typ == STEP_CONE*/){ - axs = Get_Axis2_Placement3D(ps->Surface.Quadric.Step_Axis2_Placement3D); - pcp = Get_Cartesian_Point(axs->Step_Cartesian_Point); - d1 = Get_Direction(axs->Step_Direction1); - d2 = Get_Direction(axs->Step_Direction2); - n[0] = d1->Pos.X;n[1] = d1->Pos.Y;n[2] = d1->Pos.Z; - t[0] = d2->Pos.X;t[1] = d2->Pos.Y;t[2] = d2->Pos.Z; - p[0] = pcp->Pos.X;p[1] = pcp->Pos.Y;p[2] = pcp->Pos.Z; - switch(ps->Typ){ - case STEP_CYLD: - typ = MSH_SURF_CYLNDR; - break; - case STEP_TORD: - typ = MSH_SURF_TORUS; - break; - case STEP_CONE: - typ = MSH_SURF_CONE; - break; - } - AddQuadricSurfaceInDataBase (typ, - af.Num, - n,t,p, - ps->Surface.Quadric.Radius1, - ps->Surface.Quadric.Radius2, - ListIntBis); - - //Cdbz101(af.Num,MSH_SURF_REGL,0,0,0,0,0,NULL,NULL,ListIntBis); - } - - else if(ps->Typ == STEP_BSPL){ - Cdbz101(af.Num,MSH_SURF_TRIMMED,0,0,0,0,af.Step_Surface,NULL,NULL,ListIntBis); - } - } - List_Reset(ListIntBis); - } - - /*resolving closed shells (sheila)*/ - for(i=0;i<List_Nbr(BREP->AllClosed_Shells);i++){ - List_Reset(ListInt); - List_Read(BREP->AllClosed_Shells,i,&cs); - for(j=0;j<List_Nbr(cs.ListOf_Step_Advanced_Face);j++){ - List_Read(cs.ListOf_Step_Advanced_Face,j,&d); - obj = (int)d; - if((paf = Get_Advanced_Face(obj))){ - List_Add(ListInt,&paf->Num); - } - } - Cdbz101(cs.Num+1000000,MSH_SURF_LOOP,0,0,0,0,0,NULL,NULL,ListInt); - List_Reset(ListInt); - j = cs.Num+1000000; - List_Add(ListInt,&j); - Cdbz101(cs.Num,MSH_VOLUME,0,0,0,0,0,NULL,NULL,ListInt); - } -} - - diff --git a/Geo/StepGeomDatabase.h b/Geo/StepGeomDatabase.h deleted file mode 100644 index f01f018c62452fd32079192f2f1b95ac208b7fdd..0000000000000000000000000000000000000000 --- a/Geo/StepGeomDatabase.h +++ /dev/null @@ -1,202 +0,0 @@ -#ifndef _STEP_GEOM_DATABASE_H_ -#define _STEP_GEOM_DATABASE_H_ - -typedef struct{ - double X, Y, Z; -} Step_Coord_t; - -typedef struct{ - int Num; - char *Name; - Step_Coord_t Pos; -}Step_Direction_t; - -typedef struct{ - int Num; - char *Name; - int Step_Direction; - double Lenght; -}Step_Vector_t; - -typedef struct{ - int Num; - char *Name; - int Cartesian_Point; -}Step_Vertex_Point_t; - -typedef struct{ - int Num; - char *Name; - Step_Coord_t Pos; -}Step_Cartesian_Point_t; - - -#define STEP_LINE 1 -#define STEP_CIRC 3 -#define STEP_ELLP 6 -#define STEP_PARA 7 -#define STEP_HYPB 8 - -typedef struct{ - int Step_Cartesian_Point; - int Step_Vector; -}Step_Line_t; - -typedef struct{ - int Step_Axis2_Placement3D; - double Radius1; - double Radius2; -}Step_Circle_t; - -typedef struct{ - int Order; - List_T *ListOf_Cartesian_Points; - List_T *ListOf_Knots; - double Ubeg, Uend; -}Step_BSpline_Curve_With_Knots_t; - -typedef struct{ - int Num; - int Typ; - char *Name; - union{ - Step_BSpline_Curve_With_Knots_t BSpline; - Step_Line_t Line; - Step_Circle_t Circle; - }Curve; -}Step_Curve_t; - - -#define STEP_PLAN 1 -#define STEP_CYLD 2 -#define STEP_TORD 3 -#define STEP_CONE 4 -#define STEP_BSPL 5 - -typedef struct{ - int Num; - int Step_Cartesian_Point; - int Step_Direction1; - int Step_Direction2; -}Step_Axis2_Placement3D_t; - -typedef struct{ - int Step_Axis2_Placement3D; -}Step_Plane_t; - -typedef struct{ - int Step_Axis2_Placement3D; - double Radius1; - double Radius2; -}Step_Quadric_t; - -typedef struct{ - int OrderU, OrderV; - List_T *ListOf_Cartesian_Points; - List_T *ListOf_KnotsU; - List_T *ListOf_KnotsV; - double Ubeg, Uend, Vbeg, Vend; -}Step_BSpline_Surface_With_Knots_t; - -typedef struct{ - int Num; - int Typ; - char *Name; - union{ - Step_BSpline_Surface_With_Knots_t BSpline; - Step_Plane_t Plane; - Step_Quadric_t Quadric; - }Surface; -}Step_Surface_t; - -typedef struct{ - int Num; - char *Name; - int Step_Vertex_Point_Begin; - int Step_Vertex_Point_End; - int Step_Curve; -}Step_Edge_Curve_t; - -typedef struct{ - int Num; - char Name; - int Step_Edge_Curve; - bool dir; -}Step_Oriented_Edge_t; - -typedef struct{ - int Num; - char Name; - List_T *ListOf_Step_Oriented_Edge; -}Step_Edge_Loop_t; - -typedef struct{ - int Num; - char Name; - int Step_Edge_Loop; - bool dir; - bool outer; -}Step_Face_Outer_Bound_t; - -typedef struct{ - int Num; - char Name; - List_T *ListOf_Step_Face_Outer_Bound; - int Step_Surface; - bool dir; -}Step_Advanced_Face_t; - -typedef struct{ - int Num; - char Name; - List_T *ListOf_Step_Advanced_Face; -}Step_Closed_Shell_t; - -typedef struct{ - List_T *AllDirections; - List_T *AllVectors; - List_T *AllCartesian_Points; - List_T *AllVertex_Points; - List_T *AllCurves; - List_T *AllEdge_Curves; - List_T *AllSurfaces; - List_T *AllAxis2_Placement3D; - List_T *AllClosed_Shells; - List_T *AllFaces_Outer_Bound; - List_T *AllOriented_Edges; - List_T *AllEdge_Loops; - List_T *AllAdvanced_Faces; -}Step_Solid_BRep_t; - -Step_Solid_BRep_t *Create_Step_Solid_BRep(void); - -void Add_Direction (int Num, char *name, double x, double y, double z); -void Add_Vector (int Num, char *name, int Dir, double l); -void Add_Cartesian_Point (int Num, char *name, double x, double y, double z); -void Add_Vertex_Point (int Num, char *name, int cp); -void Add_Line (int Num, char *name, int begin, int dir); -void Add_Circle (int Num, char *name, int axis, double Radius); -void Add_Ellipsis (int Num, char *name, int axis, double Radius, double r2); -void Add_Cylinder (int Num, char *name, int axis, double Radius); -void Add_Torus (int Num, char *name, int axis, double radius1, double radius2); -void Add_Cone (int Num, char *name, int axis, double radius1, double radius2); -void Add_Edge_Curve (int Num, char *name, int beg, int end, int curve); -void Add_Vertex_Point (int num, char *name, int cp); -void Add_Oriented_Edge (int Num, char *name, int ec, bool dir); -void Add_Edge_Loop (int Num, char *name, List_T * list); -void Add_Face_Outer_Bound (int Num, char *name, int el, bool dir, bool outer); -void Add_Advanced_Face (int Num, char *name, List_T * lfob, int surf, bool dir); -void Add_Closed_Shell (int Num, char *name, List_T * laf); -void Add_BSpline_Curve_With_Knots (int Num, char *name, int Order, List_T * lcp, - List_T * lm, List_T * lk, double udeb, double uend); -void Add_Plane (int Num, char *name, int axis); -void Add_Axis2_Placement3D (int Num, int cp, int dir1, int dir2); -void Add_Closed_Shell (int Num, char *name, List_T * list); -void Resolve_BREP (void); -void Add_BSpline_Surface_With_Knots (int Num,char *name,int OrderU,int OrderV, - List_T * lcp, List_T * lmu, List_T * lmv, - List_T * lku,List_T * lkv, - double udeb,double uend, - double vdeb,double vend); - -#endif diff --git a/Geo/Verif.cpp b/Geo/Verif.cpp deleted file mode 100644 index 4f187a409e239071fadd367111d9def4c38ef10c..0000000000000000000000000000000000000000 --- a/Geo/Verif.cpp +++ /dev/null @@ -1,260 +0,0 @@ -// $Id: Verif.cpp,v 1.9 2001-06-02 16:24:51 geuzaine Exp $ - -#include "Gmsh.h" -#include "Geo.h" -#include "CAD.h" -#include "Mesh.h" -#include "DataBase.h" - -extern Mesh *THEM; - -/* Contour extraction by a tree method */ - -static Tree_T *treelink; -static Tree_T *treeedges; -static Tree_T *treefaces; - -typedef struct { - int n,a,arbre; -}nxa; - -typedef struct { - int n,visited; - List_T *l; -}lnk; - -int complink(const void*a, const void*b){ - lnk *q,*w; - q = (lnk*)a; - w = (lnk*)b; - return q->n-w->n; -} - -static int POINT_FINAL; -static int CONTOUR_TROUVE; -static List_T *VisitedNodes ; //geuz - -void recur_trouvecont(int ip , int ed , List_T *Liste, int gauche , List_T *old ){ - lnk lk; - nxa a; - int i,rev; - - lk.n = ip; - Tree_Query(treelink,&lk); - if(List_Nbr(lk.l) != 2 && !old)return; - for(i=0;i<List_Nbr(lk.l);i++){ - List_Read(lk.l,i,&a); - if(abs(a.a) != abs(ed)){ - if(!old || List_Search(old,&a.a,fcmp_absint) || List_Nbr(lk.l) == 2){ - if(!gauche){ - List_Add(Liste,&a.a); - if(List_Search(VisitedNodes, &a.n, fcmp_absint)){//geuz - CONTOUR_TROUVE =1;//end geuz - return;//end geuz - }//geuz - } - if(a.n == POINT_FINAL){ - CONTOUR_TROUVE = 1; - } - else{ - recur_trouvecont(a.n,abs(a.a),Liste,gauche,old); - } - if(gauche){ - rev = -a.a; - List_Add(Liste,&rev); - List_Add(VisitedNodes, &a.n); //geuz - } - } - } - } -} - - -void recur_trouvevol(int ifac , int iedge, List_T *Liste, List_T *old , - Tree_T *treeedges, Tree_T *treefaces){ - - lnk lk; - nxa a; - int i,is,rev,l; - Curve *c; - Surface *s = FindSurface(abs(ifac),THEM); - - for(l=0;l<List_Nbr(s->Generatrices);l++){ - List_Read(s->Generatrices,l,&c); - lk.n = abs(c->Num); - is = lk.n; - if(!Tree_Search(treeedges,&is)){ - Tree_Add(treeedges,&is); - } - else{ - Tree_Suppress(treeedges,&is); - } - Tree_Query(treelink,&lk); - if(List_Nbr(lk.l) == 2 || old){ - for(i=0;i<List_Nbr(lk.l);i++){ - List_Read(lk.l,i,&a); - if(abs(a.a) != abs(ifac)){ - if(!Tree_Search(treefaces,&a.a)){ - Tree_Add(treefaces,&a.a); - if(!old || List_Search(old,&a.a,fcmp_absint) || List_Nbr(lk.l) == 2){ - rev = abs(a.a); - List_Add(Liste,&rev); - recur_trouvevol(rev,is,Liste,old,treeedges,treefaces); - } - } - } - } - } - } -} - - -void BegEndCurve (Curve *c, int *ip1, int *ip2){ - *ip1 = c->beg->Num; - *ip2 = c->end->Num; -} - -void CreeLiens ( void ) { - int i,is,ip1,ip2; - lnk li,*pli; - nxa na1,na2; - Curve *ic; - - treelink = Tree_Create(sizeof(lnk),complink); - - List_T *temp = Tree2List(THEM->Curves); - for(i=0;i<List_Nbr(temp);i++){ - List_Read(temp,i,&ic); - if(ic->Num > 0){ - is = ic->Num; - BegEndCurve(ic,&ip1,&ip2); - - na1.a = -is; - na2.a = is; - na2.arbre = na1.arbre = li.visited = 0; - na1.n = li.n = ip1; - na2.n = ip2; - if((pli = (lnk*)Tree_PQuery(treelink,&li))){ - List_Add(pli->l,&na2); - } - else{ - li.l = List_Create(20,1,sizeof(nxa)); - List_Add(li.l,&na2); - Tree_Add(treelink,&li); - } - li.n = ip2; - if((pli = (lnk*)Tree_PQuery(treelink,&li))){ - List_Add(pli->l,&na1); - } - else{ - li.l = List_Create(20,1,sizeof(nxa)); - List_Add(li.l,&na1); - Tree_Add(treelink,&li); - } - } - } -} - - -void CreeLiens2 ( void ) { - int i,k; - lnk li,*pli; - nxa na; - Surface *s; - Curve *c; - - treelink = Tree_Create(sizeof(lnk),complink); - List_T *temp = Tree2List(THEM->Surfaces); - - for(i=0;i<List_Nbr(temp);i++){ - List_Read(temp,i,&s); - if(s->Num > 0) - na.a = s->Num; - for(k=0;k<List_Nbr(s->Generatrices);k++){ - List_Read(s->Generatrices,k,&c); - li.n = abs(c->Num); - if((pli = (lnk*)Tree_PQuery(treelink,&li))){ - List_Add(pli->l,&na); - } - else{ - li.l = List_Create(20,1,sizeof(nxa)); - List_Add(li.l,&na); - Tree_Add(treelink,&li); - } - } - } - List_Delete(temp); -} - - -int alledgeslinked ( int ed , List_T *Liste , List_T *old){ - - int ip1,ip2,i,rev; - lnk lk; - nxa a; - - VisitedNodes = List_Create(20,20,sizeof(int)); //geuz - - CreeLiens(); - - Curve *c,C; - c = &C; - c->Num = ed; - Tree_Query(THEM->Curves,&c); - - BegEndCurve(c,&ip1,&ip2); - - CONTOUR_TROUVE = 0; - - POINT_FINAL = ip2; - recur_trouvecont(ip1,ed,Liste,1,old); - - if(old){ - List_Sort(old,fcmp_absint); - } - - lk.n = ip2; - Tree_Query(treelink,&lk); - for(i=0;i<List_Nbr(lk.l);i++){ - List_Read(lk.l,i,&a); - if(abs(a.a) == abs(ed)){ - rev = -a.a; - List_Add(Liste,&rev); - } - } - - - if(!CONTOUR_TROUVE){ - POINT_FINAL = ip1; - recur_trouvecont(ip2,ed,Liste,0,old); - } - - List_Delete(VisitedNodes); //geuz - - return(CONTOUR_TROUVE); -} - - -int allfaceslinked (int iz , List_T *Liste , List_T *old){ - - CreeLiens2(); - treeedges = Tree_Create(sizeof(int),fcmp_absint); - treefaces = Tree_Create(sizeof(int),fcmp_absint); - - Tree_Add(treefaces,&iz); - List_Add(Liste,&iz); - recur_trouvevol(iz,0,Liste,old,treeedges,treefaces); - - if(!Tree_Nbr(treeedges)){ - CONTOUR_TROUVE = 1; - } - else{ - CONTOUR_TROUVE = 0; - } - - Tree_Delete(treeedges); - Tree_Delete(treefaces); - - return(CONTOUR_TROUVE); -} - diff --git a/Geo/Verif.h b/Geo/Verif.h deleted file mode 100644 index 24175399f0d346b38a035389cbd49f46c266c7ca..0000000000000000000000000000000000000000 --- a/Geo/Verif.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _VERIF_H_ -#define _VERIF_H_ - -int alledgeslinked (int ed, List_T * Liste, List_T * old); -int allfaceslinked (int iz, List_T * Liste, List_T * old); - -#endif diff --git a/Geo/Visibility.cpp b/Geo/Visibility.cpp deleted file mode 100644 index 0f4f86b37935f8fcb4014f29f3a799d1c1896de2..0000000000000000000000000000000000000000 --- a/Geo/Visibility.cpp +++ /dev/null @@ -1,92 +0,0 @@ - -#include "Gmsh.h" -#include "Geo.h" -#include "CAD.h" -#include "Mesh.h" -#include "DataBase.h" - -extern Mesh *THEM; - -/* Gestion des entites visibles */ - -Tree_T *EntitesVisibles=NULL; -int SHOW_ALL_ENTITIES; - -typedef struct{ - int Entite; - int Visible; -}EntiteVisible; - -int compareEntiteVisible(const void *a, const void *b){ - EntiteVisible *q,*w; - q = (EntiteVisible*)a; - w = (EntiteVisible*)b; - return(q->Entite-w->Entite); -} - -int EntiteEstElleVisible(int iEnt){ - EntiteVisible e; - e.Entite = iEnt; - if(Tree_Query(EntitesVisibles,&e)) - return e.Visible; - return 1; -} - -void ToutesLesEntitesRelatives(int iEnt, Tree_T *Tree, int add_rem){ - int i; - EntiteVisible e; - - Surface *s; - Volume *v; - Curve *c; - - if((c = FindCurve(iEnt,THEM))){ - } - else if((s = FindSurface(iEnt,THEM))){ - for(i=0;i<List_Nbr(s->Generatrices);i++){ - List_Read(s->Generatrices,i,&c); - e.Entite = abs(c->Num); - e.Visible = add_rem; - Tree_Replace(Tree,&e); - } - } - else if((v = FindVolume(iEnt,THEM))){ - for(i=0;i<List_Nbr(v->Surfaces);i++){ - List_Read(v->Surfaces,i,&s); - e.Entite = abs(s->Num); - e.Visible = add_rem; - Tree_Replace(Tree,&e); - } - } - - e.Entite = abs(iEnt); - e.Visible = add_rem; - Tree_Replace(Tree,&e); -} - -void RemplirEntitesVisibles (int add_rem){ - int i; - Volume *v; - Surface *s; - Curve *c; - - List_T *ListVolumes = Tree2List (THEM->Volumes); - List_T *ListSurfaces = Tree2List (THEM->Surfaces); - List_T *ListCurves = Tree2List (THEM->Curves); - EntitesVisibles = Tree_Create(sizeof(EntiteVisible),compareEntiteVisible); - for(i=0;i<List_Nbr(ListVolumes);i++){ - List_Read(ListVolumes,i,&v); - ToutesLesEntitesRelatives(v->Num,EntitesVisibles,add_rem); - } - for(i=0;i<List_Nbr(ListSurfaces);i++){ - List_Read(ListSurfaces,i,&s); - ToutesLesEntitesRelatives(s->Num,EntitesVisibles,add_rem); - } - for(i=0;i<List_Nbr(ListCurves);i++){ - List_Read(ListCurves,i,&c); - ToutesLesEntitesRelatives(c->Num,EntitesVisibles,add_rem); - } - List_Delete(ListVolumes); - List_Delete(ListSurfaces); - List_Delete(ListCurves); -} diff --git a/Geo/Visibility.h b/Geo/Visibility.h deleted file mode 100644 index 9be0d6db62292403e658227c11c6027f695c9aa5..0000000000000000000000000000000000000000 --- a/Geo/Visibility.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef _VISIBILITY_H_ -#define _VISIBILITY_H_ - -int EntiteEstElleVisible(int iEnt); -void ToutesLesEntitesRelatives(int iEnt, Tree_T *Tree, int add_rem); -void RemplirEntitesVisibles (int add_rem); - -extern Tree_T *EntitesVisibles; -extern int SHOW_ALL_ENTITIES; - -#endif diff --git a/Graphics/Axes.cpp b/Graphics/Axes.cpp deleted file mode 100644 index 07a21d7c8117bd649750be28c3cf6961c1444962..0000000000000000000000000000000000000000 --- a/Graphics/Axes.cpp +++ /dev/null @@ -1,123 +0,0 @@ -// $Id: Axes.cpp,v 1.5 2001-08-11 23:28:31 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Numeric.h" -#include "Mesh.h" -#include "Draw.h" -#include "Context.h" -#include "gl2ps.h" - -extern Context_T CTX; - - -void Draw_Axes (double s) { - double f, g, b, c; - - if(s == 0.) return; - - if(!CTX.range[0] && !CTX.range[1] && !CTX.range[2]) return ; - - f = 0.666 * s; - g = 1.233 * s; - b = .1 * s; - c = 0.666 * b; - - glLineWidth(1.); gl2psLineWidth(1.); - glColor4ubv((GLubyte*)&CTX.color.axes); - - glBegin(GL_LINES); - if(CTX.range[2] != 0.){ - /* X */ - glVertex3d(0., 0., 0.); - glVertex3d(s, 0., 0.); - glVertex3d(g-b, b, 0.); - glVertex3d(g+b, -b, 0.); - glVertex3d(g, -b, b); - glVertex3d(g, b, -b); - /* Y */ - glVertex3d(0., 0., 0.); - glVertex3d(0., s, 0.); - glVertex3d(-b, g+b, 0.); - glVertex3d(0., g, 0.); - glVertex3d(0., g, 0.); - glVertex3d(0., g+b, -b); - glVertex3d(0., g, 0.); - glVertex3d(.5*b, g-b, .5*b); - /* Z */ - glVertex3d(0., 0., 0.); - glVertex3d(0., 0., s); - glVertex3d(-b, b, g); - glVertex3d(0., b, g-b); - glVertex3d(0., b, g-b); - glVertex3d(0., -b, g+b); - glVertex3d(0., -b, g+b); - glVertex3d(b, -b, g); - } - else{ - /* X */ - glVertex3d(0., 0., 0.); - glVertex3d(s, 0., 0.); - glVertex3d(g-c, b, 0.); - glVertex3d(g+c, -b, 0.); - glVertex3d(g-c, -b, 0.); - glVertex3d(g+c, b, 0.); - /* Y */ - glVertex3d(0., 0., 0.); - glVertex3d(0., s, 0.); - glVertex3d(-c, g+b, 0.); - glVertex3d(0., g, 0.); - glVertex3d(0., g, 0.); - glVertex3d(c, g+b, 0.); - glVertex3d(0., g, 0.); - glVertex3d(0., g-b, 0.); - } - glEnd(); - - glEnable(GL_LINE_STIPPLE); - glLineStipple(2,0x0F0F); - glBegin(GL_LINES); - if(CTX.range[2] != 0.){ - glVertex3d(f, 0., 0.); - glVertex3d(f, 0., f ); - glVertex3d(f, 0., f ); - glVertex3d(0., 0., f ); - glVertex3d(0., 0., f ); - glVertex3d(0., f, f ); - glVertex3d(0., f, f ); - glVertex3d(0., f, 0.); - } - glVertex3d(0., f, 0.); - glVertex3d(f, f, 0.); - glVertex3d(f, f, 0.); - glVertex3d(f, 0., 0.); - glEnd(); - glDisable(GL_LINE_STIPPLE); - -} - -void Draw_SmallAxes(void){ - double l,o,xx,xy,yx,yy,zx,zy,cx,cy; - - l = 30 ; - o = 2 ; - cx = CTX.viewport[2] - 45; - cy = CTX.viewport[1] + 35; - - xx = l*CTX.rot[0][0] ; xy = l*CTX.rot[0][1] ; - yx = l*CTX.rot[1][0] ; yy = l*CTX.rot[1][1] ; - zx = l*CTX.rot[2][0] ; zy = l*CTX.rot[2][1] ; - - glColor4ubv((GLubyte*)&CTX.color.small_axes); - - glBegin(GL_LINES); - glVertex2d(cx,cy); glVertex2d(cx+xx,cy+xy); - glVertex2d(cx,cy); glVertex2d(cx+yx,cy+yy); - glVertex2d(cx,cy); glVertex2d(cx+zx,cy+zy); - glEnd(); - glRasterPos2d(cx+xx+o,cy+xy+o); Draw_String("X"); - glRasterPos2d(cx+yx+o,cy+yy+o); Draw_String("Y"); - glRasterPos2d(cx+zx+o,cy+zy+o); Draw_String("Z"); - -} - diff --git a/Graphics/CreateFile.cpp b/Graphics/CreateFile.cpp deleted file mode 100644 index e0e6ba6b5d1eeb9a029fac6500860df7a8188a69..0000000000000000000000000000000000000000 --- a/Graphics/CreateFile.cpp +++ /dev/null @@ -1,228 +0,0 @@ -// $Id: CreateFile.cpp,v 1.20 2001-07-25 13:11:07 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Mesh.h" -#include "OpenFile.h" -#include "Draw.h" -#include "Context.h" - -extern Context_T CTX; -extern Mesh M; - -#ifdef _XMOTIF -#include <unistd.h> -#include "Widgets.h" -#include "XContext.h" -#include "XDump.h" -extern Widgets_T WID; -extern XContext_T XCTX; -#endif - -#include "gl2ps.h" -#include "gl2gif.h" -#include "gl2jpeg.h" -#include "gl2ppm.h" -#include "gl2yuv.h" - -void FillBuffer(void){ - InitOpengl(); - ClearOpengl(); - Draw3d(); - Draw2d(); -} - -void CreateOutputFile (char *name, int format) { - FILE *fp; - GLint size3d; - char ext[256]; - int res, i; - -#ifdef _XMOTIF - FILE *tmp; - char cmd[1000], *tmpFileName="tmp.xwd"; -#endif - - if(!name || !strlen(name)) return; - - CTX.print.gl_fonts = 1; - - switch(format){ - - case FORMAT_AUTO : - for(i=strlen(name)-1; i>=0; i--){ - if(name[i] == '.'){ - strcpy(ext,&name[i]); - break; - } - } - if(i<=0) strcpy(ext,""); - - if (!strcmp(ext,".geo")) CreateOutputFile(name, FORMAT_GEO); - else if(!strcmp(ext,".msh")) CreateOutputFile(name, FORMAT_MSH); - else if(!strcmp(ext,".unv")) CreateOutputFile(name, FORMAT_UNV); - else if(!strcmp(ext,".gif")) CreateOutputFile(name, FORMAT_GIF); - else if(!strcmp(ext,".jpg")) CreateOutputFile(name, FORMAT_JPEG); - else if(!strcmp(ext,".jpeg")) CreateOutputFile(name, FORMAT_JPEG); - else if(!strcmp(ext,".ps")) CreateOutputFile(name, FORMAT_EPS); - else if(!strcmp(ext,".eps")) CreateOutputFile(name, FORMAT_EPS); - else if(!strcmp(ext,".xpm")) CreateOutputFile(name, FORMAT_XPM); - else if(!strcmp(ext,".ppm")) CreateOutputFile(name, FORMAT_PPM); - else if(!strcmp(ext,".yuv")) CreateOutputFile(name, FORMAT_YUV); - else if(!strcmp(ext,".gref")) CreateOutputFile(name, FORMAT_GREF); - else if(!strcmp(ext,".Gref")) CreateOutputFile(name, FORMAT_GREF); - else Msg(GERROR, "Unknown extension '%s' for automatic format detection", ext); - break; - - case FORMAT_GEO : - Print_Geo(&M, name); - break; - - case FORMAT_MSH : - Print_Mesh(&M, name, FORMAT_MSH); - break; - - case FORMAT_UNV : - Print_Mesh(&M, name, FORMAT_UNV); - break; - - case FORMAT_GREF : - Print_Mesh(&M, name, FORMAT_GREF); - break; - -#ifdef _XMOTIF - case FORMAT_XPM : - if(!(fp = fopen(name,"wb"))) { - Msg(WARNING, "Unable to open file '%s'", name); - return; - } - Window_Dump(XCTX.display, XCTX.scrnum, XtWindow(WID.G.glw), fp); - Msg(INFO, "XPM creation complete '%s'", name); - Msg(STATUS2, "Wrote '%s'", name); - fclose(fp); - break; -#endif - - case FORMAT_JPEG : - if(!(fp = fopen(name,"wb"))) { - Msg(WARNING, "Unable to open file '%s'", name); - return; - } - FillBuffer(); - create_jpeg(fp, CTX.viewport[2]-CTX.viewport[0], - CTX.viewport[3]-CTX.viewport[1], - CTX.print.jpeg_quality); - Msg(INFO, "JPEG creation complete '%s'", name); - Msg(STATUS2, "Wrote '%s'", name); - fclose(fp); - break; - - case FORMAT_GIF : - if(!(fp = fopen(name,"wb"))) { - Msg(WARNING, "Unable to open file '%s'", name); - return; - } - FillBuffer(); - create_gif(fp, CTX.viewport[2]-CTX.viewport[0], - CTX.viewport[3]-CTX.viewport[1], - CTX.print.gif_dither, - CTX.print.gif_sort, - CTX.print.gif_interlace, - CTX.print.gif_transparent, - UNPACK_RED(CTX.color.bg), - UNPACK_GREEN(CTX.color.bg), - UNPACK_BLUE(CTX.color.bg)); - Msg(INFO, "GIF creation complete '%s'", name); - Msg(STATUS2, "Wrote '%s'", name); - fclose(fp); - break; - - case FORMAT_PPM : - if(!(fp = fopen(name,"wb"))) { - Msg(WARNING, "Unable to open file '%s'", name); - return; - } - FillBuffer(); - create_ppm(fp, CTX.viewport[2]-CTX.viewport[0], - CTX.viewport[3]-CTX.viewport[1]); - Msg(INFO, "PPM creation complete '%s'", name); - Msg(STATUS2, "Wrote '%s'", name); - fclose(fp); - break; - - case FORMAT_YUV : - if(!(fp = fopen(name,"wb"))) { - Msg(WARNING, "Unable to open file '%s'", name); - return; - } - FillBuffer(); - create_yuv(fp, CTX.viewport[2]-CTX.viewport[0], - CTX.viewport[3]-CTX.viewport[1]); - Msg(INFO, "YUV creation complete '%s'", name); - Msg(STATUS2, "Wrote '%s'", name); - fclose(fp); - break; - - case FORMAT_EPS : - - switch(CTX.print.eps_quality){ - -#ifdef _XMOTIF - case 0 : // Bitmap EPS - if(!(fp = fopen(name,"w"))) { - Msg(WARNING, "Unable to open file '%s'", name); - return; - } - if(!(tmp = fopen(tmpFileName,"w"))){ - Msg(WARNING, "Unable to open file '%s'", tmpFileName); - return; - } - Window_Dump(XCTX.display, XCTX.scrnum, XtWindow(WID.G.glw), tmp); - fclose(tmp); - sprintf(cmd, "xpr -device ps -gray 4 %s >%s", tmpFileName, name); - Msg(INFO, "Executing '%s'", cmd); - system(cmd); - unlink(tmpFileName); - Msg(INFO, "Bitmap EPS creation complete '%s'", name); - Msg(STATUS2, "Wrote '%s'", name); - fclose(fp); - break; -#endif - - default : // Vector EPS - if(!(fp = fopen(name,"w"))) { - Msg(WARNING, "Unable to open file '%s'", name); - return; - } - CTX.print.gl_fonts = 0; - size3d = 0 ; - res = GL2PS_OVERFLOW ; - while(res == GL2PS_OVERFLOW){ - size3d += 2048*2048 ; - gl2psBeginPage(CTX.base_filename, "Gmsh", - (CTX.print.eps_quality == 1 ? GL2PS_SIMPLE_SORT : GL2PS_BSP_SORT), - GL2PS_SIMPLE_LINE_OFFSET | - (CTX.print.eps_background ? GL2PS_DRAW_BACKGROUND : 0), - GL_RGBA, 0, NULL, size3d, fp); - CTX.stream = TO_FILE ; - FillBuffer(); - CTX.stream = TO_SCREEN ; - res = gl2psEndPage(); - } - Msg(INFO, "EPS creation complete '%s'", name); - Msg(STATUS2, "Wrote '%s'", name); - fclose(fp); - CTX.print.gl_fonts = 1; - break; - - } - break ; - - default : - Msg(WARNING, "Unknown print format"); - break; - } - - -} - diff --git a/Graphics/CreateFile.h b/Graphics/CreateFile.h deleted file mode 100644 index ed1b5660bb27e35078bd8ce05f262f91b04277bc..0000000000000000000000000000000000000000 --- a/Graphics/CreateFile.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _CREATE_FILE_H_ -#define _CREATE_FILE_H_ - -void CreateOutputFile (char *name, int format) ; - -#endif diff --git a/Graphics/Draw.cpp b/Graphics/Draw.cpp deleted file mode 100644 index 7eef57c33aaad2b88ee94dc57e702c0b3f7b5c4c..0000000000000000000000000000000000000000 --- a/Graphics/Draw.cpp +++ /dev/null @@ -1,287 +0,0 @@ -// $Id: Draw.cpp,v 1.25 2001-08-06 16:47:57 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Geo.h" -#include "Mesh.h" -#include "Draw.h" -#include "Context.h" -#include "MinMax.h" - -extern Context_T CTX ; -extern Mesh M; - -/* ------------------------------------------------------------------------ */ -/* d r a w */ -/* ------------------------------------------------------------------------ */ - -void Draw3d(void){ - int i; - - if(CTX.alpha){ - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_BLEND); - glEnable(GL_ALPHA); - } - else{ - glDisable(GL_BLEND); -#ifndef WIN32 - // Merde de bug dans les nouvelles dll opengl Windows (ATI Rage - // Mobility, NVIDIA, etc.) - glDisable(GL_ALPHA); -#endif - } - glPolygonOffset(1.0, 1); - - for(i = 0 ; i < 6 ; i++) - if(CTX.clip[i]) glEnable((GLenum)(GL_CLIP_PLANE0 + i)); - - glShadeModel(GL_SMOOTH); - glDepthFunc(GL_LESS); - glEnable(GL_DEPTH_TEST); - glDisable(GL_CULL_FACE); - - glPushMatrix(); - Draw_Mesh(&M); - glPopMatrix(); -} - -void Draw2d(void){ - int i; - - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - glShadeModel(GL_FLAT); - - for(i = 0 ; i < 6 ; i++) - glDisable((GLenum)(GL_CLIP_PLANE0 + i)); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - /* to draw directly in screen coords */ - glOrtho((double)CTX.viewport[0], - (double)CTX.viewport[2], - (double)CTX.viewport[1], - (double)CTX.viewport[3],-1.,1.); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glPushMatrix(); - if(CTX.post.draw && CTX.post.scales) Draw_Scales(); - if(CTX.small_axes) Draw_SmallAxes(); - glPopMatrix(); -} - -/* ------------------------------------------------------------------------ */ -/* o r t h o */ -/* ------------------------------------------------------------------------ */ - -void Orthogonalize(int x, int y){ - double Va,Wa; - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - if(CTX.render_mode == GMSH_SELECT) - gluPickMatrix ((GLdouble)x, - (GLdouble)(CTX.viewport[3]-y), - 5.0, - 5.0, - CTX.viewport); - - Va = (GLdouble)(CTX.viewport[3]-CTX.viewport[1]) / - (GLdouble)(CTX.viewport[2]-CTX.viewport[0]) ; - - Wa = (CTX.max[1]-CTX.min[1]) / (CTX.max[0]-CTX.min[0]); - - if(Va>Wa){ - CTX.vxmin = CTX.min[0]; - CTX.vxmax = CTX.max[0]; - CTX.vymin = 0.5*(CTX.min[1]+CTX.max[1]-Va*(CTX.max[0]-CTX.min[0])); - CTX.vymax = 0.5*(CTX.min[1]+CTX.max[1]+Va*(CTX.max[0]-CTX.min[0])); - } - else{ - CTX.vxmin = 0.5*(CTX.min[0]+CTX.max[0]-(CTX.max[1]-CTX.min[1])/Va); - CTX.vxmax = 0.5*(CTX.min[0]+CTX.max[0]+(CTX.max[1]-CTX.min[1])/Va); - CTX.vymin = CTX.min[1]; - CTX.vymax = CTX.max[1]; - } - CTX.vxmin -= (CTX.vxmax-CTX.vxmin)/3.; CTX.vxmax += 0.25*(CTX.vxmax-CTX.vxmin); - CTX.vymin -= (CTX.vymax-CTX.vymin)/3.; CTX.vymax += 0.25*(CTX.vymax-CTX.vymin); - - CTX.pixel_equiv_x = (CTX.vxmax-CTX.vxmin)/(CTX.viewport[2]-CTX.viewport[0]); - CTX.pixel_equiv_y = (CTX.vymax-CTX.vymin)/(CTX.viewport[3]-CTX.viewport[1]); - - if(CTX.ortho) { - glOrtho(CTX.vxmin,CTX.vxmax,CTX.vymin,CTX.vymax,0,100*CTX.lc); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslated(0.0, 0.0, -50*CTX.lc); - } - else{ - glFrustum(CTX.vxmin,CTX.vxmax,CTX.vymin,CTX.vymax,CTX.lc,100*CTX.lc); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslated(0.0, 0.0, -10*CTX.lc); - glScaled(10.,10.,10.); - } - - -} - -/* ------------------------------------------------------------------------ */ -/* i n i t */ -/* ------------------------------------------------------------------------ */ - - -void InitRenderModel(void) -{ - int i; - float specular[4]; - - for(i = 0 ; i < 6 ; i++){ - if(CTX.light[i]){ - glLightfv((GLenum)(GL_LIGHT0 + i), GL_POSITION, CTX.light_position[i]); - glEnable((GLenum)(GL_LIGHT0 + i)); - } - } - glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); - glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 40.); - glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); - /* let's add some shininess to all these automatically created materials */ - specular[0] = CTX.shine; - specular[1] = CTX.shine; - specular[2] = CTX.shine; - specular[3] = 1.0; - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular); -} - -void InitShading() -{ - glEnable(GL_LIGHTING); - glEnable(GL_NORMALIZE); - glEnable(GL_COLOR_MATERIAL); -} - - -void InitNoShading(void){ - glDisable(GL_LIGHTING); -} - -void InitPosition(void){ - glScaled (CTX.s[0], CTX.s[1], CTX.s[2]); - glTranslated(CTX.t[0], CTX.t[1], CTX.t[2]); - - CTX.buildRotmatrix(); - glMultMatrixf(&(CTX.rot[0][0])); -} - -/* ------------------------------------------------------------------------ */ -/* r e p l o t */ -/* ------------------------------------------------------------------------ */ - -/* n'est plus utilise que dans les cas ou des points peuvent etre - ajoutes dans la base de donnee -> dans cb_geom */ -void Replot(void){ - CalculateMinMax(M.Points,NULL); - Draw(); -} - -/* ------------------------------------------------------------------------ */ -/* e n t i t y s e l e c t i o n */ -/* ------------------------------------------------------------------------ */ - -void Process_SelectionBuffer(int x, int y, int *n, GLuint *ii, GLuint *jj){ - GLuint selectBuf[SELECTION_BUFFER_SIZE]; - GLint i,j,hits,names,*ptr; - - glSelectBuffer(SELECTION_BUFFER_SIZE, selectBuf); - - glRenderMode(GL_SELECT); - CTX.render_mode = GMSH_SELECT; - - glInitNames(); - glPushName(0); - - glPushMatrix(); - Orthogonalize(x,y); - Draw_Mesh(&M); - glPopMatrix (); - - hits = glRenderMode(GL_RENDER); - CTX.render_mode = GMSH_RENDER ; - - if(hits<0) return; /* Selection Buffer Overflow */ - - ptr = (GLint*)selectBuf; - - for(i=0; i<hits; i++){ - names = *ptr; - ptr++; ptr++; ptr++; - for(j=0; j<names; j++){ - if (j==0) ii[i] = *ptr; - else if (j==1) jj[i] = *ptr; - ptr++; - } - } - *n = hits; -} - -void Filter_SelectionBuffer(int n, GLuint *typ, GLuint *ient, Vertex **thev, - Curve **thec, Surface **thes, Mesh *m){ - - Vertex *v=NULL, V; - Curve *c=NULL, C; - Surface *s=NULL, S; - - int i; - GLuint typmin; - - typmin = 4; - for(i=0;i<n;i++){ - if(typ[i]<typmin) typmin = typ[i]; - } - - for(i=0;i<n;i++){ - if(typ[i] == typmin){ - switch(typ[i]){ - case 0: - v = &V; - v->Num = ient[i]; - if(Tree_Query(m->Points,&v)) *thev = v; - break; - case 1: - c = &C; - c->Num = ient[i]; - if(Tree_Query(m->Curves,&c)) *thec = c; - break; - case 2: - s = &S; - s->Num = ient[i]; - if(Tree_Query(m->Surfaces,&s)) *thes = s; - break; - } - } - } -} - -/* ------------------------------------------------------------------------ */ -/* z o o m */ -/* ------------------------------------------------------------------------ */ - - -void myZoom(GLdouble X1, GLdouble X2, GLdouble Y1, GLdouble Y2, - GLdouble Xc1, GLdouble Xc2, GLdouble Yc1, GLdouble Yc2){ - GLdouble xscale1, yscale1; - - xscale1 = CTX.s[0]; - yscale1 = CTX.s[1]; - set_s(0, CTX.s[0] * (CTX.vxmax-CTX.vxmin)/(X2-X1)); - set_s(1, CTX.s[1] * (CTX.vymax-CTX.vymin)/(Y1-Y2)); - /* bif bif bif */ - set_s(2, 0.5*(CTX.s[0]+CTX.s[1])); - set_t(0, CTX.t[0] * (xscale1/CTX.s[0]) - ((Xc1+Xc2)/2.)*(1.-(xscale1/CTX.s[0]))); - set_t(1, CTX.t[1] * (yscale1/CTX.s[1]) - ((Yc1+Yc2)/2.)*(1.-(yscale1/CTX.s[1]))); - Draw(); -} - diff --git a/Graphics/Draw.h b/Graphics/Draw.h deleted file mode 100644 index 9e40de96b7d8947ae594240cd5df0f80919f26a5..0000000000000000000000000000000000000000 --- a/Graphics/Draw.h +++ /dev/null @@ -1,117 +0,0 @@ -#ifndef _DRAW_H_ -#define _DRAW_H_ - -#include "Views.h" - -#define GMSH_RENDER 1 -#define GMSH_SELECT 2 -#define GMSH_FEEDBACK 3 - -#define SELECTION_BUFFER_SIZE 1024 - -#define TO_SCREEN 1 -#define TO_FILE 2 - -void InitOpengl(void); -void InitOverlay(void); -void InitShading(void); -void InitRenderModel(void); -void InitNoShading(void); -void InitPosition(void); - -void Orthogonalize(int x, int y); -void ClearOpengl(void); - -void set_r(int i, double val); -void set_t(int i, double val); -void set_s(int i, double val); - -void Replot(void); - -void RaiseFill (int i, double Val, double ValMin, double Raise[3][5]); -void Palette (Post_View * View, int nbi, int i); -void Palette2 (Post_View * View, double min, double max, double val); -void ColorSwitch(int i); - -int SelectEntity(int type, Vertex **v, Curve **c, Surface **s); -void ZeroHighlight(Mesh *m); -void BeginHighlight(void); -void EndHighlight(int permanent); -void HighlightEntity(Vertex *v,Curve *c, Surface *s, int permanent); -void HighlightEntityNum(int v, int c, int s, int permanant); - -void Draw3d(void); -void Draw2d(void); -void DrawUI(void); -void Draw(void); - -void Draw_String(char *s); -void Draw_Geom (Mesh *m); -void Draw_Mesh(Mesh *M); -void Draw_Post(void); -void Draw_Scales(void); -void Draw_Axes (double s); -void Draw_SmallAxes(void); -void Draw_Point(double *x, double *y, double *z, double Raise[3][5]); -void Draw_Line (double *x, double *y, double *z, double Raise[3][5]); -void Draw_Triangle (double *x, double *y, double *z,double *n, - double Raise[3][5], int shade); -void Draw_Quadrangle (double *x, double *y, double *z, double *n, - double Raise[3][5], int shade); -void Draw_Polygon (int n, double *x, double *y, double *z, double Raise[3][5]); -void Draw_Vector (int Type, int Fill, - double x, double y, double z, - double d, double dx, double dy, double dz, - double Raise[3][5]); - -void Draw_Mesh_Volumes(void *a, void *b); -void Draw_Mesh_Surfaces(void *a, void *b); -void Draw_Mesh_Extruded_Surfaces(void *a, void *b); -void Draw_Mesh_Curves(void *a, void *b); -void Draw_Mesh_Points(void *a, void *b); - -void Draw_Simplex_Volume (void *a, void *b); -void Draw_Simplex_Surfaces (void *a, void *b); -void Draw_Simplex_Curves(void *a,void *b); - -void Draw_Hexahedron_Volume (void *a, void *b); -void Draw_Prism_Volume (void *a, void *b); - -void Draw_ScalarPoint(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V); -void Draw_VectorPoint(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V); -void Draw_TensorPoint(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V); -void Draw_ScalarLine(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V); -void Draw_VectorLine(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V); -void Draw_TensorLine(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V); -void Draw_ScalarTriangle(Post_View *View, int preproNormals, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V); -void Draw_VectorTriangle(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V); -void Draw_TensorTriangle(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V); -void Draw_ScalarTetrahedron(Post_View *View, int preproNormals, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V); -void Draw_VectorTetrahedron(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V); -void Draw_TensorTetrahedron(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V); - -#endif diff --git a/Graphics/Entity.cpp b/Graphics/Entity.cpp deleted file mode 100644 index fc49732fb567abd6619a8d55d6fd269b29cddd79..0000000000000000000000000000000000000000 --- a/Graphics/Entity.cpp +++ /dev/null @@ -1,359 +0,0 @@ -// $Id: Entity.cpp,v 1.12 2001-08-11 23:28:31 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Numeric.h" -#include "Mesh.h" -#include "Draw.h" -#include "Context.h" - -extern Context_T CTX; - -/* ------------------------------------------------------------------------ */ -/* D r a w _ P o i n t */ -/* ------------------------------------------------------------------------ */ - -void Draw_Point (double *x, double *y, double *z, double Raise[3][5]){ - glBegin(GL_POINTS); - glVertex3d(x[0]+Raise[0][0], y[0]+Raise[1][0], z[0]+Raise[2][0]); - glEnd(); -} - -/* ------------------------------------------------------------------------ */ -/* D r a w _ L i n e */ -/* ------------------------------------------------------------------------ */ - -void Draw_Line (double *x, double *y, double *z, double Raise[3][5]){ - glBegin(GL_LINES); - glVertex3d(x[0]+Raise[0][0], y[0]+Raise[1][0], z[0]+Raise[2][0]); - glVertex3d(x[1]+Raise[0][1], y[1]+Raise[1][1], z[1]+Raise[2][1]); - glEnd(); -} - -/* ------------------------------------------------------------------------ */ -/* D r a w _ T r i a n g l e */ -/* ------------------------------------------------------------------------ */ - -void Draw_Triangle (double *x, double *y, double *z, double *n, - double Raise[3][5], int shade){ - - double x1x0, y1y0, z1z0, x2x0, y2y0, z2z0, nn[3]; - - glBegin(GL_TRIANGLES); - if (shade){ - if(!n){ - x1x0 = (x[1]+Raise[0][1]) - (x[0]+Raise[0][0]); - y1y0 = (y[1]+Raise[1][1]) - (y[0]+Raise[1][0]); - z1z0 = (z[1]+Raise[2][1]) - (z[0]+Raise[2][0]); - x2x0 = (x[2]+Raise[0][2]) - (x[0]+Raise[0][0]); - y2y0 = (y[2]+Raise[1][2]) - (y[0]+Raise[1][0]); - z2z0 = (z[2]+Raise[2][2]) - (z[0]+Raise[2][0]); - nn[0] = y1y0 * z2z0 - z1z0 * y2y0 ; - nn[1] = z1z0 * x2x0 - x1x0 * z2z0 ; - nn[2] = x1x0 * y2y0 - y1y0 * x2x0 ; - //norme(nn); not necessary if GL_NORMALIZE is enabled - glNormal3dv(nn); - } - else - glNormal3dv(&n[0]); - } - - glVertex3d(x[0]+Raise[0][0], y[0]+Raise[1][0], z[0]+Raise[2][0]); - - if (shade && n) - glNormal3dv(&n[3]); - - glVertex3d(x[1]+Raise[0][1], y[1]+Raise[1][1], z[1]+Raise[2][1]); - - if (shade && n) - glNormal3dv(&n[6]); - - glVertex3d(x[2]+Raise[0][2], y[2]+Raise[1][2], z[2]+Raise[2][2]); - glEnd(); - -} - -/* ------------------------------------------------------------------------ */ -/* D r a w _ Q u a d r a n g l e */ -/* ------------------------------------------------------------------------ */ - -void Draw_Quadrangle (double *x, double *y, double *z, double *n, - double Raise[3][5], int shade){ - double x2[3]={x[2],x[3],x[0]}; - double y2[3]={y[2],y[3],y[0]}; - double z2[3]={z[2],z[3],z[0]}; - - Draw_Triangle(x,y,z,n,Raise,shade); - if (n){ - double n2[9]; - n2[0] = n[6]; - n2[1] = n[7]; - n2[2] = n[8]; - n2[3] = n[9]; - n2[4] = n[10]; - n2[5] = n[11]; - n2[6] = n[0]; - n2[7] = n[1]; - n2[8] = n[2]; - Draw_Triangle(x2,y2,z2,n2,Raise,shade); - } - else - Draw_Triangle(x2,y2,z2,n,Raise,shade); - -} - -/* ------------------------------------------------------------------------ */ -/* D r a w _ P o l y g o n */ -/* ------------------------------------------------------------------------ */ - -void Draw_Polygon (int n, double *x, double *y, double *z, - double Raise[3][5]){ - int i; - - glBegin(GL_POLYGON); - for(i=0;i<n;i++) glVertex3d(x[i]+Raise[0][i], - y[i]+Raise[1][i], - z[i]+Raise[2][i]); - glEnd(); -} - -/* ------------------------------------------------------------------------ */ -/* D r a w _ V e c t o r */ -/* ------------------------------------------------------------------------ */ - -void Draw_Vector (int Type, int Fill, - double x, double y, double z, - double d, double dx, double dy, double dz, - double Raise[3][5]){ - - double n[3],t[3],u[3]; - double l,b,c, f1, f2; - - if(d == 0.0) return; - - if(Raise != NULL){ - x += Raise[0][0] ; - y += Raise[1][0] ; - z += Raise[2][0] ; - } - - if(Type == DRAW_POST_SEGMENT){ - glBegin(GL_LINES); - glVertex3d(x, y, z); - glVertex3d(x+dx, y+dy, z+dz); - glEnd(); - return; - } - - n[0] = dx/d ; n[1] = dy/d ; n[2] = dz/d ; - - if( (fabs(n[0]) >= fabs(n[1]) && fabs(n[0]) >= fabs(n[2])) || - (fabs(n[1]) >= fabs(n[0]) && fabs(n[1]) >= fabs(n[2])) ){ - t[0] = n[1] ; t[1] = -n[0] ; t[2] = 0. ; - } - else{ - t[0] = 0. ; t[1] = n[2] ; t[2] = -n[1] ; - } - - l = sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]); - t[0] /= l ; t[1] /= l ; t[2] /= l ; - - u[0] = n[1]*t[2]-n[2]*t[1]; - u[1] = n[2]*t[0]-n[0]*t[2]; - u[2] = n[0]*t[1]-n[1]*t[0]; - - l = sqrt(u[0]*u[0]+u[1]*u[1]+u[2]*u[2]); - u[0] /= l ; u[1] /= l ; u[2] /= l ; - - switch(Type){ - - case DRAW_POST_ARROW : - - b = 0.0666 * d; - - f1 = 0.85 ; - f2 = 0.8 ; - - - b *= 2 ; - f1 /= 1.5 ; - f2 /= 1.5 ; - - if(Fill){ - glBegin(GL_LINES); - glVertex3d(x, y, z); - glVertex3d(x+dx, y+dy, z+dz); - glEnd(); - - glBegin(GL_TRIANGLES); - glVertex3d(x+dx, y+dy, z+dz); - glVertex3d(x+f2*dx+b*(t[0]), y+f2*dy+b*(t[1]), z+f2*dz+b*(t[2])); - glVertex3d(x+f1*dx, y+f1*dy, z+f1*dz); - - glVertex3d(x+dx, y+dy, z+dz); - glVertex3d(x+f2*dx+b*(-t[0]), y+f2*dy+b*(-t[1]), z+f2*dz+b*(-t[2])); - glVertex3d(x+f1*dx, y+f1*dy, z+f1*dz); - - glVertex3d(x+dx, y+dy, z+dz); - glVertex3d(x+f2*dx+b*(-u[0]), y+f2*dy+b*(-u[1]), z+f2*dz+b*(-u[2])); - glVertex3d(x+f1*dx, y+f1*dy, z+f1*dz); - - glVertex3d(x+dx, y+dy, z+dz); - glVertex3d(x+f2*dx+b*(u[0]), y+f2*dy+b*(u[1]), z+f2*dz+b*(u[2])); - glVertex3d(x+f1*dx, y+f1*dy, z+f1*dz); - glEnd(); - } - else{ - glBegin(GL_LINE_STRIP); - glVertex3d(x, y, z); - glVertex3d(x+dx, y+dy, z+dz); - glVertex3d(x+f2*dx+b*(t[0]), y+f2*dy+b*(t[1]), z+f2*dz+b*(t[2])); - glVertex3d(x+f1*dx, y+f1*dy, z+f1*dz); - glVertex3d(x+f2*dx+b*(-t[0]), y+f2*dy+b*(-t[1]), z+f2*dz+b*(-t[2])); - glVertex3d(x+dx, y+dy, z+dz); - glVertex3d(x+f2*dx+b*(-u[0]), y+f2*dy+b*(-u[1]), z+f2*dz+b*(-u[2])); - glVertex3d(x+f1*dx, y+f1*dy, z+f1*dz); - glVertex3d(x+f2*dx+b*(u[0]), y+f2*dy+b*(u[1]), z+f2*dz+b*(u[2])); - glVertex3d(x+dx, y+dy, z+dz); - glEnd(); - } - break ; - - case DRAW_POST_ARROW_HEAD : - Msg(GERROR, "Arrow Head not done"); - break ; - - case DRAW_POST_PYRAMID : - - b = .1333 * d; - - if(Fill){ - glBegin(GL_TRIANGLES); - glVertex3d(x+dx, y+dy, z+dz); - glVertex3d(x+b*(t[0]), y+b*(t[1]), z+b*(t[2])); - glVertex3d(x+b*(-u[0]), y+b*(-u[1]), z+b*(-u[2])); - - glVertex3d(x+dx, y+dy, z+dz); - glVertex3d(x+b*(-u[0]), y+b*(-u[1]), z+b*(-u[2])); - glVertex3d(x+b*(-t[0]), y+b*(-t[1]), z+b*(-t[2])); - - glVertex3d(x+dx, y+dy, z+dz); - glVertex3d(x+b*(-t[0]), y+b*(-t[1]), z+b*(-t[2])); - glVertex3d(x+b*(u[0]), y+b*(u[1]), z+b*(u[2])); - - glVertex3d(x+dx, y+dy, z+dz); - glVertex3d(x+b*(u[0]), y+b*(u[1]), z+b*(u[2])); - glVertex3d(x+b*(t[0]), y+b*(t[1]), z+b*(t[2])); - glEnd(); - } - else{ - glBegin(GL_LINE_LOOP); - glVertex3d(x+b*(t[0]), y+b*(t[1]), z+b*(t[2])); - glVertex3d(x+b*(-u[0]), y+b*(-u[1]), z+b*(-u[2])); - glVertex3d(x+b*(-t[0]), y+b*(-t[1]), z+b*(-t[2])); - glVertex3d(x+b*(u[0]), y+b*(u[1]), z+b*(u[2])); - glEnd(); - - glBegin(GL_LINES); - glVertex3d(x+b*(t[0]), y+b*(t[1]), z+b*(t[2])); - glVertex3d(x+dx, y+dy, z+dz); - - glVertex3d(x+b*(-u[0]), y+b*(-u[1]), z+b*(-u[2])); - glVertex3d(x+dx, y+dy, z+dz); - - glVertex3d(x+b*(-t[0]), y+b*(-t[1]), z+b*(-t[2])); - glVertex3d(x+dx, y+dy, z+dz); - - glVertex3d (x+b*(u[0]), y+b*(u[1]), z+b*(u[2])); - glVertex3d(x+dx, y+dy, z+dz); - glEnd(); - } - break ; - - case DRAW_POST_CONE : - - b = .1333 * d; - c = .7071 * b; - - if(Fill){ - glBegin(GL_TRIANGLES); - glVertex3d(x+b*(t[0]), y+b*(t[1]), z+b*(t[2])); - glVertex3d(x+c*(t[0]-u[0]), y+c*(t[1]-u[1]), z+c*(t[2]-u[2])); - glVertex3d(x+dx, y+dy, z+dz); - - glVertex3d(x+c*(t[0]-u[0]), y+c*(t[1]-u[1]), z+c*(t[2]-u[2])); - glVertex3d(x+b*(-u[0]), y+b*(-u[1]), z+b*(-u[2])); - glVertex3d(x+dx, y+dy, z+dz); - - glVertex3d(x+b*(-u[0]), y+b*(-u[1]), z+b*(-u[2])); - glVertex3d(x+c*(-t[0]-u[0]), y+c*(-t[1]-u[1]), z+c*(-t[2]-u[2])); - glVertex3d(x+dx, y+dy, z+dz); - - glVertex3d(x+c*(-t[0]-u[0]), y+c*(-t[1]-u[1]), z+c*(-t[2]-u[2])); - glVertex3d(x+b*(-t[0]), y+b*(-t[1]), z+b*(-t[2])); - glVertex3d(x+dx, y+dy, z+dz); - - glVertex3d(x+b*(-t[0]), y+b*(-t[1]), z+b*(-t[2])); - glVertex3d(x+c*(u[0]-t[0]), y+c*(u[1]-t[1]), z+c*(u[2]-t[2])); - glVertex3d(x+dx, y+dy, z+dz); - - glVertex3d(x+c*(u[0]-t[0]), y+c*(u[1]-t[1]), z+c*(u[2]-t[2])); - glVertex3d(x+b*(u[0]), y+b*(u[1]), z+b*(u[2])); - glVertex3d(x+dx, y+dy, z+dz); - - glVertex3d(x+b*(u[0]), y+b*(u[1]), z+b*(u[2])); - glVertex3d(x+c*(t[0]+u[0]), y+c*(t[1]+u[1]), z+c*(t[2]+u[2])); - glVertex3d(x+dx, y+dy, z+dz); - - glVertex3d(x+c*(t[0]+u[0]), y+c*(t[1]+u[1]), z+c*(t[2]+u[2])); - glVertex3d(x+b*(t[0]), y+b*(t[1]), z+b*(t[2])); - glVertex3d(x+dx, y+dy, z+dz); - glEnd(); - } - else{ - glBegin(GL_LINE_LOOP); - glVertex3d(x+b*(t[0]), y+b*(t[1]), z+b*(t[2])); - glVertex3d(x+c*(t[0]-u[0]), y+c*(t[1]-u[1]), z+c*(t[2]-u[2])); - glVertex3d(x+b*(-u[0]), y+b*(-u[1]), z+b*(-u[2])); - glVertex3d(x+c*(-t[0]-u[0]), y+c*(-t[1]-u[1]), z+c*(-t[2]-u[2])); - glVertex3d(x+b*(-t[0]), y+b*(-t[1]), z+b*(-t[2])); - glVertex3d(x+c*(u[0]-t[0]), y+c*(u[1]-t[1]), z+c*(u[2]-t[2])); - glVertex3d(x+b*(u[0]), y+b*(u[1]), z+b*(u[2])); - glVertex3d(x+c*(t[0]+u[0]), y+c*(t[1]+u[1]), z+c*(t[2]+u[2])); - glEnd(); - - glBegin(GL_LINES); - glVertex3d(x+b*(t[0]), y+b*(t[1]), z+b*(t[2])); - glVertex3d(x+dx, y+dy, z+dz); - - glVertex3d(x+c*(t[0]-u[0]), y+c*(t[1]-u[1]), z+c*(t[2]-u[2])); - glVertex3d(x+dx, y+dy, z+dz); - - glVertex3d(x+b*(-u[0]), y+b*(-u[1]), z+b*(-u[2])); - glVertex3d(x+dx, y+dy, z+dz); - - glVertex3d(x+c*(-t[0]-u[0]), y+c*(-t[1]-u[1]), z+c*(-t[2]-u[2])); - glVertex3d(x+dx, y+dy, z+dz); - - glVertex3d(x+b*(-t[0]), y+b*(-t[1]), z+b*(-t[2])); - glVertex3d(x+dx, y+dy, z+dz); - - glVertex3d(x+c*(u[0]-t[0]), y+c*(u[1]-t[1]), z+c*(u[2]-t[2])); - glVertex3d(x+dx, y+dy, z+dz); - - glVertex3d(x+b*(u[0]), y+b*(u[1]), z+b*(u[2])); - glVertex3d(x+dx, y+dy, z+dz); - - glVertex3d(x+c*(t[0]+u[0]), y+c*(t[1]+u[1]), z+c*(t[2]+u[2])); - glVertex3d(x+dx, y+dy, z+dz); - glEnd(); - } - break ; - - default : - Msg(GERROR, "Unknown type of vector to draw"); - break; - } - -} - diff --git a/Graphics/Geom.cpp b/Graphics/Geom.cpp deleted file mode 100644 index beadd9c9f24da577b8cc2283d8dd9f5518a9c36b..0000000000000000000000000000000000000000 --- a/Graphics/Geom.cpp +++ /dev/null @@ -1,739 +0,0 @@ -// $Id: Geom.cpp,v 1.27 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Numeric.h" -#include "Geo.h" -#include "Mesh.h" -#include "Utils.h" -#include "Draw.h" -#include "Context.h" -#include "Verif.h" -#include "Interpolation.h" -#include "Visibility.h" -#include "STL.h" -#include "gl2ps.h" - -extern Context_T CTX; -extern Mesh *THEM; - -/* ------------------------------------------------------------------------ */ -/* D r a w _ P o i n t */ -/* ------------------------------------------------------------------------ */ - -static int Highlighted = 0; - -void Draw_GeoPoint (void *a, void *b){ - Vertex **v; - char Num[100]; - - v = (Vertex**)a; - - if(CTX.render_mode == GMSH_SELECT){ - glLoadName(0); - glPushName((*v)->Num); - } - - if((*v)->Frozen){ - glPointSize(5); gl2psPointSize(5); - glColor4ubv((GLubyte*)&CTX.color.geom.point_sel); - } - else if(Highlighted){ - glPointSize(5); gl2psPointSize(5); - glColor4ubv((GLubyte*)&CTX.color.geom.point_hlt); - } - else{ - glPointSize(3); gl2psPointSize(3); - glColor4ubv((GLubyte*)&CTX.color.geom.point); - } - - if(CTX.geom.points){ - glBegin(GL_POINTS); - glVertex3d((*v)->Pos.X, (*v)->Pos.Y, (*v)->Pos.Z); - glEnd(); - } - - if(CTX.geom.points_num){ - sprintf(Num,"%d",(*v)->Num); - glRasterPos3d((*v)->Pos.X+3*CTX.pixel_equiv_x/CTX.s[0], - (*v)->Pos.Y+3*CTX.pixel_equiv_x/CTX.s[1], - (*v)->Pos.Z+3*CTX.pixel_equiv_x/CTX.s[2]); - Draw_String(Num); - } - - if(CTX.render_mode == GMSH_SELECT){ - glPopName(); - } - -} - -/* ------------------------------------------------------------------------ */ -/* D r a w _ C u r v e */ -/* ------------------------------------------------------------------------ */ - - -void Draw_Curve (void *a, void *b){ - int i,N; - double mod,dd; - char Num[100]; - Curve *c; - Vertex v,dv; - - c = *(Curve**)a; - - if(c->Dirty || c->Num<0 || !EntiteEstElleVisible(c->Num)) return; - - if(CTX.render_mode == GMSH_SELECT){ - glLoadName(1); - glPushName(c->Num); - } - - if((c)->ipar[3]){ - glLineWidth(2.); gl2psLineWidth(2.*CTX.print.geom_line_width); - glColor4ubv((GLubyte*)&CTX.color.geom.line_sel); - } - else if(Highlighted){ - glLineWidth(2.); gl2psLineWidth(2.*CTX.print.geom_line_width); - glColor4ubv((GLubyte*)&CTX.color.geom.line_hlt); - } - else{ - glLineWidth(1.); gl2psLineWidth(1.*CTX.print.geom_line_width); - glColor4ubv((GLubyte*)&CTX.color.geom.line); - } - - if(CTX.geom.lines){ - - if(c->Typ == MSH_SEGM_LINE) - N = List_Nbr(c->Control_Points); - else - N = 50; - if(c->Typ == MSH_SEGM_DISCRETE) - { - Simplex *s; - List_T *temp = Tree2List(c->Simplexes); - for(i=0;i<List_Nbr(temp);i++) - { - List_Read(temp,i,&s); - glBegin(GL_LINE_STRIP); - glVertex3d(s->V[0]->Pos.X,s->V[0]->Pos.Y,s->V[0]->Pos.Z); - glVertex3d(s->V[1]->Pos.X,s->V[1]->Pos.Y,s->V[1]->Pos.Z); - glEnd(); - } - List_Delete(temp); - } - else - { - glBegin(GL_LINE_STRIP); - for(i=0;i<N;i++){ - v = InterpolateCurve(c,(double)i/(double)(N-1),0); - glVertex3d(v.Pos.X,v.Pos.Y,v.Pos.Z); - } - glEnd(); - } - } - - if(CTX.geom.lines_num){ - v = InterpolateCurve(c,0.5,0); - sprintf(Num,"%d",c->Num); - glRasterPos3d(v.Pos.X+3*CTX.pixel_equiv_x/CTX.s[0], - v.Pos.Y+3*CTX.pixel_equiv_x/CTX.s[1], - v.Pos.Z+3*CTX.pixel_equiv_x/CTX.s[2]); - Draw_String(Num); - } - - if(CTX.geom.tangents){ - v = InterpolateCurve(c,0.5,0); - dv = InterpolateCurve(c,0.5,1); - mod = sqrt(dv.Pos.X*dv.Pos.X+dv.Pos.Y*dv.Pos.Y+dv.Pos.Z*dv.Pos.Z); - dv.Pos.X = dv.Pos.X / mod * CTX.geom.tangents * CTX.pixel_equiv_x/CTX.s[0] ; - dv.Pos.Y = dv.Pos.Y / mod * CTX.geom.tangents * CTX.pixel_equiv_x/CTX.s[1] ; - dv.Pos.Z = dv.Pos.Z / mod * CTX.geom.tangents * CTX.pixel_equiv_x/CTX.s[2] ; - dd = sqrt(dv.Pos.X*dv.Pos.X+dv.Pos.Y*dv.Pos.Y+dv.Pos.Z*dv.Pos.Z); - glColor4ubv((GLubyte*)&CTX.color.geom.tangents); - Draw_Vector(DRAW_POST_ARROW, 0, v.Pos.X,v.Pos.Y,v.Pos.Z, - dd, dv.Pos.X,dv.Pos.Y,dv.Pos.Z, NULL); - } - - if(CTX.render_mode == GMSH_SELECT){ - glPopName (); - } - -} - - - -/* ------------------------------------------------------------------------ */ -/* D r a w _ S u r f a c e */ -/* ------------------------------------------------------------------------ */ - -void put_Z (Vertex *v, Surface *s){ - Vertex V; - V.Pos.X = s->a; - V.Pos.Y = s->b; - V.Pos.Z = s->c; - Projette(&V,s->plan); - if(V.Pos.Z != 0.0) - v->Pos.Z = (s->d - V.Pos.X * v->Pos.X - V.Pos.Y * v->Pos.Y)/V.Pos.Z; - else v->Pos.Z = 0.0; - - Projette(v,s->invplan); -} - -int isPointOnPlanarSurface (Surface *S, double X, double Y, double Z, double n[3]){ - Curve *C; - Vertex V,P1,P2; - int i,j,N; - double Angle,u1,u2; - - Angle = 0.0; - V.Pos.X = X; - V.Pos.Y = Y; - V.Pos.Z = Z; - - for(i=0;i<List_Nbr(S->Generatrices);i++){ - - List_Read(S->Generatrices,i,&C); - - if(C->Typ == MSH_SEGM_LINE) - N = 1; - else - N = 10; - - for(j=0;j<N;j++){ - u1 = (double)j/(double)(N); - u2 = (double)(j+1)/(double)(N); - P1 = InterpolateCurve(C,u1,0); - P2 = InterpolateCurve(C,u2,0); - Angle += angle_plan(&V,&P1,&P2,n); - } - - } - - //printf(" %d -> angle %g\n", S->Num, fabs(Angle)); - - if(fabs(Angle) > 6.0 && fabs(Angle) < 7.0) // Should be 2 * Pi or 0 - return 1; - return 0; - -} - -void Draw_Plane_Surface (Surface *s){ - int i, j, k; - Curve *c; - double minx, miny, maxx, maxy, t, n[3], nn; - Vertex P1, P2, P3, V[4], vv, vv1, vv2; - char Num[100]; - - static List_T *points; - static int deb=1; - - if(!s->Orientations){ - - s->Orientations = List_Create(20,2,sizeof(Vertex)); - - if(deb){ - points = List_Create(10,10,sizeof(Vertex*)); - deb = 0; - } - else - List_Reset(points); - - for(i=0;i<List_Nbr(s->Generatrices);i++){ - List_Read(s->Generatrices,i,&c); - for(j=0;j<List_Nbr(c->Control_Points);j++){ - List_Add(points,List_Pointer(c->Control_Points,j)); - } - } - - MeanPlane(points, s); - - k = 0; - - for(i=0;i<List_Nbr(s->Generatrices);i++){ - List_Read (s->Generatrices,i,&c); - P1 = InterpolateCurve(c,0.0,0); - P2 = InterpolateCurve(c,0.5,0); - P3 = InterpolateCurve(c,1.0,0); - Projette(&P1,s->plan); - Projette(&P2,s->plan); - Projette(&P3,s->plan); - if(!k){ - k = 1; - minx = maxx = P1.Pos.X; - miny = maxy = P1.Pos.Y; - } - minx = DMIN(DMIN(DMIN(minx,P1.Pos.X),P2.Pos.X),P3.Pos.X); - miny = DMIN(DMIN(DMIN(miny,P1.Pos.Y),P2.Pos.Y),P3.Pos.Y); - maxx = DMAX(DMAX(DMAX(maxx,P1.Pos.X),P2.Pos.X),P3.Pos.X); - maxy = DMAX(DMAX(DMAX(maxy,P1.Pos.Y),P2.Pos.Y),P3.Pos.Y); - } - - V[0].Pos.X = minx; V[0].Pos.Y = miny; - V[1].Pos.X = maxx; V[1].Pos.Y = miny; - V[2].Pos.X = maxx; V[2].Pos.Y = maxy; - V[3].Pos.X = minx; V[3].Pos.Y = maxy; - - for(i=0;i<4;i++){ - V[i].Pos.Z = 0.0; - put_Z(&V[i],s); - } - - n[0] = s->plan[2][0]; - n[1] = s->plan[2][1]; - n[2] = s->plan[2][2]; - norme(n); - - k = 0; - for(i=0;i<100;i++){ - t = (double)i/(double)(100); - vv.Pos.X = t * 0.5 * (V[0].Pos.X + V[1].Pos.X) + (1.-t) * - 0.5 * (V[2].Pos.X + V[3].Pos.X); - vv.Pos.Y = t * 0.5 * (V[0].Pos.Y + V[1].Pos.Y) + (1.-t) * - 0.5 * (V[2].Pos.Y + V[3].Pos.Y); - vv.Pos.Z = t * 0.5 * (V[0].Pos.Z + V[1].Pos.Z) + (1.-t) * - 0.5 * (V[2].Pos.Z + V[3].Pos.Z); - - if(isPointOnPlanarSurface(s,vv.Pos.X,vv.Pos.Y,vv.Pos.Z,n)){ - if(!k){ - List_Add(s->Orientations,&vv); - k = 1; - } - } - else{ - if(k){ - List_Add(s->Orientations,&vv); - k = 0; - } - } - } - if(k) List_Add(s->Orientations,&vv); - - k = 0; - for(i=0;i<100;i++){ - t = (double)i/(double)(100); - vv.Pos.X = t*.5*(V[0].Pos.X+V[3].Pos.X)+(1.-t)*.5*(V[2].Pos.X+V[1].Pos.X); - vv.Pos.Y = t*.5*(V[0].Pos.Y+V[3].Pos.Y)+(1.-t)*.5*(V[2].Pos.Y+V[1].Pos.Y); - vv.Pos.Z = t*.5*(V[0].Pos.Z+V[3].Pos.Z)+(1.-t)*.5*(V[2].Pos.Z+V[1].Pos.Z); - if(isPointOnPlanarSurface(s,vv.Pos.X,vv.Pos.Y,vv.Pos.Z,n)){ - if(!k){ - List_Add(s->Orientations,&vv); - k = 1; - } - } - else{ - if(k){ - List_Add(s->Orientations,&vv); - k = 0; - } - } - } - if(k)List_Add(s->Orientations,&vv); - - Msg(STATUS2, "Plane Surface %d (%d points)",s->Num,List_Nbr(s->Orientations)); - } - - if(CTX.geom.surfaces){ - glBegin(GL_LINES); - for(i=0;i<List_Nbr(s->Orientations);i++){ - List_Read(s->Orientations,i,&vv); - glVertex3d(vv.Pos.X,vv.Pos.Y,vv.Pos.Z); - } - glEnd(); - } - - //BUG JapanDef.geo - if(CTX.geom.surfaces_num && List_Nbr(s->Orientations)>1){ - List_Read(s->Orientations,0,&vv1); - List_Read(s->Orientations,1,&vv2); - sprintf(Num,"%d",s->Num); - glRasterPos3d((vv2.Pos.X+vv1.Pos.X)/2. + 3*CTX.pixel_equiv_x/CTX.s[0], - (vv2.Pos.Y+vv1.Pos.Y)/2. + 3*CTX.pixel_equiv_x/CTX.s[1], - (vv2.Pos.Z+vv1.Pos.Z)/2. + 3*CTX.pixel_equiv_x/CTX.s[2]); - Draw_String(Num); - } - - if(CTX.geom.normals) { - glDisable(GL_LINE_STIPPLE) ; - List_Read(s->Orientations,0,&vv1); - List_Read(s->Orientations,1,&vv2); - n[0] = s->plan[2][0]; - n[1] = s->plan[2][1]; - n[2] = s->plan[2][2]; - norme(n); - n[0] *= CTX.geom.normals * CTX.pixel_equiv_x/CTX.s[0] ; - n[1] *= CTX.geom.normals * CTX.pixel_equiv_x/CTX.s[1] ; - n[2] *= CTX.geom.normals * CTX.pixel_equiv_x/CTX.s[2] ; - nn = sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]); - glColor4ubv((GLubyte*)&CTX.color.geom.normals); - Draw_Vector(DRAW_POST_ARROW, 0, (vv2.Pos.X+vv1.Pos.X)/2., (vv2.Pos.Y+vv1.Pos.Y)/2., - (vv2.Pos.Z+vv1.Pos.Z)/2., nn, n[0],n[1],n[2],NULL); - } -} - - -void Draw_NonPlane_Surface (Surface *s){ - Vertex v,n1,n2,n3; - int i,NbTics,N; - double u,n[3],nn,nx[3],ny[3]; - double tics[20]; - double u0, un,v0,vn; - int kk; - char Num[100]; - - u0 = v0 = 0; - un = vn = 1; - - if(s->Typ == MSH_SURF_NURBS){ - NbTics = 5; - u0 = s->ku[0]; - un = s->ku[s->OrderU + s->Nu]; - v0 = s->kv[0]; - vn = s->kv[s->OrderV + s->Nv]; - for(i=0;i<NbTics;i++) - tics[i] = v0 + ((double)(i+1)/(double)NbTics) * (vn - v0); - if(CTX.geom.shade){ - GLUnurbsObj *nurb; - nurb=gluNewNurbsRenderer(); - gluNurbsProperty(nurb,(GLenum)GLU_SAMPLING_TOLERANCE,50.0); - gluNurbsProperty(nurb,(GLenum)GLU_DISPLAY_MODE,GLU_FILL ); - gluBeginSurface(nurb); - gluNurbsSurface(nurb, s->Nu+s->OrderU+1,s->ku, s->Nv+s->OrderV+1,s->kv, - 4, 4*s->Nu, s->cp, s->OrderU+1,s->OrderV+1, - GL_MAP2_VERTEX_4); - gluEndSurface(nurb); - gluDeleteNurbsRenderer(nurb); - return; - } - } - else { - NbTics = 1; - tics[0] = 0.5; - } - - if(CTX.geom.surfaces){ - for(kk = 0;kk<NbTics;kk++){ - N = 50; - glBegin(GL_LINE_STRIP); - for(i=0;i<N+1;i++){ - u = u0 + (un-u0)*(double)i/(double)N; - v = InterpolateSurface(s,u,tics[kk],0,0); - glVertex3d(v.Pos.X,v.Pos.Y,v.Pos.Z); - } - glEnd(); - } - } - - if(s->Typ == MSH_SURF_NURBS){ - for(i=0;i<NbTics;i++){ - tics[i] = u0+((double)(i+1)/(double)NbTics) * (un - u0); - } - } - - if(CTX.geom.surfaces){ - for( kk = 0;kk<NbTics;kk++){ - glBegin(GL_LINE_STRIP); - for(i=0;i<N+1;i++){ - u = v0 + (vn-v0)*(double)i/(double)N; - v = InterpolateSurface(s,tics[kk],u,0,0); - glVertex3d(v.Pos.X,v.Pos.Y,v.Pos.Z); - } - glEnd(); - } - } - - if(CTX.geom.surfaces_num){ - v = InterpolateSurface(s,0.5,0.5,0,0); - sprintf(Num,"%d",s->Num); - glRasterPos3d(v.Pos.X+3*CTX.pixel_equiv_x/CTX.s[0], - v.Pos.Y+3*CTX.pixel_equiv_x/CTX.s[1], - v.Pos.Z+3*CTX.pixel_equiv_x/CTX.s[2]); - Draw_String(Num); - } - - if(CTX.geom.normals){ - glDisable(GL_LINE_STIPPLE); - n1 = InterpolateSurface(s,0.5,0.5,0,0); - n2 = InterpolateSurface(s,0.6,0.5,0,0); - n3 = InterpolateSurface(s,0.5,0.6,0,0); - nx[0] = n2.Pos.X - n1.Pos.X; - nx[1] = n2.Pos.Y - n1.Pos.Y; - nx[2] = n2.Pos.Z - n1.Pos.Z; - ny[0] = n3.Pos.X - n1.Pos.X; - ny[1] = n3.Pos.Y - n1.Pos.Y; - ny[2] = n3.Pos.Z - n1.Pos.Z; - prodve(nx,ny,n); - norme(n); - n[0] *= CTX.geom.normals * CTX.pixel_equiv_x/CTX.s[0] ; - n[1] *= CTX.geom.normals * CTX.pixel_equiv_x/CTX.s[1] ; - n[2] *= CTX.geom.normals * CTX.pixel_equiv_x/CTX.s[2] ; - nn = sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]); - glColor4ubv((GLubyte*)&CTX.color.geom.normals); - Draw_Vector(DRAW_POST_ARROW, 0, n1.Pos.X, n1.Pos.Y, n1.Pos.Z, - nn, n[0],n[1],n[2],NULL); - } - -} - -void Draw_Surface (void *a, void *b){ - Surface *s; - - s = *(Surface**)a; - - if(s->Dirty || !s || !s->Support || !EntiteEstElleVisible(s->Num)) return; - - if(CTX.render_mode == GMSH_SELECT){ - glLoadName(2); - glPushName(s->Num); - } - - if(!CTX.geom.shade){ - if(s->Mat){ - glLineWidth(2.); gl2psLineWidth(2.); - glColor4ubv((GLubyte*)&CTX.color.geom.surface_sel); - } - else if (Highlighted){ - glLineWidth(2.); gl2psLineWidth(2.); - glColor4ubv((GLubyte*)&CTX.color.geom.surface_hlt); - } - else{ - glLineWidth(1.); gl2psLineWidth(1.); - glColor4ubv((GLubyte*)&CTX.color.geom.surface); - } - glEnable(GL_LINE_STIPPLE); - glLineStipple(1,0x0F0F); - } - else{ - ColorSwitch(abs(s->Num)); - } - - if(s->Typ == MSH_SURF_STL){ - glDisable(GL_LINE_STIPPLE); - Tree_Action(s->STL->Simplexes,Draw_Simplex_Surfaces); - } - else if(s->Typ == MSH_SURF_DISCRETE){ - glDisable(GL_LINE_STIPPLE); - Tree_Action(s->Simplexes,Draw_Simplex_Surfaces); - } - else if(s->Typ == MSH_SURF_PLAN) - Draw_Plane_Surface(s); - else - Draw_NonPlane_Surface(s); - - if(CTX.render_mode == GMSH_SELECT){ - glPopName (); - } - - glDisable(GL_LINE_STIPPLE); - -} - - -/* ------------------------------------------------------------------------ */ -/* D r a w _ V o l u m e */ -/* ------------------------------------------------------------------------ */ - -int TheVolume; - -void Draw_Curve_For_Volume (void *a, void *b){ - int i,N; - Curve *c; - Vertex v; - - glLineWidth(2.); gl2psLineWidth(2.); - - c = *(Curve**)a; - - if(CTX.render_mode == GMSH_SELECT){ - glLoadName(3); - glPushName(TheVolume); - } - - if(c->Typ == MSH_SEGM_LINE) - N = List_Nbr(c->Control_Points); - else - N = 10; - - glBegin(GL_LINE_STRIP); - for(i=0;i<N;i++){ - v = InterpolateCurve(c,0.2*(double)i/(double)(N-1),0); - glVertex3d(v.Pos.X,v.Pos.Y,v.Pos.Z); - } - glEnd(); - - glBegin(GL_LINE_STRIP); - for(i=N-1;i>=0;i--){ - v = InterpolateCurve(c,1.-0.2*(double)i/(double)(N-1),0); - glVertex3d(v.Pos.X,v.Pos.Y,v.Pos.Z); - } - glEnd(); - - - if(CTX.render_mode == GMSH_SELECT){ - glPopName (); - } - - if((c)->ipar[3]){ - glLineWidth(1.); gl2psLineWidth(1.); - } - -} - - -void DrawVolumes (Mesh *m){ - - -} - - - - -/* ------------------------------------------------------------------------ */ -/* D r a w _ G e o m */ -/* ------------------------------------------------------------------------ */ - -void Draw_Geom (Mesh *m) { - - if(m->status == -1) return; - - if(CTX.geom.points || CTX.geom.points_num) - Tree_Action(m->Points, Draw_GeoPoint); - if(CTX.geom.lines || CTX.geom.lines_num) - Tree_Action(m->Curves, Draw_Curve ); - if(CTX.geom.surfaces || CTX.geom.surfaces_num) - Tree_Action(m->Surfaces,Draw_Surface); - if(CTX.geom.volumes || CTX.geom.volumes_num) - DrawVolumes(m); - -} - -void ZeroCurve(void *a,void *b){ - Curve *c; - c = *(Curve**)a; - c->ipar[3] = 0; -} - -void ZeroPoint(void *a,void *b){ - Vertex *v; - v = *(Vertex**)a; - v->Frozen = 0; -} - -void ZeroSurface(void *a,void *b){ - Surface *s; - s = *(Surface**)a; - s->Mat = 0; -} - -void ZeroHighlight(Mesh *m){ - Tree_Action(m->Points,ZeroPoint); - Tree_Action(m->Curves,ZeroCurve); - Tree_Action(m->Surfaces,ZeroSurface); -} - - -/* ------------------------------------------------------------------------ */ -/* H i g h l i g h t */ -/* ------------------------------------------------------------------------ */ - -void BeginHighlight(void){ - if(CTX.geom.highlight){ - if(CTX.overlay) - InitOverlay(); - else - InitOpengl(); - Highlighted = 1; - glPushMatrix(); - InitPosition(); -#ifdef _XMOTIF - if(CTX.db) glDrawBuffer(GL_FRONT); -#endif - } -} - - -void EndHighlight(int permanent){ - Highlighted = 0; - if(permanent) - Draw(); - else{ - if(CTX.geom.highlight) { - glPopMatrix(); -#ifdef _XMOTIF - if(CTX.db) glDrawBuffer(GL_BACK); -#endif - } - } -} - -void HighlightEntity(Vertex *v,Curve *c, Surface *s, int permanent){ - - Curve *cc; - char Message[256],temp[256]; - int i,nbg; - - if(v){ - if(permanent) v->Frozen = 1; - if(CTX.geom.highlight) Draw_GeoPoint(&v,NULL); - Msg(STATUS1N,"Point %d {%.5g,%.5g,%.5g} (%.5g)", v->Num,v->Pos.X,v->Pos.Y,v->Pos.Z,v->lc); - } - else if(c){ - if(permanent) c->ipar[3] = 1; - if(CTX.geom.highlight) Draw_Curve(&c,NULL); - Msg(STATUS1N,"Curve %d {%d->%d}",c->Num,c->beg->Num,c->end->Num); - } - else if(s){ - if(permanent && s->Mat == 1) return; - if(permanent) s->Mat = 1; - if(CTX.geom.highlight) Draw_Surface(&s,NULL); - sprintf(Message,"Surface %d {",s->Num); - - nbg = List_Nbr(s->Generatrices) ; - - if(nbg < 10){ - for(i=0;i<nbg;i++){ - List_Read(s->Generatrices,i,&cc); - if(!i)sprintf(temp,"%d",cc->Num); - else sprintf(temp,",%d",cc->Num); - strcat(Message,temp); - } - } - else{ - strcat(Message,"..."); - } - strcat(Message,"}"); - Msg(STATUS1N,Message); - } - else{ - Msg(STATUS1N," "); - } - glFlush(); -} - - -void HighlightEntityNum(int v, int c, int s, int permanant){ - Vertex *pv,V; - Curve *pc,C; - Surface *ps,S; - if(v){ - pv = &V; - pv->Num = v; - if(Tree_Query(THEM->Vertices,&pv)){ - HighlightEntity(pv,NULL,NULL,permanant); - } - } - if(c){ - pc = &C; - pc->Num = c; - if(Tree_Query(THEM->Curves,&pc)){ - HighlightEntity(NULL,pc,NULL,permanant); - } - } - if(s){ - ps = &S; - ps->Num = s; - if(Tree_Query(THEM->Surfaces,&ps)){ - HighlightEntity(NULL,NULL,ps,permanant); - } - } -} - diff --git a/Graphics/IsoSimplex.cpp b/Graphics/IsoSimplex.cpp deleted file mode 100644 index e2fdfa36e71de3028e845796af4b88c76eebdac5..0000000000000000000000000000000000000000 --- a/Graphics/IsoSimplex.cpp +++ /dev/null @@ -1,182 +0,0 @@ -#include "Gmsh.h" -#include "GmshUI.h" -#include "Geo.h" -#include "Mesh.h" -#include "Draw.h" -#include "Iso.h" -#include "Context.h" -#include "Views.h" -#include "Numeric.h" - -extern Context_T CTX; - -// compute the gradient of a linear interpolation in a tetrahedron - - -void EnhanceSimplexPolygon (Post_View *View, - int nb, // nb of points in polygon - double *Xp, // x positions - double *Yp, // y positions - double *Zp, // z positions - double *Valp, // values at points - double *X, // x positions of the simplex - double *Y, // y positions of the simplex - double *Z, // z posistions of the simplex - double *Val, // values at simplex points - double *norms, // output : normals at points - int preproNormals // do we compute normals or do we get them - ){ - /* - 3 possibilities for quads - -) 0,2,5,3 - -) 0,1,5,4 - -) 1,2,4,3 - in all cases, simply invert the 2 last ones - for having the quads ordered - */ - int i; - double Xpi[6],Ypi[6],Zpi[6]; - - if(nb == 4){ - double xx = Xp[3]; - double yy = Yp[3]; - double zz = Zp[3]; - Xp[3] = Xp[2]; - Yp[3] = Yp[2]; - Zp[3] = Zp[2]; - Xp[2] = xx; - Yp[2] = yy; - Zp[2] = zz; - } - - /* - for having a nice isosurface, we should have n . grad v > 0 - n = normal to the polygon - v = unknown field we wanna draw - */ - - if(!View->Light){ - norms = NULL; // we don't need to compute these - return; - } - - double v1[3] = {Xp[2]-Xp[0],Yp[2]-Yp[0],Zp[2]-Zp[0]}; - double v2[3] = {Xp[1]-Xp[0],Yp[1]-Yp[0],Zp[1]-Zp[0]}; - double gr[3]; - double n[3],xx; - prodve(v1,v2,n); - //norme(n); not necessary since GL_NORMALIZE is enabled - gradSimplex(X,Y,Z,Val,gr); - prosca(gr,n,&xx); - - if(xx > 0){ - for(i=0;i<nb;i++){ - Xpi[i] = Xp[i]; - Ypi[i] = Yp[i]; - Zpi[i] = Zp[i]; - } - for(i=0;i<nb;i++){ - Xp[i] = Xpi[nb-i-1]; - Yp[i] = Ypi[nb-i-1]; - Zp[i] = Zpi[nb-i-1]; - } - } - else{ - n[0] = -n[0]; - n[1] = -n[1]; - n[2] = -n[2]; - } - - if(View->SmoothNormals){ - if(preproNormals){ - for(i=0;i<nb;i++){ - View->add_normal(Xp[i],Yp[i],Zp[i],n[0],n[1],n[2]); - } - return; - } - else{ - for(i=0;i<nb;i++){ - if(!View->get_normal(Xp[i],Yp[i],Zp[i],norms[3*i],norms[3*i+1],norms[3*i+2])){ - //Msg(WARNING, "Oups, did not find smoothed normal"); - norms[3*i] = n[0]; - norms[3*i+1] = n[1]; - norms[3*i+2] = n[2]; - } - } - } - } - else{ - for(i=0;i<nb;i++){ - norms[3*i] = n[0]; - norms[3*i+1] = n[1]; - norms[3*i+2] = n[2]; - } - } - -} - - -void IsoSimplex( Post_View *View, - int preproNormals, - double *X, double *Y, double *Z, double *Val, - double V, double Vmin, double Vmax, - double Raise[3][5]){ - int nb; - double Xp[6],Yp[6],Zp[6],PVals[6]; - double norms[12]; - - if(V != Vmax){ - nb = 0; - if((Val[0] > V && Val[1] <= V) || (Val[1] > V && Val[0] <= V)){ - InterpolateIso(X,Y,Z,Val,V,0,1,&Xp[nb],&Yp[nb],&Zp[nb]); nb++; - } - if((Val[0] > V && Val[2] <= V) || (Val[2] > V && Val[0] <= V)){ - InterpolateIso(X,Y,Z,Val,V,0,2,&Xp[nb],&Yp[nb],&Zp[nb]); nb++; - } - if((Val[0] > V && Val[3] <= V) || (Val[3] > V && Val[0] <= V)){ - InterpolateIso(X,Y,Z,Val,V,0,3,&Xp[nb],&Yp[nb],&Zp[nb]); nb++; - } - if((Val[1] > V && Val[2] <= V) || (Val[2] > V && Val[1] <= V)){ - InterpolateIso(X,Y,Z,Val,V,1,2,&Xp[nb],&Yp[nb],&Zp[nb]); nb++; - } - if((Val[1] > V && Val[3] <= V) || (Val[3] > V && Val[1] <= V)){ - InterpolateIso(X,Y,Z,Val,V,1,3,&Xp[nb],&Yp[nb],&Zp[nb]); nb++; - } - if((Val[2] > V && Val[3] <= V) || (Val[3] > V && Val[2] <= V)){ - InterpolateIso(X,Y,Z,Val,V,2,3,&Xp[nb],&Yp[nb],&Zp[nb]); nb++; - } - } - else{ - nb=0; - if((Val[0] < V && Val[1] <= V) || (Val[1] < V && Val[0] <= V)){ - InterpolateIso(X,Y,Z,Val,V,0,1,&Xp[nb],&Yp[nb],&Zp[nb]); nb++; - } - if((Val[0] < V && Val[2] <= V) || (Val[2] < V && Val[0] <= V)){ - InterpolateIso(X,Y,Z,Val,V,0,2,&Xp[nb],&Yp[nb],&Zp[nb]); nb++; - } - if((Val[0] < V && Val[3] <= V) || (Val[3] < V && Val[0] <= V)){ - InterpolateIso(X,Y,Z,Val,V,0,3,&Xp[nb],&Yp[nb],&Zp[nb]); nb++; - } - if((Val[1] < V && Val[2] <= V) || (Val[2] < V && Val[1] <= V)){ - InterpolateIso(X,Y,Z,Val,V,1,2,&Xp[nb],&Yp[nb],&Zp[nb]); nb++; - } - if((Val[1] < V && Val[3] <= V) || (Val[3] < V && Val[1] <= V)){ - InterpolateIso(X,Y,Z,Val,V,1,3,&Xp[nb],&Yp[nb],&Zp[nb]); nb++; - } - if((Val[2] < V && Val[3] <= V) || (Val[3] < V && Val[2] <= V)){ - InterpolateIso(X,Y,Z,Val,V,2,3,&Xp[nb],&Yp[nb],&Zp[nb]); nb++; - } - } - - if(nb < 3)return; - - EnhanceSimplexPolygon (View, nb, Xp, Yp, Zp, PVals, X, Y, Z, Val, norms, preproNormals); - - if(preproNormals)return; - - if(nb == 3) - Draw_Triangle(Xp,Yp,Zp,norms,Raise,View->Light); - else if(nb == 4) - Draw_Quadrangle(Xp,Yp,Zp,norms,Raise,View->Light); -} - diff --git a/Graphics/IsoSimplex.h b/Graphics/IsoSimplex.h deleted file mode 100644 index 31eaab57bb85899a519faf4c8b49817c96be3001..0000000000000000000000000000000000000000 --- a/Graphics/IsoSimplex.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _ISOSIMPLEX_H_ -#define _ISOSIMPLEX_H_ - -struct Post_View; -void IsoSimplex (Post_View *View, - int preproNormals, - double *X, double *Y, double *Z, double *Val, - double V, double Vmin, double Vmax, - double Raise[3][5]); -#endif diff --git a/Graphics/Makefile b/Graphics/Makefile deleted file mode 100644 index c32e625f13bbd0aa3a52f4ed4a0adcd448c05d43..0000000000000000000000000000000000000000 --- a/Graphics/Makefile +++ /dev/null @@ -1,158 +0,0 @@ -# $Id: Makefile,v 1.29 2001-08-11 23:32:21 geuzaine Exp $ -# -# Makefile for "libGraphics.a" -# - -.IGNORE: - -CC = c++ -AR = ar ruvs -RANLIB = ranlib -RM = rm -LIB = ../lib/libGraphics.a -INCLUDE = -I../Common -I../DataStr -I../Geo -I../Graphics\ - -I../Motif -I../Fltk -I../Mesh -I../Parser -I../jpeg - -C_FLAGS = -g -Wall -OS_FLAGS = -D_LITTLE_ENDIAN -VERSION_FLAGS = -D_XMOTIF - -GL_INCLUDE = -I$(HOME)/SOURCES/Mesa-3.1/include\ - -I$(HOME)/SOURCES/Mesa-3.1/include/GL -GUI_INCLUDE = -I/usr/X11R6/LessTif/Motif1.2/include - -RMFLAGS = -f -CFLAGS = $(C_FLAGS) $(OS_FLAGS) $(VERSION_FLAGS) $(INCLUDE)\ - $(GL_INCLUDE) $(GUI_INCLUDE) - -SRC = Draw.cpp \ - Mesh.cpp \ - Geom.cpp \ - Post.cpp \ - PostSimplex.cpp \ - IsoSimplex.cpp \ - Entity.cpp \ - Scale.cpp \ - Axes.cpp \ - CreateFile.cpp \ - XDump.cpp\ - gl2ps.cpp\ - gl2gif.cpp\ - gl2jpeg.cpp\ - gl2ppm.cpp\ - gl2yuv.cpp - - -OBJ = $(SRC:.cpp=.o) - -.SUFFIXES: .o .cpp - -$(LIB): $(OBJ) - $(AR) $(LIB) $(OBJ) - $(RANLIB) $(LIB) - -.cpp.o: - $(CC) $(CFLAGS) -c $< - -clean: - $(RM) $(RMFLAGS) *.o - -lint: - $(LINT) $(CFLAGS) $(SRC) - -depend: - (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ - $(CC) -MM $(CFLAGS) ${SRC} \ - ) >Makefile.new - cp Makefile Makefile.bak - cp Makefile.new Makefile - $(RM) $(RMFLAGS) Makefile.new - -# DO NOT DELETE THIS LINE -Draw.o: Draw.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Geo/Geo.h \ - ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h Draw.h ../Common/Views.h \ - ../Common/ColorTable.h ../Common/Context.h ../Geo/MinMax.h -Mesh.o: Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Geo/Geo.h \ - ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h Draw.h ../Common/Views.h \ - ../Common/ColorTable.h ../Common/Context.h ../Geo/MinMax.h gl2ps.h \ - ../Geo/Verif.h ../Common/Numeric.h ../Geo/Visibility.h -Geom.o: Geom.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ - ../Common/Numeric.h ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ - ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/Metric.h ../Mesh/Utils.h Draw.h ../Common/Views.h \ - ../Common/ColorTable.h ../Common/Context.h ../Geo/Verif.h \ - ../Mesh/Interpolation.h ../Geo/Visibility.h ../Mesh/STL.h gl2ps.h -Post.o: Post.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ - ../Common/Numeric.h ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ - ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/Metric.h Draw.h ../Common/Views.h ../Common/ColorTable.h \ - ../Common/Context.h gl2ps.h -PostSimplex.o: PostSimplex.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Geo/Geo.h \ - ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h Draw.h ../Common/Views.h \ - ../Common/ColorTable.h ../Common/Iso.h IsoSimplex.h \ - ../Common/Context.h ../Common/Numeric.h -IsoSimplex.o: IsoSimplex.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Geo/Geo.h \ - ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h Draw.h ../Common/Views.h \ - ../Common/ColorTable.h ../Common/Iso.h ../Common/Context.h \ - ../Common/Numeric.h -Entity.o: Entity.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ - ../Common/Numeric.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h Draw.h \ - ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h -Scale.o: Scale.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ - ../Common/Numeric.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h Draw.h \ - ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h \ - ../Motif/XContext.h -Axes.o: Axes.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ - ../Common/Numeric.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h Draw.h \ - ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h gl2ps.h -CreateFile.o: CreateFile.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Mesh/Mesh.h \ - ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Parser/OpenFile.h Draw.h \ - ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h \ - ../Motif/Widgets.h ../Motif/XContext.h XDump.h gl2ps.h gl2gif.h \ - gl2jpeg.h gl2ppm.h gl2yuv.h -XDump.o: XDump.cpp -gl2ps.o: gl2ps.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h gl2ps.h -gl2gif.o: gl2gif.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h gl2gif.h -gl2jpeg.o: gl2jpeg.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ - ../jpeg/jpeglib.h ../jpeg/jconfig.h ../jpeg/jmorecfg.h \ - ../jpeg/jerror.h -gl2ppm.o: gl2ppm.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h -gl2yuv.o: gl2yuv.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h diff --git a/Graphics/Mesh.cpp b/Graphics/Mesh.cpp deleted file mode 100644 index 27590b76e48d491a77488bb65a09acd7e7ef6ecd..0000000000000000000000000000000000000000 --- a/Graphics/Mesh.cpp +++ /dev/null @@ -1,816 +0,0 @@ -// $Id: Mesh.cpp,v 1.40 2001-08-13 12:10:30 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Geo.h" -#include "Mesh.h" -#include "Draw.h" -#include "Context.h" -#include "MinMax.h" -#include "gl2ps.h" -#include "Verif.h" -#include "Numeric.h" -#include "Visibility.h" - -extern Mesh *THEM; -extern Context_T CTX; - -/* ------------------------------------------------------------------------ */ -/* D r a w _ M e s h */ -/* ------------------------------------------------------------------------ */ - - -void draw_polygon_2d (double r, double g, double b, int n, - double *x, double *y, double *z){ - int i ; - - CalculateMinMax(THEM->Points,NULL); - InitOpengl(); - InitPosition(); - - glDisable(GL_DEPTH_TEST); - glDrawBuffer(GL_FRONT); - glColor3f(r,g,b); - glBegin(GL_LINE_STRIP); - for(i=0 ; i<n ; i++) - if(z)glVertex3d(x[i], y[i],z[i]); - else glVertex2d(x[i], y[i]); - glEnd(); - glFlush(); - glDrawBuffer(GL_BACK); - glEnable(GL_DEPTH_TEST); - -} - -static int iColor; - -void ColorSwitch(int i){ - glColor4ubv((GLubyte*)&CTX.color.mesh.carousel[i%10]); -} - -static int DrawVertexSupp ; - -void Draw_Mesh (Mesh *M) { - int i; - - if(!CTX.moving_light) InitRenderModel(); - - if(CTX.mesh.shade) - InitShading(); - else - InitNoShading(); - InitPosition(); - - if(CTX.moving_light) InitRenderModel(); - - for(i = 0 ; i < 6 ; i++) - if(CTX.clip[i]) - glClipPlane((GLenum)(GL_CLIP_PLANE0 + i), CTX.clip_plane[i]); - - glPointSize(2); gl2psPointSize(2); - glLineWidth(1); gl2psLineWidth(1*CTX.print.mesh_line_width); - iColor = 0; - - if(CTX.mesh.hidden) glEnable(GL_POLYGON_OFFSET_FILL); - - // draw the bbox of the mesh in fast redraw mode if there is no geometry - if(!CTX.mesh.draw && Tree_Nbr(M->Vertices) && !Tree_Nbr(M->Points)){ - glColor4ubv((GLubyte*)&CTX.color.fg); - glBegin(GL_LINE_LOOP); - glVertex3d(CTX.min[0], CTX.min[1], CTX.min[2]); - glVertex3d(CTX.max[0], CTX.min[1], CTX.min[2]); - glVertex3d(CTX.max[0], CTX.max[1], CTX.min[2]); - glVertex3d(CTX.min[0], CTX.max[1], CTX.min[2]); - glEnd(); - glBegin(GL_LINE_LOOP); - glVertex3d(CTX.min[0], CTX.min[1], CTX.max[2]); - glVertex3d(CTX.max[0], CTX.min[1], CTX.max[2]); - glVertex3d(CTX.max[0], CTX.max[1], CTX.max[2]); - glVertex3d(CTX.min[0], CTX.max[1], CTX.max[2]); - glEnd(); - glBegin(GL_LINES); - glVertex3d(CTX.min[0], CTX.min[1], CTX.min[2]); - glVertex3d(CTX.min[0], CTX.min[1], CTX.max[2]); - glVertex3d(CTX.max[0], CTX.min[1], CTX.min[2]); - glVertex3d(CTX.max[0], CTX.min[1], CTX.max[2]); - glVertex3d(CTX.max[0], CTX.max[1], CTX.min[2]); - glVertex3d(CTX.max[0], CTX.max[1], CTX.max[2]); - glVertex3d(CTX.min[0], CTX.max[1], CTX.min[2]); - glVertex3d(CTX.min[0], CTX.max[1], CTX.max[2]); - glEnd(); - } - - switch(M->status) { - case 3 : - if(CTX.mesh.draw && - (CTX.mesh.volumes || CTX.mesh.volumes_num) && - CTX.render_mode != GMSH_SELECT) - Tree_Action(M->Volumes, Draw_Mesh_Volumes); - /* fall-through! */ - case 2 : - if(CTX.mesh.draw && - (CTX.mesh.surfaces || CTX.mesh.surfaces_num) && - CTX.render_mode != GMSH_SELECT){ - Tree_Action(M->Surfaces, Draw_Mesh_Surfaces); - if(CTX.mesh.oldxtrude)//old extrusion algo - Tree_Action(M->Surfaces, Draw_Mesh_Extruded_Surfaces); - } - /* fall-through! */ - case 1 : - if(CTX.mesh.draw && - (CTX.mesh.lines || CTX.mesh.lines_num) && - CTX.render_mode != GMSH_SELECT){ - Tree_Action(M->Curves, Draw_Mesh_Curves); - DrawVertexSupp = 1 ; - Tree_Action(M->VertexEdges, Draw_Mesh_Points); - } - /* fall-through! */ - case 0 : - if(CTX.mesh.draw && - (CTX.mesh.points || CTX.mesh.points_num) && - CTX.render_mode != GMSH_SELECT){ - DrawVertexSupp = 0 ; - Tree_Action(M->Vertices, Draw_Mesh_Points); - } - glPointSize(4); gl2psPointSize(4); - if(!CTX.geom.shade) InitNoShading(); - Draw_Geom(M); - break; - default : - break; - } - - if(CTX.mesh.hidden) glDisable(GL_POLYGON_OFFSET_FILL); - - if(CTX.render_mode != GMSH_SELECT){ - if(CTX.axes) Draw_Axes(CTX.lc_middle/4.); - Draw_Post(); // les init de shading se font par view - } -} - -void Draw_Mesh_Volumes(void *a, void *b){ - Volume **v; - v = (Volume**)a; - iColor++; - Tree_Action((*v)->Simplexes, Draw_Simplex_Volume); - Tree_Action((*v)->Hexahedra, Draw_Hexahedron_Volume); - Tree_Action((*v)->Prisms, Draw_Prism_Volume); -} - -void Draw_Mesh_Surfaces (void *a,void *b){ - Surface **s; - s = (Surface**)a; - iColor++; - Tree_Action((*s)->Simplexes, Draw_Simplex_Surfaces); -} - -void Draw_Mesh_Extruded_Surfaces(void *a, void *b){ - Volume **v; - v = (Volume**)a; - Tree_Action((*v)->Simp_Surf, Draw_Simplex_Surfaces); -} - -void Draw_Mesh_Curves (void *a, void *b){ - Curve **c; - c = (Curve**)a; - if((*c)->Num < 0)return; - iColor++; - Tree_Action((*c)->Simplexes,Draw_Simplex_Curves); -} - -void Draw_Mesh_Points (void *a, void *b){ - Vertex **v; - char Num[100]; - - v = (Vertex**)a; - - if(CTX.mesh.use_cut_plane){ - if(CTX.mesh.evalCutPlane((*v)->Pos.X, (*v)->Pos.Y, (*v)->Pos.Z) < 0)return; - } - - if(CTX.render_mode == GMSH_SELECT){ - glLoadName(0); - glPushName((*v)->Num); - } - - glPointSize(3); gl2psPointSize(3); - if(DrawVertexSupp) - glColor4ubv((GLubyte*)&CTX.color.mesh.vertex_supp); - else - glColor4ubv((GLubyte*)&CTX.color.mesh.vertex); - - if(CTX.mesh.points){ - glBegin(GL_POINTS); - glVertex3d((*v)->Pos.X, (*v)->Pos.Y, (*v)->Pos.Z); - glEnd(); - } - - if(CTX.mesh.points_num){ - sprintf(Num,"%d",(*v)->Num); - glRasterPos3d((*v)->Pos.X+3*CTX.pixel_equiv_x/CTX.s[0], - (*v)->Pos.Y+3*CTX.pixel_equiv_x/CTX.s[1], - (*v)->Pos.Z+3*CTX.pixel_equiv_x/CTX.s[2]); - Draw_String(Num); - } - - if(CTX.render_mode == GMSH_SELECT){ - glPopName(); - } -} - -/* ------------------------------------------------------------------------ */ -/* D r a w _ S i m p l e x */ -/* ------------------------------------------------------------------------ */ - -void Draw_Simplex_Volume (void *a, void *b){ - Simplex **s; - char Num[100]; - int fulldraw = 0; - double tmp, X[4],Y[4],Z[4]; - - s = (Simplex**)a; - - if(!(*s)->V[3]) return; - - if(!EntiteEstElleVisible((*s)->iEnt)) return; - - if(CTX.mesh.gamma_sup){ - tmp = (*s)->GammaShapeMeasure(); - if(tmp < CTX.mesh.gamma_inf || tmp > CTX.mesh.gamma_sup) return; - fulldraw = 1; - } - - if(CTX.mesh.radius_sup){ - if((*s)->Radius < CTX.mesh.radius_inf || (*s)->Radius > CTX.mesh.radius_sup) return; - fulldraw = 1; - } - - - double Xc = .25 * ((*s)->V[0]->Pos.X + (*s)->V[1]->Pos.X + - (*s)->V[2]->Pos.X + (*s)->V[3]->Pos.X); - double Yc = .25 * ((*s)->V[0]->Pos.Y + (*s)->V[1]->Pos.Y + - (*s)->V[2]->Pos.Y + (*s)->V[3]->Pos.Y); - double Zc = .25 * ((*s)->V[0]->Pos.Z + (*s)->V[1]->Pos.Z + - (*s)->V[2]->Pos.Z + (*s)->V[3]->Pos.Z); - - if(CTX.mesh.use_cut_plane){ - if(CTX.mesh.evalCutPlane(Xc,Yc,Zc) < 0) return; - fulldraw = 1; - } - - if(CTX.mesh.color_carousel && !fulldraw) - ColorSwitch((*s)->iEnt); - else if(fulldraw) - glColor4ubv((GLubyte*)&CTX.color.mesh.line); - else - glColor4ubv((GLubyte*)&CTX.color.mesh.tetrahedron); - - for (int i=0 ; i<4 ; i++) { - X[i] = Xc + CTX.mesh.explode * ((*s)->V[i]->Pos.X - Xc); - Y[i] = Yc + CTX.mesh.explode * ((*s)->V[i]->Pos.Y - Yc); - Z[i] = Zc + CTX.mesh.explode * ((*s)->V[i]->Pos.Z - Zc); - } - - if(CTX.mesh.volumes && !(fulldraw && CTX.mesh.shade)){ - glBegin(GL_LINES); - glVertex3d(X[1], Y[1], Z[1]); - glVertex3d(X[0], Y[0], Z[0]); - - glVertex3d(X[2], Y[2], Z[2]); - glVertex3d(X[0], Y[0], Z[0]); - - glVertex3d(X[3], Y[3], Z[3]); - glVertex3d(X[0], Y[0], Z[0]); - - glVertex3d(X[3], Y[3], Z[3]); - glVertex3d(X[1], Y[1], Z[1]); - - glVertex3d(X[3], Y[3], Z[3]); - glVertex3d(X[2], Y[2], Z[2]); - - glVertex3d(X[1], Y[1], Z[1]); - glVertex3d(X[2], Y[2], Z[2]); - - glVertex3d(X[2], Y[2], Z[2]); - glVertex3d(X[3], Y[3], Z[3]); - glEnd(); - } - - if(CTX.mesh.volumes_num){ - sprintf(Num,"%d",(*s)->Num); - glRasterPos3d(Xc,Yc,Zc); - Draw_String(Num); - } - - - if (CTX.mesh.dual){ - glColor4ubv((GLubyte*)&CTX.color.fg); - glEnable(GL_LINE_STIPPLE); - glLineStipple(1,0x0F0F); - gl2psEnable(GL2PS_LINE_STIPPLE); - glBegin(GL_LINES); - glVertex3d(Xc, Yc, Zc); - glVertex3d((X[0]+X[1]+X[2])/3., (Y[0]+Y[1]+Y[2])/3., (Z[0]+Z[1]+Z[2])/3.); - glVertex3d(Xc, Yc, Zc); - glVertex3d((X[0]+X[1]+X[3])/3., (Y[0]+Y[1]+Y[3])/3., (Z[0]+Z[1]+Z[3])/3.); - glVertex3d(Xc, Yc, Zc); - glVertex3d((X[0]+X[2]+X[3])/3., (Y[0]+Y[2]+Y[3])/3., (Z[0]+Z[2]+Z[3])/3.); - glVertex3d(Xc, Yc, Zc); - glVertex3d((X[1]+X[2]+X[3])/3., (Y[1]+Y[2]+Y[3])/3., (Z[1]+Z[2]+Z[3])/3.); - glEnd(); - glDisable(GL_LINE_STIPPLE); - gl2psDisable(GL2PS_LINE_STIPPLE); - } - - if(!fulldraw) return ; - - double n[4], x1x0, y1y0, z1z0, x2x0, y2y0, z2z0; - - if(CTX.mesh.color_carousel) - ColorSwitch((*s)->iEnt); - else - glColor4ubv((GLubyte*)&CTX.color.mesh.tetrahedron); - - if (CTX.mesh.hidden) { - - if(CTX.mesh.shade){ - x1x0 = X[2]-X[0]; y1y0 = Y[2]-Y[0]; - z1z0 = Z[2]-Z[0]; x2x0 = X[1]-X[0]; - y2y0 = Y[1]-Y[0]; z2z0 = Z[1]-Z[0]; - n[0] = y1y0 * z2z0 - z1z0 * y2y0 ; - n[1] = z1z0 * x2x0 - x1x0 * z2z0 ; - n[2] = x1x0 * y2y0 - y1y0 * x2x0; - glNormal3dv(n); - } - - glBegin(GL_TRIANGLES); - glVertex3d(X[0], Y[0], Z[0]); - glVertex3d(X[2], Y[2], Z[2]); - glVertex3d(X[1], Y[1], Z[1]); - glEnd(); - - if(CTX.mesh.shade){ - x1x0 = X[1]-X[0]; y1y0 = Y[1]-Y[0]; - z1z0 = Z[1]-Z[0]; x2x0 = X[3]-X[0]; - y2y0 = Y[3]-Y[0]; z2z0 = Z[3]-Z[0]; - n[0] = y1y0 * z2z0 - z1z0 * y2y0 ; - n[1] = z1z0 * x2x0 - x1x0 * z2z0 ; - n[2] = x1x0 * y2y0 - y1y0 * x2x0; - glNormal3dv(n); - } - - glBegin(GL_TRIANGLES); - glVertex3d(X[0], Y[0], Z[0]); - glVertex3d(X[1], Y[1], Z[1]); - glVertex3d(X[3], Y[3], Z[3]); - glEnd(); - - if(CTX.mesh.shade){ - x1x0 = X[3]-X[0]; y1y0 = Y[3]-Y[0]; - z1z0 = Z[3]-Z[0]; x2x0 = X[2]-X[0]; - y2y0 = Y[2]-Y[0]; z2z0 = Z[2]-Z[0]; - n[0] = y1y0 * z2z0 - z1z0 * y2y0 ; - n[1] = z1z0 * x2x0 - x1x0 * z2z0 ; - n[2] = x1x0 * y2y0 - y1y0 * x2x0; - glNormal3dv(n); - } - - glBegin(GL_TRIANGLES); - glVertex3d(X[0], Y[0], Z[0]); - glVertex3d(X[3], Y[3], Z[3]); - glVertex3d(X[2], Y[2], Z[2]); - glEnd(); - - if(CTX.mesh.shade){ - x1x0 = X[3]-X[1]; y1y0 = Y[3]-Y[1]; - z1z0 = Z[3]-Z[1]; x2x0 = X[2]-X[1]; - y2y0 = Y[2]-Y[1]; z2z0 = Z[2]-Z[1]; - n[0] = y1y0 * z2z0 - z1z0 * y2y0 ; - n[1] = z1z0 * x2x0 - x1x0 * z2z0 ; - n[2] = x1x0 * y2y0 - y1y0 * x2x0; - glNormal3dv(n); - } - - glBegin(GL_TRIANGLES); - glVertex3d(X[3], Y[3], Z[3]); - glVertex3d(X[1], Y[1], Z[1]); - glVertex3d(X[2], Y[2], Z[2]); - glEnd(); - - } - -} - - -void Draw_Simplex_Surfaces (void *a, void *b){ - - Simplex **s; - double X[4],Y[4],Z[4],Xc,Yc,Zc,pX[8],pY[8],pZ[8]; - double x1x0, y1y0, z1z0, x2x0, y2y0, z2z0, n[3], m[3], mm; - int i,j,K,L,k; - char Num[256]; - - s = (Simplex**)a; - - if(!(*s)->V[2]) return ; - - if(!EntiteEstElleVisible ((*s)->iEnt)) return; - - if((*s)->VSUP) L=1; - else L=0; - - if ((*s)->V[3]) { - K = 4; - Xc = .25 * ((*s)->V[0]->Pos.X + (*s)->V[1]->Pos.X + - (*s)->V[2]->Pos.X + (*s)->V[3]->Pos.X); - Yc = .25 * ((*s)->V[0]->Pos.Y + (*s)->V[1]->Pos.Y + - (*s)->V[2]->Pos.Y + (*s)->V[3]->Pos.Y); - Zc = .25 * ((*s)->V[0]->Pos.Z + (*s)->V[1]->Pos.Z + - (*s)->V[2]->Pos.Z + (*s)->V[3]->Pos.Z); - } - else { - K = 3; - Xc = ((*s)->V[0]->Pos.X + (*s)->V[1]->Pos.X + (*s)->V[2]->Pos.X) / 3. ; - Yc = ((*s)->V[0]->Pos.Y + (*s)->V[1]->Pos.Y + (*s)->V[2]->Pos.Y) / 3. ; - Zc = ((*s)->V[0]->Pos.Z + (*s)->V[1]->Pos.Z + (*s)->V[2]->Pos.Z) / 3. ; - } - - if(CTX.mesh.use_cut_plane){ - if(CTX.mesh.evalCutPlane(Xc,Yc,Zc) < 0)return; - } - - k=0; - for (i=0 ; i<K ; i++) { - pX[k] = Xc + CTX.mesh.explode * ((*s)->V[i]->Pos.X - Xc); - pY[k] = Yc + CTX.mesh.explode * ((*s)->V[i]->Pos.Y - Yc); - pZ[k] = Zc + CTX.mesh.explode * ((*s)->V[i]->Pos.Z - Zc); - k+=(L+1); - } - - if(L){ - k=1; - for (i=0 ; i<K ; i++) { - pX[k] = Xc + CTX.mesh.explode * ((*s)->VSUP[i]->Pos.X - Xc); - pY[k] = Yc + CTX.mesh.explode * ((*s)->VSUP[i]->Pos.Y - Yc); - pZ[k] = Zc + CTX.mesh.explode * ((*s)->VSUP[i]->Pos.Z - Zc); - k+=(L+1); - } - } - - if (CTX.mesh.dual){ - glColor4ubv((GLubyte*)&CTX.color.fg); - glEnable(GL_LINE_STIPPLE); - glLineStipple(1,0x0F0F); - gl2psEnable(GL2PS_LINE_STIPPLE); - glBegin(GL_LINES); - for (i=0 ; i<K ; i++) { - (!i) ? j = K-1 : j = i-1 ; - glVertex3d(Xc, Yc, Zc); - glVertex3d((pX[i]+pX[j])/2., (pY[i]+pY[j])/2., (pZ[i]+pZ[j])/2.); - } - glEnd(); - glDisable(GL_LINE_STIPPLE); - gl2psDisable(GL2PS_LINE_STIPPLE); - } - - if (CTX.mesh.normals || CTX.mesh.shade){ - for (i=0 ; i<K ; i++) { - X[i] = Xc + CTX.mesh.explode * ((*s)->V[i]->Pos.X - Xc); - Y[i] = Yc + CTX.mesh.explode * ((*s)->V[i]->Pos.Y - Yc); - Z[i] = Zc + CTX.mesh.explode * ((*s)->V[i]->Pos.Z - Zc); - } - x1x0 = X[1]-X[0]; y1y0 = Y[1]-Y[0]; - z1z0 = Z[1]-Z[0]; x2x0 = X[2]-X[0]; - y2y0 = Y[2]-Y[0]; z2z0 = Z[2]-Z[0]; - n[0] = m[0] = y1y0 * z2z0 - z1z0 * y2y0 ; - n[1] = m[1] = z1z0 * x2x0 - x1x0 * z2z0 ; - n[2] = m[2] = x1x0 * y2y0 - y1y0 * x2x0; - } - - if (CTX.mesh.hidden && CTX.mesh.shade){ - glNormal3dv(n); - } - - if(CTX.mesh.color_carousel) - ColorSwitch(iColor); - else{ - if(K==3) - glColor4ubv((GLubyte*)&CTX.color.mesh.triangle); - else - glColor4ubv((GLubyte*)&CTX.color.mesh.quadrangle); - } - - if(CTX.mesh.surfaces_num){ - sprintf(Num,"%d",(*s)->Num); - glRasterPos3d(Xc,Yc,Zc); - Draw_String(Num); - } - - - if(CTX.mesh.surfaces){ - - if (CTX.mesh.hidden) { - glBegin(GL_POLYGON); - for(i=0 ; i<K*(1+L) ; i++) glVertex3d(pX[i], pY[i], pZ[i]); - glEnd(); - } - - if(CTX.mesh.lines){ - if(CTX.mesh.color_carousel && ! (CTX.mesh.hidden || CTX.mesh.shade)) - ColorSwitch(iColor); - else - glColor4ubv((GLubyte*)&CTX.color.mesh.line); - glBegin(GL_LINE_LOOP); - for(i=0 ; i<K*(1+L) ; i++){ - glVertex3d(pX[i],pY[i],pZ[i]); - } - glEnd(); - } - - } - - if(CTX.mesh.normals) { - norme(m); - glColor4ubv((GLubyte*)&CTX.color.mesh.normals); - m[0] *= CTX.mesh.normals * CTX.pixel_equiv_x/CTX.s[0] ; - m[1] *= CTX.mesh.normals * CTX.pixel_equiv_x/CTX.s[1] ; - m[2] *= CTX.mesh.normals * CTX.pixel_equiv_x/CTX.s[2] ; - mm=sqrt(m[0]*m[0]+m[1]*m[1]+m[2]*m[2]); - Draw_Vector(DRAW_POST_ARROW, 0, Xc,Yc,Zc, mm, m[0],m[1],m[2],NULL); - } - - -} - - -void Draw_Simplex_Curves(void *a,void *b){ - Simplex *s; - double Xc = 0.0 , Yc = 0.0, Zc = 0.0 ; - char Num[100]; - - s = *(Simplex**)a; - - Xc = 0.5 * (s->V[0]->Pos.X + s->V[1]->Pos.X); - Yc = 0.5 * (s->V[0]->Pos.Y + s->V[1]->Pos.Y); - Zc = 0.5 * (s->V[0]->Pos.Z + s->V[1]->Pos.Z); - - /* - double X[2],Y[2],Z[2] - for (int i=0 ; i<2 ; i++) { - X[i] = Xc + CTX.mesh.explode * (s->V[i]->Pos.X - Xc); - Y[i] = Yc + CTX.mesh.explode * (s->V[i]->Pos.Y - Yc); - Z[i] = Zc + CTX.mesh.explode * (s->V[i]->Pos.Z - Zc); - } - - if(CTX.mesh.lines){ - glColor4ubv((GLubyte*)&CTX.color.mesh.line); - glBegin(GL_LINES); - glVertex3d(X[0], Y[0], Z[0]); - glVertex3d(X[1], Y[1], Z[1]); - glEnd(); - } - */ - - if(CTX.mesh.points){ - glColor4ubv((GLubyte*)&CTX.color.mesh.vertex); - glBegin(GL_POINTS); - glVertex3d(s->V[1]->Pos.X, s->V[1]->Pos.Y, s->V[1]->Pos.Z); - glEnd(); - - if(s->VSUP){ - glColor4ubv((GLubyte*)&CTX.color.mesh.vertex_supp); - glBegin(GL_POINTS); - glVertex3d(s->VSUP[0]->Pos.X, s->VSUP[0]->Pos.Y, s->VSUP[0]->Pos.Z); - glEnd(); - } - } - - if(CTX.mesh.lines_num){ - glColor4ubv((GLubyte*)&CTX.color.mesh.line); - sprintf(Num,"%d",s->Num); - glRasterPos3d(Xc + 3*CTX.pixel_equiv_x/CTX.s[0], - Yc + 3*CTX.pixel_equiv_x/CTX.s[1], - Zc + 3*CTX.pixel_equiv_x/CTX.s[2]); - Draw_String(Num); - } - - -} - - -/* ------------------------------------------------------------------------ */ -/* D r a w _ H e x a e d r o n */ -/* ------------------------------------------------------------------------ */ - -void Draw_Hexahedron_Volume (void *a, void *b){ - Hexahedron **h; - int i ; - double Xc = 0.0 , Yc = 0.0, Zc = 0.0 , X[8],Y[8],Z[8]; - char Num[100]; - - h = (Hexahedron**)a; - - if(!EntiteEstElleVisible((*h)->iEnt)) return; - - for(i=0 ; i<8 ; i++){ - Xc += (*h)->V[i]->Pos.X; - Yc += (*h)->V[i]->Pos.Y; - Zc += (*h)->V[i]->Pos.Z; - } - Xc *= .125 ; - Zc *= .125 ; - Yc *= .125 ; - - if(CTX.mesh.use_cut_plane){ - if(CTX.mesh.evalCutPlane(Xc,Yc,Zc) < 0)return; - } - - if(CTX.mesh.color_carousel) - ColorSwitch((*h)->iEnt); - else - glColor4ubv((GLubyte*)&CTX.color.mesh.hexahedron); - - for (i=0 ; i<8 ; i++) { - X[i] = Xc + CTX.mesh.explode * ((*h)->V[i]->Pos.X - Xc); - Y[i] = Yc + CTX.mesh.explode * ((*h)->V[i]->Pos.Y - Yc); - Z[i] = Zc + CTX.mesh.explode * ((*h)->V[i]->Pos.Z - Zc); - } - - glBegin(GL_LINE_LOOP); - glVertex3d(X[0], Y[0], Z[0]); - glVertex3d(X[1], Y[1], Z[1]); - glVertex3d(X[2], Y[2], Z[2]); - glVertex3d(X[3], Y[3], Z[3]); - glEnd(); - - glBegin(GL_LINE_LOOP); - glVertex3d(X[4], Y[4], Z[4]); - glVertex3d(X[5], Y[5], Z[5]); - glVertex3d(X[6], Y[6], Z[6]); - glVertex3d(X[7], Y[7], Z[7]); - glEnd(); - - glBegin(GL_LINES); - glVertex3d(X[0], Y[0], Z[0]); - glVertex3d(X[4], Y[4], Z[4]); - glVertex3d(X[1], Y[1], Z[1]); - glVertex3d(X[5], Y[5], Z[5]); - glVertex3d(X[2], Y[2], Z[2]); - glVertex3d(X[6], Y[6], Z[6]); - glVertex3d(X[3], Y[3], Z[3]); - glVertex3d(X[7], Y[7], Z[7]); - glEnd(); - - if(CTX.mesh.volumes_num){ - sprintf(Num,"%d",(*h)->Num); - glRasterPos3d(Xc,Yc,Zc); - Draw_String(Num); - } - - if (CTX.mesh.dual){ - - glColor4ubv((GLubyte*)&CTX.color.fg); - glEnable(GL_LINE_STIPPLE); - glLineStipple(1,0x0F0F); - gl2psEnable(GL2PS_LINE_STIPPLE); - glBegin(GL_LINES); - glVertex3d(Xc, Yc, Zc); - glVertex3d - ( ((*h)->V[0]->Pos.X+(*h)->V[1]->Pos.X+(*h)->V[5]->Pos.X+(*h)->V[4]->Pos.X)/4., - ((*h)->V[0]->Pos.Y+(*h)->V[1]->Pos.Y+(*h)->V[5]->Pos.Y+(*h)->V[4]->Pos.Y)/4., - ((*h)->V[0]->Pos.Z+(*h)->V[1]->Pos.Z+(*h)->V[5]->Pos.Z+(*h)->V[4]->Pos.Z)/4. ); - glVertex3d(Xc, Yc, Zc); - glVertex3d - ( ((*h)->V[0]->Pos.X+(*h)->V[3]->Pos.X+(*h)->V[2]->Pos.X+(*h)->V[1]->Pos.X)/4., - ((*h)->V[0]->Pos.Y+(*h)->V[3]->Pos.Y+(*h)->V[2]->Pos.Y+(*h)->V[1]->Pos.Y)/4., - ((*h)->V[0]->Pos.Z+(*h)->V[3]->Pos.Z+(*h)->V[2]->Pos.Z+(*h)->V[1]->Pos.Z)/4. ); - glVertex3d(Xc, Yc, Zc); - glVertex3d - ( ((*h)->V[0]->Pos.X+(*h)->V[4]->Pos.X+(*h)->V[7]->Pos.X+(*h)->V[3]->Pos.X)/4., - ((*h)->V[0]->Pos.Y+(*h)->V[4]->Pos.Y+(*h)->V[7]->Pos.Y+(*h)->V[3]->Pos.Y)/4., - ((*h)->V[0]->Pos.Z+(*h)->V[4]->Pos.Z+(*h)->V[7]->Pos.Z+(*h)->V[3]->Pos.Z)/4. ); - glVertex3d(Xc, Yc, Zc); - glVertex3d - ( ((*h)->V[1]->Pos.X+(*h)->V[2]->Pos.X+(*h)->V[6]->Pos.X+(*h)->V[5]->Pos.X)/4., - ((*h)->V[1]->Pos.Y+(*h)->V[2]->Pos.Y+(*h)->V[6]->Pos.Y+(*h)->V[5]->Pos.Y)/4., - ((*h)->V[1]->Pos.Z+(*h)->V[2]->Pos.Z+(*h)->V[6]->Pos.Z+(*h)->V[5]->Pos.Z)/4. ); - glVertex3d(Xc, Yc, Zc); - glVertex3d - ( ((*h)->V[2]->Pos.X+(*h)->V[3]->Pos.X+(*h)->V[7]->Pos.X+(*h)->V[6]->Pos.X)/4., - ((*h)->V[2]->Pos.Y+(*h)->V[3]->Pos.Y+(*h)->V[7]->Pos.Y+(*h)->V[6]->Pos.Y)/4., - ((*h)->V[2]->Pos.Z+(*h)->V[3]->Pos.Z+(*h)->V[7]->Pos.Z+(*h)->V[6]->Pos.Z)/4. ); - glVertex3d(Xc, Yc, Zc); - glVertex3d - ( ((*h)->V[4]->Pos.X+(*h)->V[5]->Pos.X+(*h)->V[6]->Pos.X+(*h)->V[7]->Pos.X)/4., - ((*h)->V[4]->Pos.Y+(*h)->V[5]->Pos.Y+(*h)->V[6]->Pos.Y+(*h)->V[7]->Pos.Y)/4., - ((*h)->V[4]->Pos.Z+(*h)->V[5]->Pos.Z+(*h)->V[6]->Pos.Z+(*h)->V[7]->Pos.Z)/4. ); - glEnd(); - glDisable(GL_LINE_STIPPLE); - gl2psDisable(GL2PS_LINE_STIPPLE); - } - -} - -/* ------------------------------------------------------------------------ */ -/* D r a w _ P r i s m */ -/* ------------------------------------------------------------------------ */ - -void Draw_Prism_Volume (void *a, void *b){ - Prism **p; - int i ; - double Xc = 0.0 , Yc = 0.0, Zc = 0.0, X[6],Y[6],Z[6] ; - char Num[100]; - - p = (Prism**)a; - - if(!EntiteEstElleVisible((*p)->iEnt)) return; - - for(i=0 ; i<6 ; i++){ - Xc += (*p)->V[i]->Pos.X; - Yc += (*p)->V[i]->Pos.Y; - Zc += (*p)->V[i]->Pos.Z; - } - Xc /= 6. ; - Zc /= 6. ; - Yc /= 6. ; - - if(CTX.mesh.use_cut_plane){ - if(CTX.mesh.evalCutPlane(Xc,Yc,Zc) < 0)return; - } - - if(CTX.mesh.color_carousel) - ColorSwitch((*p)->iEnt); - else - glColor4ubv((GLubyte*)&CTX.color.mesh.prism); - - for (i=0 ; i<6 ; i++) { - X[i] = Xc + CTX.mesh.explode * ((*p)->V[i]->Pos.X - Xc); - Y[i] = Yc + CTX.mesh.explode * ((*p)->V[i]->Pos.Y - Yc); - Z[i] = Zc + CTX.mesh.explode * ((*p)->V[i]->Pos.Z - Zc); - } - - glBegin(GL_LINE_LOOP); - glVertex3d(X[0], Y[0], Z[0]); - glVertex3d(X[1], Y[1], Z[1]); - glVertex3d(X[2], Y[2], Z[2]); - glEnd(); - - glBegin(GL_LINE_LOOP); - glVertex3d(X[3], Y[3], Z[3]); - glVertex3d(X[4], Y[4], Z[4]); - glVertex3d(X[5], Y[5], Z[5]); - glEnd(); - - glBegin(GL_LINES); - glVertex3d(X[0], Y[0], Z[0]); - glVertex3d(X[3], Y[3], Z[3]); - glVertex3d(X[1], Y[1], Z[1]); - glVertex3d(X[4], Y[4], Z[4]); - glVertex3d(X[2], Y[2], Z[2]); - glVertex3d(X[5], Y[5], Z[5]); - glEnd(); - - if(CTX.mesh.volumes_num){ - sprintf(Num,"%d",(*p)->Num); - glRasterPos3d(Xc,Yc,Zc); - Draw_String(Num); - } - - if(CTX.mesh.dual){ - glColor4ubv((GLubyte*)&CTX.color.fg); - glEnable(GL_LINE_STIPPLE); - glLineStipple(1,0x0F0F); - gl2psEnable(GL2PS_LINE_STIPPLE); - glBegin(GL_LINES); - glVertex3d(Xc, Yc, Zc); - glVertex3d - ( ((*p)->V[0]->Pos.X+(*p)->V[2]->Pos.X+(*p)->V[1]->Pos.X)/3., - ((*p)->V[0]->Pos.Y+(*p)->V[2]->Pos.Y+(*p)->V[1]->Pos.Y)/3., - ((*p)->V[0]->Pos.Z+(*p)->V[2]->Pos.Z+(*p)->V[1]->Pos.Z)/3. ); - glVertex3d(Xc, Yc, Zc); - glVertex3d - ( ((*p)->V[3]->Pos.X+(*p)->V[4]->Pos.X+(*p)->V[5]->Pos.X)/3., - ((*p)->V[3]->Pos.Y+(*p)->V[4]->Pos.Y+(*p)->V[5]->Pos.Y)/3., - ((*p)->V[3]->Pos.Z+(*p)->V[4]->Pos.Z+(*p)->V[5]->Pos.Z)/3. ); - glVertex3d(Xc, Yc, Zc); - glVertex3d - ( ((*p)->V[0]->Pos.X+(*p)->V[1]->Pos.X+(*p)->V[4]->Pos.X+(*p)->V[3]->Pos.X)/4., - ((*p)->V[0]->Pos.Y+(*p)->V[1]->Pos.Y+(*p)->V[4]->Pos.Y+(*p)->V[3]->Pos.Y)/4., - ((*p)->V[0]->Pos.Z+(*p)->V[1]->Pos.Z+(*p)->V[4]->Pos.Z+(*p)->V[3]->Pos.Z)/4. ); - glVertex3d(Xc, Yc, Zc); - glVertex3d - ( ((*p)->V[0]->Pos.X+(*p)->V[3]->Pos.X+(*p)->V[5]->Pos.X+(*p)->V[2]->Pos.X)/4., - ((*p)->V[0]->Pos.Y+(*p)->V[3]->Pos.Y+(*p)->V[5]->Pos.Y+(*p)->V[2]->Pos.Y)/4., - ((*p)->V[0]->Pos.Z+(*p)->V[3]->Pos.Z+(*p)->V[5]->Pos.Z+(*p)->V[2]->Pos.Z)/4. ); - glVertex3d(Xc, Yc, Zc); - glVertex3d - ( ((*p)->V[1]->Pos.X+(*p)->V[2]->Pos.X+(*p)->V[5]->Pos.X+(*p)->V[4]->Pos.X)/4., - ((*p)->V[1]->Pos.Y+(*p)->V[2]->Pos.Y+(*p)->V[5]->Pos.Y+(*p)->V[4]->Pos.Y)/4., - ((*p)->V[1]->Pos.Z+(*p)->V[2]->Pos.Z+(*p)->V[5]->Pos.Z+(*p)->V[4]->Pos.Z)/4. ); - glEnd(); - glDisable(GL_LINE_STIPPLE); - gl2psDisable(GL2PS_LINE_STIPPLE); - } - -} - diff --git a/Graphics/Post.cpp b/Graphics/Post.cpp deleted file mode 100644 index 07e5a154fd6eb7ebf428b23b0964e2cd615c63af..0000000000000000000000000000000000000000 --- a/Graphics/Post.cpp +++ /dev/null @@ -1,441 +0,0 @@ -// $Id: Post.cpp,v 1.23 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Numeric.h" -#include "Geo.h" -#include "Mesh.h" -#include "Draw.h" -#include "Views.h" -#include "Context.h" -#include "gl2ps.h" - -extern Context_T CTX; - -static double Raise[3][5]; -static double RaiseFactor[3]; - -/* ------------------------------------------------------------------------ - Give Value from Index - ------------------------------------------------------------------------ */ - -double GiveValueFromIndex_Lin(double ValMin, double ValMax, int NbIso, int Iso){ - if(NbIso==1) return (ValMax+ValMin)/2.; - return ValMin + Iso*(ValMax-ValMin)/(NbIso-1.) ; -} - -double GiveValueFromIndex_Log(double ValMin, double ValMax, int NbIso, int Iso){ - if(NbIso==1) return (ValMax+ValMin)/2.; - if(ValMin <= 0.) return 0. ; - return pow(10.,log10(ValMin)+Iso*(log10(ValMax)-log10(ValMin))/(NbIso-1.)) ; -} - -double GiveValueFromIndex_DoubleLog(double ValMin, double ValMax, int NbIso, int Iso){ - if(NbIso==1) return (ValMax+ValMin)/2.; - if(ValMin <= 0.) return 0. ; - - double Iso2 = Iso/2; - double NbIso2 = NbIso/2; - - return pow(10.,log10(ValMin)+Iso2*(log10(ValMax)-log10(ValMin))/(NbIso2-1.)) ; - -} - -/* ------------------------------------------------------------------------ - Give Index From Value - ------------------------------------------------------------------------ */ - -int GiveIndexFromValue_Lin(double ValMin, double ValMax, int NbIso, double Val){ - if(ValMin==ValMax) return NbIso/2 ; - return (int)((Val-ValMin)*(NbIso-1)/(ValMax-ValMin)) ; -} - -int GiveIndexFromValue_Log(double ValMin, double ValMax, int NbIso, double Val){ - if(ValMin==ValMax) return NbIso/2 ; - if(ValMin <= 0.) return 0 ; - return (int)((log10(Val)-log10(ValMin))*(NbIso-1)/(log10(ValMax)-log10(ValMin))) ; -} - -int GiveIndexFromValue_DoubleLog(double ValMin, double ValMax, int NbIso, double Val){ - if(ValMin==ValMax) return NbIso/2 ; - if(ValMin <= 0.) return 0 ; - return (int)((log10(Val)-log10(ValMin))*(NbIso-1)/(log10(ValMax)-log10(ValMin))) ; -} - - -/* ------------------------------------------------------------------------ - Color Palette - ------------------------------------------------------------------------ */ - -void Palette(Post_View *v, int nbi, int i){ /* i in [0,nbi-1] */ - int index ; - - index = (nbi==1) ? - v->CT.size/2 : - (int) (i/(double)(nbi-1)*(v->CT.size-1) + 0.5) ; - - glColor4ubv( (GLubyte *) &v->CT.table[index] ); -} - -void Palette2(Post_View *v,double min, double max, double val){ /* val in [min,max] */ - int index; - - index = (int)( (val-min)/(max-min)*(v->CT.size-1) + 0.5); - - glColor4ubv((GLubyte *) &v->CT.table[index]); -} - -void RaiseFill(int i, double Val, double ValMin, double Raise[3][5]){ - int j ; - for(j=0 ; j<3 ; j++) Raise[j][i] = (Val-ValMin) * RaiseFactor[j] ; -} - - -/* ------------------------------------------------------------------------ - D r a w _ P o s t - ------------------------------------------------------------------------ */ - -void Free_DisplayLists(void){ - Post_View *v; - for(int iView=0 ; iView<List_Nbr(Post_ViewList) ; iView++){ - v = (Post_View*)List_Pointer(Post_ViewList,iView); - if(glIsList(v->Num)) glDeleteLists(v->Num,1); - } -} - -void Get_Coords(double Explode, double *Offset, int nbnod, - double *x1, double *y1, double *z1, - double *x2, double *y2, double *z2){ - int i; - double xc=0., yc=0., zc=0.; - - if(Explode==1){ - for(i=0; i<nbnod; i++){ - x2[i] = x1[i]+Offset[0]; - y2[i] = y1[i]+Offset[1]; - z2[i] = z1[i]+Offset[2]; - } - } - else{ - for(i=0; i<nbnod; i++){ - xc += x1[i]; - yc += y1[i]; - zc += z1[i]; - } - xc /= (double)nbnod; - yc /= (double)nbnod; - zc /= (double)nbnod; - for(i=0; i<nbnod; i++){ - x2[i] = xc + Explode * (x1[i]-xc) + Offset[0]; - y2[i] = yc + Explode * (y1[i]-yc) + Offset[1]; - z2[i] = zc + Explode * (z1[i]-zc) + Offset[2]; - } - } -} - - -void Draw_Post (void) { - int iView,i,j,k,nb; - double ValMin,ValMax,AbsMax,X[4],Y[4],Z[4]; - Post_View *v; - - if(!Post_ViewList) return; - - glPointSize(2); gl2psPointSize(2); - glLineWidth(1); gl2psLineWidth(1*CTX.print.post_line_width); - - if(!CTX.post.draw){ // draw only the bbox of the visible views - for(iView=0 ; iView<List_Nbr(Post_ViewList) ; iView++){ - v = (Post_View*)List_Pointer(Post_ViewList,iView); - if(v->Visible){ - glColor4ubv((GLubyte*)&CTX.color.fg); - glBegin(GL_LINE_LOOP); - glVertex3d(v->BBox[0], v->BBox[2], v->BBox[4]); - glVertex3d(v->BBox[1], v->BBox[2], v->BBox[4]); - glVertex3d(v->BBox[1], v->BBox[3], v->BBox[4]); - glVertex3d(v->BBox[0], v->BBox[3], v->BBox[4]); - glEnd(); - glBegin(GL_LINE_LOOP); - glVertex3d(v->BBox[0], v->BBox[2], v->BBox[5]); - glVertex3d(v->BBox[1], v->BBox[2], v->BBox[5]); - glVertex3d(v->BBox[1], v->BBox[3], v->BBox[5]); - glVertex3d(v->BBox[0], v->BBox[3], v->BBox[5]); - glEnd(); - glBegin(GL_LINES); - glVertex3d(v->BBox[0], v->BBox[2], v->BBox[4]); - glVertex3d(v->BBox[0], v->BBox[2], v->BBox[5]); - glVertex3d(v->BBox[1], v->BBox[2], v->BBox[4]); - glVertex3d(v->BBox[1], v->BBox[2], v->BBox[5]); - glVertex3d(v->BBox[1], v->BBox[3], v->BBox[4]); - glVertex3d(v->BBox[1], v->BBox[3], v->BBox[5]); - glVertex3d(v->BBox[0], v->BBox[3], v->BBox[4]); - glVertex3d(v->BBox[0], v->BBox[3], v->BBox[5]); - glEnd(); - } - } - return; - } - - for(iView=0 ; iView<List_Nbr(Post_ViewList) ; iView++){ - - v = (Post_View*)List_Pointer(Post_ViewList,iView); - - if(v->Visible && !v->Dirty){ - - if(CTX.display_lists && !v->Changed && glIsList(v->Num)){ - - glCallList(v->Num); - - } - else{ - - if(CTX.display_lists){ - if(glIsList(v->Num)) glDeleteLists(v->Num,1); - Msg(DEBUG, "New Display List"); - glNewList(v->Num, GL_COMPILE_AND_EXECUTE); - } - - if(v->Light) - InitShading(); - else - InitNoShading(); - - if(v->ShowElement) - glEnable(GL_POLYGON_OFFSET_FILL) ; - - // force this - if(v->IntervalsType == DRAW_POST_CONTINUOUS){ - glShadeModel(GL_SMOOTH); - glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); - } - else{// there is a bug in CutTriangle2D!! See Iso.cpp - glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); - } - - switch(v->RangeType){ - case DRAW_POST_DEFAULT : ValMin = v->Min ; ValMax = v->Max ; break; - case DRAW_POST_CUSTOM : ValMin = v->CustomMin ; ValMax = v->CustomMax ; break; - } - - switch(v->ScaleType){ - case DRAW_POST_LINEAR : - v->GIFV = GiveIndexFromValue_Lin ; - v->GVFI = GiveValueFromIndex_Lin ; - break; - case DRAW_POST_LOGARITHMIC : - v->GIFV = GiveIndexFromValue_Log ; - v->GVFI = GiveValueFromIndex_Log ; - break; - case DRAW_POST_DOUBLELOGARITHMIC : - v->GIFV = GiveIndexFromValue_DoubleLog ; - v->GVFI = GiveValueFromIndex_DoubleLog ; - break; - } - - AbsMax = DMAX(fabs(ValMin),fabs(ValMax)); - AbsMax = (AbsMax==0.) ? 1. : AbsMax; - - for(j=0;j<3;j++){ - RaiseFactor[j] = v->Raise[j] / AbsMax ; - for(k=0;k<5;k++) Raise[j][k] = 0. ; - } - - // Points - - if(v->NbSP && v->DrawPoints && v->DrawScalars){ - nb = List_Nbr(v->SP) / v->NbSP ; - for(i = 0 ; i < List_Nbr(v->SP) ; i+=nb){ - Get_Coords(1., v->Offset, 1, - (double*)List_Pointer_Fast(v->SP,i), - (double*)List_Pointer_Fast(v->SP,i+1), - (double*)List_Pointer_Fast(v->SP,i+2), - X, Y, Z); - Draw_ScalarPoint(v, ValMin, ValMax, Raise, X, Y, Z, - (double*)List_Pointer_Fast(v->SP,i+3)); - } - } - if(v->NbVP && v->DrawPoints && v->DrawVectors){ - nb = List_Nbr(v->VP) / v->NbVP ; - for(i = 0 ; i < List_Nbr(v->VP) ; i+=nb){ - Get_Coords(1., v->Offset, 1, - (double*)List_Pointer_Fast(v->VP,i), - (double*)List_Pointer_Fast(v->VP,i+1), - (double*)List_Pointer_Fast(v->VP,i+2), - X, Y, Z); - Draw_VectorPoint(v, ValMin, ValMax, Raise, X, Y, Z, - (double*)List_Pointer_Fast(v->VP,i+3)); - } - } - if(v->NbTP && v->DrawPoints && v->DrawTensors){ - nb = List_Nbr(v->TP) / v->NbTP ; - for(i = 0 ; i < List_Nbr(v->TP) ; i+=nb){ - Get_Coords(1., v->Offset, 1, - (double*)List_Pointer_Fast(v->TP,i), - (double*)List_Pointer_Fast(v->TP,i+1), - (double*)List_Pointer_Fast(v->TP,i+2), - X, Y, Z); - Draw_TensorPoint(v, ValMin, ValMax, Raise, X, Y, Z, - (double*)List_Pointer_Fast(v->TP,i+3)); - } - } - - // Lines - - if(v->NbSL && v->DrawLines && v->DrawScalars){ - nb = List_Nbr(v->SL) / v->NbSL ; - for(i = 0 ; i < List_Nbr(v->SL) ; i+=nb){ - Get_Coords(v->Explode, v->Offset, 2, - (double*)List_Pointer_Fast(v->SL,i), - (double*)List_Pointer_Fast(v->SL,i+2), - (double*)List_Pointer_Fast(v->SL,i+4), - X, Y, Z); - Draw_ScalarLine(v, ValMin, ValMax, Raise, X, Y, Z, - (double*)List_Pointer_Fast(v->SL,i+6)); - } - } - if(v->NbVL && v->DrawLines && v->DrawVectors){ - nb = List_Nbr(v->VL) / v->NbVL ; - for(i = 0 ; i < List_Nbr(v->VL) ; i+=nb){ - Get_Coords(v->Explode, v->Offset, 2, - (double*)List_Pointer_Fast(v->VL,i), - (double*)List_Pointer_Fast(v->VL,i+2), - (double*)List_Pointer_Fast(v->VL,i+4), - X, Y, Z); - Draw_VectorLine(v, ValMin, ValMax, Raise, X, Y, Z, - (double*)List_Pointer_Fast(v->VL,i+6)); - } - } - if(v->NbTL && v->DrawLines && v->DrawTensors){ - nb = List_Nbr(v->TL) / v->NbTL ; - for(i = 0 ; i < List_Nbr(v->TL) ; i+=nb){ - Get_Coords(v->Explode, v->Offset, 2, - (double*)List_Pointer_Fast(v->TL,i), - (double*)List_Pointer_Fast(v->TL,i+2), - (double*)List_Pointer_Fast(v->TL,i+4), - X, Y, Z); - Draw_TensorLine(v, ValMin, ValMax, Raise, X, Y, Z, - (double*)List_Pointer_Fast(v->TL,i+6)); - } - } - - // Triangles - - if(v->NbST && v->DrawTriangles && v->DrawScalars){ - nb = List_Nbr(v->ST) / v->NbST ; - if(v->Light && v->SmoothNormals && v->Changed && v->IntervalsType != DRAW_POST_ISO){ - Msg(DEBUG, "Preprocessing of triangle normals in view %d", v->Num); - for(i = 0 ; i < List_Nbr(v->ST) ; i+=nb){ - Get_Coords(v->Explode, v->Offset, 3, - (double*)List_Pointer_Fast(v->ST,i), - (double*)List_Pointer_Fast(v->ST,i+3), - (double*)List_Pointer_Fast(v->ST,i+6), - X, Y, Z); - Draw_ScalarTriangle(v, 1, ValMin, ValMax, Raise, X, Y, Z, - (double*)List_Pointer_Fast(v->ST,i+9)); - } - } - for(i = 0 ; i < List_Nbr(v->ST) ; i+=nb){ - Get_Coords(v->Explode, v->Offset, 3, - (double*)List_Pointer_Fast(v->ST,i), - (double*)List_Pointer_Fast(v->ST,i+3), - (double*)List_Pointer_Fast(v->ST,i+6), - X, Y, Z); - Draw_ScalarTriangle(v, 0, ValMin, ValMax, Raise, X, Y, Z, - (double*)List_Pointer_Fast(v->ST,i+9)); - } - } - if(v->NbVT && v->DrawTriangles && v->DrawVectors){ - nb = List_Nbr(v->VT) / v->NbVT ; - for(i = 0 ; i < List_Nbr(v->VT) ; i+=nb){ - Get_Coords(v->Explode, v->Offset, 3, - (double*)List_Pointer_Fast(v->VT,i), - (double*)List_Pointer_Fast(v->VT,i+3), - (double*)List_Pointer_Fast(v->VT,i+6), - X, Y, Z); - Draw_VectorTriangle(v, ValMin, ValMax, Raise, X, Y, Z, - (double*)List_Pointer_Fast(v->VT,i+9)); - } - } - if(v->NbTT && v->DrawTriangles && v->DrawTensors){ - nb = List_Nbr(v->TT) / v->NbTT ; - for(i = 0 ; i < List_Nbr(v->TT) ; i+=nb){ - Get_Coords(v->Explode, v->Offset, 3, - (double*)List_Pointer_Fast(v->TT,i), - (double*)List_Pointer_Fast(v->TT,i+3), - (double*)List_Pointer_Fast(v->TT,i+6), - X, Y, Z); - Draw_TensorTriangle(v, ValMin, ValMax, Raise, X, Y, Z, - (double*)List_Pointer_Fast(v->TT,i+9)); - } - } - - // Tetrahedra - - if(v->NbSS && v->DrawTetrahedra && v->DrawScalars){ - nb = List_Nbr(v->SS) / v->NbSS ; - if(v->Light && v->SmoothNormals && v->Changed && v->IntervalsType != DRAW_POST_ISO){ - Msg(DEBUG, "Preprocessing of tets normals in view %d", v->Num); - for(i = 0 ; i < List_Nbr(v->SS) ; i+=nb){ - Get_Coords(v->Explode, v->Offset, 4, - (double*)List_Pointer_Fast(v->SS,i), - (double*)List_Pointer_Fast(v->SS,i+4), - (double*)List_Pointer_Fast(v->SS,i+8), - X, Y, Z); - Draw_ScalarTetrahedron(v, 1, ValMin, ValMax, Raise, X, Y, Z, - (double*)List_Pointer_Fast(v->SS,i+12)); - } - } - for(i = 0 ; i < List_Nbr(v->SS) ; i+=nb){ - Get_Coords(v->Explode, v->Offset, 4, - (double*)List_Pointer_Fast(v->SS,i), - (double*)List_Pointer_Fast(v->SS,i+4), - (double*)List_Pointer_Fast(v->SS,i+8), - X, Y, Z); - Draw_ScalarTetrahedron(v, 0, ValMin, ValMax, Raise, X, Y, Z, - (double*)List_Pointer_Fast(v->SS,i+12)); - } - } - if(v->NbVS && v->DrawTetrahedra && v->DrawVectors){ - nb = List_Nbr(v->VS) / v->NbVS ; - for(i = 0 ; i < List_Nbr(v->VS) ; i+=nb){ - Get_Coords(v->Explode, v->Offset, 4, - (double*)List_Pointer_Fast(v->VS,i), - (double*)List_Pointer_Fast(v->VS,i+4), - (double*)List_Pointer_Fast(v->VS,i+8), - X, Y, Z); - Draw_VectorTetrahedron(v, ValMin, ValMax, Raise, X, Y, Z, - (double*)List_Pointer_Fast(v->VS,i+12)); - } - } - if(v->NbTS && v->DrawTetrahedra && v->DrawTensors){ - nb = List_Nbr(v->TS) / v->NbTS ; - for(i = 0 ; i < List_Nbr(v->TS) ; i+=nb){ - Get_Coords(v->Explode, v->Offset, 4, - (double*)List_Pointer_Fast(v->TS,i), - (double*)List_Pointer_Fast(v->TS,i+4), - (double*)List_Pointer_Fast(v->TS,i+8), - X, Y, Z); - Draw_TensorTetrahedron(v, ValMin, ValMax, Raise, X, Y, Z, - (double*)List_Pointer_Fast(v->TS,i+12)); - } - } - - - if(CTX.display_lists) glEndList(); - - v->Changed=0; - - if(v->ShowElement || v->ArrowType == DRAW_POST_DISPLACEMENT) - glDisable(GL_POLYGON_OFFSET_FILL) ; - - } - - } - - } - - // go back to default shading for the scale - InitNoShading(); - -} - diff --git a/Graphics/PostSimplex.cpp b/Graphics/PostSimplex.cpp deleted file mode 100644 index ebdefcf01fe743db8c78a48574eabd19e79beeb6..0000000000000000000000000000000000000000 --- a/Graphics/PostSimplex.cpp +++ /dev/null @@ -1,607 +0,0 @@ -// $Id: PostSimplex.cpp,v 1.29 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Geo.h" -#include "Mesh.h" -#include "Draw.h" -#include "Iso.h" -#include "IsoSimplex.h" -#include "Context.h" -#include "Numeric.h" - -extern Context_T CTX; - -void Draw_Simplex(Post_View *View, int nbnod, double *X, double *Y, double *Z, - double Raise[3][5]){ - int k; - double xx[4], yy[4], zz[4]; - - glColor4ubv((GLubyte*)&CTX.color.fg); - switch(nbnod){ - case 1 : - Draw_Point(X,Y,Z,Raise); - break; - case 2 : - Draw_Line(X,Y,Z,Raise); - break; - case 3 : - glBegin(GL_LINE_LOOP); - for(k=0 ; k<3 ; k++) - glVertex3d(X[k]+Raise[0][k], Y[k]+Raise[1][k], Z[k]+Raise[2][k]); - glEnd(); - break; - case 4 : - for(k=0 ; k<4 ; k++){ - xx[k] = X[k]+Raise[0][k] ; - yy[k] = Y[k]+Raise[1][k] ; - zz[k] = Z[k]+Raise[2][k] ; - } - if(View->Light) glDisable(GL_LIGHTING); - glBegin(GL_LINES); - glVertex3d(xx[0], yy[0], zz[0]); glVertex3d(xx[1], yy[1], zz[1]); - glVertex3d(xx[0], yy[0], zz[0]); glVertex3d(xx[2], yy[2], zz[2]); - glVertex3d(xx[0], yy[0], zz[0]); glVertex3d(xx[3], yy[3], zz[3]); - glVertex3d(xx[1], yy[1], zz[1]); glVertex3d(xx[2], yy[2], zz[2]); - glVertex3d(xx[1], yy[1], zz[1]); glVertex3d(xx[3], yy[3], zz[3]); - glVertex3d(xx[2], yy[2], zz[2]); glVertex3d(xx[3], yy[3], zz[3]); - glEnd(); - if(View->Light) glEnable(GL_LIGHTING); - break; - } -} - - -/* ------------------------------------------------------------------------ */ -/* Scalar Simplices */ -/* ------------------------------------------------------------------------ */ - -void Draw_ScalarPoint(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V){ - double d; - char Num[100]; - - if(View->Boundary > 0) return; - - d = V[View->TimeStep]; - - if(View->SaturateValues){ - if(d > ValMax) d = ValMax; - else if(d < ValMin) d = ValMin; - } - - RaiseFill(0, d, ValMin, Raise); - - if(View->ShowElement) Draw_Simplex(View,1,X,Y,Z,Raise); - - if(d>=ValMin && d<=ValMax){ - Palette2(View,ValMin,ValMax,d); - if(View->IntervalsType == DRAW_POST_NUMERIC){ - glRasterPos3d(X[0]+Raise[0][0], Y[0]+Raise[1][0], Z[0]+Raise[2][0]); - sprintf(Num, View->Format, d); - Draw_String(Num); - } - else - Draw_Point(X,Y,Z,Raise); - } -} - -void Draw_ScalarLine(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V){ - - int i,k,nb=0; - double d; - double Xp[5],Yp[5],Zp[5],Val[5],value[5],thev; - char Num[100] ; - - double *vv = &V[2*View->TimeStep]; - - if(View->Boundary > 0){ - View->Boundary--; - int ts = View->TimeStep; - View->TimeStep = 0; - Draw_ScalarPoint(View, ValMin, ValMax, Raise, &X[0], &Y[0], &Z[0], &vv[0]);//0 - Draw_ScalarPoint(View, ValMin, ValMax, Raise, &X[1], &Y[1], &Z[1], &vv[1]);//1 - View->TimeStep = ts; - View->Boundary++; - return; - } - - if(View->SaturateValues){ - for(i=0;i<2;i++){ - if(vv[i] > ValMax) Val[i] = ValMax; - else if(vv[i] < ValMin) Val[i] = ValMin; - else Val[i] = vv[i]; - } - } - else{ - for(i=0;i<2;i++){ - Val[i] = vv[i]; - } - } - - for(k=0 ; k<2 ; k++) - RaiseFill(k, Val[k], ValMin, Raise); - - if(View->ShowElement) Draw_Simplex(View,2,X,Y,Z,Raise); - - if(View->IntervalsType == DRAW_POST_NUMERIC){ - - d = (Val[0]+Val[1]) / 2.; - - if(d >= ValMin && d <= ValMax){ - Palette2(View,ValMin,ValMax,d); - sprintf(Num, View->Format, d); - glRasterPos3d((X[0]+Raise[0][0] + X[1]+Raise[0][1])/2., - (Y[0]+Raise[1][0] + Y[1]+Raise[1][1])/2., - (Z[0]+Raise[2][0] + Z[1]+Raise[2][1])/2.); - Draw_String(Num); - } - - } - else{ - - if(View->IntervalsType==DRAW_POST_CONTINUOUS){ - - if(Val[0] >= ValMin && Val[0] <= ValMax && - Val[1] >= ValMin && Val[1] <= ValMax){ - glBegin(GL_LINES); - Palette2(View,ValMin,ValMax,Val[0]); - glVertex3d(X[0]+Raise[0][0], Y[0]+Raise[1][0], Z[0]+Raise[2][0]); - Palette2(View,ValMin,ValMax,Val[1]); - glVertex3d(X[1]+Raise[0][1], Y[1]+Raise[1][1], Z[1]+Raise[2][1]); - glEnd(); - } - else{ - //todo - } - - } - else{ - for(k=0 ; k<View->NbIso ; k++){ - Palette(View,View->NbIso,k); - if(View->IntervalsType==DRAW_POST_DISCRETE){ - CutLine1D(X,Y,Z,&Val[0], - View->GVFI(ValMin,ValMax,View->NbIso+1,k), - View->GVFI(ValMin,ValMax,View->NbIso+1,k+1), - ValMin,ValMax,Xp,Yp,Zp,&nb,value); - if(nb == 2){ - for(i=0;i<2;i++) RaiseFill(i,value[i],ValMin,Raise); - Draw_Line(Xp,Yp,Zp,Raise); - } - } - else{ - thev = View->GVFI(ValMin,ValMax,View->NbIso,k); - CutLine0D(X,Y,Z,&Val[0], - thev, ValMin,ValMax,Xp,Yp,Zp,&nb); - if(nb){ - RaiseFill(0,thev,ValMin,Raise); - Draw_Point(Xp,Yp,Zp,Raise); - } - } - } - } - - } - -} - -void Draw_ScalarTriangle(Post_View *View, int preproNormals, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V){ - - int i, k, nb=0; - double d; - double x1x0, y1y0, z1z0, x2x0, y2y0, z2z0, nn[3], norms[9]; - double Xp[5],Yp[5],Zp[5],Val[3],value[5],thev; - char Num[100] ; - - double *vv = &V[3*View->TimeStep]; - - if(!preproNormals && View->Boundary > 0){ - View->Boundary--; - int ts = View->TimeStep; - View->TimeStep = 0; - Draw_ScalarLine(View, ValMin, ValMax, Raise, &X[0], &Y[0], &Z[0], &vv[0]);//01 - Draw_ScalarLine(View, ValMin, ValMax, Raise, &X[1], &Y[1], &Z[1], &vv[1]);//12 - Xp[0] = X[0]; Yp[0] = Y[0]; Zp[0] = Z[0]; Val[0] = vv[0]; - Xp[1] = X[2]; Yp[1] = Y[2]; Zp[1] = Z[2]; Val[1] = vv[2]; - Draw_ScalarLine(View, ValMin, ValMax, Raise, Xp, Yp, Zp, Val);//02 - View->TimeStep = ts; - View->Boundary++; - return; - } - - if(View->SaturateValues){ - for(i=0;i<3;i++){ - if(vv[i] > ValMax) Val[i] = ValMax; - else if(vv[i] < ValMin) Val[i] = ValMin; - else Val[i] = vv[i]; - } - } - else{ - for(i=0;i<3;i++){ - Val[i] = vv[i]; - } - } - - for(k=0 ; k<3 ; k++) - RaiseFill(k, Val[k], ValMin, Raise); - - if(View->Light){ - - x1x0 = (X[1]+Raise[0][1]) - (X[0]+Raise[0][0]); - y1y0 = (Y[1]+Raise[1][1]) - (Y[0]+Raise[1][0]); - z1z0 = (Z[1]+Raise[2][1]) - (Z[0]+Raise[2][0]); - x2x0 = (X[2]+Raise[0][2]) - (X[0]+Raise[0][0]); - y2y0 = (Y[2]+Raise[1][2]) - (Y[0]+Raise[1][0]); - z2z0 = (Z[2]+Raise[2][2]) - (Z[0]+Raise[2][0]); - nn[0] = y1y0 * z2z0 - z1z0 * y2y0 ; - nn[1] = z1z0 * x2x0 - x1x0 * z2z0 ; - nn[2] = x1x0 * y2y0 - y1y0 * x2x0 ; - - if(View->SmoothNormals){ - if(preproNormals){ - for(i=0;i<3;i++){ - View->add_normal(X[i]+Raise[0][i],Y[i]+Raise[1][i],Z[i]+Raise[2][i], - nn[0],nn[1],nn[2]); - } - return; - } - else{ - for(i=0;i<3;i++){ - if(!View->get_normal(X[i]+Raise[0][i],Y[i]+Raise[1][i],Z[i]+Raise[2][i], - norms[3*i],norms[3*i+1],norms[3*i+2])){ - Msg(WARNING, "Oups, did not find smoothed normal"); - norms[3*i] = nn[0]; - norms[3*i+1] = nn[1]; - norms[3*i+2] = nn[2]; - } - } - } - } - else{ - for(i=0;i<3;i++){ - norms[3*i] = nn[0]; - norms[3*i+1] = nn[1]; - norms[3*i+2] = nn[2]; - } - } - //norme(norms); not necessary since GL_NORMALIZE is enabled - //norme(&norms[3]); - //norme(&norms[6]); - glNormal3dv(norms); - } - - if(preproNormals) return; - - if(View->ShowElement) Draw_Simplex(View,3,X,Y,Z,Raise); - - if(View->IntervalsType == DRAW_POST_NUMERIC){ - - d = (Val[0]+Val[1]+Val[2]) / 3.; - if(d >= ValMin && d <= ValMax){ - Palette2(View,ValMin,ValMax,d); - sprintf(Num, View->Format, d); - glRasterPos3d( (X[0]+Raise[0][0] + X[1]+Raise[0][1] + X[2]+Raise[0][2])/3., - (Y[0]+Raise[1][0] + Y[1]+Raise[1][1] + Y[2]+Raise[1][2])/3., - (Z[0]+Raise[2][0] + Z[1]+Raise[2][1] + Z[2]+Raise[2][2])/3.); - Draw_String(Num); - } - - } - else{ - - if(View->IntervalsType == DRAW_POST_CONTINUOUS){ - if(Val[0] >= ValMin && Val[0] <= ValMax && - Val[1] >= ValMin && Val[1] <= ValMax && - Val[2] >= ValMin && Val[2] <= ValMax){ - glBegin(GL_TRIANGLES); - Palette2(View,ValMin,ValMax,Val[0]); - glNormal3dv(&norms[0]); - glVertex3d(X[0]+Raise[0][0], Y[0]+Raise[1][0], Z[0]+Raise[2][0]); - Palette2(View,ValMin,ValMax,Val[1]); - glNormal3dv(&norms[3]); - glVertex3d(X[1]+Raise[0][1], Y[1]+Raise[1][1], Z[1]+Raise[2][1]); - Palette2(View,ValMin,ValMax,Val[2]); - glNormal3dv(&norms[6]); - glVertex3d(X[2]+Raise[0][2], Y[2]+Raise[1][2], Z[2]+Raise[2][2]); - glEnd(); - } - else{ - CutTriangle2D(X,Y,Z,Val, - ValMin,ValMax,ValMin,ValMax, - Xp,Yp,Zp,&nb,value); - if(nb >= 3){ - glBegin(GL_POLYGON); - for(i=0 ; i<nb ; i++){ - Palette2(View,ValMin,ValMax,value[i]); - RaiseFill(i,value[i],ValMin,Raise); - glVertex3d(Xp[i]+Raise[0][i], Yp[i]+Raise[1][i], Zp[i]+Raise[2][i]); - } - glEnd(); - } - } - } - else{ - for(k=0 ; k<View->NbIso ; k++){ - if(View->IntervalsType == DRAW_POST_DISCRETE){ - Palette(View,View->NbIso,k); - CutTriangle2D(X,Y,Z,Val, - View->GVFI(ValMin,ValMax,View->NbIso+1,k), - View->GVFI(ValMin,ValMax,View->NbIso+1,k+1), - ValMin,ValMax, - Xp,Yp,Zp,&nb,value); - if(nb >= 3){ - for(i=0 ; i<nb ; i++) RaiseFill(i,value[i],ValMin,Raise); - Draw_Polygon(nb,Xp,Yp,Zp,Raise); - } - } - else{ - Palette(View,View->NbIso,k); - thev = View->GVFI(ValMin,ValMax,View->NbIso,k); - CutTriangle1D(X,Y,Z,Val, - thev, ValMin,ValMax,Xp,Yp,Zp,&nb); - if(nb == 2){ - for(i=0 ; i<2 ; i++) RaiseFill(i,thev,ValMin,Raise); - Draw_Line(Xp,Yp,Zp,Raise); - } - } - } - } - - } - -} - -void Draw_ScalarTetrahedron(Post_View *View, int preproNormals, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V){ - - int k,i; - double d, xx[4], yy[4], zz[4]; - char Num[100]; - double Val[4]; - - double *vv = &V[4*View->TimeStep]; - - if(!preproNormals && View->Boundary > 0){ - View->Boundary--; - int ts = View->TimeStep; - View->TimeStep = 0; - Draw_ScalarTriangle(View, 0, ValMin, ValMax, Raise, &X[0], &Y[0], &Z[0], &vv[0]);//012 - Draw_ScalarTriangle(View, 0, ValMin, ValMax, Raise, &X[1], &Y[1], &Z[1], &vv[1]);//123 - xx[0] = X[0]; yy[0] = Y[0]; zz[0] = Z[0]; Val[0] = vv[0]; - xx[1] = X[1]; yy[1] = Y[1]; zz[1] = Z[1]; Val[1] = vv[1]; - xx[2] = X[3]; yy[2] = Y[3]; zz[2] = Z[3]; Val[2] = vv[3]; - Draw_ScalarTriangle(View, 0, ValMin, ValMax, Raise, xx, yy, zz, Val);//013 - xx[1] = X[2]; yy[1] = Y[2]; zz[1] = Z[2]; Val[1] = vv[2]; - Draw_ScalarTriangle(View, 0, ValMin, ValMax, Raise, xx, yy, zz, Val);//023 - View->TimeStep = ts; - View->Boundary++; - return; - } - - if(View->SaturateValues){ - for(i=0;i<4;i++){ - if(vv[i] > ValMax) Val[i] = ValMax; - else if(vv[i] < ValMin) Val[i] = ValMin; - else Val[i] = vv[i]; - } - } - else{ - for(i=0;i<4;i++){ - Val[i] = vv[i]; - } - } - - for(k=0 ; k<4 ; k++) - RaiseFill(k, Val[k], ValMin, Raise); - - if(!preproNormals && View->ShowElement) Draw_Simplex(View,4,X,Y,Z,Raise); - - if(!preproNormals && View->IntervalsType == DRAW_POST_NUMERIC){ - - d = 0.25 * (Val[0] +Val[1]+Val[2] + Val[3]); - if(d >= ValMin && d <= ValMax){ - Palette2(View,ValMin,ValMax,d); - sprintf(Num, View->Format, d); - glRasterPos3d(0.25 * (X[0]+Raise[0][0] + X[1]+Raise[0][1] + - X[2]+Raise[0][2] + X[3]+Raise[0][3]), - 0.25 * (Y[0]+Raise[1][0] + Y[1]+Raise[1][1] + - Y[2]+Raise[1][2] + Y[3]+Raise[1][3]), - 0.25 * (Z[0]+Raise[2][0] + Z[1]+Raise[2][1] + - Z[2]+Raise[2][2] + Z[3]+Raise[2][3])); - Draw_String(Num); - } - - } - else{ - for(k=0 ; k<View->NbIso ; k++){ - if(!preproNormals) Palette(View,View->NbIso,k); - IsoSimplex(View, preproNormals, X, Y, Z, Val, - View->GVFI(ValMin,ValMax,View->NbIso,k), - ValMin, ValMax, Raise); - } - - } - -} - -/* ------------------------------------------------------------------------ */ -/* Vector Simplices */ -/* ------------------------------------------------------------------------ */ - -void Draw_VectorSimplex(int nbnod, Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V){ - int j, k ; - double fact, xx[4], yy[4], zz[4], xc=0., yc=0., zc=0., Val[4][3], d[4]; - double dx=0., dy=0., dz=0., dd; - char Num[100]; - - for(k=0 ; k<nbnod ; k++){ - Val[k][0] = V[3*nbnod*View->TimeStep+3*k] ; - Val[k][1] = V[3*nbnod*View->TimeStep+3*k+1] ; - Val[k][2] = V[3*nbnod*View->TimeStep+3*k+2] ; - d[k] = sqrt(Val[k][0]*Val[k][0]+Val[k][1]*Val[k][1]+Val[k][2]*Val[k][2]); - RaiseFill(k, d[k], ValMin, Raise); - } - - if(View->ArrowType == DRAW_POST_DISPLACEMENT){ - - fact = View->ArrowScale/50. ; - for(k=0 ; k<nbnod ; k++){ - xx[k] = X[k] + fact * Val[k][0] + Raise[0][k]; - yy[k] = Y[k] + fact * Val[k][1] + Raise[1][k]; - zz[k] = Z[k] + fact * Val[k][2] + Raise[2][k]; - } - - int ts = View->TimeStep; - View->TimeStep = 0; - switch(nbnod){ - case 1: - Draw_ScalarPoint(View, ValMin, ValMax, Raise, xx, yy, zz, d); - if(ts){//draw trajectory - glBegin(GL_LINE_STRIP); - for(j=0 ; j<ts+1 ; j++){ - dx = V[3*(ts-j)]; dy = V[3*(ts-j)+1]; dz = V[3*(ts-j)+2]; - dd = sqrt(dx*dx+dy*dy+dz*dz); - Palette2(View,ValMin,ValMax,dd); - glVertex3d(X[0] + fact*dx + Raise[0][0], - Y[0] + fact*dy + Raise[1][0], - Z[0] + fact*dz + Raise[2][0]); - } - glEnd(); - } - break; - case 2: Draw_ScalarLine(View, ValMin, ValMax, Raise, xx, yy, zz, d); break; - case 3: Draw_ScalarTriangle(View, 0, ValMin, ValMax, Raise, xx, yy, zz, d); break; - case 4: Draw_ScalarTetrahedron(View, 0, ValMin, ValMax, Raise, xx, yy, zz, d); break; - } - View->TimeStep = ts; - return; - } - - if(View->ShowElement) Draw_Simplex(View,nbnod,X,Y,Z,Raise); - - if(View->ArrowLocation == DRAW_POST_LOCATE_COG || - View->IntervalsType == DRAW_POST_NUMERIC){ - for(k = 0 ; k<nbnod ; k++){ - dx += Val[k][0]; xc += X[k] + Raise[0][k]; - dy += Val[k][1]; yc += Y[k] + Raise[1][k]; - dz += Val[k][2]; zc += Z[k] + Raise[2][k]; - } - dx /= (double)nbnod; xc /= (double)nbnod; - dy /= (double)nbnod; yc /= (double)nbnod; - dz /= (double)nbnod; zc /= (double)nbnod; - dd = sqrt(dx*dx+dy*dy+dz*dz); - if(dd!=0.0 && dd>=ValMin && dd<=ValMax){ - Palette(View,View->NbIso,View->GIFV(ValMin,ValMax,View->NbIso,dd)); - if(View->IntervalsType == DRAW_POST_NUMERIC){ - glRasterPos3d(xc, yc, zc); - sprintf(Num, View->Format, dd); - Draw_String(Num); - } - else{ - fact = CTX.pixel_equiv_x/CTX.s[0] * View->ArrowScale/ValMax ; - if(View->ScaleType == DRAW_POST_LOGARITHMIC && ValMin>0){ - dx /= dd ; dy /= dd ; dz /= dd ; - dd = log10(dd/ValMin) ; - dx *= dd ; dy *= dd ; dz *= dd ; - } - RaiseFill(0, dd, ValMin, Raise); - Draw_Vector(View->ArrowType, View->IntervalsType!=DRAW_POST_ISO, - xc, yc, zc, fact*dd, fact*dx, fact*dy, fact*dz, Raise); - } - } - } - else{ - for(k=0 ; k<nbnod ; k++){ - if(d[k]!=0.0 && d[k]>=ValMin && d[k]<=ValMax){ - Palette(View,View->NbIso,View->GIFV(ValMin,ValMax,View->NbIso,d[k])); - fact = CTX.pixel_equiv_x/CTX.s[0] * View->ArrowScale/ValMax ; - if(View->ScaleType == DRAW_POST_LOGARITHMIC && ValMin>0){ - Val[k][0] /= d[k] ; Val[k][1] /= d[k] ; Val[k][2] /= d[k] ; - d[k] = log10(d[k]/ValMin) ; - Val[k][0] *= d[k] ; Val[k][1] *= d[k] ; Val[k][2] *= d[k] ; - } - RaiseFill(0, d[k], ValMin, Raise); - Draw_Vector(View->ArrowType, View->IntervalsType!=DRAW_POST_ISO, - X[k], Y[k], Z[k], - fact*d[k], fact*Val[k][0], fact*Val[k][1], fact*Val[k][2], Raise); - } - } - } - -} - -void Draw_VectorPoint(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V){ - Draw_VectorSimplex(1, View, ValMin, ValMax, Raise, X, Y, Z, V); -} - -void Draw_VectorLine(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V){ - Draw_VectorSimplex(2, View, ValMin, ValMax, Raise, X, Y, Z, V); -} - -void Draw_VectorTriangle(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V){ - Draw_VectorSimplex(3, View, ValMin, ValMax, Raise, X, Y, Z, V); -} - -void Draw_VectorTetrahedron(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V){ - Draw_VectorSimplex(4, View, ValMin, ValMax, Raise, X, Y, Z, V); -} - - -/* ------------------------------------------------------------------------ */ -/* Tensor Simplices */ -/* ------------------------------------------------------------------------ */ - -static int TensorError = 0 ; - -void Draw_TensorSimplex(int nbnod, Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V){ - if(!TensorError){ - TensorError = 1; - Msg(GERROR, "Tensor field visualization is not implemented"); - Msg(GERROR, "We *need* some ideas on how to implement this!"); - Msg(GERROR, "Send your ideas to <gmsh@geuz.org>!"); - } -} - - -void Draw_TensorPoint(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V){ - Draw_TensorSimplex(1, View, ValMin, ValMax, Raise, X, Y, Z, V); -} - -void Draw_TensorLine(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V){ - Draw_TensorSimplex(2, View, ValMin, ValMax, Raise, X, Y, Z, V); -} - -void Draw_TensorTriangle(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V){ - Draw_TensorSimplex(3, View, ValMin, ValMax, Raise, X, Y, Z, V); -} - -void Draw_TensorTetrahedron(Post_View *View, - double ValMin, double ValMax, double Raise[3][5], - double *X, double *Y, double *Z, double *V){ - Draw_TensorSimplex(4, View, ValMin, ValMax, Raise, X, Y, Z, V); -} - diff --git a/Graphics/Scale.cpp b/Graphics/Scale.cpp deleted file mode 100644 index e3d5ec76246bb99e3f63f51bad077a070c2f9dd6..0000000000000000000000000000000000000000 --- a/Graphics/Scale.cpp +++ /dev/null @@ -1,268 +0,0 @@ -// $Id: Scale.cpp,v 1.21 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Numeric.h" -#include "Mesh.h" -#include "Draw.h" -#include "Context.h" -#include "Views.h" - -extern Context_T CTX; - -#if _XMOTIF - -#include "XContext.h" -extern XContext_T XCTX; -static int dir,ascent, descent; -static XCharStruct overall; -#define CHECK_W \ - XTextExtents(XCTX.xfont.helve, label, strlen(label), &dir,&ascent,&descent,&overall); \ - if(overall.width > cv_w) cv_w=overall.width - -#elif _FLTK -static double overall ; -#define CHECK_W overall=gl_width(label) ; if(overall > cv_w) cv_w=overall - -#else - -#define CHECK_W cv_w=200 - -#endif - -/* Even if all computations in these routines are made in window - coordinates, double precision is used to work at subpixel accuracy */ - -/* ------------------------------------------------------------------------ */ -/* D r a w _ S c a l e */ -/* ------------------------------------------------------------------------ */ - -extern double GiveValueFromIndex_Lin(double ValMin, double ValMax, int NbIso, int Iso); -extern double GiveValueFromIndex_Log(double ValMin, double ValMax, int NbIso, int Iso); -extern int GiveIndexFromValue_Lin(double ValMin, double ValMax, int NbIso, double Val); -extern int GiveIndexFromValue_Log(double ValMin, double ValMax, int NbIso, double Val); - -void draw_scale(Post_View *v, double xmin, double ymin, double *width, double height){ - int i, nbv; - double font_h, font_a, label_h; - double cs_xmin, cs_ymin, cs_h, cs_w, cs_bh; - double cv_xmin, cv_ymin, cv_h, cv_w, cv_bh; - char label[1024] ; - double Val, ValMin, ValMax; - - font_h = CTX.gl_fontheight ; /* hauteur totale de la fonte */ - font_a = CTX.gl_fontascent ; /* hauteur de la fonte au dessus de pt de ref */ - label_h = 1.8*font_h ; /* hauteur du label */ - - cs_xmin = xmin ; /* colorscale xmin */ - cs_ymin = ymin+label_h ; /* colorscale ymin */ - cs_w = 16. ; /* colorscale width */ - cs_h = height-label_h ; /* colorscale height */ - cs_bh = cs_h/v->NbIso ; /* colorscale box height */ - - cv_xmin = cs_xmin+cs_w+5 ; /* valuescale xmin */ - cv_ymin = cs_ymin ; /* valuescale ymin */ - cv_w = 0.0 ; /* valuescale width: to be computed */ - cv_h = cs_h ; /* valuescale height */ - cv_bh = 0.0 ; /* valuescale box height: to be computed */ - - - if(v->IntervalsType == DRAW_POST_CONTINUOUS) - glShadeModel(GL_SMOOTH); - else - glShadeModel(GL_FLAT); - - if(v->RangeType == DRAW_POST_CUSTOM){ - ValMin = v->CustomMin ; ValMax = v->CustomMax ; - } - else{ - ValMin = v->Min ; ValMax = v->Max ; - } - - switch(v->ScaleType){ - case DRAW_POST_LINEAR : - v->GIFV = GiveIndexFromValue_Lin ; - v->GVFI = GiveValueFromIndex_Lin ; - break; - case DRAW_POST_LOGARITHMIC : - v->GIFV = GiveIndexFromValue_Log ; - v->GVFI = GiveValueFromIndex_Log ; - break; - } - - /* background : bidouille - il faudra changer l'ordre des operations - */ - - if(!v->TransparentScale){ - sprintf(label, v->Format, (ValMin+ValMax)/Pi); - CHECK_W; - *width = cv_xmin-cs_xmin+cv_w; - glColor4ubv((GLubyte*)&CTX.color.bg); - glBegin(GL_QUADS); - glVertex2d(xmin, ymin); - glVertex2d(xmin+*width, ymin); - glVertex2d(xmin+*width, ymin+height); - glVertex2d(xmin, ymin+height); - glEnd(); - } - - /* colorscale */ - - for(i=0;i<v->NbIso;i++){ - if(v->IntervalsType==DRAW_POST_DISCRETE){ - Palette(v,v->NbIso,i); - glBegin(GL_QUADS); - glVertex2d(cs_xmin, cs_ymin+i*cs_bh); - glVertex2d(cs_xmin+cs_w, cs_ymin+i*cs_bh); - glVertex2d(cs_xmin+cs_w, cs_ymin+(i+1)*cs_bh); - glVertex2d(cs_xmin, cs_ymin+(i+1)*cs_bh); - glEnd(); - } - else if (v->IntervalsType==DRAW_POST_CONTINUOUS){ - glBegin(GL_QUADS); - Palette2(v,ValMin,ValMax,ValMin+i*(ValMax-ValMin)/v->NbIso); - glVertex2d(cs_xmin, cs_ymin+i*cs_bh); - glVertex2d(cs_xmin+cs_w, cs_ymin+i*cs_bh); - Palette2(v,ValMin,ValMax,ValMin+(i+1)*(ValMax-ValMin)/v->NbIso); - glVertex2d(cs_xmin+cs_w, cs_ymin+(i+1)*cs_bh); - glVertex2d(cs_xmin, cs_ymin+(i+1)*cs_bh); - glEnd(); - } - else{ - Palette(v,v->NbIso,i); - glBegin(GL_LINES); - glVertex2d(cs_xmin, cs_ymin+i*cs_bh+0.5*cs_bh); - glVertex2d(cs_xmin+cs_w, cs_ymin+i*cs_bh+0.5*cs_bh); - glEnd(); - } - } - - /* valuescale */ - - nbv = (v->NbIso<floor(cs_h/font_h))?v->NbIso:-1; - cv_bh = cv_h/nbv; - - glColor4ubv((GLubyte*)&CTX.color.text); - - /* only min and max if not enough room */ - if(nbv<0){ - if(v->IntervalsType == DRAW_POST_DISCRETE || - v->IntervalsType == DRAW_POST_CONTINUOUS){ - sprintf(label, v->Format, ValMin); - glRasterPos2d(cv_xmin,cv_ymin-font_a/3.); - Draw_String(label); CHECK_W; - - sprintf(label, v->Format, ValMax); - glRasterPos2d(cv_xmin,cv_ymin+cv_h-font_a/3.); - Draw_String(label); CHECK_W; - } - else { - sprintf(label, v->Format, ValMin); - glRasterPos2d(cv_xmin,cv_ymin+(cs_bh/2)-font_a/3.); - Draw_String(label); CHECK_W; - - sprintf(label, v->Format, ValMax); - glRasterPos2d(cv_xmin,cv_ymin+cv_h-(cs_bh/2)-font_a/3.); - Draw_String(label); CHECK_W; - } - } - - /* all the values if enough space */ - else { - if(v->IntervalsType == DRAW_POST_DISCRETE || - v->IntervalsType == DRAW_POST_CONTINUOUS){ - for(i=0 ; i<nbv+1 ; i++){ - Val = v->GVFI(ValMin,ValMax,nbv+1,i); - sprintf(label, v->Format, Val); - /* suppressing the 2 following lines improves fltk performance - a lot on linux. and only on linux. Why? */ - glRasterPos2d(cv_xmin,cv_ymin+i*cv_bh-font_a/3.); - Draw_String(label); CHECK_W; - } - } - else { - for(i=0 ; i<nbv ; i++){ - Val = v->GVFI(ValMin,ValMax,nbv,i); - sprintf(label, v->Format, Val); - glRasterPos2d(cv_xmin,cv_ymin+(2*i+1)*(cv_bh/2)-font_a/3.); - Draw_String(label); CHECK_W; - } - } - } - - /* the label */ - - glRasterPos2d(cv_xmin,ymin); - if(List_Nbr(v->Time)>1 && v->ShowTime) - sprintf(label, "%s (%g)", v->Name, *(double*)List_Pointer(v->Time,v->TimeStep)); - else - sprintf(label, "%s", v->Name); - Draw_String(label); CHECK_W; - - - /* compute the width */ - *width = cv_xmin-cs_xmin+cv_w; - -} - -static List_T *todraw=NULL; - -void Draw_Scales(void){ - int i; - double xmin, ymin, width, height, xsep, ysep; - double oldwidth, totalwidth; - Post_View *v; - - if(!Post_ViewList) return; - - /* scales to draw ? */ - - if(!todraw) - todraw = List_Create(5,5,sizeof(Post_View*)); - else - List_Reset(todraw); - - for(i=0;i<List_Nbr(Post_ViewList);i++){ - v = (Post_View*)List_Pointer(Post_ViewList,i); - if(v->Visible && v->ShowScale) List_Add(todraw,&v); - } - - if(!List_Nbr(todraw)){ - return; - } - - if(List_Nbr(todraw)==1){ - xsep = 20. ; - ysep = (CTX.viewport[3]-CTX.viewport[1])/6. ; - xmin = CTX.viewport[0] + xsep ; - ymin = CTX.viewport[1] + ysep ; - width = 0.0; - height = CTX.viewport[3]-CTX.viewport[1] - 2*ysep ; - - v = *((Post_View**)List_Pointer(todraw,0)); - draw_scale(v,xmin,ymin,&width,height); - } - else{ - xsep = 20. ; - ysep = (CTX.viewport[3]-CTX.viewport[1])/15. ; - xmin = CTX.viewport[0] + xsep ; - ymin = CTX.viewport[1] + ysep ; - width = 0.0; - totalwidth = 0.0; - height = (CTX.viewport[3]-CTX.viewport[1]-3*ysep)/2. ; - - for(i=0;i<List_Nbr(todraw);i++){ - v = *(Post_View**)List_Pointer(todraw,i); - oldwidth = width; - draw_scale(v, - xmin+totalwidth+(i/2)*xsep, - ymin+(1-i%2)*(height+ysep), - &width, - height); - if(i%2) totalwidth += DMAX(width,oldwidth); - } - } - -} - diff --git a/Graphics/XDump.cpp b/Graphics/XDump.cpp deleted file mode 100644 index 6a7e1c9795d6ed877fba7429439751f660a416c6..0000000000000000000000000000000000000000 --- a/Graphics/XDump.cpp +++ /dev/null @@ -1,458 +0,0 @@ -// $Id: XDump.cpp,v 1.5 2001-01-11 14:15:09 geuzaine Exp $ - -/* This is a modified version for Gmsh (mainly for c++ compliance) */ - -/* Dump the image in an X xindow to a .xwd file. - * This code was extracted by Brian Paul from the xwd program which is - * included with X11. The OMIT preprocessor identifier denotes regions - * of code I've had to omit. - */ - -/* from xwd.c: */ - -/* $XConsortium: xwd.c,v 1.56 91/07/25 18:00:15 rws Exp $ */ - -/* Copyright 1987 Massachusetts Institute of Technology */ - -/* - * xwd.c MIT Project Athena, X Window system window raster image dumper. - * - * This program will dump a raster image of the contents of a window into a - * file for output on graphics printers or for other uses. - * - * Author: Tony Della Fera, DEC - * 17-Jun-85 - * - * Modification history: - * - * 11/14/86 Bill Wyatt, Smithsonian Astrophysical Observatory - * - Removed Z format option, changing it to an XY option. Monochrome - * windows will always dump in XY format. Color windows will dump - * in Z format by default, but can be dumped in XY format with the - * -xy option. - * - * 11/18/86 Bill Wyatt - * - VERSION 6 is same as version 5 for monchrome. For colors, the - * appropriate number of Color structs are dumped after the header, - * which has the number of colors (=0 for monochrome) in place of the - * V5 padding at the end. Up to 16-bit displays are supported. I - * don't yet know how 24- to 32-bit displays will be handled under - * the Version 11 protocol. - * - * 6/15/87 David Krikorian, MIT Project Athena - * - VERSION 7 runs under the X Version 11 servers, while the previous - * versions of xwd were are for X Version 10. This version is based - * on xwd version 6, and should eventually have the same color - * abilities. (Xwd V7 has yet to be tested on a color machine, so - * all color-related code is commented out until color support - * becomes practical.) - */ - - -/* - * The following XCOLOR struct is to be used in place of X's XColor - * struct because on 32-bit systems, sizeof(XColor)=12 while on 64-bit - * systems, sizeof(XColor)=16. We MUST have an XColor struct of size - * 12 so a correct file is written. BEP July-21-95 - */ - -#ifdef _XMOTIF - -typedef struct { - unsigned int /*long*/ pixel; - unsigned short red, green, blue; - char flags; /* do_red, do_green, do_blue */ - char pad; -} XCOLOR; - - -#include <assert.h> -#include <X11/Xlib.h> -#include <X11/Xmd.h> -#include <X11/Xutil.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <X11/XWDFile.h> - -static Bool debug = False; -static Bool nobdrs = False; -static Bool on_root = False; -static Bool use_installed = False; -static long add_pixel_value = 0; -static int format = ZPixmap; - -static Display *dpy; -static char *program_name = "xdump"; -static int screen; - -typedef unsigned long Pixel; - - - -/* - * outl: a debugging routine. Flushes stdout then prints a message on stderr - * and flushes stderr. Used to print messages when past certain points - * in code so we can tell where we are. Outl may be invoked like - * printf with up to 7 arguments. - */ -/* VARARGS1 */ -static void outl( char *msg ) -{ - fflush(stdout); - fprintf(stderr, "%s\n", msg ); - fflush(stderr); -} - - -/* - * Standard fatal error routine - call like printf but maximum of 7 arguments. - * Does not require dpy or screen defined. - */ -/* VARARGS1 */ -static void Fatal_Error( char *msg ) -{ - fflush(stdout); - fflush(stderr); - fprintf(stderr, "%s: error: %s\n", program_name, msg); - exit(1); -} - - -/* - * Determine the pixmap size. - */ - -static int Image_Size( XImage *image ) -{ - if (image->format != ZPixmap) - return(image->bytes_per_line * image->height * image->depth); - - return(image->bytes_per_line * image->height); -} - - - -#define lowbit(x) ((x) & (~(x) + 1)) - -/* - * Get the XColors of all pixels in image - returns # of colors - */ -static int Get_XColors( XWindowAttributes *win_info, XColor **colors ) -{ - int i, ncolors; - Colormap cmap = win_info->colormap; - - if (use_installed) - /* assume the visual will be OK ... */ - cmap = XListInstalledColormaps(dpy, win_info->root, &i)[0]; - if (!cmap) - return(0); - - ncolors = win_info->visual->map_entries; - if (!(*colors = (XColor *) malloc (sizeof(XColor) * ncolors))) - Fatal_Error("Out of memory!"); - -#if defined(__cplusplus) || defined(c_plusplus) - if (win_info->visual->c_class == DirectColor || - win_info->visual->c_class == TrueColor) { -#else - if (win_info->visual->class == DirectColor || - win_info->visual->class == TrueColor) { -#endif - - Pixel red, green, blue, red1, green1, blue1; - - red = green = blue = 0; - red1 = lowbit(win_info->visual->red_mask); - green1 = lowbit(win_info->visual->green_mask); - blue1 = lowbit(win_info->visual->blue_mask); - for (i=0; i<ncolors; i++) { - (*colors)[i].pixel = red|green|blue; - (*colors)[i].pad = 0; - red += red1; - if (red > win_info->visual->red_mask) - red = 0; - green += green1; - if (green > win_info->visual->green_mask) - green = 0; - blue += blue1; - if (blue > win_info->visual->blue_mask) - blue = 0; - } - } else { - for (i=0; i<ncolors; i++) { - (*colors)[i].pixel = i; - (*colors)[i].pad = 0; - } - } - - XQueryColors(dpy, cmap, *colors, ncolors); - - return(ncolors); -} - - - -static void _swapshort( char *bp, unsigned n ) -{ - register char c; - register char *ep = bp + n; - - while (bp < ep) { - c = *bp; - *bp = *(bp + 1); - bp++; - *bp++ = c; - } -} - -static void _swaplong ( char *bp, unsigned n ) -{ - register char c; - register char *ep = bp + n; - register char *sp; - - while (bp < ep) { - sp = bp + 3; - c = *sp; - *sp = *bp; - *bp++ = c; - sp = bp + 1; - c = *sp; - *sp = *bp; - *bp++ = c; - bp += 2; - } -} - - - - - - -/* - * Window_Dump: dump a window to a file which must already be open for - * writting. - */ - - -void Window_Dump(Display *display, int scr, Window window, FILE *out){ - unsigned long swaptest = 1; - XColor *colors; - unsigned buffer_size; - int win_name_size; - int header_size; - int ncolors, i; - char *win_name; - Bool got_win_name; - XWindowAttributes win_info; - XImage *image; - int absx, absy, x, y; - int width, height; /* unsigned */ - int dwidth, dheight; - int bw; - Window dummywin; - XWDFileHeader header; - - dpy = display; - screen = scr; - - /* - * Inform the user not to alter the screen. - */ -#ifdef OMIT - Beep(); -#endif - - /* - * Get the parameters of the window being dumped. - */ - if (debug) outl("xwd: Getting target window information.\n"); - if(!XGetWindowAttributes(dpy, window, &win_info)) - Fatal_Error("Can't get target window attributes."); - - /* handle any frame window */ - if (!XTranslateCoordinates (dpy, window, RootWindow (dpy, screen), 0, 0, - &absx, &absy, &dummywin)) { - fprintf (stderr, - "%s: unable to translate window coordinates (%d,%d)\n", - program_name, absx, absy); - exit (1); - } - win_info.x = absx; - win_info.y = absy; - width = win_info.width; - height = win_info.height; - bw = 0; - - if (!nobdrs) { - absx -= win_info.border_width; - absy -= win_info.border_width; - bw = win_info.border_width; - width += (2 * bw); - height += (2 * bw); - } - dwidth = DisplayWidth (dpy, screen); - dheight = DisplayHeight (dpy, screen); - - - /* clip to window */ - if (absx < 0) width += absx, absx = 0; - if (absy < 0) height += absy, absy = 0; - if (absx + width > dwidth) width = dwidth - absx; - if (absy + height > dheight) height = dheight - absy; - - XFetchName(dpy, window, &win_name); - if (!win_name || !win_name[0]) { - win_name = "xwdump"; - got_win_name = False; - } else { - got_win_name = True; - } - - /* sizeof(char) is included for the null string terminator. */ - win_name_size = strlen(win_name) + sizeof(char); - - /* - * Snarf the pixmap with XGetImage. - */ - - x = absx - win_info.x; - y = absy - win_info.y; - if (on_root) - image = XGetImage (dpy, RootWindow(dpy, screen), absx, absy, width, height, AllPlanes, format); - else - image = XGetImage (dpy, window, x, y, width, height, AllPlanes, format); - if (!image) { - fprintf (stderr, "%s: unable to get image at %dx%d+%d+%d\n", - program_name, width, height, x, y); - exit (1); - } - - if (add_pixel_value != 0) XAddPixel (image, add_pixel_value); - - /* - * Determine the pixmap size. - */ - buffer_size = Image_Size(image); - - if (debug) outl("xwd: Getting Colors.\n"); - - ncolors = Get_XColors(&win_info, &colors); - - /* - * Inform the user that the image has been retrieved. - */ -#ifdef OMIT - XBell(dpy, FEEP_VOLUME); - XBell(dpy, FEEP_VOLUME); -#endif - XFlush(dpy); - - /* - * Calculate header size. - */ - if (debug) outl("xwd: Calculating header size.\n"); - header_size = sizeof(header) + win_name_size; - - /* - * Write out header information. - */ - if (debug) outl("xwd: Constructing and dumping file header.\n"); - header.header_size = (CARD32) header_size; - header.file_version = (CARD32) XWD_FILE_VERSION; - header.pixmap_format = (CARD32) format; - header.pixmap_depth = (CARD32) image->depth; - header.pixmap_width = (CARD32) image->width; - header.pixmap_height = (CARD32) image->height; - header.xoffset = (CARD32) image->xoffset; - header.byte_order = (CARD32) image->byte_order; - header.bitmap_unit = (CARD32) image->bitmap_unit; - header.bitmap_bit_order = (CARD32) image->bitmap_bit_order; - header.bitmap_pad = (CARD32) image->bitmap_pad; - header.bits_per_pixel = (CARD32) image->bits_per_pixel; - header.bytes_per_line = (CARD32) image->bytes_per_line; -#if defined(__cplusplus) || defined(c_plusplus) - header.visual_class = (CARD32) win_info.visual->c_class; -#else - header.visual_class = (CARD32) win_info.visual->class; -#endif - header.red_mask = (CARD32) win_info.visual->red_mask; - header.green_mask = (CARD32) win_info.visual->green_mask; - header.blue_mask = (CARD32) win_info.visual->blue_mask; - header.bits_per_rgb = (CARD32) win_info.visual->bits_per_rgb; - header.colormap_entries = (CARD32) win_info.visual->map_entries; - header.ncolors = ncolors; - header.window_width = (CARD32) win_info.width; - header.window_height = (CARD32) win_info.height; - header.window_x = absx; - header.window_y = absy; - header.window_bdrwidth = (CARD32) win_info.border_width; - - if (*(char *) &swaptest) { - _swaplong((char *) &header, sizeof(header)); - for (i = 0; i < ncolors; i++) { - _swaplong((char *) &colors[i].pixel, sizeof(long)); - _swapshort((char *) &colors[i].red, 3 * sizeof(short)); - } - } - - (void) fwrite((char *)&header, sizeof(header), 1, out); - (void) fwrite(win_name, win_name_size, 1, out); - - /* - * Write out the color maps, if any - */ - - /*if (debug) outl("xwd: Dumping %d colors.\n", ncolors);*/ - for (i=0;i<ncolors;i++) { - XCOLOR xc; - assert( sizeof(xc)==12 ); - xc.pixel = colors[i].pixel; - xc.red = colors[i].red; - xc.green = colors[i].green; - xc.blue = colors[i].blue; - xc.flags = colors[i].flags; - xc.pad = colors[i].pad; - (void) fwrite( (char *) &xc, sizeof(XCOLOR), 1, out ); - } -/* OLD: - (void) fwrite((char *) colors, sizeof(XColor), ncolors, out); -*/ - - /* - * Write out the buffer. - */ - /*if (debug) outl("xwd: Dumping pixmap. bufsize=%d\n",buffer_size);*/ - - /* - * This copying of the bit stream (data) to a file is to be replaced - * by an Xlib call which hasn't been written yet. It is not clear - * what other functions of xwd will be taken over by this (as yet) - * non-existant X function. - */ - (void) fwrite(image->data, (int) buffer_size, 1, out); - - /* - * free the color buffer. - */ - - if(debug && ncolors > 0) outl("xwd: Freeing colors.\n"); - if(ncolors > 0) free(colors); - - /* - * Free window name string. - */ - if (debug) outl("xwd: Freeing window name string.\n"); - if (got_win_name) XFree(win_name); - - /* - * Free image - */ - XDestroyImage(image); -} - -#endif //_XMOTIF - - diff --git a/Graphics/XDump.h b/Graphics/XDump.h deleted file mode 100644 index 981d0be2b0da033f15a9b0ed528f686526b1336c..0000000000000000000000000000000000000000 --- a/Graphics/XDump.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _XDUMP_H_ -#define _XDUMP_H_ - -void Window_Dump(Display *display, int scr, Window window, FILE *out); - -#endif diff --git a/Graphics/gl2gif.cpp b/Graphics/gl2gif.cpp deleted file mode 100644 index 58f86effb87f5d6466fbe7b24c58eea9ed5d0b5d..0000000000000000000000000000000000000000 --- a/Graphics/gl2gif.cpp +++ /dev/null @@ -1,1415 +0,0 @@ -// $Id: gl2gif.cpp,v 1.11 2001-04-08 20:36:49 geuzaine Exp $ - -/* - * gl2gif: an OpenGL to GIF printing library - * - * Warning: This code is really a dirty hack. It SHOULD be cleaned - * (and most of all, all the static variables should be removed) - * - * - * Based on - * - * . libppm3.c - ppm utility library part 3 - * Copyright (C) 1989, 1991 by Jef Poskanzer. - * - * . ppmtogif.c - read a portable pixmap and produce a GIF file - * Copyright (C) 1989 by Jef Poskanzer. - * - * . GIFCOMPR.C - * Lempel-Ziv compression based on 'compress.c'. - * File compression ala IEEE Computer, June 1984. - * By Authors: Spencer W. Thomas (decvax!harpo!utah-cs!utah-gr!thomas) - * Jim McKie (decvax!mcvax!jim) - * Steve Davies (decvax!vax135!petsd!peora!srd) - * Ken Turkowski (decvax!decwrl!turtlevax!ken) - * James A. Woods (decvax!ihnp4!ames!jaw) - * Joe Orost (decvax!vax135!petsd!joe) - * GIF modifications by David Rowley (mgardi@watdcsu.waterloo.edu) - * - * . ppmquant.c - quantize the colors in a pixmap down to a specified - * number - * Copyright (C) 1989, 1991 by Jef Poskanzer. Based on Paul - * Heckbert's paper "Color Image Quantization for Frame Buffer - * Display", SIGGRAPH '82 Proceedings, page 297. - * - */ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "gl2gif.h" - -/* ------------------------------------------------------------------ - PPM colormap routines - ------------------------------------------------------------------ */ - -#define HASH_SIZE 20023 -#define ppm_hashpixel(p) ( ( (int) (p) & 0x7fffffff ) % HASH_SIZE ) - -static int static_red[MAX_GIFCOLORS]; -static int static_green[MAX_GIFCOLORS]; -static int static_blue[MAX_GIFCOLORS]; -static int static_perm[MAX_GIFCOLORS], static_permi[MAX_GIFCOLORS]; -static int static_nbcolors; -static pixel** static_pixels; -static colorhash_table static_cht; - -colorhash_table ppm_alloccolorhash( ){ - colorhash_table cht; - int i; - - cht = (colorhash_table) Malloc( HASH_SIZE * sizeof(colorhist_list) ); - - for ( i = 0; i < HASH_SIZE; ++i ) - cht[i] = (colorhist_list) 0; - - return cht; -} - -void ppm_freecolorhash( colorhash_table cht ){ - int i; - colorhist_list chl, chlnext; - - for ( i = 0; i < HASH_SIZE; ++i ) - for ( chl = cht[i]; chl != (colorhist_list) 0; chl = chlnext ){ - chlnext = chl->next; - Free( (char*) chl ); - } - Free( (char*) cht ); -} - -colorhash_table ppm_computecolorhash( pixel ** const pixels, - const int cols, const int rows, - const int maxcolors, int * const colorsP ){ - colorhash_table cht; - const pixel* pP; - colorhist_list chl; - int col, row, hash; - - cht = ppm_alloccolorhash( ); - *colorsP = 0; - - /* Go through the entire image, building a hash table of colors. */ - for ( row = 0; row < rows; ++row ) - for ( col = 0, pP = pixels[row]; col < cols; ++col, ++pP ){ - hash = ppm_hashpixel( *pP ); - for ( chl = cht[hash]; chl != (colorhist_list) 0; chl = chl->next ) - if ( PPM_EQUAL( chl->ch.color, *pP ) ) - break; - if ( chl != (colorhist_list) 0 ) - ++(chl->ch.value); - else{ - if ( ++(*colorsP) > maxcolors ){ - ppm_freecolorhash( cht ); - return (colorhash_table) 0; - } - chl = (colorhist_list) Malloc( sizeof(struct colorhist_list_item) ); - chl->ch.color = *pP; - chl->ch.value = 1; - chl->next = cht[hash]; - cht[hash] = chl; - } - } - - return cht; -} - -int ppm_addtocolorhash( colorhash_table cht, const pixel * const colorP, - const int value ){ - register int hash; - register colorhist_list chl; - - chl = (colorhist_list) Malloc( sizeof(struct colorhist_list_item) ); - hash = ppm_hashpixel( *colorP ); - chl->ch.color = *colorP; - chl->ch.value = value; - chl->next = cht[hash]; - cht[hash] = chl; - return 0; -} - -colorhist_vector ppm_colorhashtocolorhist( const colorhash_table cht, - const int maxcolors ){ - colorhist_vector chv; - colorhist_list chl; - int i, j; - - /* Now collate the hash table into a simple colorhist array. */ - chv = (colorhist_vector) Malloc( maxcolors * sizeof(struct colorhist_item) ); - /* Loop through the hash table. */ - j = 0; - for ( i = 0; i < HASH_SIZE; ++i ) - for ( chl = cht[i]; chl != (colorhist_list) 0; chl = chl->next ){ - /* Add the new entry. */ - chv[j] = chl->ch; - ++j; - } - - /* All done. */ - return chv; -} - -colorhash_table ppm_colorhisttocolorhash( const colorhist_vector chv, - const int colors ){ - colorhash_table cht; - int i, hash; - pixel color; - colorhist_list chl; - - cht = ppm_alloccolorhash( ); /* Initializes to NULLs */ - - for ( i = 0; i < colors; ++i ){ - color = chv[i].color; - hash = ppm_hashpixel( color ); - for ( chl = cht[hash]; chl != (colorhist_list) 0; chl = chl->next ) - if ( PPM_EQUAL( chl->ch.color, color ) ) - Msg(GERROR, "GIF: same color found twice - %d %d %d", PPM_GETR(color), - PPM_GETG(color), PPM_GETB(color) ); - chl = (colorhist_list) Malloc( sizeof(struct colorhist_list_item) ); - chl->ch.color = color; - chl->ch.value = i; - chl->next = cht[hash]; - cht[hash] = chl; - } - - return cht; -} - -colorhist_vector ppm_computecolorhist( pixel ** const pixels, - const int cols, const int rows, - const int maxcolors, - int * const colorsP ){ - colorhash_table cht; - colorhist_vector chv; - - cht = ppm_computecolorhash( pixels, cols, rows, maxcolors, colorsP ); - if ( cht == (colorhash_table) 0 ) - return (colorhist_vector) 0; - chv = ppm_colorhashtocolorhist( cht, maxcolors ); - ppm_freecolorhash( cht ); - return chv; -} - - -int ppm_lookupcolor( const colorhash_table cht, const pixel * const colorP ){ - int hash; - colorhist_list chl; - - hash = ppm_hashpixel( *colorP ); - for ( chl = cht[hash]; chl != (colorhist_list) 0; chl = chl->next ) - if ( PPM_EQUAL( chl->ch.color, *colorP ) ) - return chl->ch.value; - - return -1; -} - -void ppm_freecolorhist( colorhist_vector chv ){ - Free( (char*) chv ); -} - -static int colorstobpp( int colors ){ - int bpp; - - if ( colors <= 2 ) - bpp = 1; - else if ( colors <= 4 ) - bpp = 2; - else if ( colors <= 8 ) - bpp = 3; - else if ( colors <= 16 ) - bpp = 4; - else if ( colors <= 32 ) - bpp = 5; - else if ( colors <= 64 ) - bpp = 6; - else if ( colors <= 128 ) - bpp = 7; - else if ( colors <= 256 ) - bpp = 8; - else{ - Msg(GERROR, "GIF: can't happen: too many colors" ); - bpp = 8 ; - } - - return bpp; -} - - -static int sqr(int x){ - return x*x; -} - -static int closestcolor(pixel color){ - int i,r,g,b,d,imin,dmin; - - r=(int)PPM_GETR(color); - g=(int)PPM_GETG(color); - b=(int)PPM_GETB(color); - - dmin=1000000; - for (i=0 ; i<static_nbcolors ; i++) { - d = sqr(r-static_red[i]) + sqr(g-static_green[i]) + sqr(b-static_blue[i]); - if (d<dmin) { - dmin=d; - imin=i; - } - } - ppm_addtocolorhash(static_cht,&color,static_permi[imin]); - return imin; -} - - -static int GetPixel( int x, int y ){ - int color; - - color = ppm_lookupcolor( static_cht, &static_pixels[y][x] ); - if (color == -1) - color = closestcolor(static_pixels[y][x]); - else - color = static_perm[color]; - return color; -} - - -/* ------------------------------------------------------------------ - PPM quantization - ------------------------------------------------------------------ */ - -/* #define LARGE_NORM */ -#define LARGE_LUM - -/* #define REP_CENTER_BOX */ -/* #define REP_AVERAGE_COLORS */ -#define REP_AVERAGE_PIXELS - -typedef struct box* box_vector; -struct box{ - int ind; - int colors; - int sum; -}; - -static int redcompare( const void *ch1, const void *ch2 ){ - return (int) PPM_GETR( ((colorhist_vector)ch1)->color ) - - (int) PPM_GETR( ((colorhist_vector)ch2)->color ); -} - -static int greencompare( const void *ch1, const void *ch2 ) { - return (int) PPM_GETG(((colorhist_vector) ch1)->color ) - - (int) PPM_GETG( ((colorhist_vector)ch2)->color ); -} - -static int bluecompare(const void *ch1, const void *ch2 ) { - return (int) PPM_GETB(((colorhist_vector)ch1)->color ) - - (int) PPM_GETB(((colorhist_vector)ch2)->color ); -} - -static int sumcompare(const void *b1, const void *b2 ) { - return(((box_vector)b2)->sum - ((box_vector)b1)->sum); -} - -/* - * Here is the fun part, the median-cut colormap generator. This is based - * on Paul Heckbert's paper "Color Image Quantization for Frame Buffer - * Display", SIGGRAPH '82 Proceedings, page 297. - */ - -static colorhist_vector mediancut( colorhist_vector chv, int colors, - int sum, pixval maxval, int newcolors ){ - colorhist_vector colormap; - box_vector bv; - register int bi, i; - int boxes; - - bv = (box_vector) malloc( sizeof(struct box) * newcolors ); - colormap = - (colorhist_vector) malloc( sizeof(struct colorhist_item) * newcolors ); - if ( bv == (box_vector) 0 || colormap == (colorhist_vector) 0 ) - Msg(GERROR, "GIF: out of memory" ); - for ( i = 0; i < newcolors; ++i ) - PPM_ASSIGN( colormap[i].color, 0, 0, 0 ); - - /* - * Set up the initial box. - */ - bv[0].ind = 0; - bv[0].colors = colors; - bv[0].sum = sum; - boxes = 1; - - /* - * Main loop: split boxes until we have enough. - */ - while ( boxes < newcolors ){ - register int indx, clrs; - int sm; - register int minr, maxr, ming, maxg, minb, maxb, v; - int halfsum, lowersum; - - /* - * Find the first splittable box. - */ - for ( bi = 0; bi < boxes; ++bi ) - if ( bv[bi].colors >= 2 ) - break; - if ( bi == boxes ) - break; /* ran out of colors! */ - indx = bv[bi].ind; - clrs = bv[bi].colors; - sm = bv[bi].sum; - - /* - * Go through the box finding the minimum and maximum of each - * component - the boundaries of the box. - */ - minr = maxr = PPM_GETR( chv[indx].color ); - ming = maxg = PPM_GETG( chv[indx].color ); - minb = maxb = PPM_GETB( chv[indx].color ); - for ( i = 1; i < clrs; ++i ){ - v = PPM_GETR( chv[indx + i].color ); - if ( v < minr ) minr = v; - if ( v > maxr ) maxr = v; - v = PPM_GETG( chv[indx + i].color ); - if ( v < ming ) ming = v; - if ( v > maxg ) maxg = v; - v = PPM_GETB( chv[indx + i].color ); - if ( v < minb ) minb = v; - if ( v > maxb ) maxb = v; - } - - /* - * Find the largest dimension, and sort by that component. I have - * included two methods for determining the "largest" dimension; - * first by simply comparing the range in RGB space, and second - * by transforming into luminosities before the comparison. You - * can switch which method is used by switching the commenting on - * the LARGE_ defines at the beginning of this source file. - */ -#ifdef LARGE_NORM - if ( maxr - minr >= maxg - ming && maxr - minr >= maxb - minb ) - qsort( (char*) &(chv[indx]), clrs, sizeof(struct colorhist_item), - redcompare ); - else if ( maxg - ming >= maxb - minb ) - qsort( (char*) &(chv[indx]), clrs, sizeof(struct colorhist_item), - greencompare ); - else - qsort( (char*) &(chv[indx]), clrs, sizeof(struct colorhist_item), - bluecompare ); -#endif - -#ifdef LARGE_LUM - pixel p; - float rl, gl, bl; - - PPM_ASSIGN(p, maxr - minr, 0, 0); - rl = PPM_LUMIN(p); - PPM_ASSIGN(p, 0, maxg - ming, 0); - gl = PPM_LUMIN(p); - PPM_ASSIGN(p, 0, 0, maxb - minb); - bl = PPM_LUMIN(p); - - if ( rl >= gl && rl >= bl ) - qsort( (char*) &(chv[indx]), clrs, sizeof(struct colorhist_item), - &redcompare ); - else if ( gl >= bl ) - qsort( (char*) &(chv[indx]), clrs, sizeof(struct colorhist_item), - &greencompare ); - else - qsort( (char*) &(chv[indx]), clrs, sizeof(struct colorhist_item), - &bluecompare ); -#endif - - /* - * Now find the median based on the counts, so that about half the - * pixels (not colors, pixels) are in each subdivision. - */ - lowersum = chv[indx].value; - halfsum = sm / 2; - for ( i = 1; i < clrs - 1; ++i ){ - if ( lowersum >= halfsum ) - break; - lowersum += chv[indx + i].value; - } - - /* - * Split the box, and sort to bring the biggest boxes to the top. - */ - bv[bi].colors = i; - bv[bi].sum = lowersum; - bv[boxes].ind = indx + i; - bv[boxes].colors = clrs - i; - bv[boxes].sum = sm - lowersum; - ++boxes; - qsort( (char*) bv, boxes, sizeof(struct box), sumcompare ); - } - - /* - * Ok, we've got enough boxes. Now choose a representative color for - * each box. There are a number of possible ways to make this choice. - * One would be to choose the center of the box; this ignores any structure - * within the boxes. Another method would be to average all the colors in - * the box - this is the method specified in Heckbert's paper. A third - * method is to average all the pixels in the box. You can switch which - * method is used by switching the commenting on the REP_ defines at - * the beginning of this source file. - */ - for ( bi = 0; bi < boxes; ++bi ){ - -#ifdef REP_CENTER_BOX - register int indx = bv[bi].ind; - register int clrs = bv[bi].colors; - register int minr, maxr, ming, maxg, minb, maxb, v; - - minr = maxr = PPM_GETR( chv[indx].color ); - ming = maxg = PPM_GETG( chv[indx].color ); - minb = maxb = PPM_GETB( chv[indx].color ); - for ( i = 1; i < clrs; ++i ){ - v = PPM_GETR( chv[indx + i].color ); - minr = min( minr, v ); - maxr = max( maxr, v ); - v = PPM_GETG( chv[indx + i].color ); - ming = min( ming, v ); - maxg = max( maxg, v ); - v = PPM_GETB( chv[indx + i].color ); - minb = min( minb, v ); - maxb = max( maxb, v ); - } - PPM_ASSIGN( colormap[bi].color, ( minr + maxr ) / 2, ( ming + maxg ) / 2, - ( minb + maxb ) / 2 ); -#endif - -#ifdef REP_AVERAGE_COLORS - register int indx = bv[bi].ind; - register int clrs = bv[bi].colors; - register long r = 0, g = 0, b = 0; - - for ( i = 0; i < clrs; ++i ){ - r += PPM_GETR( chv[indx + i].color ); - g += PPM_GETG( chv[indx + i].color ); - b += PPM_GETB( chv[indx + i].color ); - } - r = r / clrs; - g = g / clrs; - b = b / clrs; - PPM_ASSIGN( colormap[bi].color, r, g, b ); -#endif - -#ifdef REP_AVERAGE_PIXELS - register int indx = bv[bi].ind; - register int clrs = bv[bi].colors; - register long r = 0, g = 0, b = 0, sum = 0; - - for ( i = 0; i < clrs; ++i ){ - r += PPM_GETR( chv[indx + i].color ) * chv[indx + i].value; - g += PPM_GETG( chv[indx + i].color ) * chv[indx + i].value; - b += PPM_GETB( chv[indx + i].color ) * chv[indx + i].value; - sum += chv[indx + i].value; - } - r = r / sum; - if ( r > (long)maxval ) r = maxval; /* avoid math errors */ - g = g / sum; - if ( g > (long)maxval ) g = maxval; - b = b / sum; - if ( b > (long)maxval ) b = maxval; - PPM_ASSIGN( colormap[bi].color, r, g, b ); -#endif - } - - /* - * All done. - */ - return colormap; -} - - -/*------------------------------------------------------------------ - GIF compression routines - ------------------------------------------------------------------*/ - -#define BITS 12 -#define HSIZE 5003 /* 80% occupancy */ -#define TRUE 1 -#define FALSE 0 - -typedef unsigned char char_type; -typedef int (* ifunptr)(int, int); - -static int g_init_bits; -static FILE* g_outfile; -static int Width, Height; -static int curx, cury; -static long CountDown; -static int Pass = 0; -static int Interlace; - -#include <ctype.h> - -#define ARGVAL() (*++(*argv) || (--argc && *++argv)) - -static int n_bits; /* number of bits/code */ -static int maxbits = BITS; /* user settable max # bits/code */ -static code_int maxcode; /* maximum code, given n_bits */ -static code_int maxmaxcode = (code_int)1 << BITS; - /* should NEVER generate this code */ - -#define MAXCODE(n_bits) (((code_int) 1 << (n_bits)) - 1) - -static count_int htab [HSIZE]; -static unsigned short codetab [HSIZE]; -#define HashTabOf(i) htab[i] -#define CodeTabOf(i) codetab[i] - -static code_int hsize = HSIZE; /* for dynamic table sizing */ - -/* - * To save much memory, we overlay the table used by compress() with those - * used by decompress(). The tab_prefix table is the same size and type - * as the codetab. The tab_suffix table needs 2**BITS characters. We - * get this from the beginning of htab. The output stack uses the rest - * of htab, and contains characters. There is plenty of room for any - * possible stack (stack used to be 8000 characters). - */ - -#define tab_prefixof(i) CodeTabOf(i) -#define tab_suffixof(i) ((char_type*)(htab))[i] -#define de_stack ((char_type*)&tab_suffixof((code_int)1<<BITS)) - -static code_int free_ent = 0; /* first unused entry */ - -/* - * block compression parameters -- after all codes are used up, - * and compression rate changes, start over. - */ -static int clear_flg = 0; - -static long int in_count = 1; /* length of input */ -static long int out_count = 0; /* # of codes output (for debugging) */ -static int ClearCode; -static int EOFCode; - -/* - * Number of characters so far in this 'packet' - */ -static int a_count; - -/* - * Set up the 'byte output' routine - */ -static void char_init(){ - a_count = 0; -} - -/* - * Define the storage for the packet accumulator - */ -static char accum[ 256 ]; - - -/* - * Flush the packet to disk, and reset the accumulator - */ -static void flush_char(){ - if( a_count > 0 ) { - fputc( a_count, g_outfile ); - fwrite( accum, 1, a_count, g_outfile ); - a_count = 0; - } -} - -/* - * Add a character to the end of the current packet, and if it is 254 - * characters, flush the packet to disk. - */ -static void char_out( int c){ - accum[ a_count++ ] = c; - if( a_count >= 254 ) - flush_char(); -} - -/* - * Bump the 'curx' and 'cury' to point to the next pixel - */ - -static void BumpPixel(){ - /* - * Bump the current X position - */ - ++curx; - - /* - * If we are at the end of a scan line, set curx back to the beginning - * If we are interlaced, bump the cury to the appropriate spot, - * otherwise, just increment it. - */ - if( curx == Width ) { - curx = 0; - - if( !Interlace ) - ++cury; - else { - switch( Pass ) { - - case 0: - cury += 8; - if( cury >= Height ) { - ++Pass; - cury = 4; - } - break; - - case 1: - cury += 8; - if( cury >= Height ) { - ++Pass; - cury = 2; - } - break; - - case 2: - cury += 4; - if( cury >= Height ) { - ++Pass; - cury = 1; - } - break; - - case 3: - cury += 2; - break; - } - } - } -} - - -/* - * Return the next pixel from the image - */ -static int GIFNextPixel( ifunptr getpixel){ - int r; - - if( CountDown == 0 ) - return EOF; - - --CountDown; - - r = ( * getpixel )( curx, cury ); - - BumpPixel(); - - return r; -} - - -/* - * Output the given code. - * Inputs: - * code: A n_bits-bit integer. If == -1, then EOF. This assumes - * that n_bits =< (long)wordsize - 1. - * Outputs: - * Outputs code to the file. - * Assumptions: - * Chars are 8 bits long. - * Algorithm: - * Maintain a BITS character long buffer (so that 8 codes will - * fit in it exactly). Use the VAX insv instruction to insert each - * code in turn. When the buffer fills up empty it and start over. - */ - -static unsigned long cur_accum = 0; -static int cur_bits = 0; - -static unsigned long masks[] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, - 0x001F, 0x003F, 0x007F, 0x00FF, - 0x01FF, 0x03FF, 0x07FF, 0x0FFF, - 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF }; - -static void output( code_int code){ - cur_accum &= masks[ cur_bits ]; - - if( cur_bits > 0 ) - cur_accum |= ((long)code << cur_bits); - else - cur_accum = code; - - cur_bits += n_bits; - - while( cur_bits >= 8 ) { - char_out( (unsigned int)(cur_accum & 0xff) ); - cur_accum >>= 8; - cur_bits -= 8; - } - - /* - * If the next entry is going to be too big for the code size, - * then increase it, if possible. - */ - if ( free_ent > maxcode || clear_flg ) { - - if( clear_flg ) { - maxcode = MAXCODE (n_bits = g_init_bits); - clear_flg = 0; - } - else { - ++n_bits; - if ( n_bits == maxbits ) - maxcode = maxmaxcode; - else - maxcode = MAXCODE(n_bits); - } - } - - if( code == EOFCode ) { - /* - * At EOF, write the rest of the buffer. - */ - while( cur_bits > 0 ) { - char_out( (unsigned int)(cur_accum & 0xff) ); - cur_accum >>= 8; - cur_bits -= 8; - } - - flush_char(); - - fflush( g_outfile ); - - if( ferror( g_outfile ) ) - Msg(GERROR, "GIF: Error writing output file"); - } -} - - -/* - * compress - * - * Algorithm: use open addressing double hashing (no chaining) on the - * prefix code / next character combination. We do a variant of Knuth's - * algorithm D (vol. 3, sec. 6.4) along with G. Knott's relatively-prime - * secondary probe. Here, the modular division first probe is gives way - * to a faster exclusive-or manipulation. Also do block compression with - * an adaptive reset, whereby the code table is cleared when the compression - * ratio decreases, but after the table fills. The variable-length output - * codes are re-sized at this point, and a special CLEAR code is generated - * for the decompressor. Late addition: construct the table according to - * file size for noticeable speed improvement on small files. Please direct - * questions about this implementation to ames!jaw. - */ - -static void cl_hash(register count_int hsize){ /* reset code table */ - register count_int *htab_p = htab+hsize; - - register long i; - register long m1 = -1; - - i = hsize - 16; - do { /* might use Sys V memset(3) here */ - *(htab_p-16) = m1; - *(htab_p-15) = m1; - *(htab_p-14) = m1; - *(htab_p-13) = m1; - *(htab_p-12) = m1; - *(htab_p-11) = m1; - *(htab_p-10) = m1; - *(htab_p-9) = m1; - *(htab_p-8) = m1; - *(htab_p-7) = m1; - *(htab_p-6) = m1; - *(htab_p-5) = m1; - *(htab_p-4) = m1; - *(htab_p-3) = m1; - *(htab_p-2) = m1; - *(htab_p-1) = m1; - htab_p -= 16; - } while ((i -= 16) >= 0); - - for ( i += 16; i > 0; --i ) - *--htab_p = m1; -} - - -/* - * Clear out the hash table - */ -static void cl_block (){ /* table clear for block compress */ - - cl_hash ( (count_int) hsize ); - free_ent = ClearCode + 2; - clear_flg = 1; - - output( (code_int)ClearCode ); -} - -static void compress( int init_bits, FILE* outfile, ifunptr ReadValue){ - register long fcode; - register code_int i /* = 0 */; - register int c; - register code_int ent; - register code_int disp; - register code_int hsize_reg; - register int hshift; - - /* - * Set up the globals: g_init_bits - initial number of bits - * g_outfile - pointer to output file - */ - g_init_bits = init_bits; - g_outfile = outfile; - - /* - * Set up the necessary values - */ - out_count = 0; - clear_flg = 0; - in_count = 1; - maxcode = MAXCODE(n_bits = g_init_bits); - - ClearCode = (1 << (init_bits - 1)); - EOFCode = ClearCode + 1; - free_ent = ClearCode + 2; - - char_init(); - - ent = GIFNextPixel( ReadValue ); - - hshift = 0; - for ( fcode = (long) hsize; fcode < 65536L; fcode *= 2L ) - ++hshift; - hshift = 8 - hshift; /* set hash code range bound */ - - hsize_reg = hsize; - cl_hash( (count_int) hsize_reg); /* clear hash table */ - - output( (code_int)ClearCode ); - - while ( (c = GIFNextPixel( ReadValue )) != EOF ) { - - ++in_count; - - fcode = (long) (((long) c << maxbits) + ent); - i = (((code_int)c << hshift) ^ ent); /* xor hashing */ - - if ( HashTabOf (i) == fcode ) { - ent = CodeTabOf (i); - continue; - } else if ( (long)HashTabOf (i) < 0 ) /* empty slot */ - goto nomatch; - disp = hsize_reg - i; /* secondary hash (after G. Knott) */ - if ( i == 0 ) - disp = 1; -probe: - if ( (i -= disp) < 0 ) - i += hsize_reg; - - if ( HashTabOf (i) == fcode ) { - ent = CodeTabOf (i); - continue; - } - if ( (long)HashTabOf (i) > 0 ) - goto probe; -nomatch: - output ( (code_int) ent ); - ++out_count; - ent = c; - if ( free_ent < maxmaxcode ) { - CodeTabOf (i) = free_ent++; /* code -> hashtable */ - HashTabOf (i) = fcode; - } else - cl_block(); - } - /* - * Put out the final code. - */ - output( (code_int)ent ); - ++out_count; - output( (code_int) EOFCode ); -} - - -/* - * Write out a word to the GIF file - */ -static void Putword( int w, FILE* fp){ - fputc( w & 0xff, fp ); - fputc( (w / 256) & 0xff, fp ); -} - - -static void GIFEncode( FILE* fp, - int GWidth, int GHeight, - int GInterlace, int Background, int Transparent, - int BitsPerPixel, int Red[], int Green[], int Blue[], - ifunptr GetPixel){ - int B; - int RWidth, RHeight; - int LeftOfs, TopOfs; - int Resolution; - int ColorMapSize; - int InitCodeSize; - int i; - - /* reset stuff for output */ - cur_accum = 0; - cur_bits = 0; - free_ent = 0; - - Interlace = GInterlace; - - ColorMapSize = 1 << BitsPerPixel; - - RWidth = Width = GWidth; - RHeight = Height = GHeight; - LeftOfs = TopOfs = 0; - - Resolution = BitsPerPixel; - - /* - * Calculate number of bits we are expecting - */ - CountDown = (long)Width * (long)Height; - - /* - * Indicate which pass we are on (if interlace) - */ - Pass = 0; - - /* - * The initial code size - */ - if( BitsPerPixel <= 1 ) - InitCodeSize = 2; - else - InitCodeSize = BitsPerPixel; - - /* - * Set up the current x and y position - */ - curx = cury = 0; - - /* - * Write the Magic header - */ - fwrite( Transparent < 0 ? "GIF87a" : "GIF89a", 1, 6, fp ); - - /* - * Write out the screen width and height - */ - Putword( RWidth, fp ); - Putword( RHeight, fp ); - - /* - * Indicate that there is a global colour map - */ - B = 0x80; /* Yes, there is a color map */ - - /* - * OR in the resolution - */ - B |= (Resolution - 1) << 5; - - /* - * OR in the Bits per Pixel - */ - B |= (BitsPerPixel - 1); - - /* - * Write it out - */ - fputc( B, fp ); - - /* - * Write out the Background colour - */ - fputc( Background, fp ); - - /* - * Byte of 0's (future expansion) - */ - fputc( 0, fp ); - - /* - * Write out the Global Colour Map - */ - for( i=0; i<ColorMapSize; ++i ) { - fputc( Red[i], fp ); - fputc( Green[i], fp ); - fputc( Blue[i], fp ); - } - - /* - * Write out extension for transparent colour index, if necessary. - */ - if ( Transparent >= 0 ) { - fputc( '!', fp ); - fputc( 0xf9, fp ); - fputc( 4, fp ); - fputc( 1, fp ); - fputc( 0, fp ); - fputc( 0, fp ); - fputc( Transparent, fp ); - fputc( 0, fp ); - } - - /* - * Write an Image separator - */ - fputc( ',', fp ); - - /* - * Write the Image header - */ - - Putword( LeftOfs, fp ); - Putword( TopOfs, fp ); - Putword( Width, fp ); - Putword( Height, fp ); - - /* - * Write out whether or not the image is interlaced - */ - if( Interlace ) - fputc( 0x40, fp ); - else - fputc( 0x00, fp ); - - /* - * Write out the initial code size - */ - fputc( InitCodeSize, fp ); - - /* - * Go and actually compress the data - */ - compress( InitCodeSize+1, fp, GetPixel ); - - /* - * Write out a Zero-length packet (to end the series) - */ - fputc( 0, fp ); - - /* - * Write the GIF file terminator - */ - fputc( ';', fp ); - -} - - -/* ------------------------------------------------------------------ - GL2GIF public routine - ------------------------------------------------------------------ */ - -#define FS_SCALE 1024 -#define MAXCOL2 32767 - -void create_gif(FILE *outfile, int width, int height, - int dither, int sort, int interlace, - int transparency, int bg_r, int bg_g, int bg_b){ - - int i,j,k,transparent,rows,cols; - pixel transcolor; - colorhist_vector chv, colormap; - int BitsPerPixel, usehash; - unsigned char *RedBuffer, *GreenBuffer, *BlueBuffer; - pixval maxval=MAXCOL2, newmaxval; - colorhash_table cht; - register pixel* pP; - register int col, row, limitcol, ind; - int newcolors=256; - long *thisrerr, *nextrerr, *thisgerr, *nextgerr; - long *thisberr, *nextberr, *temperr; - register long sr=0, sg=0, sb=0, err=0; - int fs_direction; - - /* This is stupid, but I couldn't figure out how to pack the data - directly from the OpenGL frame buffer into unsigned long pixel[][] */ - - //printf("read buff : %g \n", Cpu()); - - glPixelStorei(GL_PACK_ALIGNMENT,1); - glPixelStorei(GL_UNPACK_ALIGNMENT,1); - RedBuffer = (unsigned char *)Malloc(height*width*sizeof(unsigned char)); - GreenBuffer = (unsigned char *)Malloc(height*width*sizeof(unsigned char)); - BlueBuffer = (unsigned char *)Malloc(height*width*sizeof(unsigned char)); - glReadPixels(0,0,width,height,GL_RED,GL_UNSIGNED_BYTE,RedBuffer); - glReadPixels(0,0,width,height,GL_GREEN,GL_UNSIGNED_BYTE,GreenBuffer); - glReadPixels(0,0,width,height,GL_BLUE,GL_UNSIGNED_BYTE,BlueBuffer); - - static_pixels = (pixel**)Malloc(height*sizeof(pixel*)); - for(i = 0 ; i<height ; i++) - static_pixels[i] = (pixel*)Malloc(3*width*sizeof(pixel)); - - for(i = 0 ; i<height ; i++) - for(j = 0 ; j<width ; j++) - PPM_ASSIGN(static_pixels[height-1-i][j], - RedBuffer[i*width+j], - GreenBuffer[i*width+j], - BlueBuffer[i*width+j]); - - Free(RedBuffer); - Free(GreenBuffer); - Free(BlueBuffer); - - //printf("start gif : %g \n", Cpu()); - - /* Try to compute color histogram */ - - chv = ppm_computecolorhist( static_pixels, width, height, MAX_GIFCOLORS, - &static_nbcolors ); - - - /* Fuck, there are more than 256 colors in the picture: we need to quantize */ - - if ( chv == (colorhist_vector) 0 ){ - - Msg(DEBUG, "GIF: too many colors in image"); - - rows = height ; - cols = width ; - - while(1){ - Msg(DEBUG, "GIF: making histogram..." ); - chv = ppm_computecolorhist(static_pixels, width, height, MAXCOL2, - &static_nbcolors ); - if ( chv != (colorhist_vector) 0 ) - break; - Msg(DEBUG, "GIF: still too many colors!" ); - newmaxval = maxval / 2; - Msg(DEBUG, "GIF: scaling colors from maxval=%d to maxval=%d to improve clustering...", - maxval, newmaxval ); - for ( row = 0; row < rows; ++row ) - for ( col = 0, pP = static_pixels[row]; col < cols; ++col, ++pP ) - PPM_DEPTH( *pP, *pP, maxval, newmaxval ); - maxval = newmaxval; - } - Msg(DEBUG, "GIF: %d colors found", static_nbcolors ); - Msg(DEBUG, "GIF: choosing %d colors...", newcolors ); - colormap = mediancut( chv, static_nbcolors, rows * cols, maxval, newcolors ); - - cht = ppm_alloccolorhash( ); - - ppm_freecolorhist( chv ); - - /* map the colors in the image to their closest match in the new colormap */ - Msg(DEBUG, "GIF: mapping image to new colors..." ); - usehash = 1; - - if ( dither ){ - Msg(DEBUG, "GIF: Floyd-Steinberg dithering is selected..." ); - /* Initialize Floyd-Steinberg error vectors. */ - thisrerr = (long*) Malloc( (cols + 2)* sizeof(long) ); - nextrerr = (long*) Malloc( (cols + 2)* sizeof(long) ); - thisgerr = (long*) Malloc( (cols + 2)* sizeof(long) ); - nextgerr = (long*) Malloc( (cols + 2)* sizeof(long) ); - thisberr = (long*) Malloc( (cols + 2)* sizeof(long) ); - nextberr = (long*) Malloc( (cols + 2)* sizeof(long) ); - /* srand( (int) ( time( 0 ) ^ getpid( ) ) ); */ - for ( col = 0; col < cols + 2; ++col ){ - thisrerr[col] = rand( ) % ( FS_SCALE * 2 ) - FS_SCALE; - thisgerr[col] = rand( ) % ( FS_SCALE * 2 ) - FS_SCALE; - thisberr[col] = rand( ) % ( FS_SCALE * 2 ) - FS_SCALE; - /* (random errors in [-1 .. 1]) */ - } - fs_direction = 1; - } - for ( row = 0; row < rows; ++row ){ - - if ( dither ) - for ( col = 0; col < cols + 2; ++col ) - nextrerr[col] = nextgerr[col] = nextberr[col] = 0; - - if ( ( ! dither ) || fs_direction ){ - col = 0; - limitcol = cols; - pP = static_pixels[row]; - } - else{ - col = cols - 1; - limitcol = -1; - pP = &(static_pixels[row][col]); - } - - do{ - - if ( dither ){ - /* Use Floyd-Steinberg errors to adjust actual color. */ - sr = PPM_GETR(*pP) + thisrerr[col + 1] / FS_SCALE; - sg = PPM_GETG(*pP) + thisgerr[col + 1] / FS_SCALE; - sb = PPM_GETB(*pP) + thisberr[col + 1] / FS_SCALE; - if ( sr < 0 ) sr = 0; - else if ( sr > (long)maxval ) sr = maxval; - if ( sg < 0 ) sg = 0; - else if ( sg > (long)maxval ) sg = maxval; - if ( sb < 0 ) sb = 0; - else if ( sb > (long)maxval ) sb = maxval; - PPM_ASSIGN( *pP, sr, sg, sb ); - } - - /* Check hash table to see if we have already matched this color. */ - ind = ppm_lookupcolor( cht, pP ); - if ( ind == -1 ){ /* No; search colormap for closest match. */ - register int i, r1, g1, b1, r2, g2, b2; - register long dist, newdist; - r1 = PPM_GETR( *pP ); - g1 = PPM_GETG( *pP ); - b1 = PPM_GETB( *pP ); - dist = 2000000000; - for ( i = 0; i < newcolors; ++i ){ - r2 = PPM_GETR( colormap[i].color ); - g2 = PPM_GETG( colormap[i].color ); - b2 = PPM_GETB( colormap[i].color ); - newdist = - ( r1 - r2 ) * ( r1 - r2 ) + - ( g1 - g2 ) * ( g1 - g2 ) + - ( b1 - b2 ) * ( b1 - b2 ); - if ( newdist < dist ){ - ind = i; - dist = newdist; - } - } - if ( usehash ){ - if ( ppm_addtocolorhash( cht, pP, ind ) < 0 ){ - Msg(WARNING, "GIF: Out of memory adding to hash table, proceeding without it"); - usehash = 0; - } - } - } - - if ( dither ){ - /* Propagate Floyd-Steinberg error terms. */ - if ( fs_direction ){ - err = ( sr - (long) PPM_GETR( colormap[ind].color ) ) * FS_SCALE; - thisrerr[col + 2] += ( err * 7 ) / 16; - nextrerr[col ] += ( err * 3 ) / 16; - nextrerr[col + 1] += ( err * 5 ) / 16; - nextrerr[col + 2] += ( err ) / 16; - err = ( sg - (long) PPM_GETG( colormap[ind].color ) ) * FS_SCALE; - thisgerr[col + 2] += ( err * 7 ) / 16; - nextgerr[col ] += ( err * 3 ) / 16; - nextgerr[col + 1] += ( err * 5 ) / 16; - nextgerr[col + 2] += ( err ) / 16; - err = ( sb - (long) PPM_GETB( colormap[ind].color ) ) * FS_SCALE; - thisberr[col + 2] += ( err * 7 ) / 16; - nextberr[col ] += ( err * 3 ) / 16; - nextberr[col + 1] += ( err * 5 ) / 16; - nextberr[col + 2] += ( err ) / 16; - } - else{ - err = ( sr - (long) PPM_GETR( colormap[ind].color ) ) * FS_SCALE; - thisrerr[col ] += ( err * 7 ) / 16; - nextrerr[col + 2] += ( err * 3 ) / 16; - nextrerr[col + 1] += ( err * 5 ) / 16; - nextrerr[col ] += ( err ) / 16; - err = ( sg - (long) PPM_GETG( colormap[ind].color ) ) * FS_SCALE; - thisgerr[col ] += ( err * 7 ) / 16; - nextgerr[col + 2] += ( err * 3 ) / 16; - nextgerr[col + 1] += ( err * 5 ) / 16; - nextgerr[col ] += ( err ) / 16; - err = ( sb - (long) PPM_GETB( colormap[ind].color ) ) * FS_SCALE; - thisberr[col ] += ( err * 7 ) / 16; - nextberr[col + 2] += ( err * 3 ) / 16; - nextberr[col + 1] += ( err * 5 ) / 16; - nextberr[col ] += ( err ) / 16; - } - } - - *pP = colormap[ind].color; - - if ( ( ! dither ) || fs_direction ){ - ++col; - ++pP; - } - else{ - --col; - --pP; - } - } - while ( col != limitcol ); - - if ( dither ){ - temperr = thisrerr; - thisrerr = nextrerr; - nextrerr = temperr; - temperr = thisgerr; - thisgerr = nextgerr; - nextgerr = temperr; - temperr = thisberr; - thisberr = nextberr; - nextberr = temperr; - fs_direction = ! fs_direction; - } - - } - - if(cht) ppm_freecolorhash(cht); - if(dither){ - Free(thisrerr); - Free(nextrerr); - Free(thisgerr); - Free(nextgerr); - Free(thisberr); - Free(nextberr); - } - chv = ppm_computecolorhist( static_pixels, width, height, MAX_GIFCOLORS, - &static_nbcolors ); - - } - - //printf("ok with colormap : %g \n", Cpu()); - - /* We now have a colormap of maximum 256 colors */ - - for ( i = 0; i < static_nbcolors; ++i ){ - static_red[i] = PPM_GETR( chv[i].color ); - static_green[i] = PPM_GETG( chv[i].color ); - static_blue[i] = PPM_GETB( chv[i].color ); - } - - /* Sort the colormap */ - for (i=0 ; i<static_nbcolors ; i++) - static_permi[i] = i; - if (sort) { - Msg(DEBUG, "GIF: sorting colormap"); - for (i=0 ; i<static_nbcolors ; i++) - for (j=i+1 ; j<static_nbcolors ; j++) - if (((static_red[i]*MAX_GIFCOLORS)+static_green[i])*MAX_GIFCOLORS+static_blue[i] > - ((static_red[j]*MAX_GIFCOLORS)+static_green[j])*MAX_GIFCOLORS+static_blue[j]) { - k = static_permi[i]; static_permi[i] = static_permi[j]; static_permi[j] = k; - k = static_red[i]; static_red[i] = static_red[j]; static_red[j] = k; - k = static_green[i]; static_green[i] = static_green[j]; static_green[j] = k; - k = static_blue[i]; static_blue[i] = static_blue[j]; static_blue[j] = k; - } - } - for (i=0 ; i<static_nbcolors ; i++) - static_perm[static_permi[i]]=i; - - BitsPerPixel = colorstobpp( static_nbcolors ); - - /* And make a hash table for fast lookup. */ - static_cht = ppm_colorhisttocolorhash( chv, static_nbcolors ); - ppm_freecolorhist( chv ); - - /* figure out the transparent colour index */ - if (transparency) { - PPM_ASSIGN(transcolor, bg_r, bg_g, bg_b); - transparent = ppm_lookupcolor( static_cht, &transcolor ); - if (transparent == -1) - transparent = closestcolor( transcolor ); - else - transparent = static_perm[transparent]; - } - else - transparent = -1 ; - - //printf("ok with sort : %g \n", Cpu()); - - /* All set, let's do it. */ - GIFEncode(outfile, width, height, interlace, 0, transparent, BitsPerPixel, - static_red, static_green, static_blue, GetPixel ); - - for(i = 0 ; i<height ; i++) - Free(static_pixels[i]); - Free(static_pixels); - - //printf("finished gif : %g \n", Cpu()); - -} - diff --git a/Graphics/gl2gif.h b/Graphics/gl2gif.h deleted file mode 100644 index 66bf70b60d6f434bb656d9ee5869a8c68f87715d..0000000000000000000000000000000000000000 --- a/Graphics/gl2gif.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef _GL2GIF_H_ -#define _GL2GIF_H_ - -#define MAX_GIFCOLORS 256 - -/* New types */ - -typedef unsigned int pixval; -typedef unsigned long pixel; -typedef int code_int; -typedef long int count_int; - -/* PPM handling */ - -#define PPM_GETR(p) (((p) & 0x3ff00000) >> 20) -#define PPM_GETG(p) (((p) & 0xffc00) >> 10) -#define PPM_GETB(p) ((p) & 0x3ff) -#define PPM_EQUAL(p,q) ((p) == (q)) - -#define PPM_ASSIGN(p,red,grn,blu) \ - (p) = ((pixel) (red) << 20) | ((pixel) (grn) << 10) | (pixel) (blu) - -#define PPM_LUMIN(p) ( 0.299 * PPM_GETR(p) + 0.587 * PPM_GETG(p) + 0.114 * PPM_GETB(p) ) - -#define PPM_DEPTH(newp,p,oldmaxval,newmaxval) \ - PPM_ASSIGN( (newp), \ - ( (int) PPM_GETR(p) * (newmaxval) + (oldmaxval) / 2 ) / (oldmaxval), \ - ( (int) PPM_GETG(p) * (newmaxval) + (oldmaxval) / 2 ) / (oldmaxval), \ - ( (int) PPM_GETB(p) * (newmaxval) + (oldmaxval) / 2 ) / (oldmaxval) ) - -/* Color histogram stuff */ - -typedef struct colorhist_item* colorhist_vector; -struct colorhist_item { - pixel color; - int value; -}; - -typedef struct colorhist_list_item* colorhist_list; -struct colorhist_list_item { - struct colorhist_item ch; - colorhist_list next; -}; - -/* Color hash table stuff */ - -typedef colorhist_list* colorhash_table; - -/* Public function */ - -void create_gif(FILE *outfile, int width, int height, - int dither, int sort, int interlace, - int transparency, int r, int g, int b); - - -#endif diff --git a/Graphics/gl2jpeg.cpp b/Graphics/gl2jpeg.cpp deleted file mode 100644 index 7d412bb7bf609e96ebdfc259642633065f823f31..0000000000000000000000000000000000000000 --- a/Graphics/gl2jpeg.cpp +++ /dev/null @@ -1,60 +0,0 @@ -// $Id: gl2jpeg.cpp,v 1.7 2001-02-09 07:59:50 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" - -#include "jpeglib.h" -#include "jerror.h" - -void my_output_message (j_common_ptr cinfo){ - char buffer[JMSG_LENGTH_MAX]; - - (*cinfo->err->format_message) (cinfo, buffer); - - Msg(DEBUG, "%s", buffer); -} - -void create_jpeg(FILE *outfile, int width, int height, int quality){ - int i; - unsigned char *pixels; - struct jpeg_compress_struct cinfo; - struct jpeg_error_mgr jerr; - JSAMPROW row_pointer[1]; // pointer to JSAMPLE row[s] - int row_stride; // physical row width in image buffer - - cinfo.err = jpeg_std_error(&jerr); - cinfo.err->output_message = my_output_message; - - jpeg_create_compress(&cinfo); - jpeg_stdio_dest(&cinfo, outfile); - cinfo.image_width = width; // image width and height, in pixels - cinfo.image_height = height; - cinfo.input_components = 3; // # of color components per pixel - cinfo.in_color_space = JCS_RGB; // colorspace of input image - jpeg_set_defaults(&cinfo); - jpeg_set_quality(&cinfo, quality, TRUE); - jpeg_start_compress(&cinfo, TRUE); - - glPixelStorei(GL_PACK_ALIGNMENT,1); - glPixelStorei(GL_UNPACK_ALIGNMENT,1); - pixels=(unsigned char *)Malloc(height*width*3); - glReadPixels(0,0,width,height,GL_RGB,GL_UNSIGNED_BYTE,pixels); - - row_stride = width * 3; - i=cinfo.image_height-1; - while (i >= 0) { - /* - jpeg_write_scanlines expects an array of pointers to scanlines. - Here the array is only one element long, but you could pass - more than one scanline at a time if that's more convenient. - */ - row_pointer[0] = &pixels[i * row_stride]; - (void) jpeg_write_scanlines(&cinfo, row_pointer, 1); - i--; - } - jpeg_finish_compress(&cinfo); - jpeg_destroy_compress(&cinfo); - - Free(pixels); -} - diff --git a/Graphics/gl2jpeg.h b/Graphics/gl2jpeg.h deleted file mode 100644 index 7c8f69e480622e23e58db1f4d09b1a887c8a0ed9..0000000000000000000000000000000000000000 --- a/Graphics/gl2jpeg.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _GL2JPEG_H_ -#define _GL2JPEG_H_ - -void create_jpeg(FILE *outfile, int width, int height, - int quality); - -#endif diff --git a/Graphics/gl2ppm.cpp b/Graphics/gl2ppm.cpp deleted file mode 100644 index e9aa5e7b4ee66f088f1fcef742b4925eac969606..0000000000000000000000000000000000000000 --- a/Graphics/gl2ppm.cpp +++ /dev/null @@ -1,28 +0,0 @@ -// $Id: gl2ppm.cpp,v 1.5 2001-01-08 08:05:44 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" - -void create_ppm(FILE *outfile, int width, int height){ - unsigned char *pixels; - int i, row_stride; - - glPixelStorei(GL_PACK_ALIGNMENT,1); - glPixelStorei(GL_UNPACK_ALIGNMENT,1); - pixels=(unsigned char *)Malloc(height*width*3); - glReadPixels(0,0,width,height,GL_RGB,GL_UNSIGNED_BYTE,pixels); - - fprintf(outfile, "P6\n"); - fprintf(outfile, "%d %d\n", width, height); - fprintf(outfile, "%d\n", 255); - - row_stride = width * 3; - i = height-1; - while (i >= 0) { - fwrite(&pixels[i * row_stride], 1, row_stride, outfile); - i--; - } - - Free(pixels); -} - diff --git a/Graphics/gl2ppm.h b/Graphics/gl2ppm.h deleted file mode 100644 index 47b88824d186371de0c067b6af0978cae78099d1..0000000000000000000000000000000000000000 --- a/Graphics/gl2ppm.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _GL2PPM_H_ -#define _GL2PPM_H_ - -void create_ppm(FILE *outfile, int width, int height); - -#endif diff --git a/Graphics/gl2ps.cpp b/Graphics/gl2ps.cpp deleted file mode 100644 index 44332232cdb7df772862103719c39153df9b7256..0000000000000000000000000000000000000000 --- a/Graphics/gl2ps.cpp +++ /dev/null @@ -1,1428 +0,0 @@ -#include "Gmsh.h" -#include "GmshUI.h" - -/* - * GL2PS, an OpenGL to Postscript Printing Library - * Copyright (C) 1999-2001 Christophe Geuzaine - * - * $Id: gl2ps.cpp,v 1.25 2001-08-06 12:26:26 geuzaine Exp $ - * - * E-mail: Christophe.Geuzaine@AdValvas.be - * URL: http://www.geuz.org/gl2ps/ - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free - * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include <string.h> -#include <sys/types.h> -#include <malloc.h> -#include <math.h> -#include <stdarg.h> -#include <time.h> - -#include "gl2ps.h" - -/* The static gl2ps context. gl2ps is not thread safe (we should - create a local GL2PScontext during gl2psBeginPage). */ - -static GL2PScontext gl2ps; - -/* Some 'system' utility routines */ - -GLvoid gl2psMsg(GLint level, char *fmt, ...){ - va_list args; - - if(!(gl2ps.options & GL2PS_SILENT)){ - switch(level){ - case GL2PS_INFO : fprintf(stderr, "GL2PS info: "); break; - case GL2PS_WARNING : fprintf(stderr, "GL2PS warning: "); break; - case GL2PS_ERROR : fprintf(stderr, "GL2PS error: "); break; - } - va_start(args, fmt); - vfprintf(stderr, fmt, args); - va_end (args); - fprintf(stderr, "\n"); - } - if(level == GL2PS_ERROR) exit(1); -} - -GLvoid *gl2psMalloc(size_t size){ - GLvoid *ptr; - - if(!size) return(NULL); - ptr = malloc(size); - if(!ptr) gl2psMsg(GL2PS_ERROR, "Couldn't allocate requested memory"); - return(ptr); -} - -GLvoid *gl2psRealloc(GLvoid *ptr, size_t size){ - if(!size) return(NULL); - ptr = realloc(ptr, size); - if(!ptr) gl2psMsg(GL2PS_ERROR, "Couldn't reallocate requested memory"); - return(ptr); -} - -GLvoid gl2psFree(GLvoid *ptr){ - if(!ptr) return; - free(ptr); -} - -/* The list handling routines */ - -GLvoid gl2psListRealloc(GL2PSlist *list, GLint n){ - if(n <= 0) return; - if(!list->array){ - list->nmax = ((n - 1) / list->incr + 1) * list->incr; - list->array = (char *)gl2psMalloc(list->nmax * list->size); - } - else - if(n > list->nmax){ - list->nmax = ((n - 1) / list->incr + 1) * list->incr; - list->array = (char *)gl2psRealloc(list->array, - list->nmax * list->size); - } -} - -GL2PSlist *gl2psListCreate(GLint n, GLint incr, GLint size){ - GL2PSlist *list; - - if(n < 0) n = 0; - if(incr <= 0) incr = 1; - list = (GL2PSlist *)gl2psMalloc(sizeof(GL2PSlist)); - list->nmax = 0; - list->incr = incr; - list->size = size; - list->n = 0; - list->array = NULL; - gl2psListRealloc(list, n); - return(list); -} - -GLvoid gl2psListDelete(GL2PSlist *list){ - gl2psFree(list->array); - gl2psFree(list); -} - -GLvoid gl2psListAdd(GL2PSlist *list, GLvoid *data){ - list->n++; - gl2psListRealloc(list, list->n); - memcpy(&list->array[(list->n - 1) * list->size], data, list->size); -} - -GLint gl2psListNbr(GL2PSlist *list){ - return(list->n); -} - -GLvoid *gl2psListPointer(GL2PSlist *list, GLint index){ - if((index < 0) || (index >= list->n)) - gl2psMsg(GL2PS_ERROR, "Wrong list index in gl2psListPointer"); - return(&list->array[index * list->size]); -} - -GLvoid gl2psListSort(GL2PSlist *list, - GLint (*fcmp)(const GLvoid *a, const GLvoid *b)){ - qsort(list->array, list->n, list->size, fcmp); -} - -GLvoid gl2psListAction(GL2PSlist *list, - GLvoid (*action)(GLvoid *data, GLvoid *dummy)){ - GLint i, dummy; - - for(i=0 ; i<gl2psListNbr(list) ; i++) - (*action)(gl2psListPointer(list, i), &dummy); -} - -GLvoid gl2psListActionInverse(GL2PSlist *list, - GLvoid (*action)(GLvoid *data, GLvoid *dummy)){ - GLint i, dummy; - - for(i=gl2psListNbr(list) ; i>0 ; i--) - (*action)(gl2psListPointer(list, i-1), &dummy); -} - -/* The 3D sorting routines */ - -GLfloat gl2psComparePointPlane(GL2PSxyz point, GL2PSplane plane){ - return(plane[0] * point[0] + - plane[1] * point[1] + - plane[2] * point[2] + - plane[3]); -} - -GLfloat gl2psPsca(GLfloat *a, GLfloat *b){ - return(a[0]*b[0] + a[1]*b[1] + a[2]*b[2]); -} - -GLvoid gl2psPvec(GLfloat *a, GLfloat *b, GLfloat *c){ - c[0] = a[1]*b[2] - a[2]*b[1]; - c[1] = a[2]*b[0] - a[0]*b[2]; - c[2] = a[0]*b[1] - a[1]*b[0]; -} - -GLfloat gl2psNorm(GLfloat *a){ - return sqrt(a[0]*a[0] + a[1]*a[1] + a[2]*a[2]); -} - -GLvoid gl2psGetNormal(GLfloat *a, GLfloat *b, GLfloat *c){ - GLfloat norm; - gl2psPvec(a, b, c); - if((norm = gl2psNorm(c))){ - c[0] = c[0] / norm; - c[1] = c[1] / norm; - c[2] = c[2] / norm; - } - else - gl2psMsg(GL2PS_WARNING, "Bad plane in BSP tree"); -} - -GLvoid gl2psGetPlane(GL2PSprimitive *prim, GL2PSplane plane){ - GL2PSxyz v={0., 0., 0.}, w={0., 0., 0.}; - - switch(prim->type){ - case GL2PS_TRIANGLE : - case GL2PS_QUADRANGLE : - v[0] = prim->verts[1].xyz[0] - prim->verts[0].xyz[0]; - v[1] = prim->verts[1].xyz[1] - prim->verts[0].xyz[1]; - v[2] = prim->verts[1].xyz[2] - prim->verts[0].xyz[2]; - w[0] = prim->verts[2].xyz[0] - prim->verts[0].xyz[0]; - w[1] = prim->verts[2].xyz[1] - prim->verts[0].xyz[1]; - w[2] = prim->verts[2].xyz[2] - prim->verts[0].xyz[2]; - if((!v[0] && !v[1] && !v[2]) || (!w[0] && !w[1] && !w[2])){ - plane[0] = plane[1] = 0.; - plane[2] = 1.; - plane[3] = -prim->verts[0].xyz[2]; - } - else{ - gl2psGetNormal(v, w, plane); - plane[3] = - - plane[0] * prim->verts[0].xyz[0] - - plane[1] * prim->verts[0].xyz[1] - - plane[2] * prim->verts[0].xyz[2]; - } - break; - case GL2PS_LINE : - v[0] = prim->verts[1].xyz[0] - prim->verts[0].xyz[0]; - v[1] = prim->verts[1].xyz[1] - prim->verts[0].xyz[1]; - v[2] = prim->verts[1].xyz[2] - prim->verts[0].xyz[2]; - if(!v[0] && !v[1] && !v[2]){ - plane[0] = plane[1] = 0.; - plane[2] = 1.; - plane[3] = -prim->verts[0].xyz[2]; - } - else{ - if(!v[0]) w[0] = 1.; - else if(!v[1]) w[1] = 1.; - else w[2] = 1.; - gl2psGetNormal(v, w, plane); - plane[3] = - - plane[0] * prim->verts[0].xyz[0] - - plane[1] * prim->verts[0].xyz[1] - - plane[2] * prim->verts[0].xyz[2]; - } - break; - case GL2PS_POINT : - case GL2PS_TEXT : - plane[0] = plane[1] = 0.; - plane[2] = 1.; - plane[3] = -prim->verts[0].xyz[2]; - break; - default : - gl2psMsg(GL2PS_ERROR, "Unknown primitive type in BSP tree"); - } -} - -GLvoid gl2psCutEdge(GL2PSvertex a, GL2PSvertex b, GL2PSplane plane, - GL2PSvertex *c){ - GL2PSxyz v; - GLfloat sect; - - v[0] = b.xyz[0] - a.xyz[0]; - v[1] = b.xyz[1] - a.xyz[1]; - v[2] = b.xyz[2] - a.xyz[2]; - sect = - gl2psComparePointPlane(a.xyz, plane) / gl2psPsca(plane, v); - - c->xyz[0] = a.xyz[0] + v[0] * sect; - c->xyz[1] = a.xyz[1] + v[1] * sect; - c->xyz[2] = a.xyz[2] + v[2] * sect; - - c->rgba[0] = (1.-sect) * a.rgba[0] + sect * b.rgba[0]; - c->rgba[1] = (1.-sect) * a.rgba[1] + sect * b.rgba[1]; - c->rgba[2] = (1.-sect) * a.rgba[2] + sect * b.rgba[2]; - c->rgba[3] = (1.-sect) * a.rgba[3] + sect * b.rgba[3]; -} - -GLvoid gl2psFreePrimitive(GLvoid *a, GLvoid *b){ - GL2PSprimitive *q ; - - q = *(GL2PSprimitive**)a; - gl2psFree(q->verts); - if(q->type == GL2PS_TEXT){ - if(q->text->str) gl2psFree(q->text->str); - gl2psFree(q->text); - } - gl2psFree(q); -} - -GLvoid gl2psCreateSplittedPrimitive(GL2PSprimitive *parent, GL2PSplane plane, - GL2PSprimitive **child, GLshort numverts, - GLshort *index0, GLshort *index1){ - GLshort i; - - if(numverts > 4){ - gl2psMsg(GL2PS_WARNING, "%d vertices in polygon", numverts); - numverts = 4; - } - - switch(numverts){ - case 1 : (*child)->type = GL2PS_POINT; break; - case 2 : (*child)->type = GL2PS_LINE; break; - case 3 : (*child)->type = GL2PS_TRIANGLE; break; - case 4 : (*child)->type = GL2PS_QUADRANGLE; break; - } - (*child)->boundary = 0; /* not done! */ - (*child)->dash = parent->dash; - (*child)->width = parent->width; - (*child)->numverts = numverts; - (*child)->verts = (GL2PSvertex *)gl2psMalloc(numverts * sizeof(GL2PSvertex)); - - for(i=0 ; i<numverts ; i++){ - if(index1[i] < 0) - (*child)->verts[i] = parent->verts[index0[i]]; - else - gl2psCutEdge(parent->verts[index0[i]], parent->verts[index1[i]], - plane, &(*child)->verts[i]); - } -} - -GLvoid gl2psAddIndex(GLshort *index0, GLshort *index1, GLshort *nb, - GLshort i, GLshort j){ - GLint k; - - for(k=0 ; k<*nb ; k++) - if((index0[k] == i && index1[k] == j) || - (index1[k] == i && index0[k] == j)) return; - - index0[*nb] = i; - index1[*nb] = j; - (*nb)++; -} - -GLshort gl2psGetIndex(GLshort i, GLshort num){ - return(i < num-1) ? i+1 : 0; -} - -GLint gl2psTestSplitPrimitive(GL2PSprimitive *prim, GL2PSplane plane){ - GLint type=GL2PS_COINCIDENT; - GLshort i, j; - GLfloat d[5]; - - for(i = 0 ; i < prim->numverts ; i++){ - d[i] = gl2psComparePointPlane(prim->verts[i].xyz, plane); - } - - if(prim->type == GL2PS_POINT) - return 0; - else{ - for(i = 0 ; i < prim->numverts ; i++){ - j = gl2psGetIndex(i, prim->numverts); - if(d[j] > GL2PS_EPSILON){ - if(type == GL2PS_COINCIDENT) type = GL2PS_IN_BACK_OF; - else if(type != GL2PS_IN_BACK_OF) return 1; - if(d[i] < -GL2PS_EPSILON) return 1; - } - else if(d[j] < -GL2PS_EPSILON){ - if(type == GL2PS_COINCIDENT) type = GL2PS_IN_FRONT_OF; - else if(type != GL2PS_IN_FRONT_OF) return 1; - if(d[i] > GL2PS_EPSILON) return 1; - } - } - } - return 0; -} - -GLint gl2psSplitPrimitive(GL2PSprimitive *prim, GL2PSplane plane, - GL2PSprimitive **front, GL2PSprimitive **back){ - GLshort i, j, in=0, out=0, in0[5], in1[5], out0[5], out1[5]; - GLint type; - GLfloat d[5]; - - type = GL2PS_COINCIDENT; - - for(i = 0 ; i < prim->numverts ; i++){ - d[i] = gl2psComparePointPlane(prim->verts[i].xyz, plane); - } - - switch(prim->type){ - case GL2PS_POINT : - if(d[0] > GL2PS_EPSILON) type = GL2PS_IN_BACK_OF; - else if(d[0] < -GL2PS_EPSILON) type = GL2PS_IN_FRONT_OF; - else type = GL2PS_COINCIDENT; - break; - default : - for(i = 0 ; i < prim->numverts ; i++){ - j = gl2psGetIndex(i, prim->numverts); - if(d[j] > GL2PS_EPSILON){ - if(type == GL2PS_COINCIDENT) type = GL2PS_IN_BACK_OF; - else if(type != GL2PS_IN_BACK_OF) type = GL2PS_SPANNING; - if(d[i] < -GL2PS_EPSILON){ - gl2psAddIndex(in0, in1, &in, i, j); - gl2psAddIndex(out0, out1, &out, i, j); - type = GL2PS_SPANNING; - } - gl2psAddIndex(out0, out1, &out, j, -1); - } - else if(d[j] < -GL2PS_EPSILON){ - if(type == GL2PS_COINCIDENT) type = GL2PS_IN_FRONT_OF; - else if(type != GL2PS_IN_FRONT_OF) type = GL2PS_SPANNING; - if(d[i] > GL2PS_EPSILON){ - gl2psAddIndex(in0, in1, &in, i, j); - gl2psAddIndex(out0, out1, &out, i, j); - type = GL2PS_SPANNING; - } - gl2psAddIndex(in0, in1, &in, j, -1); - } - else{ - gl2psAddIndex(in0, in1, &in, j, -1); - gl2psAddIndex(out0, out1, &out, j, -1); - } - } - break; - } - - if(type == GL2PS_SPANNING){ - *back = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); - *front = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); - gl2psCreateSplittedPrimitive(prim, plane, back, out, out0, out1); - gl2psCreateSplittedPrimitive(prim, plane, front, in, in0, in1); - } - - return type; -} - -GLvoid gl2psDivideQuad(GL2PSprimitive *quad, - GL2PSprimitive **t1, GL2PSprimitive **t2){ - *t1 = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); - *t2 = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); - (*t1)->type = (*t2)->type = GL2PS_TRIANGLE; - (*t1)->numverts = (*t2)->numverts = 3; - (*t1)->depth = (*t2)->depth = quad->depth; - (*t1)->dash = (*t2)->dash = quad->dash; - (*t1)->width = (*t2)->width = quad->width; - (*t1)->verts = (GL2PSvertex *)gl2psMalloc(3 * sizeof(GL2PSvertex)); - (*t2)->verts = (GL2PSvertex *)gl2psMalloc(3 * sizeof(GL2PSvertex)); - (*t1)->verts[0] = quad->verts[0]; - (*t1)->verts[1] = quad->verts[1]; - (*t1)->verts[2] = quad->verts[2]; - (*t1)->boundary = ((quad->boundary & 1) ? 1 : 0) | ((quad->boundary & 2) ? 2 : 0); - (*t2)->verts[0] = quad->verts[0]; - (*t2)->verts[1] = quad->verts[2]; - (*t2)->verts[2] = quad->verts[3]; - (*t1)->boundary = ((quad->boundary & 4) ? 2 : 0) | ((quad->boundary & 4) ? 2 : 0); -} - -int gl2psCompareDepth(const GLvoid *a, const GLvoid *b){ - GL2PSprimitive *q,*w; - GLfloat diff; - - q = *(GL2PSprimitive**)a; - w = *(GL2PSprimitive**)b; - diff = q->depth - w->depth; - if(diff > 0.) - return 1; - else if(diff < 0.) - return -1; - else - return 0; -} - -GLint gl2psTrianglesFirst(const GLvoid *a, const GLvoid *b){ - GL2PSprimitive *q,*w; - - q = *(GL2PSprimitive**)a; - w = *(GL2PSprimitive**)b; - return(q->type < w->type ? 1 : -1); -} - -GLint gl2psFindRoot(GL2PSlist *primitives, GL2PSprimitive **root){ - GLint i, j, count, best=1000000, index=0; - GL2PSprimitive *prim1, *prim2; - GL2PSplane plane; - - if(gl2ps.options & GL2PS_BEST_ROOT){ - *root = *(GL2PSprimitive**)gl2psListPointer(primitives, 0); - for(i=0 ; i<gl2psListNbr(primitives) ; i++){ - prim1 = *(GL2PSprimitive**)gl2psListPointer(primitives, i); - gl2psGetPlane(prim1, plane); - count=0; - for(j=0 ; j<gl2psListNbr(primitives) ; j++){ - if(j != i){ - prim2 = *(GL2PSprimitive**)gl2psListPointer(primitives, j); - count += gl2psTestSplitPrimitive(prim2, plane); - } - if(count > best) break; - } - if(count < best){ - best = count; - index = i; - *root = prim1; - if(!count) return index; - } - } - if(index) gl2psMsg(GL2PS_INFO, "GL2PS_BEST_ROOT was worth it: %d", index); - return index; - } - else{ - *root = *(GL2PSprimitive**)gl2psListPointer(primitives, 0); - return 0; - } -} - - -GLvoid gl2psAddPrimitiveInList(GL2PSprimitive *prim, GL2PSlist *list){ - GL2PSprimitive *t1, *t2; - - if(prim->type != GL2PS_QUADRANGLE){ - gl2psListAdd(list, &prim); - } - else{ - gl2psDivideQuad(prim, &t1, &t2); - gl2psListAdd(list, &t1); - gl2psListAdd(list, &t2); - gl2psFreePrimitive(&prim, NULL); - } - -} - -GLvoid gl2psFreeBspTree(GL2PSbsptree *tree){ - if(tree->back){ - gl2psFreeBspTree(tree->back); - gl2psFree(tree->back); - } - if(tree->primitives){ - gl2psListAction(tree->primitives, gl2psFreePrimitive); - gl2psListDelete(tree->primitives); - } - if(tree->front){ - gl2psFreeBspTree(tree->front); - gl2psFree(tree->front); - } -} - -GLboolean gl2psGreater(GLfloat f1, GLfloat f2){ - if(f1 > f2) return 1; - else return 0; -} - -GLboolean gl2psLess(GLfloat f1, GLfloat f2){ - if(f1 < f2) return 1; - else return 0; -} - -GLvoid gl2psBuildBspTree(GL2PSbsptree *tree, GL2PSlist *primitives){ - GL2PSprimitive *prim, *frontprim, *backprim; - GL2PSlist *frontlist, *backlist; - GLint i, index; - - tree->front = NULL; - tree->back = NULL; - tree->primitives = gl2psListCreate(1, 2, sizeof(GL2PSprimitive*)); - index = gl2psFindRoot(primitives, &prim); - gl2psGetPlane(prim, tree->plane); - gl2psAddPrimitiveInList(prim, tree->primitives); - - frontlist = gl2psListCreate(1, 2, sizeof(GL2PSprimitive*)); - backlist = gl2psListCreate(1, 2, sizeof(GL2PSprimitive*)); - - for(i=0 ; i<gl2psListNbr(primitives) ; i++){ - if(i != index){ - prim = *(GL2PSprimitive**)gl2psListPointer(primitives,i); - switch(gl2psSplitPrimitive(prim,tree->plane,&frontprim,&backprim)){ - case GL2PS_COINCIDENT: - gl2psAddPrimitiveInList(prim, tree->primitives); - break; - case GL2PS_IN_BACK_OF: - gl2psAddPrimitiveInList(prim, backlist); - break; - case GL2PS_IN_FRONT_OF: - gl2psAddPrimitiveInList(prim, frontlist); - break; - case GL2PS_SPANNING: - gl2psAddPrimitiveInList(backprim, backlist); - gl2psAddPrimitiveInList(frontprim, frontlist); - gl2psFreePrimitive(&prim, NULL); - break; - } - } - } - - if(gl2psListNbr(tree->primitives)) - gl2psListSort(tree->primitives, gl2psTrianglesFirst); - - if(gl2psListNbr(frontlist)){ - gl2psListSort(frontlist, gl2psTrianglesFirst); - tree->front = (GL2PSbsptree*)gl2psMalloc(sizeof(GL2PSbsptree)); - gl2psBuildBspTree(tree->front, frontlist); - } - else - gl2psListDelete(frontlist); - - if(gl2psListNbr(backlist)){ - gl2psListSort(backlist, gl2psTrianglesFirst); - tree->back = (GL2PSbsptree*)gl2psMalloc(sizeof(GL2PSbsptree)); - gl2psBuildBspTree(tree->back, backlist); - } - else - gl2psListDelete(backlist); - - gl2psListDelete(primitives); -} - -GLvoid gl2psTraverseBspTree(GL2PSbsptree *tree, GL2PSxyz eye, GLfloat epsilon, - GLboolean (*compare)(GLfloat f1, GLfloat f2), - GLvoid (*action)(GLvoid *data, GLvoid *dummy)){ - GLfloat result; - - if(!tree) return; - - result = gl2psComparePointPlane(eye, tree->plane); - - if(compare(result, epsilon)){ - gl2psTraverseBspTree(tree->back, eye, epsilon, compare, action); - gl2psListAction(tree->primitives, action); - gl2psTraverseBspTree(tree->front, eye, epsilon, compare, action); - } - else if(compare(-epsilon, result)){ - gl2psTraverseBspTree(tree->front, eye, epsilon, compare, action); - gl2psListAction(tree->primitives, action); - gl2psTraverseBspTree(tree->back, eye, epsilon, compare, action) ; - } - else{ - gl2psTraverseBspTree(tree->front, eye, epsilon, compare, action); - gl2psTraverseBspTree(tree->back, eye, epsilon, compare, action) ; - } -} - -/* The 2D sorting routines (for occlusion culling). These routines do - _not_ work as expected at the moment... */ - -GLint gl2psSplit2d(GL2PSxyz a, GL2PSxyz b, GL2PSxy tc, GL2PSxy td){ - GLfloat line[3], n, d[2]; - - /* - in back of == >0 == outside polygon - */ - - line[0] = td[1] - tc[1] ; - line[1] = tc[0] - td[0] ; - n = sqrt(line[0]*line[0]+line[1]*line[1]); - line[0] /= n ; - line[1] /= n ; - line[2] = - line[0] * tc[0] - line[1] * tc[1] ; - - d[0] = line[0]*a[0] + line[1]*a[1] + line[2] ; - - if(b == NULL){ - if(d[0] > GL2PS_EPSILON) return GL2PS_IN_BACK_OF; - else if(d[0] < -GL2PS_EPSILON) return GL2PS_IN_FRONT_OF; - else return GL2PS_COINCIDENT; - } - else{ - d[1] = line[0]*b[0] + line[1]*b[1] + line[2] ; - - if(d[0] > GL2PS_EPSILON){ - if(d[1] < -GL2PS_EPSILON) return GL2PS_SPANNING; - else return GL2PS_IN_BACK_OF; - } - if(d[0] < -GL2PS_EPSILON){ - if(d[1] > GL2PS_EPSILON) return GL2PS_SPANNING; - else return GL2PS_IN_FRONT_OF; - } - else{ - if(d[1] > GL2PS_EPSILON) return GL2PS_IN_BACK_OF; - else if(d[1] < -GL2PS_EPSILON) return GL2PS_IN_FRONT_OF; - /* else return GL2PS_COINCIDENT; */ - else return GL2PS_IN_FRONT_OF; - } - } -} - - -GLvoid gl2psSimplify2d(GL2PSbsptree2d *tree){ - if(!tree) return; - if(tree->back){ - if(tree->flag==0) - gl2psSimplify2d(tree->back); - } - if(tree->front){ - gl2psSimplify2d(tree->front); - } -} - -GLvoid gl2psReset(GL2PSbsptree2d *tree){ - if(!tree) return; - tree->flag=0; - if(tree->back){ - gl2psReset(tree->back); - } - if(tree->front){ - gl2psReset(tree->front); - } -} - - -static GL2PSbsptree2d *image=NULL; - -GLvoid gl2psAddInImageTree(GL2PSprimitive *prim, - GL2PSxyz a, GL2PSxyz b, GL2PSbsptree2d **tree){ - GLint res; - - if(*tree == NULL){ - /* insert the edge, except for lines & points */ - if(prim->numverts > 2){ - prim->depth = -1.; - (*tree) = (GL2PSbsptree2d*)gl2psMalloc(sizeof(GL2PSbsptree2d)); - (*tree)->a[0] = a[0]; - (*tree)->a[1] = a[1]; - (*tree)->b[0] = b[0]; - (*tree)->b[1] = b[1]; - (*tree)->front = NULL; - (*tree)->back = NULL; - (*tree)->flag = 1; - } - } - else{ - res = gl2psSplit2d(a, b, (*tree)->a, (*tree)->b); - - switch(res){ - case GL2PS_IN_BACK_OF: - gl2psAddInImageTree(prim, a, b, &(*tree)->back); - break; - case GL2PS_IN_FRONT_OF: - if((*tree)->flag) gl2psAddInImageTree(prim, a, b, &(*tree)->front); - break; - case GL2PS_SPANNING: - gl2psAddInImageTree(prim, a, b, &(*tree)->back); - if((*tree)->flag) gl2psAddInImageTree(prim, a, b, &(*tree)->front); - break; - case GL2PS_COINCIDENT: - (*tree)->flag = 1; - break; - } - } -} - -static int count=0; - -GLvoid gl2psAddInImage(void *a, void *b){ - GL2PSprimitive *prim; - GLint i; - - prim = *(GL2PSprimitive **)a; - - /* if(prim->numverts == 1) - gl2psAddInImageTree(prim, prim->verts[i].xyz, NULL, &image); */ - if(prim->numverts < 3) - return; - else{ - for(i=0 ; i<prim->numverts ; i++){ - count++; - gl2psAddInImageTree(prim, prim->verts[i].xyz, - prim->verts[gl2psGetIndex(i,prim->numverts)].xyz, &image); - } - } - - /* simplify old/new */ - - gl2psReset(image); - -} - - -#define GL2PS_BOUNDARY_OFFSET 0 - -GLvoid gl2psAddBoundaryInList(GL2PSprimitive *prim, GL2PSlist *list){ - GL2PSprimitive *b; - GLshort i; - GL2PSxyz c; - - c[0] = c[1] = c[2] = 0.; - for(i=0 ; i<prim->numverts ; i++){ - c[0] += prim->verts[i].xyz[0]; - c[1] += prim->verts[i].xyz[1]; - } - c[0] /= prim->numverts; - c[1] /= prim->numverts; - - for(i=0 ; i<prim->numverts ; i++){ - if(prim->boundary & (GLint)pow(2., i)){ - b = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); - b->type = GL2PS_LINE; - b->dash = prim->dash; - b->width = prim->width; - b->boundary = 0; - b->numverts = 2; - b->verts = (GL2PSvertex *)gl2psMalloc(2 * sizeof(GL2PSvertex)); - -#if GL2PS_BOUNDARY_OFFSET - v[0] = c[0] - prim->verts[i].xyz[0]; - v[1] = c[1] - prim->verts[i].xyz[1]; - v[2] = 0.; - norm = gl2psNorm(v); - v[0] /= norm; - v[1] /= norm; - b->verts[0].xyz[0] = prim->verts[i].xyz[0] +0.1*v[0]; - b->verts[0].xyz[1] = prim->verts[i].xyz[1] +0.1*v[1]; - b->verts[0].xyz[2] = prim->verts[i].xyz[2]; - v[0] = c[0] - prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[0]; - v[1] = c[1] - prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[1]; - norm = gl2psNorm(v); - v[0] /= norm; - v[1] /= norm; - b->verts[1].xyz[0] = prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[0] +0.1*v[0]; - b->verts[1].xyz[1] = prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[1] +0.1*v[1]; - b->verts[1].xyz[2] = prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[2]; -#else - b->verts[0].xyz[0] = prim->verts[i].xyz[0]; - b->verts[0].xyz[1] = prim->verts[i].xyz[1]; - b->verts[0].xyz[2] = prim->verts[i].xyz[2]; - b->verts[1].xyz[0] = prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[0]; - b->verts[1].xyz[1] = prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[1]; - b->verts[1].xyz[2] = prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[2]; -#endif - - b->verts[0].rgba[0] = 0.; - b->verts[0].rgba[1] = 0.; - b->verts[0].rgba[2] = 0.; - b->verts[0].rgba[3] = 0.; - b->verts[1].rgba[0] = 0.; - b->verts[1].rgba[1] = 0.; - b->verts[1].rgba[2] = 0.; - b->verts[1].rgba[3] = 0.; - gl2psListAdd(list, &b); - } - } - -} - -GLvoid gl2psBuildPolygonBoundary(GL2PSbsptree *tree){ - GLint i, n; - GL2PSprimitive *prim; - - if(!tree) return; - gl2psBuildPolygonBoundary(tree->back); - n = gl2psListNbr(tree->primitives); - for(i=0 ; i<n ; i++){ - prim = *(GL2PSprimitive**)gl2psListPointer(tree->primitives, i); - if(prim->boundary) gl2psAddBoundaryInList(prim, tree->primitives); - } - gl2psBuildPolygonBoundary(tree->front); -} - -/* The feedback buffer parser */ - -GLvoid gl2psAddPolyPrimitive(GLshort type, GLshort numverts, - GL2PSvertex *verts, GLint offset, - GLshort dash, GLshort width, - GLshort boundary){ - GLshort i; - GLfloat factor, units, area, dZ, dZdX, dZdY, maxdZ; - GL2PSprimitive *prim; - - prim = (GL2PSprimitive *)gl2psMalloc(sizeof(GL2PSprimitive)); - prim->type = type; - prim->numverts = numverts; - prim->verts = (GL2PSvertex *)gl2psMalloc(numverts * sizeof(GL2PSvertex)); - memcpy(prim->verts, verts, numverts * sizeof(GL2PSvertex)); - prim->boundary = boundary; - - if(gl2ps.options & GL2PS_SIMPLE_LINE_OFFSET){ - if(type == GL2PS_LINE){ - if(gl2ps.sort == GL2PS_SIMPLE_SORT){ - prim->verts[0].xyz[2] -= 1.; - prim->verts[1].xyz[2] -= 1.; - } - else{ - prim->verts[0].xyz[2] -= 0.1; - prim->verts[1].xyz[2] -= 0.1; - } - } - } - else if(offset && type == GL2PS_TRIANGLE){ - - if(gl2ps.sort == GL2PS_SIMPLE_SORT){ - factor = gl2ps.offset[0]; - units = gl2ps.offset[1]; - } - else{ - factor = gl2ps.offset[0] / 800.; - units = gl2ps.offset[1] / 800.; - } - - area = - (prim->verts[1].xyz[0] - prim->verts[0].xyz[0]) * - (prim->verts[2].xyz[1] - prim->verts[1].xyz[1]) - - (prim->verts[2].xyz[0] - prim->verts[1].xyz[0]) * - (prim->verts[1].xyz[1] - prim->verts[0].xyz[1]); - dZdX = - (prim->verts[2].xyz[1] - prim->verts[1].xyz[1]) * - (prim->verts[1].xyz[2] - prim->verts[0].xyz[2]) - - (prim->verts[1].xyz[1] - prim->verts[0].xyz[1]) * - (prim->verts[2].xyz[2] - prim->verts[1].xyz[2]) / area; - dZdY = - (prim->verts[1].xyz[0] - prim->verts[0].xyz[0]) * - (prim->verts[2].xyz[2] - prim->verts[1].xyz[2]) - - (prim->verts[2].xyz[0] - prim->verts[1].xyz[0]) * - (prim->verts[1].xyz[2] - prim->verts[0].xyz[2]) / area; - - maxdZ = sqrt(dZdX*dZdX + dZdY*dZdY); - - dZ = factor * maxdZ + units; - - /* printf("dZ = %g (fact=%g units=%g)\n", dZ, factor, units); */ - - prim->verts[0].xyz[2] += dZ; - prim->verts[1].xyz[2] += dZ; - prim->verts[2].xyz[2] += dZ; - } - - prim->depth = 0.; - prim->dash = dash; - prim->width = width; /* we should maybe use floats */ - - if(gl2ps.sort == GL2PS_SIMPLE_SORT){ - for(i = 0; i < numverts; i++) - prim->depth += prim->verts[i].xyz[2]; - prim->depth /= (GLfloat)numverts; - } - - gl2psListAdd(gl2ps.primitives, &prim); -} - -GLint gl2psGetVertex(GL2PSvertex *v, GLfloat *p){ - GLint i; - - v->xyz[0] = p[0]; - v->xyz[1] = p[1]; - v->xyz[2] = 1000. * p[2]; - - if(gl2ps.colormode == GL_COLOR_INDEX && gl2ps.colorsize > 0){ - i = (GLint)(p[3] + 0.5); - v->rgba[0] = gl2ps.colormap[i][0]; - v->rgba[1] = gl2ps.colormap[i][1]; - v->rgba[2] = gl2ps.colormap[i][2]; - v->rgba[3] = gl2ps.colormap[i][3]; - return 4; - } - else{ - v->rgba[0] = p[3]; - v->rgba[1] = p[4]; - v->rgba[2] = p[5]; - v->rgba[3] = p[6]; - return 7; - } -} - -GLint gl2psParseFeedbackBuffer(GLvoid){ - GLint i, used, count, v, vtot, offset=0; - GLshort boundary, flag, dash=0, psize=1, lwidth=1; - GLfloat *current; - GL2PSvertex vertices[3]; - - used = glRenderMode(GL_RENDER); - - if(used < 0){ - gl2psMsg(GL2PS_INFO, "OpenGL feedback buffer reallocation"); - return GL2PS_OVERFLOW; - } - - if(used == 0){ - gl2psMsg(GL2PS_WARNING, "Empty feedback buffer"); - return GL2PS_NO_FEEDBACK; - } - - current = gl2ps.feedback; - boundary = gl2ps.boundary = 0; - - while(used > 0){ - - if(boundary) gl2ps.boundary = 1; - - switch((GLint)*current){ - case GL_POINT_TOKEN : - current ++; - used --; - i = gl2psGetVertex(&vertices[0], current); - current += i; - used -= i; - gl2psAddPolyPrimitive(GL2PS_POINT, 1, vertices, 0, dash, psize, 0); - break; - case GL_LINE_TOKEN : - case GL_LINE_RESET_TOKEN : - current ++; - used --; - i = gl2psGetVertex(&vertices[0], current); - current += i; - used -= i; - i = gl2psGetVertex(&vertices[1], current); - current += i; - used -= i; - gl2psAddPolyPrimitive(GL2PS_LINE, 2, vertices, 0, dash, lwidth, 0); - break; - case GL_POLYGON_TOKEN : - count = (GLint)current[1]; - current += 2; - used -= 2; - v = vtot = 0; - while(count > 0 && used > 0){ - i = gl2psGetVertex(&vertices[v], current); - current += i; - used -= i; - count --; - vtot++; - if(v == 2){ - if(boundary){ - if(!count && vtot==2) flag = 1|2|4; - else if(!count) flag = 2|4; - else if(vtot==2) flag = 1|2; - else flag = 2; - } - else - flag = 0; - gl2psAddPolyPrimitive(GL2PS_TRIANGLE, 3, vertices, - offset, dash, 1, flag); - vertices[1] = vertices[2]; - } - else - v ++; - } - break; - case GL_BITMAP_TOKEN : - case GL_DRAW_PIXEL_TOKEN : - case GL_COPY_PIXEL_TOKEN : - current ++; - used --; - i = gl2psGetVertex(&vertices[0], current); - current += i; - used -= i; - break; - case GL_PASS_THROUGH_TOKEN : - switch((GLint)current[1]){ - case GL2PS_BEGIN_POLYGON_OFFSET_FILL : offset=1; break; - case GL2PS_END_POLYGON_OFFSET_FILL : offset=0; break; - case GL2PS_BEGIN_POLYGON_BOUNDARY : boundary=1; break; - case GL2PS_END_POLYGON_BOUNDARY : boundary=0; break; - case GL2PS_BEGIN_LINE_STIPPLE : dash=4; break; - case GL2PS_END_LINE_STIPPLE : dash=0; break; - case GL2PS_SET_POINT_SIZE : - current+=2; - used-=2; - psize=(GLint)current[1]; - break; - case GL2PS_SET_LINE_WIDTH : - current+=2; - used-=2; - lwidth=(GLint)current[1]; - break; - } - current += 2; - used -= 2; - break; - default : - gl2psMsg(GL2PS_WARNING, "Unknown token in buffer"); - current ++; - used --; - break; - } - } - - return GL2PS_SUCCESS; -} - -/* The postscript routines. Other (vector) image formats should be - easy to generate by creating the three corresponding routines for - the new format. */ - -GLvoid gl2psPrintPostscriptHeader(GLvoid){ - GLint viewport[4], index; - GLfloat rgba[4]; - time_t now; - - time(&now); - - glGetIntegerv(GL_VIEWPORT, viewport); - - /* - Greyscale: r g b G (replace C by G in output to change from rgb to gray) - RGB color: r g b C - Font choose: size fontname FC - String primitive: (string) x y r g b size fontname S - Point primitive: x y size r g b P - Flat-shaded line: x2 y2 x1 y1 r g b width L - Flat-shaded triangle: x3 y3 x2 y2 x1 y1 r g b T - Smooth-shaded line: x2 y2 r2 g2 b2 x1 y1 r1 g1 b1 width SL - Smooth-shaded triangle: x3 y3 r3 g3 b3 x2 y2 r2 g2 b2 x1 y1 r1 g1 b1 ST - */ - - fprintf(gl2ps.stream, - "%%!PS-Adobe-3.0\n" - "%%%%Title: %s\n" - "%%%%Creator: GL2PS, an OpenGL to Postscript Printing Library, v. %g\n" - "%%%%For: %s\n" - "%%%%CreationDate: %s" - "%%%%LanguageLevel: 2\n" - "%%%%Pages: 1\n" - "%%%%DocumentData: Clean7Bit\n" - "%%%%PageOrder: Ascend\n" - "%%%%Orientation: Portrait\n" - "%%%%DocumentMedia: Default %d %d 0 () ()\n" - "%%%%BoundingBox: %d %d %d %d\n" - "%%%%Copyright: GNU LGPL (C) 1999-2001 Christophe.Geuzaine@AdValvas.be\n" - "%%%%EndComments\n" - "%%%%BeginProlog\n" - "/gl2psdict 64 dict def gl2psdict begin\n" - "1 setlinecap 1 setlinejoin /bd {bind def} bind def\n" - "/G { 0.082 mul exch 0.6094 mul add exch 0.3086 mul add neg 1.0 add\n" - "setgray } bd /C { setrgbcolor } bd /FC { findfont exch scalefont\n" - "setfont } bd /S { FC C moveto show } bd /P { C newpath 0.0 360.0\n" - "arc closepath fill } bd /L { setlinewidth C newpath moveto lineto\n" - "stroke } bd /T { C newpath moveto lineto lineto closepath fill } bd\n" - "/SL { /lw exch def /b1 exch def /g1 exch def /r1 exch def /y1 exch def\n" - "/x1 exch def /b2 exch def /g2 exch def /r2 exch def /y2 exch def\n" - "/x2 exch def b2 b1 sub abs 0.01 gt g2 g1 sub abs 0.005 gt r2 r1 sub\n" - "abs 0.008 gt or or { /bm b1 b2 add 0.5 mul def /gm g1 g2 add 0.5 mul def\n" - "/rm r1 r2 add 0.5 mul def /ym y1 y2 add 0.5 mul def /xm x1 x2 add\n" - "0.5 mul def x1 y1 r1 g1 b1 xm ym rm gm bm lw SL xm ym rm gm bm x2 y2 r2\n" - "g2 b2 lw SL } { x1 y1 x2 y2 r1 g1 b1 lw L } ifelse } bd /ST {/b1 exch\n" - "def /g1 exch def /r1 exch def /y1 exch def /x1 exch def\n" - "/b2 exch def /g2 exch def /r2 exch def /y2 exch def /x2 exch def\n" - "/b3 exch def /g3 exch def /r3 exch def /y3 exch def /x3 exch def\n" - "b2 b1 sub abs 0.05 gt g2 g1 sub abs 0.017 gt r2 r1 sub abs 0.032 gt\n" - "b3 b1 sub abs 0.05 gt g3 g1 sub abs 0.017 gt r3 r1 sub abs 0.032 gt\n" - "b2 b3 sub abs 0.05 gt g2 g3 sub abs 0.017 gt r2 r3 sub abs 0.032 gt\n" - "or or or or or or or or { /b12 b1 b2 add 0.5 mul def /g12 g1 g2 add\n" - "0.5 mul def /r12 r1 r2 add 0.5 mul def /y12 y1 y2 add 0.5 mul def\n" - "/x12 x1 x2 add 0.5 mul def /b13 b1 b3 add 0.5 mul def /g13 g1 g3\n" - "add 0.5 mul def /r13 r1 r3 add 0.5 mul def /y13 y1 y3 add 0.5 mul\n" - "def /x13 x1 x3 add 0.5 mul def /b32 b3 b2 add 0.5 mul def\n" - "/g32 g3 g2 add 0.5 mul def /r32 r3 r2 add 0.5 mul def /y32 y3 y2\n" - "add 0.5 mul def /x32 x3 x2 add 0.5 mul def x1 y1 r1 g1 b1 x12 y12\n" - "r12 g12 b12 x13 y13 r13 g13 b13 x2 y2 r2 g2 b2 x12 y12 r12 g12 b12\n" - "x32 y32 r32 g32 b32 x3 y3 r3 g3 b3 x32 y32 r32 g32 b32 x13 y13 r13\n" - "g13 b13 x32 y32 r32 g32 b32 x12 y12 r12 g12 b12 x13 y13 r13 g13 b13\n" - "ST ST ST ST } { x1 y1 x2 y2 x3 y3 r1 g1 b1 T } ifelse } bd\n" - "end\n" - "%%%%EndProlog\n" - "%%%%BeginSetup\n" - "/DeviceRGB setcolorspace\n" - "gl2psdict begin\n" - "%%%%EndSetup\n" - "%%%%Page: 1 1\n" - "%%%%BeginPageSetup\n" - "%%%%EndPageSetup\n" - "mark\n" - "gsave\n" - "1.0 1.0 scale\n", - gl2ps.title, GL2PS_VERSION, gl2ps.producer, ctime(&now), - viewport[2], viewport[3], viewport[0], viewport[1], viewport[2], viewport[3]); - - if(gl2ps.options & GL2PS_DRAW_BACKGROUND){ - if(gl2ps.colormode == GL_RGBA || gl2ps.colorsize == 0) - glGetFloatv(GL_COLOR_CLEAR_VALUE, rgba); - else{ - glGetIntegerv(GL_INDEX_CLEAR_VALUE, &index); - rgba[0] = gl2ps.colormap[index][0]; - rgba[1] = gl2ps.colormap[index][1]; - rgba[2] = gl2ps.colormap[index][2]; - rgba[3] = 0.; - } - fprintf(gl2ps.stream, - "%g %g %g C\n" - "newpath %d %d moveto %d %d lineto %d %d lineto %d %d lineto\n" - "closepath fill\n", - rgba[0], rgba[1], rgba[2], - viewport[0], viewport[1], viewport[2], viewport[1], - viewport[2], viewport[3], viewport[0], viewport[3]); - } -} - -GLvoid gl2psPrintPostscriptPrimitive(GLvoid *a, GLvoid *b){ - GL2PSprimitive *prim; - - prim = *(GL2PSprimitive**) a; - - if(gl2ps.options & GL2PS_OCCLUSION_CULL && prim->depth >= 0.) return; - - switch(prim->type){ - case GL2PS_TEXT : - fprintf(gl2ps.stream, "(%s) %g %g %g %g %g %d /%s S\n", - prim->text->str, prim->verts[0].xyz[0], prim->verts[0].xyz[1], - prim->verts[0].rgba[0], prim->verts[0].rgba[1], - prim->verts[0].rgba[2], prim->text->fontsize, - prim->text->fontname); - break; - case GL2PS_POINT : - fprintf(gl2ps.stream, "%g %g %g %g %g %g P\n", - prim->verts[0].xyz[0], prim->verts[0].xyz[1], 0.5*prim->width, - prim->verts[0].rgba[0], prim->verts[0].rgba[1], prim->verts[0].rgba[2]); - break; - case GL2PS_LINE : - if(prim->dash) - fprintf(gl2ps.stream, "[%d] 0 setdash\n", prim->dash); - if(gl2ps.shade){ - fprintf(gl2ps.stream, "%g %g %g %g %g %g %g %g %g %g %g SL\n", - prim->verts[1].xyz[0], prim->verts[1].xyz[1], - prim->verts[1].rgba[0], prim->verts[1].rgba[1], - prim->verts[1].rgba[2], prim->verts[0].xyz[0], - prim->verts[0].xyz[1], prim->verts[0].rgba[0], - prim->verts[0].rgba[1], prim->verts[0].rgba[2], - 0.2*prim->width); - } - else{ - fprintf(gl2ps.stream, "%g %g %g %g %g %g %g %g L\n", - prim->verts[1].xyz[0], prim->verts[1].xyz[1], - prim->verts[0].xyz[0], prim->verts[0].xyz[1], - prim->verts[0].rgba[0], prim->verts[0].rgba[1], - prim->verts[0].rgba[2], 0.2*prim->width); - } - if(prim->dash) - fprintf(gl2ps.stream, "[] 0 setdash\n"); - break; - case GL2PS_TRIANGLE : - if(gl2ps.shade){ - fprintf(gl2ps.stream, "%g %g %g %g %g %g %g %g %g %g %g %g %g %g %g ST\n", - prim->verts[2].xyz[0], prim->verts[2].xyz[1], - prim->verts[2].rgba[0], prim->verts[2].rgba[1], - prim->verts[2].rgba[2], prim->verts[1].xyz[0], - prim->verts[1].xyz[1], prim->verts[1].rgba[0], - prim->verts[1].rgba[1], prim->verts[1].rgba[2], - prim->verts[0].xyz[0], prim->verts[0].xyz[1], - prim->verts[0].rgba[0], prim->verts[0].rgba[1], - prim->verts[0].rgba[2]); - } - else{ - fprintf(gl2ps.stream, "%g %g %g %g %g %g %g %g %g T\n", - prim->verts[2].xyz[0], prim->verts[2].xyz[1], - prim->verts[1].xyz[0], prim->verts[1].xyz[1], - prim->verts[0].xyz[0], prim->verts[0].xyz[1], - prim->verts[0].rgba[0], prim->verts[0].rgba[1], - prim->verts[0].rgba[2]); - } - break; - case GL2PS_QUADRANGLE : - gl2psMsg(GL2PS_WARNING, "There should not be any quad left to print"); - break; - default : - gl2psMsg(GL2PS_ERROR, "Unknown type of primitive to print"); - break; - } -} - -void gl2psPrintPostscriptFooter(GLvoid){ - fprintf(gl2ps.stream, - "grestore\n" - "showpage\n" - "cleartomark\n" - "%%%%PageTrailer\n" - "%%%%Trailer\n" - "end\n" - "%%%%EOF\n"); -} - - -/* The public routines */ - -GLvoid gl2psBeginPage(char *title, char *producer, GLint sort, GLint options, - GLint colormode, GLint colorsize, GL2PSrgba *colormap, - GLint buffersize, FILE *stream){ - - gl2ps.format = GL2PS_EPS; /* a new arg should be introduced to select the format */ - gl2ps.title = title; - gl2ps.producer = producer; - gl2ps.sort = sort; - gl2ps.options = options; - gl2ps.colormode = colormode; - gl2ps.buffersize = buffersize > 0 ? buffersize : 2048 * 2048; - gl2ps.feedback = (GLfloat*)gl2psMalloc(gl2ps.buffersize * sizeof(GLfloat)); - gl2ps.primitives = gl2psListCreate(500, 500, sizeof(GL2PSprimitive*)); - - if(gl2ps.colormode == GL_RGBA){ - gl2ps.colorsize = 0; - gl2ps.colormap = NULL; - } - else if(gl2ps.colormode == GL_COLOR_INDEX){ - if(!colorsize || !colormap) - gl2psMsg(GL2PS_ERROR, "Missing colormap for GL_COLOR_INDEX rendering"); - if(gl2ps.colormap) - gl2psFree(gl2ps.colormap); - gl2ps.colorsize = colorsize; - gl2ps.colormap = (GL2PSrgba*)gl2psMalloc(gl2ps.colorsize * sizeof(GL2PSrgba)); - memcpy(gl2ps.colormap, colormap, gl2ps.colorsize * sizeof(GL2PSrgba)); - } - else - gl2psMsg(GL2PS_ERROR, "Unknown color mode in gl2psBeginPage"); - - if(stream) - gl2ps.stream = stream; - else - gl2psMsg(GL2PS_ERROR, "Bad file pointer"); - - glFeedbackBuffer(gl2ps.buffersize, GL_3D_COLOR, gl2ps.feedback); - glRenderMode(GL_FEEDBACK); -} - -GLint gl2psEndPage(GLvoid){ - GL2PSbsptree *root; - GL2PSxyz eye={0., 0., 100000.}; - GLint shademodel, res; - void (*phead)(GLvoid); - void (*pprim)(GLvoid *a, GLvoid *b); - void (*pfoot)(GLvoid); - - glGetIntegerv(GL_SHADE_MODEL, &shademodel); - gl2ps.shade = (shademodel == GL_SMOOTH); - - res = gl2psParseFeedbackBuffer(); - - if(gl2ps.feedback) gl2psFree(gl2ps.feedback); - - if(res == GL2PS_SUCCESS){ - - switch(gl2ps.format){ - /* other vector formats should go here */ - case GL2PS_EPS : - default : - phead = gl2psPrintPostscriptHeader; - pprim = gl2psPrintPostscriptPrimitive; - pfoot = gl2psPrintPostscriptFooter; - break; - } - - phead(); - switch(gl2ps.sort){ - case GL2PS_NO_SORT : - gl2psListAction(gl2ps.primitives, pprim); - gl2psListAction(gl2ps.primitives, gl2psFreePrimitive); - gl2psListDelete(gl2ps.primitives); - res = GL2PS_SUCCESS; - break; - case GL2PS_SIMPLE_SORT : - gl2psListSort(gl2ps.primitives, gl2psCompareDepth); - gl2psListActionInverse(gl2ps.primitives, pprim); - gl2psListAction(gl2ps.primitives, gl2psFreePrimitive); - gl2psListDelete(gl2ps.primitives); - res = GL2PS_SUCCESS; - break; - case GL2PS_BSP_SORT : - root = (GL2PSbsptree*)gl2psMalloc(sizeof(GL2PSbsptree)); - gl2psBuildBspTree(root, gl2ps.primitives); - if(gl2ps.boundary) gl2psBuildPolygonBoundary(root); - if(gl2ps.options & GL2PS_OCCLUSION_CULL){ - gl2psTraverseBspTree(root, eye, -GL2PS_EPSILON, gl2psLess, - gl2psAddInImage); - } - gl2psTraverseBspTree(root, eye, GL2PS_EPSILON, gl2psGreater, - pprim); - gl2psFreeBspTree(root); - res = GL2PS_SUCCESS; - break; - default : - gl2psMsg(GL2PS_ERROR, "Unknown sorting algorithm"); - } - pfoot(); - fflush(gl2ps.stream); - - } - - if(gl2ps.colormap) gl2psFree(gl2ps.colormap); - - return res; -} - -GLvoid gl2psText(char *str, char *fontname, GLint fontsize){ - GLfloat pos[4]; - GL2PSprimitive *prim; - GLint len; - - prim = (GL2PSprimitive *)gl2psMalloc(sizeof(GL2PSprimitive)); - prim->type = GL2PS_TEXT; - prim->boundary = 0; - prim->numverts = 1; - prim->verts = (GL2PSvertex *)gl2psMalloc(sizeof(GL2PSvertex)); - glGetFloatv(GL_CURRENT_RASTER_POSITION, pos); - prim->verts[0].xyz[0] = pos[0]; - prim->verts[0].xyz[1] = pos[1]; - prim->verts[0].xyz[2] = pos[2]; - prim->depth = pos[2]; - prim->dash = 0; - prim->width = 1; - glGetFloatv(GL_CURRENT_RASTER_COLOR, prim->verts[0].rgba); - prim->text = (GL2PSstring*)gl2psMalloc(sizeof(GL2PSstring)); - if((len = strlen(str))){ - prim->text->str = (char*)gl2psMalloc((len+1)*sizeof(char)); - strcpy(prim->text->str, str); - } - else - prim->text->str = ""; - prim->text->fontname = fontname; - prim->text->fontsize = fontsize; - gl2psListAdd(gl2ps.primitives, &prim); -} - -GLvoid gl2psEnable(GLint mode){ - switch(mode){ - case GL2PS_POLYGON_OFFSET_FILL : - glPassThrough(GL2PS_BEGIN_POLYGON_OFFSET_FILL); - glGetFloatv(GL_POLYGON_OFFSET_FACTOR, &gl2ps.offset[0]); - glGetFloatv(GL_POLYGON_OFFSET_UNITS, &gl2ps.offset[1]); - break; - case GL2PS_POLYGON_BOUNDARY : - glPassThrough(GL2PS_BEGIN_POLYGON_BOUNDARY); - break; - case GL2PS_LINE_STIPPLE : - glPassThrough(GL2PS_BEGIN_LINE_STIPPLE); - break; - default : - gl2psMsg(GL2PS_WARNING, "Unknown mode in gl2psEnable"); - break; - } -} - -GLvoid gl2psDisable(GLint mode){ - switch(mode){ - case GL2PS_POLYGON_OFFSET_FILL : - glPassThrough(GL2PS_END_POLYGON_OFFSET_FILL); - break; - case GL2PS_POLYGON_BOUNDARY : - glPassThrough(GL2PS_END_POLYGON_BOUNDARY); - break; - case GL2PS_LINE_STIPPLE : - glPassThrough(GL2PS_END_LINE_STIPPLE); - break; - default : - gl2psMsg(GL2PS_WARNING, "Unknown mode in gl2psDisable"); - break; - } -} - -GLvoid gl2psPointSize(GLfloat value){ - glPassThrough(GL2PS_SET_POINT_SIZE); - glPassThrough(value); -} - -GLvoid gl2psLineWidth(GLfloat value){ - glPassThrough(GL2PS_SET_LINE_WIDTH); - glPassThrough(value); -} diff --git a/Graphics/gl2ps.h b/Graphics/gl2ps.h deleted file mode 100644 index 07753749d7b8f2b6145fa09a2cfd8b74afa6d919..0000000000000000000000000000000000000000 --- a/Graphics/gl2ps.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * GL2PS, an OpenGL to Postscript Printing Library - * Copyright (C) 1999-2001 Christophe Geuzaine - * - * $Id: gl2ps.h,v 1.12 2001-06-12 08:49:42 geuzaine Exp $ - * - * E-mail: Christophe.Geuzaine@AdValvas.be - * URL: http://www.geuz.org/gl2ps/ - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free - * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#ifndef __GL2PS_H__ -#define __GL2PS_H__ - -#include <stdio.h> -#include <stdlib.h> -#include <GL/gl.h> - -#define GL2PS_VERSION 0.4 -#define GL2PS_NONE 0 - -/* Output file format */ - -#define GL2PS_EPS 1 - -/* Sorting algorithms */ - -#define GL2PS_NO_SORT 1 -#define GL2PS_SIMPLE_SORT 2 -#define GL2PS_BSP_SORT 3 - -/* Options for gl2psBeginPage */ - -#define GL2PS_DRAW_BACKGROUND (1<<0) -#define GL2PS_SIMPLE_LINE_OFFSET (1<<1) -#define GL2PS_SILENT (1<<2) -#define GL2PS_BEST_ROOT (1<<3) -#define GL2PS_OCCLUSION_CULL (1<<4) - -/* Arguments for gl2psEnable/gl2psDisable */ - -#define GL2PS_POLYGON_OFFSET_FILL 1 -#define GL2PS_POLYGON_BOUNDARY 2 -#define GL2PS_LINE_STIPPLE 3 - -/* Magic numbers */ - -#define GL2PS_EPSILON 5.e-3 - -/* Message levels */ - -#define GL2PS_INFO 1 -#define GL2PS_WARNING 2 -#define GL2PS_ERROR 3 - -/* Error codes */ - -#define GL2PS_SUCCESS 0 -#define GL2PS_NO_FEEDBACK -1 -#define GL2PS_OVERFLOW -2 - -/* Primitive types */ - -#define GL2PS_TEXT 1 -#define GL2PS_POINT 2 -#define GL2PS_LINE 3 -#define GL2PS_QUADRANGLE 4 -#define GL2PS_TRIANGLE 5 - -/* BSP tree primitive comparison */ - -#define GL2PS_COINCIDENT 1 -#define GL2PS_IN_FRONT_OF 2 -#define GL2PS_IN_BACK_OF 3 -#define GL2PS_SPANNING 4 - -/* Pass through options */ - -#define GL2PS_BEGIN_POLYGON_OFFSET_FILL 1 -#define GL2PS_END_POLYGON_OFFSET_FILL 2 -#define GL2PS_BEGIN_POLYGON_BOUNDARY 3 -#define GL2PS_END_POLYGON_BOUNDARY 4 -#define GL2PS_BEGIN_LINE_STIPPLE 5 -#define GL2PS_END_LINE_STIPPLE 6 -#define GL2PS_SET_POINT_SIZE 7 -#define GL2PS_SET_LINE_WIDTH 8 - -typedef GLfloat GL2PSrgba[4]; -typedef GLfloat GL2PSxyz[3]; -typedef GLfloat GL2PSxy[2]; -typedef GLfloat GL2PSplane[4]; - -typedef struct { - GLint nmax, size, incr, n; - char *array; -} GL2PSlist; - -typedef struct _GL2PSbsptree GL2PSbsptree; - -struct _GL2PSbsptree { - GL2PSplane plane; - GL2PSlist *primitives; - GL2PSbsptree *front, *back; -}; - -typedef struct _GL2PSbsptree2d GL2PSbsptree2d; - -struct _GL2PSbsptree2d { - GLshort flag; - GL2PSxy a, b; - GL2PSbsptree2d *front, *back; -}; - -typedef struct { - GL2PSxyz xyz; - GL2PSrgba rgba; -} GL2PSvertex; - -typedef struct { - GLshort fontsize; - char *str, *fontname; -} GL2PSstring; - -typedef struct { - GLshort type, numverts, boundary, dash, width; - GLfloat depth; - GL2PSvertex *verts; - GL2PSstring *text; -} GL2PSprimitive; - -typedef struct { - GLint format, sort, options, colorsize, colormode, buffersize; - char *title, *producer; - GLboolean shade, boundary; - GLfloat *feedback, offset[2]; - GL2PSrgba *colormap; - GL2PSlist *primitives; - FILE *stream; -} GL2PScontext; - - -/* public functions */ - -GLvoid gl2psBeginPage(char *title, char *producer, GLint sort, GLint options, - GLint colormode, GLint colorsize, GL2PSrgba *colormap, - GLint buffersize, FILE * stream); -GLint gl2psEndPage(GLvoid); -GLvoid gl2psText(char *str, char *fontname, GLint size); -GLvoid gl2psEnable(GLint mode); -GLvoid gl2psDisable(GLint mode); -GLvoid gl2psPointSize(GLfloat value); -GLvoid gl2psLineWidth(GLfloat value); - -#endif diff --git a/Graphics/gl2yuv.cpp b/Graphics/gl2yuv.cpp deleted file mode 100644 index ba600cc3e29b1032424ae11543286f704c4d180a..0000000000000000000000000000000000000000 --- a/Graphics/gl2yuv.cpp +++ /dev/null @@ -1,146 +0,0 @@ -// $Id: gl2yuv.cpp,v 1.3 2001-01-08 08:05:44 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" - -void create_yuv(FILE *outfile, int width, int height){ - - register int x, y; - register unsigned char *dy0, *dy1; - register unsigned char *dcr, *dcb; - register unsigned char *src0, *src1; - register int cdivisor; - - static int first = 1; - static float mult299[1024], mult587[1024], mult114[1024]; - static float mult16874[1024], mult33126[1024], mult5[1024]; - static float mult41869[1024], mult08131[1024]; - - unsigned char *pixels; - unsigned char **orig_y, **orig_cr, **orig_cb; - int row_stride; - - if (first){ - register int index; - register int maxValue; - - maxValue = 255; - - for (index = 0; index <= maxValue; index++){ - mult299[index] = index*0.29900; - mult587[index] = index*0.58700; - mult114[index] = index*0.11400; - mult16874[index] = -0.16874*index; - mult33126[index] = -0.33126*index; - mult5[index] = index*0.50000; - mult41869[index] = -0.41869*index; - mult08131[index] = -0.08131*index; - } - - first = 0; - } - - // yuv format assumes even number of rows and columns - height -= height%2; - width -= width%2; - - glPixelStorei(GL_PACK_ALIGNMENT,1); - glPixelStorei(GL_UNPACK_ALIGNMENT,1); - pixels=(unsigned char *)Malloc(height*width*3); - glReadPixels(0,0,width,height,GL_RGB,GL_UNSIGNED_BYTE,pixels); - row_stride = width * 3; - - orig_y = (unsigned char **) Malloc(sizeof(unsigned char *) * height); - for (y = 0; y < height; y++) { - orig_y[y] = (unsigned char *) Malloc(sizeof(unsigned char) * width); - } - - orig_cr = (unsigned char **) Malloc(sizeof(char *) * height / 2); - for (y = 0; y < height / 2; y++) { - orig_cr[y] = (unsigned char *) Malloc(sizeof(char) * width / 2); - } - - orig_cb = (unsigned char **) Malloc(sizeof(char *) * height / 2); - for (y = 0; y < height / 2; y++) { - orig_cb[y] = (unsigned char *) Malloc(sizeof(char) * width / 2); - } - - // assume ydivisor = 1, so cdivisor = 4 - cdivisor = 4; - - for (y = 0; y < height; y += 2){ - src0 = &(pixels[y * row_stride]); - src1 = &(pixels[(y+1) * row_stride]); - dy0 = orig_y[y]; - dy1 = orig_y[y + 1]; - dcr = orig_cr[y / 2]; - dcb = orig_cb[y / 2]; - - for (x = 0; x < width; x += 2, dy0 += 2, dy1 += 2, dcr++, - dcb++, src0 += 6, src1 += 6){ - *dy0 = (unsigned char)(mult299[*src0] + - mult587[src0[1]] + - mult114[src0[2]]); - - *dy1 = (unsigned char)(mult299[*src1] + - mult587[src1[1]] + - mult114[src1[2]]); - - dy0[1] = (unsigned char)(mult299[src0[3]] + - mult587[src0[4]] + - mult114[src0[5]]); - - dy1[1] = (unsigned char)(mult299[src1[3]] + - mult587[src1[4]] + - mult114[src1[5]]); - - *dcb = (unsigned char)((mult16874[*src0] + - mult33126[src0[1]] + - mult5[src0[2]] + - mult16874[*src1] + - mult33126[src1[1]] + - mult5[src1[2]] + - mult16874[src0[3]] + - mult33126[src0[4]] + - mult5[src0[5]] + - mult16874[src1[3]] + - mult33126[src1[4]] + - mult5[src1[5]]) / cdivisor) + 128; - - *dcr = (unsigned char)((mult5[*src0] + - mult41869[src0[1]] + - mult08131[src0[2]] + - mult5[*src1] + - mult41869[src1[1]] + - mult08131[src1[2]] + - mult5[src0[3]] + - mult41869[src0[4]] + - mult08131[src0[5]] + - mult5[src1[3]] + - mult41869[src1[4]] + - mult08131[src1[5]]) / cdivisor) + 128; - } - } - - // Y - for (y = height-1; y >=0; y--) fwrite(orig_y[y], 1, width, outfile); - - // U - for (y = height/2-1; y >=0; y--) fwrite(orig_cb[y], 1, width / 2, outfile); - - // V - for (y = height/2-1; y >=0; y--) fwrite(orig_cr[y], 1, width / 2, outfile); - - Free(pixels); - - for (y = 0; y < height; y++) Free(orig_y[y]); - Free(orig_y); - - for (y = 0; y < height / 2; y++) Free(orig_cr[y]); - Free(orig_cr); - - for (y = 0; y < height / 2; y++) Free(orig_cb[y]); - Free(orig_cb); - -} - diff --git a/Graphics/gl2yuv.h b/Graphics/gl2yuv.h deleted file mode 100644 index 2921e67be195f097379bcb5f622f0d99cfda1944..0000000000000000000000000000000000000000 --- a/Graphics/gl2yuv.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _GL2YUV_H_ -#define _GL2YUV_H_ - -void create_yuv(FILE *outfile, int width, int height); - -#endif diff --git a/Makefile b/Makefile deleted file mode 100644 index 2eed73ca1d82c0158f54b90cd8077702628eb744..0000000000000000000000000000000000000000 --- a/Makefile +++ /dev/null @@ -1,614 +0,0 @@ -# $Id: Makefile,v 1.126 2001-08-13 07:53:30 geuzaine Exp $ -# ---------------------------------------------------------------------- -# Makefile for Gmsh -# ---------------------------------------------------------------------- - - GMSH_RELEASE = 1.23 - - MAKE = make - CC = c++ - FLAGS = -g -Wall - RM = rm - RMFLAGS = -f - -# ---------------------------------------------------------------------- -# Includes -# ---------------------------------------------------------------------- - - OPENGL_INC = -I/usr/X11R6/include\ - -I/usr/include/X11/GLw\ - -I$(HOME)/SOURCES/Mesa-3.1/include\ - -I$(HOME)/SOURCES/Mesa-3.1/include/GL - MOTIF_INC = -I/usr/X11R6/LessTif/Motif1.2/include - FLTK_INC = -I$(HOME)/SOURCES/fltk - FLTK_INC_SCOREC = -I/users/develop/develop/visual/fltk/1.0/include - FLTK_INC_LAPTOPJF = -I../../fltk-1.0.9 - FLTK_INC_GERTHA_BURO = -I../../fltk - -# ---------------------------------------------------------------------- -# 3rd party libraries -# ---------------------------------------------------------------------- - - OPENGL_LIB = -lGLU -lGL - OPENGL_MOTIF_LIB = -lGLw - MESA_LIB = -L$(HOME)/SOURCES/Mesa-3.1/lib -lGLU -lGL - MESA_MOTIF_LIB = -L$(HOME)/SOURCES/Mesa-3.1/lib -lGLw - MESA_STATIC_LIB = $(HOME)/SOURCES/Mesa-static/lib/libGLU.a\ - $(HOME)/SOURCES/Mesa-static/lib/libGL.a - MESA_MOTIF_STATIC_LIB = $(HOME)/SOURCES/Mesa-static/lib/libGLw.a -# XMOTIF_LIB = /usr/local/lib/libXm.so.2 -L/usr/X11R6/lib -lXt -lX11 -lXext - XMOTIF_LIB = -L/usr/local/lib -L/usr/X11R6/LessTif/Motif1.2/lib -lXm\ - -L/usr/X11R6/lib -lXt -lX11 -lXext - FLTK_LIB = -L$(HOME)/SOURCES/fltk/lib -lfltk -L/usr/X11R6/lib -lX11 - FLTK_STATIC_LIB = -L$(HOME)/SOURCES/fltk-static/lib -lfltk -L/usr/X11R6/lib -lX11 -FLTK_LIB_SOLARIS_SCOREC = /users/develop/develop/visual/fltk/1.0/lib/sun4_5/libfltk-gcc.a\ - -L/usr/X11R6/lib -lX11 - FLTK_LIB_LINUX_SCOREC = /users/develop/develop/visual/fltk/1.0/lib/x86_linux/libfltk.a\ - -L/usr/X11R6/lib -lX11 - - THREAD_LIB = -L/usr/lib -lpthread - -# ---------------------------------------------------------------------- -# Gmsh definitions -# ---------------------------------------------------------------------- - - GMSH_DIR = Adapt Common DataStr Geo Graphics Mesh Parser\ - Motif Fltk Plugin jpeg utils Parallel - GMSH_XMOTIF_DIR = Adapt Common DataStr Geo Graphics Mesh Parser Motif jpeg Parallel - GMSH_FLTK_DIR = Adapt Common DataStr Geo Graphics Mesh Parser Fltk jpeg Plugin Parallel - GMSH_BOX_DIR = Adapt Box Common DataStr Geo Mesh Parser Plugin Parallel - GMSH_BIN_DIR = bin - GMSH_LIB_DIR = lib - GMSH_DOC_DIR = doc - GMSH_DEMO_DIR = demos - GMSH_TUTOR_DIR = tutorial - GMSH_ARCHIVE_DIR = archives - - - GMSH_XMOTIF_LIB = -L$(GMSH_LIB_DIR) -lMotif -lGraphics -lParser -lMesh -lGeo\ - -lAdapt -lCommon -lDataStr -lJpeg -lParallel - GMSH_FLTK_LIB = -L$(GMSH_LIB_DIR) -lFltk -lParser -lGraphics -lMesh -lGeo\ - -lAdapt -lCommon -lDataStr -lJpeg -lPlugin -lParallel - GMSH_BOX_LIB = -L$(GMSH_LIB_DIR) -lBox -lParser -lMesh -lGeo\ - -lAdapt -lPlugin -lCommon -lDataStr -lParallel - GMSH_ARCHIVE = $(GMSH_ARCHIVE_DIR)/gmsh-`date "+%Y.%m.%d"` - GMSH_SRCRPM = gmsh-$(GMSH_RELEASE) - GMSH_SOURCES = `find . \( ! -name "*.tar*" -a ! -name "*.tgz" \ - -a ! -name "*.o" -a ! -name "lib*.a" \ - -a ! -name "*.msh" -a ! -name "*.bak" \ - -a ! -name "gmsh" -a ! -name "gmsh-*"\ - -a ! -type d \)` - GMSH_UNAME = `uname` - -# ---------------------------------------------------------------------- -# Rules for developers -# ---------------------------------------------------------------------- - -default: initialtag - @for i in $(GMSH_FLTK_DIR); do (cd $$i && $(MAKE) \ - "CC=$(CC)" \ - "C_FLAGS=$(FLAGS)" \ - "OS_FLAGS=-D_LITTLE_ENDIAN" \ - "VERSION_FLAGS=-D_FLTK" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(FLTK_INC)" \ - ); done - -static: - @for i in $(GMSH_FLTK_DIR); do (cd $$i && $(MAKE) \ - "CC=$(CC)" \ - "C_FLAGS=-O3" \ - "OS_FLAGS=-D_LITTLE_ENDIAN" \ - "VERSION_FLAGS=-D_FLTK" \ - "GL_INCLUDE=-I$(HOME)/SOURCES/Mesa-static/include -I$(HOME)/SOURCES/Mesa-static/include/GL" \ - "GUI_INCLUDE=$(FLTK_INC)" \ - ); done - $(CC) -o $(GMSH_BIN_DIR)/gmshm $(GMSH_FLTK_LIB) $(MESA_STATIC_LIB) \ - $(FLTK_STATIC_LIB) -lm - -win: initialtag - @for i in $(GMSH_FLTK_DIR); do (cd $$i && $(MAKE) \ - "CC=g++" \ - "C_FLAGS=-g -Wall -DWIN32" \ - "OS_FLAGS=-D_LITTLE_ENDIAN" \ - "VERSION_FLAGS=-D_FLTK" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(FLTK_INC)" \ - ); done - g++ -Wl,--subsystem,windows -o $(GMSH_BIN_DIR)/gmsh.exe $(GMSH_FLTK_LIB) \ - $(HOME)/SOURCES/fltk/lib/libfltk.a -lglu32 -lopengl32 -lgdi32 -lwsock32 -lm - -motif: initialtag - @for i in $(GMSH_XMOTIF_DIR); do (cd $$i && $(MAKE) \ - "CC=$(CC)" \ - "C_FLAGS=$(FLAGS)" \ - "OS_FLAGS=-D_LITTLE_ENDIAN -D_NOPLUGIN" \ - "VERSION_FLAGS=-D_XMOTIF" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(MOTIF_INC)" \ - ); done - -gmsh: - $(CC) -o $(GMSH_BIN_DIR)/gmsh $(GMSH_FLTK_LIB) $(MESA_LIB) \ - $(FLTK_LIB) -lm - -efence: - $(CC) -o $(GMSH_BIN_DIR)/gmsh $(GMSH_FLTK_LIB) $(MESA_LIB) \ - $(FLTK_LIB) -lefence -lm - -gmsh2: - $(CC) -o $(GMSH_BIN_DIR)/gmsh $(GMSH_FLTK_LIB) $(MESA_LIB) \ - $(FLTK_LIB) -lfltk_gl $(THREAD_LIB) -lm - -motifgl: - $(CC) -o $(GMSH_BIN_DIR)/gmsh $(GMSH_XMOTIF_LIB)\ - $(OPENGL_MOTIF_LIB) $(OPENGL_LIB) $(XMOTIF_LIB) $(THREAD_LIB) -lm - -motifmesa: - $(CC) -o $(GMSH_BIN_DIR)/gmsh $(GMSH_XMOTIF_LIB)\ - $(MESA_MOTIF_LIB) $(MESA_LIB) $(XMOTIF_LIB) $(THREAD_LIB) -lm - -motifmesastatic: - $(CC) -o $(GMSH_BIN_DIR)/gmshm $(GMSH_XMOTIF_LIB)\ - $(MESA_MOTIF_STATIC_LIB) $(MESA_STATIC_LIB)\ - $(XMOTIF_LIB) $(THREAD_LIB) -lm - - -# ---------------------------------------------------------------------- -# Utilities -# ---------------------------------------------------------------------- - -parser: - cd Parser && $(MAKE) parser - -utilities: - cd utils && $(MAKE) - -purge: - for i in "." $(GMSH_DIR) $(GMSH_LIB_DIR) $(GMSH_ARCHIVE_DIR)\ - $(GMSH_DEMO_DIR) $(GMSH_TUTOR_DIR) $(GMSH_DOC_DIR) $(GMSH_BOX_DIR); \ - do (cd $$i && $(RM) $(RMFLAGS) *~ *~~ .gmsh-tmp .gmsh-errors gmon.out); \ - done - -clean: - for i in $(GMSH_DIR) $(GMSH_DOC_DIR) $(GMSH_LIB_DIR) ; \ - do (cd $$i && $(MAKE) clean); \ - done - -depend: - for i in $(GMSH_DIR); \ - do (cd $$i && $(MAKE) depend \ - "CC=$(CC)" \ - "VERSION_FLAGS=-D_FLTK -D_XMOTIF" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(MOTIF_INC) $(FLTK_INC)" \ - ); done - -nodepend: - for i in $(GMSH_DIR) ; do \ - (cd $$i && (sed '/^# DO NOT DELETE THIS LINE/q' Makefile) > Makefile.new \ - && cp Makefile Makefile.bak \ - && cp Makefile.new Makefile \ - && $(RM) $(RMFLAGS) Makefile.new); \ - done - -tag: - $(RM) $(RMFLAGS) Common/GmshVersion.h - echo "#define GMSH_VERSION $(GMSH_RELEASE)" > Common/GmshVersion.h - echo "#define GMSH_DATE \"`date`\"" >> Common/GmshVersion.h - echo "#define GMSH_HOST \"`hostname`\"" >> Common/GmshVersion.h - echo "#define GMSH_PACKAGER \"`whoami`\"" >> Common/GmshVersion.h - echo "#define GMSH_OS \"`uname -sr`\"" >> Common/GmshVersion.h - -initialtag: - @if [ ! -r Common/GmshVersion.h ]; then \ - $(MAKE) tag ; \ - fi - -tags: - gtags - htags - -tgz: - if (test -f $(GMSH_ARCHIVE).tar.gz); \ - then mv -f $(GMSH_ARCHIVE).tar.gz $(GMSH_ARCHIVE).tar.gz~; \ - fi - tar cvf $(GMSH_ARCHIVE).tar $(GMSH_SOURCES) - gzip $(GMSH_ARCHIVE).tar - chmod 640 $(GMSH_ARCHIVE).tar.gz - -src: - tar cvf $(GMSH_SRCRPM).tar $(GMSH_SOURCES) - gzip $(GMSH_SRCRPM).tar - -distrib: - mkdir gmsh-$(GMSH_RELEASE) - cp $(GMSH_BIN_DIR)/gmsh gmsh-$(GMSH_RELEASE) - cp -R tutorial gmsh-$(GMSH_RELEASE) - cp -R demos gmsh-$(GMSH_RELEASE) - rm -rf gmsh-$(GMSH_RELEASE)/*/CVS - rm -f gmsh-$(GMSH_RELEASE)/*/*.msh - rm -f gmsh-$(GMSH_RELEASE)/*/*~ - tar cvf gmsh-$(GMSH_RELEASE)-$(GMSH_UNAME).tar gmsh-$(GMSH_RELEASE) - gzip gmsh-$(GMSH_RELEASE)-$(GMSH_UNAME).tar - mv gmsh-$(GMSH_RELEASE)-$(GMSH_UNAME).tar.gz gmsh-$(GMSH_RELEASE)-$(GMSH_UNAME).tgz - rm -rf gmsh-$(GMSH_RELEASE) - -distrib-win: - cp $(GMSH_BIN_DIR)/gmsh.exe ../gmsh-distrib - cp doc/README.txt ../gmsh-distrib - cp -R tutorial ../gmsh-distrib - cp -R demos ../gmsh-distrib - rm -f ../gmsh-distrib/tutorial/README - rm -rf ../gmsh-distrib/*/CVS - rm -f ../gmsh-distrib/*/*.msh - rm -f ../gmsh-distrib/*/*~ - cd ../gmsh-distrib && zip -r gmsh-$(GMSH_RELEASE)-Windows.zip * - mv ../gmsh-distrib/gmsh-$(GMSH_RELEASE)-Windows.zip . - rm -rf ../gmsh-distrib/tutorial - rm -rf ../gmsh-distrib/demos - -strip_bin: - strip $(GMSH_BIN_DIR)/gmsh - -# ---------------------------------------------------------------------- -# Demos -# ---------------------------------------------------------------------- - -dem: - gtar zcvf gmsh-demos.tgz $(GMSH_DEMO_DIR) - gtar zcvf gmsh-tutorial.tgz $(GMSH_TUTOR_DIR) - -# ---------------------------------------------------------------------- -# Black Box -# ---------------------------------------------------------------------- - -bb: tag - @for i in $(GMSH_BOX_DIR); do (cd $$i && $(MAKE) \ - "CC=$(CC)" \ - "C_FLAGS=-O3" \ - "OS_FLAGS=" \ - "VERSION_FLAGS=-D_BLACKBOX" \ - "GL_INCLUDE=" \ - "GUI_INCLUDE=" \ - ); done - $(CC) -o $(GMSH_BIN_DIR)/gmsh-bb $(GMSH_BOX_LIB) -lm - -bb-parallel: tag - PARALLEL=1 - @for i in $(GMSH_BOX_DIR); do (cd $$i && $(MAKE) \ - "CC=mpiCC" \ - "C_FLAGS=-O3" \ - "OS_FLAGS=" \ - "VERSION_FLAGS=-D_BLACKBOX -DPARALLEL" \ - "GL_INCLUDE=" \ - "GUI_INCLUDE=" \ - ); done - mpiCC -o $(GMSH_BIN_DIR)/gmsh-bb $(GMSH_BOX_LIB) -lm - -bbn: tag - @for i in $(GMSH_BOX_DIR) ; do (cd $$i && $(MAKE) \ - "CC=g++ -mno-cygwin -I/mingw/include" \ - "C_FLAGS=-O3" \ - "OS_FLAGS=" \ - "VERSION_FLAGS=-D_BLACKBOX" \ - "GL_INCLUDE=" \ - "GUI_INCLUDE=" \ - ); done - g++ -o $(GMSH_BIN_DIR)/gmsh.exe -mno-cygwin -L/mingw/lib $(GMSH_BOX_LIB) -lm - -# ---------------------------------------------------------------------- -# Ready to compile for some platforms with MOTIF -# ---------------------------------------------------------------------- - -motif_dec: tag motif_compile_little_endian motif_link_opengl strip_bin - -motif_linux: tag motif_compile_little_endian motif_link_mesa strip_bin - -motif_linux_2952: tag motif_compile_little_endian_2952 motif_link_mesa_2952 strip_bin - -motif_ibm: tag motif_compile_big_endian motif_link_mesa strip_bin - -motif_sun: tag motif_compile_big_endian motif_link_opengl strip_bin - -motif_hp: tag motif_compile_big_endian motif_link_hp strip_bin - -motif_sgi: tag motif_compile_sgi motif_link_sgi strip_bin - -motif_rpm: src - mv $(GMSH_SRCRPM).tar.gz /usr/src/redhat/SOURCES - rpm -bb utils/gmsh_motif.spec - cp /usr/src/redhat/RPMS/i386/$(GMSH_SRCRPM)-1.i386.rpm . - cp /usr/src/redhat/BUILD/$(GMSH_SRCRPM)/bin/gmsh . - gtar zcvf gmsh-$(GMSH_UNAME).tgz gmsh - rm -f gmsh - -motif_compile_little_endian: - @for i in $(GMSH_XMOTIF_DIR); do (cd $$i && $(MAKE) \ - "CC=g++" \ - "C_FLAGS=-O3" \ - "OS_FLAGS=-D_LITTLE_ENDIAN" \ - "VERSION_FLAGS=-D_XMOTIF -D_NOPLUGIN" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(MOTIF_INC)" \ - ); done - -motif_compile_little_endian_2952: - @for i in $(GMSH_XMOTIF_DIR); do (cd $$i && $(MAKE) \ - "CC=$(HOME)/gcc-2.95.2/bin/g++" \ - "C_FLAGS=-O3" \ - "OS_FLAGS=-D_LITTLE_ENDIAN" \ - "VERSION_FLAGS=-D_XMOTIF -D_NOPLUGIN" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(MOTIF_INC)" \ - ); done - -motif_compile_little_endian_threads: - @for i in $(GMSH_XMOTIF_DIR); do (cd $$i && $(MAKE) \ - "CC=g++" \ - "C_FLAGS=-D_REENTRANT -O3" \ - "OS_FLAGS=-D_LITTLE_ENDIAN" \ - "VERSION_FLAGS=-D_XMOTIF -D_NOPLUGIN -D_USETHREADS" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(MOTIF_INC)" \ - ); done - -motif_compile_big_endian: - @for i in $(GMSH_XMOTIF_DIR); do (cd $$i && $(MAKE) \ - "CC=g++" \ - "C_FLAGS=-O3" \ - "OS_FLAGS=" \ - "VERSION_FLAGS=-D_XMOTIF -D_NOPLUGIN" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(MOTIF_INC)" \ - ); done - -# special car -O2 merde dans 3d_smesh.c sur TransfiniteHex() -motif_compile_sgi: - @for i in $(GMSH_XMOTIF_DIR); do (cd $$i && $(MAKE) \ - "CC=CC" \ - "C_FLAGS=-O2 -o32 -Olimit 3000" \ - "RANLIB=true"\ - "AR=CC -o32 -ar -o"\ - "OS_FLAGS=" \ - "VERSION_FLAGS=-D_XMOTIF -D_NOPLUGIN" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(MOTIF_INC)" \ - ); done - @for i in Mesh; do (cd $$i && $(MAKE) \ - "CC=CC" \ - "C_FLAGS=-O1 -o32" \ - "AR=CC -o32 -ar -o"\ - "RANLIB=true"\ - "OS_FLAGS=" \ - "VERSION_FLAGS=-D_XMOTIF -D_NOPLUGIN" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(MOTIF_INC)" \ - ); done - -motif_link_sgi: - CC -O2 -o32 -o $(GMSH_BIN_DIR)/gmsh $(GMSH_XMOTIF_LIB)\ - $(OPENGL_MOTIF_LIB) $(OPENGL_LIB) $(XMOTIF_LIB) -lm - -motif_link_opengl: - g++ -o $(GMSH_BIN_DIR)/gmsh $(GMSH_XMOTIF_LIB)\ - $(OPENGL_MOTIF_LIB) $(OPENGL_LIB) $(XMOTIF_LIB) -lm - -motif_link_mesa: - g++ -o $(GMSH_BIN_DIR)/gmsh $(GMSH_XMOTIF_LIB)\ - $(MESA_MOTIF_LIB) $(MESA_LIB) $(XMOTIF_LIB) -lm - -motif_link_mesa_2952: - $(HOME)/gcc-2.95.2/bin/g++ -o $(GMSH_BIN_DIR)/gmsh $(GMSH_XMOTIF_LIB)\ - $(MESA_MOTIF_LIB) $(MESA_LIB) $(XMOTIF_LIB) -lm - -motif_link_mesa_threads: - g++ -o $(GMSH_BIN_DIR)/gmsh $(GMSH_XMOTIF_LIB)\ - $(MESA_MOTIF_LIB) $(MESA_LIB) $(XMOTIF_LIB) $(THREAD_LIB) -lm - -# special car +s necessaire pour shared libs avec SHLIB_PATH variable. -motif_link_hp: - g++ -Wl,+s -o $(GMSH_BIN_DIR)/gmsh $(GMSH_XMOTIF_LIB)\ - $(MESA_MOTIF_LIB) $(MESA_LIB) $(XMOTIF_LIB) -lm - - -# ---------------------------------------------------------------------- -# Ready to compile for some platforms with FLTK -# ---------------------------------------------------------------------- - -# Warning: -O3 is known to produce incorrect code with gcc-2.95.2 on -# linux. Let's stick to -O2 for all public releases... - -fltk_compile_little_endian: - @for i in $(GMSH_FLTK_DIR); do (cd $$i && $(MAKE) \ - "CC=$(CC)" \ - "C_FLAGS=-O2" \ - "OS_FLAGS=-D_LITTLE_ENDIAN" \ - "VERSION_FLAGS=-D_FLTK" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(FLTK_INC)" \ - ); done - -fltk_compile_little_endian_2952: - @for i in $(GMSH_FLTK_DIR); do (cd $$i && $(MAKE) \ - "CC=$(HOME)/gcc-2.95.2/bin/g++" \ - "C_FLAGS=-O2" \ - "OS_FLAGS=-D_LITTLE_ENDIAN" \ - "VERSION_FLAGS=-D_FLTK" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(FLTK_INC)" \ - ); done - -fltk_compile_big_endian: - @for i in $(GMSH_FLTK_DIR); do (cd $$i && $(MAKE) \ - "CC=$(CC)" \ - "C_FLAGS=-O3" \ - "OS_FLAGS=" \ - "VERSION_FLAGS=-D_FLTK -D_NODLL" \ - "GL_INCLUDE=-I/usr/include/X11/GLw -I$(HOME)/SOURCES/Mesa-3.1/include -I$(HOME)/SOURCES/Mesa-3.1/include/GL" \ - "GUI_INCLUDE=$(FLTK_INC)" \ - ); done - -fltk_compile_ibm: - @for i in $(GMSH_FLTK_DIR); do (cd $$i && $(MAKE) \ - "CC=$(CC)" \ - "C_FLAGS=-O3" \ - "OS_FLAGS=-D_BSD" \ - "VERSION_FLAGS=-D_FLTK -D_NODLL" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(FLTK_INC)" \ - ); done - -fltk_compile_solaris_scorec : - @for i in $(GMSH_FLTK_DIR); do (cd $$i && $(MAKE) \ - "CC=$(CC)" \ - "C_FLAGS=-O3" \ - "VERSION_FLAGS=-D_FLTK" \ - "OS_FLAGS=" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(FLTK_INC_SCOREC)" \ - ); done - -fltk_compile_linux_scorec : - @for i in $(GMSH_FLTK_DIR); do (cd $$i && $(MAKE) \ - "CC=$(CC)" \ - "C_FLAGS=-O2" \ - "VERSION_FLAGS=-D_FLTK" \ - "OS_FLAGS=-D_LITTLE_ENDIAN" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(FLTK_INC_SCOREC)" \ - ); done - -fltk_compile_sgi: - @for i in $(GMSH_FLTK_DIR); do (cd $$i && $(MAKE) \ - "CC=CC" \ - "C_FLAGS=-O2 -mips3 -n32 -OPT:Olimit=0 -LANG:std" \ - "RANLIB=true"\ - "AR=CC -mips3 -n32 -ar -o"\ - "OS_FLAGS=" \ - "VERSION_FLAGS=-D_FLTK" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(FLTK_INC)" \ - ); done - -fltk_compile_mingw: - @for i in $(GMSH_FLTK_DIR); do (cd $$i && $(MAKE) \ - "CC=g++ -mno-cygwin -I/mingw/include" \ - "C_FLAGS=-O2 -DWIN32" \ - "OS_FLAGS=-D_LITTLE_ENDIAN" \ - "VERSION_FLAGS=-D_FLTK" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(FLTK_INC)" \ - ); done - -fltk_compile_cygwin: - @for i in $(GMSH_FLTK_DIR); do (cd $$i && $(MAKE) \ - "CC=g++" \ - "C_FLAGS=-O2 -DWIN32" \ - "OS_FLAGS=-D_LITTLE_ENDIAN" \ - "VERSION_FLAGS=-D_FLTK -I/usr/include/w32api" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(FLTK_INC)" \ - ); done - -fltk_link_solaris_scorec: - $(CC) -o $(GMSH_BIN_DIR)/gmsh-sun $(GMSH_FLTK_LIB) $(OPENGL_LIB) \ - $(FLTK_LIB_SOLARIS_SCOREC) -lm -ldl -lsocket - -fltk_purify: - purify -cache-dir=/space g++ -o $(GMSH_BIN_DIR)/gmsh-sun $(GMSH_FLTK_LIB) $(OPENGL_LIB) \ - $(FLTK_LIB_SOLARIS_SCOREC) -lm -ldl -lsocket - -fltk_link_linux_scorec: - $(CC) -o $(GMSH_BIN_DIR)/gmsh-linux $(GMSH_FLTK_LIB) $(OPENGL_LIB) \ - $(FLTK_LIB_LINUX_SCOREC) -lm -ldl -fltk_link_mesa: - $(CC) -o $(GMSH_BIN_DIR)/gmsh $(GMSH_FLTK_LIB) $(MESA_LIB) \ - $(FLTK_LIB) -lm -ldl - -fltk_link_mesa_2952: - $(HOME)/gcc-2.95.2/bin/g++ -o $(GMSH_BIN_DIR)/gmsh $(GMSH_FLTK_LIB) $(MESA_LIB) \ - $(FLTK_LIB) -lm -ldl - -fltk_link_opengl: - $(CC) -o $(GMSH_BIN_DIR)/gmsh $(GMSH_FLTK_LIB) $(OPENGL_LIB) \ - $(FLTK_LIB) -lm -fltk_link_sgi: - CC -O2 -mips3 -n32 -o $(GMSH_BIN_DIR)/gmsh $(GMSH_FLTK_LIB)\ - $(FLTK_LIB) $(OPENGL_LIB) -lm -fltk_link_sun: - $(CC) -o $(GMSH_BIN_DIR)/gmsh $(GMSH_FLTK_LIB) $(MESA_LIB) \ - $(FLTK_LIB) -lXext -lsocket -lnsl -ldl -lm -fltk_link_hp: - g++ -Wl,+s -o $(GMSH_BIN_DIR)/gmsh $(GMSH_FLTK_LIB)\ - $(MESA_LIB) $(FLTK_LIB) -lm - -fltk_link_ibm: - $(CC) -o $(GMSH_BIN_DIR)/gmsh $(GMSH_FLTK_LIB) $(MESA_LIB) \ - $(FLTK_LIB) -lm - -fltk_link_mingw: - g++ -mno-cygwin -L/mingw/lib -o $(GMSH_BIN_DIR)/gmsh.exe $(GMSH_FLTK_LIB) Common/Icon.res \ - $(HOME)/SOURCES/fltk/lib/libfltk.a -lglu32 -lopengl32 -lgdi32 -lwsock32 -lm - -fltk_link_cygwin: - g++ -Wl,--subsystem,windows -o $(GMSH_BIN_DIR)/gmsh.exe $(GMSH_FLTK_LIB) Common/Icon.res \ - $(HOME)/SOURCES/fltk/lib/libfltk.a -lglu32 -lopengl32 -lgdi32 -lwsock32 -lm - -fltk_linux: tag fltk_compile_little_endian fltk_link_mesa strip_bin - -fltk_linux_2952: tag fltk_compile_little_endian_2952 fltk_link_mesa_2952 strip_bin - -fltk_rpm: src - mv $(GMSH_SRCRPM).tar.gz /usr/src/redhat/SOURCES - rpm -bb utils/gmsh_fltk.spec - cp /usr/src/redhat/RPMS/i386/$(GMSH_SRCRPM)-1.i386.rpm . - cp /usr/src/redhat/BUILD/$(GMSH_SRCRPM)/gmsh-$(GMSH_RELEASE)-$(GMSH_UNAME).tgz . - -fltk_dec: tag fltk_compile_little_endian fltk_link_opengl strip_bin - -fltk_sun: tag fltk_compile_big_endian fltk_link_sun strip_bin - -fltk_hp: tag fltk_compile_big_endian fltk_link_hp strip_bin - -fltk_ibm: tag fltk_compile_ibm fltk_link_ibm strip_bin - -fltk_solaris_scorec : fltk_compile_solaris_scorec fltk_link_solaris_scorec strip_bin - -fltk_linux_scorec : fltk_compile_linux_scorec fltk_link_linux_scorec strip_bin - -fltk_sgi: tag fltk_compile_sgi fltk_link_sgi strip_bin - -fltk_mingw: tag fltk_compile_mingw fltk_link_mingw - strip $(GMSH_BIN_DIR)/gmsh.exe - -fltk_cygwin: tag fltk_compile_cygwin fltk_link_cygwin - strip $(GMSH_BIN_DIR)/gmsh.exe - -fltk_cygwin_gertha_buro: tag - @for i in $(GMSH_FLTK_DIR); do (cd $$i && $(MAKE) \ - "CC=g++" \ - "C_FLAGS=-O2 -DWIN32" \ - "OS_FLAGS=-D_LITTLE_ENDIAN" \ - "VERSION_FLAGS=-D_FLTK" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(FLTK_INC_GERTHA_BURO)" \ - ); done - g++ -Wl,--subsystem,windows -o $(GMSH_BIN_DIR)/gmsh.exe $(GMSH_FLTK_LIB) Common/Icon.res \ - ../fltk/lib/libfltk.a -lglu32 -lopengl32 -lgdi32 -lwsock32 -lm - -fltk_cygwin_laptopjf: - @for i in $(GMSH_FLTK_DIR); do (cd $$i && $(MAKE) \ - "CC=g++" \ - "C_FLAGS=-O2 -DWIN32" \ - "OS_FLAGS=-D_LITTLE_ENDIAN" \ - "VERSION_FLAGS=-D_FLTK" \ - "GL_INCLUDE=$(OPENGL_INC)" \ - "GUI_INCLUDE=$(FLTK_INC_LAPTOPJF)" \ - ); done - g++ -Wl,--subsystem,windows -o $(GMSH_BIN_DIR)/gmsh-cyg.exe $(GMSH_FLTK_LIB) Common/Icon.res \ - ../fltk-1.0.9/lib/libfltk.a -lglu32 -lopengl32 -lgdi32 -lwsock32 -lm - -fltk_cygwin_laptopjf_tag: tag fltk_cygwin_laptopjf - - diff --git a/Mesh/1D_Mesh.cpp b/Mesh/1D_Mesh.cpp deleted file mode 100644 index ec077605aa1764878abd9cfe1fe1d1bd7d441285..0000000000000000000000000000000000000000 --- a/Mesh/1D_Mesh.cpp +++ /dev/null @@ -1,239 +0,0 @@ -// $Id: 1D_Mesh.cpp,v 1.20 2001-08-12 12:32:41 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "Mesh.h" -#include "Utils.h" -#include "Context.h" -#include "Interpolation.h" - -extern Mesh *THEM; -extern Context_T CTX; -extern int CurrentNodeNumber; - -Curve *THEC; - -// ipar[0] = nbpoints -// abs(ipar[1]) = method -// sign(ipar[1]) = orientation -// dpar[0] = parameter - -double F_One (double t){ - Vertex der; - double d; - der = InterpolateCurve (THEC, t, 1); - d = sqrt (der.Pos.X * der.Pos.X + der.Pos.Y * der.Pos.Y + der.Pos.Z * der.Pos.Z); - return (d); -} - - -double F_Transfini (double t){ - Vertex der; - double d, a, b, val, ZePauwer; - - der = InterpolateCurve (THEC, t, 1); - d = sqrt (der.Pos.X * der.Pos.X + der.Pos.Y * der.Pos.Y + - der.Pos.Z * der.Pos.Z); - - if (THEC->dpar[0] == 0.0 || THEC->dpar[0] == 1.0){ - val = d * (double) THEC->ipar[0] / THEC->l ; - } - else{ - switch (abs (THEC->ipar[1])){ - - case 1: // progression - if (sign (THEC->ipar[1]) == -1) - ZePauwer = 1. / THEC->dpar[0]; - else - ZePauwer = THEC->dpar[0]; - b = log (1. / ZePauwer) / THEC->l; - a = (1. - exp (-b * THEC->l)) / (b * (double) THEC->ipar[0]); - val = d / (a * exp (b * (t * THEC->l))) ; - break ; - - case 2: //bump - if (THEC->dpar[0] > 1.0){ - a = -4. * sqrt (THEC->dpar[0] - 1.) * - atan2 (1., sqrt (THEC->dpar[0] - 1.)) / - ((double) THEC->ipar[0] * THEC->l); - } - else{ - a = 2. * sqrt (1. - THEC->dpar[0]) * - log (fabs ((1. + 1. / sqrt (1. - THEC->dpar[0])) - / (1. - 1. / sqrt (1. - THEC->dpar[0])))) - / ((double) THEC->ipar[0] * THEC->l); - } - b = -a * THEC->l * THEC->l / (4. * (THEC->dpar[0] - 1.)) ; - val = d / (-a * DSQR (t * THEC->l - (THEC->l) * 0.5) + b) ; - break ; - - default: - Msg(WARNING, "Unknown case in Transfinite Line mesh"); - val = 1. ; - } - } - - return val ; -} - -double F_Lc (double t){ - Vertex der, point; - double Lc, d; - - if (CTX.mesh.algo == DELAUNAY_OLDALGO && THEM->BGM.Typ == ONFILE){ - der = InterpolateCurve(THEC, t, 1); - point = InterpolateCurve(THEC, t, 0); - Lc = Lc_XYZ(point.Pos.X, point.Pos.Y, point.Pos.Z, THEM); - d = sqrt(DSQR(der.Pos.X)+DSQR(der.Pos.Y)+DSQR(der.Pos.Z)); - if(!Lc){ - Msg(GERROR, "Null characteristic length in background mesh"); - return d; - } - if(CTX.mesh.constrained_bgmesh) - return MAX(d/Lc,THEM->Metric->getLc(t, THEC)); - else - return d/Lc; - } - else - return THEM->Metric->getLc(t, THEC); -} - -void Maillage_Curve (void *data, void *dummy){ - Curve **pc, *c; - Simplex *s; - double b, a, d, dt, dp, t; - int i, N, count, NUMP; - Vertex **v, **vexist, *pV, V, *v1, *v2; - List_T *Points; - IntPoint P1, P2; - - pc = (Curve **) data; - c = *pc; - THEC = c; - - if (c->Num < 0) - return; - - if(c->Dirty){ - Msg(INFO, "Not meshing dirty Curve %d", c->Num); - return; - } - - Msg(STATUS3, "Meshing Curve %d", c->Num); - - Points = List_Create (10, 10, sizeof (IntPoint)); - c->l = Integration (c->ubeg, c->uend, F_One, Points, 1.e-4); - List_Delete (Points); - - if (c->Method == TRANSFINI || !Extrude_Mesh (c)){ - if (c->Method == TRANSFINI){ - Points = List_Create (10, 10, sizeof (IntPoint)); - a = Integration (c->ubeg, c->uend, F_Transfini, Points, 1.e-7); - N = c->ipar[0]; - } - else{ - Points = List_Create (10, 10, sizeof (IntPoint)); - a = Integration (c->ubeg, c->uend, F_Lc, Points, 1.e-4); - N = IMAX (2, (int) (a + 1.)); - - if (c->Typ == MSH_SEGM_CIRC || - c->Typ == MSH_SEGM_CIRC_INV || - c->Typ == MSH_SEGM_ELLI || - c->Typ == MSH_SEGM_ELLI_INV){ - N = IMAX (N, (int) (fabs (c->Circle.t1 - c->Circle.t2) * - (double)CTX.mesh.min_circ_points / Pi)); - } - else if (c->Typ == MSH_SEGM_NURBS){ - N = IMAX (N, 2); - } - } - b = a / (double) (N - 1); - c->Vertices = List_Create (N, 2, sizeof (Vertex *)); - - v = &c->beg; - if ((vexist = (Vertex **) Tree_PQuery (THEM->Vertices, v))){ - (*vexist)->u = c->ubeg; - Tree_Insert (THEM->Vertices, vexist); - if ((*vexist)->ListCurves) - List_Add ((*vexist)->ListCurves, &c); - List_Add (c->Vertices, vexist); - } - else{ - pV = Create_Vertex ((*v)->Num, (*v)->Pos.X, (*v)->Pos.Y, - (*v)->Pos.Z, (*v)->lc, c->ubeg); - pV->ListCurves = List_Create (1, 1, sizeof (Curve *)); - List_Add (pV->ListCurves, &c); - Tree_Insert (THEM->Vertices, &pV); - List_Add (c->Vertices, &pV); - } - - count = NUMP = 1; - while (NUMP < N - 1){ - List_Read (Points, count - 1, &P1); - List_Read (Points, count, &P2); - d = (double) NUMP *b; - - if ((fabs (P2.p) >= fabs (d)) && (fabs (P1.p) < fabs (d))){ - dt = P2.t - P1.t; - dp = P2.p - P1.p; - t = P1.t + dt / dp * (d - P1.p); - V = InterpolateCurve (c, t, 0); - pV = Create_Vertex (++CurrentNodeNumber, - V.Pos.X, V.Pos.Y, V.Pos.Z, V.lc, t); - pV->w = V.w; - pV->ListCurves = List_Create (1, 1, sizeof (Curve *)); - List_Add (pV->ListCurves, &c); - Tree_Insert (THEM->Vertices, &pV); - List_Add (c->Vertices, &pV); - NUMP++; - } - else{ - count++; - } - } - - List_Delete(Points); - - v = &c->end; - if ((vexist = (Vertex **) Tree_PQuery (THEM->Vertices, v))){ - (*vexist)->u = c->uend; - Tree_Insert (THEM->Vertices, vexist); - if ((*vexist)->ListCurves) - List_Add ((*vexist)->ListCurves, &c); - List_Add (c->Vertices, vexist); - } - else{ - pV = Create_Vertex ((*v)->Num, (*v)->Pos.X, (*v)->Pos.Y, - (*v)->Pos.Z, (*v)->lc, c->uend); - pV->ListCurves = List_Create (1, 1, sizeof (Curve *)); - List_Add (pV->ListCurves, &c); - Tree_Insert (THEM->Vertices, &pV); - List_Add (c->Vertices, &pV); - } - } - - for (i = 0; i < List_Nbr (c->Vertices) - 1; i++){ - List_Read (c->Vertices, i, &v1); - List_Read (c->Vertices, i + 1, &v2); - s = Create_Simplex (v1, v2, NULL, NULL); - s->iEnt = c->Num; - Tree_Add (c->Simplexes, &s); - List_Add (c->TrsfSimplexes, &s); - } - - if (CTX.mesh.degree == 2) - Degre2 (THEM->Vertices, THEM->VertexEdges, c->Simplexes, c, NULL); - - THEM->Statistics[4] += List_Nbr (c->Vertices); - -#if 0 - if(fabs(c->Num) != 41) return; - printf("curve %d : ", c->Num); - for (i = 0; i < List_Nbr (c->Vertices); i++){ - List_Read (c->Vertices, i, &v1); - printf(" %d (%g %g %g)", v1->Num, v1->Pos.X, v1->Pos.Y, v1->Pos.Z); - } - printf("\n"); -#endif -} diff --git a/Mesh/2D_BGMesh.cpp b/Mesh/2D_BGMesh.cpp deleted file mode 100644 index 8113d3d6e657cfe0a608914bad34fe9b6847c283..0000000000000000000000000000000000000000 --- a/Mesh/2D_BGMesh.cpp +++ /dev/null @@ -1,77 +0,0 @@ -// $Id: 2D_BGMesh.cpp,v 1.8 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Mesh.h" -#include "2D_Mesh.h" - -extern Mesh *THEM; - -/* Calcul de la longueur caracteristique en un point par - interpolation dans le background mesh */ - -double find_quality (MPoint center, DocRecord * BGMESH){ - - int i; - Delaunay *del; - PointRecord *pPointArray; - PointNumero a, b, c; - double qual, q1, q2, q3, X[3], Y[3], u, v, det, Xp, Yp; - double Exp = 2., r, deno, nume; - - if ((del = Find_Triangle (center, BGMESH, BOF)) == NULL){ - Msg(GERROR, "Exterior point (%g,%g)", center.v, center.h); - return 1.e-15; - } - - pPointArray = BGMESH->points; - - a = del->t.a; - b = del->t.b; - c = del->t.c; - - Xp = center.h; - Yp = center.v; - - X[0] = pPointArray[a].where.h; - X[1] = pPointArray[b].where.h; - X[2] = pPointArray[c].where.h; - - Y[0] = pPointArray[a].where.v; - Y[1] = pPointArray[b].where.v; - Y[2] = pPointArray[c].where.v; - - q1 = pPointArray[a].quality; - q2 = pPointArray[b].quality; - q3 = pPointArray[c].quality; - - det = (X[2] - X[0]) * (Y[1] - Y[0]) - (Y[2] - Y[0]) * (X[1] - X[0]); - - if (det != 0.0){ - u = ((Xp - X[0]) * (Y[1] - Y[0]) - (Yp - Y[0]) * (X[1] - X[0])) / det; - v = ((X[2] - X[0]) * (Yp - Y[0]) - (Y[2] - Y[0]) * (Xp - X[0])) / det; - } - else{ - Msg(WARNING, "Degenerated triangle (det=%g)", det); - u = v = 0.0; - } - - if (u >= -1.e-8 && v >= -1.e-8 && 1. - u - v >= -1.e-8){ - qual = q1 * (1. - u - v) + q2 * v + q3 * u; - return (qual); - } - else{ - pPointArray = BGMESH->points; - deno = nume = 0.0; - for (i = 0; i < BGMESH->numPoints; i++){ - r = sqrt (DSQR (center.h - pPointArray[i].where.h) + - DSQR (center.v - pPointArray[i].where.v)); - r = pow (r, Exp); - if (r < 1.e-10) - return (pPointArray[i].quality); - nume += pPointArray[i].quality / r; - deno += 1. / r; - } - return (nume / deno); - } -} diff --git a/Mesh/2D_Bowyer.cpp b/Mesh/2D_Bowyer.cpp deleted file mode 100644 index d0c7fbcfad2a869c7ed3e7cf988343b7f76dd24f..0000000000000000000000000000000000000000 --- a/Mesh/2D_Bowyer.cpp +++ /dev/null @@ -1,184 +0,0 @@ -// $Id: 2D_Bowyer.cpp,v 1.8 2001-08-11 23:28:32 geuzaine Exp $ - -/* - - A L G O R I T H M E D E B O W Y E R - W A T S O N - - definition : il est possible d'obtenir une triangulation de Delaunay en partant - d'une triangulation existante en lui ajoutant un noeud de la facon suivante : - - - on elimine les triangles de la premiere triangulation dont le cercle - circonscrit contient le nouveau point - - on reconstuit une triangulation en joignant le point aux noeuds du polygone - defini par les triangles effaces - - ListEdges = liste liee circulaire et triee contenant les points du polygone - listkill = liste des pointeurs des triangles a effacer - listDelforLink = liste des triangles a la peripherie du polygone - PE_Del_Triangle = Peut-Etre va-t-on effacer le triangle del, si on l'efface alors - on appelle recursivement 3 fois PE_Del_Triangle avec ses trois voisins (si il en a) - comme argument - -*/ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Mesh.h" -#include "2D_Mesh.h" - -extern PointRecord *gPointArray; - -int Is_pt_in_CircCircle (Delaunay * del, MPoint pt){ - - double rc, dc, Xa, Ya; - PointNumero a; - - dc = DSQR (del->t.xc - pt.h) + DSQR (del->t.yc - pt.v); - - a = del->t.a; - - Xa = gPointArray[a].where.h; - Ya = gPointArray[a].where.v; - - rc = DSQR (del->t.xc - Xa) + DSQR (del->t.yc - Ya); - - if (rc >= dc) - return 1; - return 0; - -} - -int PE_Del_Triangle (Delaunay *del , MPoint pt, DListPeek *ListEdges , - List_T *listkill, List_T *listDelforlink, - int *numlink, int *numdel){ - int rslt; - PointNumero a,b,c; - int count,order[3],same; - DListPeek p; - Delaunay *de1,*de2,*de3; - - rslt = Is_pt_in_CircCircle ( del , pt ); - - if ( (!rslt) && (*numdel == 0)) { - return(0); - } - if (!rslt) { - - /* On retient les triangles du pourtour */ - - del->t.info = NOTTOLINK; - List_Put(listDelforlink, *numlink, &del); - (*numlink)++; - - return(1); - - } - else { - - List_Put(listkill, *numdel, &del); - (*numdel)++; - - a = del->t.a; - b = del->t.b; - c = del->t.c; - - if ( *ListEdges == NULL ) { - - rslt = DListInsert(ListEdges,pt,a); - rslt &= DListInsert(ListEdges,pt,b); - rslt &= DListInsert(ListEdges,pt,c); - if(!rslt) - Msg(GERROR, "List insert failed in Boyer Watson"); - - } - else { - - count = 0; - p = *ListEdges; - order[0] = order[1] = order[2] = 0; - same = 0; - - do { - if (p->point_num == a ) { - same = same + 1; - order[count]=a; - count++ ; - } - if (p->point_num == b ) { - same = same + 10; - order[count]=b; - count++ ; - } - if (p->point_num == c ) { - same = same + 100; - order[count]=c; - count++ ; - } - p = Pred(p); - }while ( p != *ListEdges ); - if (count == 1) { - return(0); - } - else if (count == 2) { - if (same == 11 ) { - rslt = DListInsert(ListEdges,pt,c); - } - if (same == 101 ) { - rslt = DListInsert(ListEdges,pt,b); - } - if (same == 110 ) { - rslt = DListInsert(ListEdges,pt,a); - } - } - else if (count == 3) { - rslt = DListDelete(ListEdges,order[1]); - } - else { - return(0); - } - } - - de1 = del->v.voisin1; - de2 = del->v.voisin2; - de3 = del->v.voisin3; - - - if(de1 != NULL){ - if (de1->v.voisin1 == del )de1->v.voisin1 = NULL; - else if (de1->v.voisin2 == del )de1->v.voisin2 = NULL; - else if (de1->v.voisin3 == del )de1->v.voisin3 = NULL; - else - Msg(GERROR, "Bad link in Boyer Watson"); - } - if(de2 != NULL){ - if (de2->v.voisin1 == del )de2->v.voisin1 = NULL; - else if (de2->v.voisin2 == del )de2->v.voisin2 = NULL; - else if (de2->v.voisin3 == del )de2->v.voisin3 = NULL; - else - Msg(GERROR, "Bad link in Boyer Watson"); - } - if(de3 != NULL){ - if (de3->v.voisin1 == del )de3->v.voisin1 = NULL; - else if (de3->v.voisin2 == del )de3->v.voisin2 = NULL; - else if (de3->v.voisin3 == del )de3->v.voisin3 = NULL; - else - Msg(GERROR, "Bad link in Boyer Watson"); - } - - del->v.voisin1 = NULL ; - del->v.voisin2 = NULL ; - del->v.voisin3 = NULL ; - - - if ( de1 != NULL ){ - if(!PE_Del_Triangle ( de1,pt,ListEdges,listkill,listDelforlink, numlink, numdel))return(0); - } - if ( de2 != NULL ){ - if(!PE_Del_Triangle ( de2,pt,ListEdges,listkill,listDelforlink, numlink, numdel))return(0); - } - if ( de3 != NULL ){ - if(!PE_Del_Triangle ( de3,pt,ListEdges,listkill,listDelforlink, numlink, numdel))return(0); - } - return(1); - } -} diff --git a/Mesh/2D_Bricks.cpp b/Mesh/2D_Bricks.cpp deleted file mode 100644 index 58ccb628765332d7888144142de9f5bfdf586ad0..0000000000000000000000000000000000000000 --- a/Mesh/2D_Bricks.cpp +++ /dev/null @@ -1,330 +0,0 @@ -// $Id: 2D_Bricks.cpp,v 1.5 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Mesh.h" -#include "2D_Mesh.h" - -static double XmaxGrid,YmaxGrid,XminGrid,YminGrid,ZmaxGrid,ZminGrid; -static double XminBox,XmaxBox,YminBox,YmaxBox,ZminBox,ZmaxBox; -static int Nx=0,Ny=0,Nz=0; -static List_T *GridList; -static DocRecord *MyMesh; - -extern PointRecord *gPointArray; - -int fcmp_Map(const void * a, const void * b) { - return ((struct Map *)a)->Num - ((struct Map *)b)->Num ; -} - -void Invert_MappingLists (List_T * List1, List_T * List2) { - - struct Map TmpMap1, TmpMap2 ; - struct Map * TmpMap; - List_T * TmpList; - - int i, j, Entity, CurrentEntity; - - TmpList = List_Create(10*List_Nbr(List1), 100, sizeof(int)); - - for(i=0 ; i<List_Nbr(List1) ; i++){ - List_Read(List1, i, &TmpMap1); - for(j=0 ; j<List_Nbr(TmpMap1.List) ; j++){ - List_Read(TmpMap1.List, j, &Entity); - List_Add(TmpList, &Entity); - } - } - - List_Sort(TmpList, fcmp_int); - - List_Read(TmpList, 0, &CurrentEntity); - TmpMap1.Num = CurrentEntity; - TmpMap1.List = List_Create(10, 10, sizeof(int)); - List_Add(List2, &TmpMap1); - for(i=1 ; i<List_Nbr(TmpList) ; i++){ - List_Read(TmpList, i, &Entity); - if (Entity != CurrentEntity) { - CurrentEntity = Entity; - TmpMap1.Num = CurrentEntity; - TmpMap1.List = List_Create(10, 10, sizeof(int)); - List_Add(List2, &TmpMap1); - } - } - - for(i=0 ; i<List_Nbr(List1) ; i++){ - List_Read(List1, i, &TmpMap1); - for(j=0 ; j<List_Nbr(TmpMap1.List) ; j++){ - List_Read(TmpMap1.List, j, &Entity); - TmpMap2.Num = Entity; - if ((TmpMap = (struct Map*)List_PQuery(List2, &TmpMap2, fcmp_Map)) != NULL) { - List_Add(TmpMap->List, &TmpMap1.Num); - } - } - } - - List_Delete(TmpList); - -} - -int InWhichBrick (double X, double Y, double Z) { - - int Ix,Iy,Iz; - - if(X > XmaxGrid || X < XminGrid || Y > YmaxGrid || - Y < YminGrid || Z > ZmaxGrid || Z < ZminGrid) - return(-1); - - Ix = (int) ((double)Nx * (X-XminGrid) / (XmaxGrid-XminGrid)); - Iy = (int) ((double)Ny * (Y-YminGrid) / (YmaxGrid-YminGrid)); - Iz = (int) ((double)Nz * (Z-ZminGrid) / (ZmaxGrid-ZminGrid)); - Ix = (Ix< Nx)? Ix : Nx-1; - Iy = (Iy< Ny)? Iy : Ny-1; - Iz = (Iz< Nz)? Iz : Nz-1; - return(1 + Ix + Iy*Nx + Iz*Nx*Ny); -} - -List_T *AllBricksForABox (void){ - - List_T *List; - int Ix1,Ix2,Iy1,Iy2,Iz1,Iz2; - int i,j,k,Num; - - Ix1 = (int) ( (double)Nx * (XminBox-XminGrid) / (XmaxGrid-XminGrid)); - Ix2 = (int) ( (double)Nx * (XmaxBox-XminGrid) / (XmaxGrid-XminGrid)); - Iy1 = (int) ( (double)Ny * (YminBox-YminGrid) / (YmaxGrid-YminGrid)); - Iy2 = (int) ( (double)Ny * (YmaxBox-YminGrid) / (YmaxGrid-YminGrid)); - Iz1 = (int) ( (double)Nz * (ZminBox-ZminGrid) / (ZmaxGrid-ZminGrid)); - Iz2 = (int) ( (double)Nz * (ZmaxBox-ZminGrid) / (ZmaxGrid-ZminGrid)); - Ix1 = (Ix1<Nx)? Ix1 : Nx-1; - Ix2 = (Ix2<Nx)? Ix2 : Nx-1; - Iy1 = (Iy1<Ny)? Iy1 : Ny-1; - Iy2 = (Iy2<Ny)? Iy2 : Ny-1; - Iz1 = (Iz1<Nz)? Iz1 : Nz-1; - Iz2 = (Iz2<Nz)? Iz2 : Nz-1; - - List = List_Create((Ix2-Ix1+1)*(Iy2-Iy1+1)*(Iz2-Iz1+1), 1, sizeof(int)); - - for(i=Ix1;i<=Ix2;i++){ - for(j=Iy1;j<=Iy2;j++){ - for(k=Iz1;k<=Iz2;k++){ - Num = 1 + i + j*Nx + k*Nx*Ny ; - List_Add(List, &Num); - } - } - } - return(List); -} - -void InitBricks (DocRecord *MESH) { - - int i,j,a,b,c; - List_T *InvList; - struct Map InvMap; - double X[3],Y[3],dx,dy; - - MyMesh = MESH; - - Nx = (int)sqrt((double)MESH->numTriangles) + 1; - Ny = Nx; - Nz=1; - ZminGrid=0.; - ZmaxGrid=1.; - - GridList = List_Create(Nx*Ny*Nz, 1, sizeof(struct Map)); - InvList = List_Create(MESH->numTriangles, 1, sizeof(struct Map)); - - for(i=0;i<MESH->numTriangles;i++){ - a = MESH->delaunay[i].t.a; - b = MESH->delaunay[i].t.b; - c = MESH->delaunay[i].t.c; - - X[0] = MESH->points[a].where.h; - X[1] = MESH->points[b].where.h; - X[2] = MESH->points[c].where.h; - Y[0] = MESH->points[a].where.v; - Y[1] = MESH->points[b].where.v; - Y[2] = MESH->points[c].where.v; - - if(!i){ - XminGrid = XmaxGrid = X[0]; - YminGrid = YmaxGrid = Y[0]; - } - - for(j=0;j<3;j++){ - XmaxGrid = DMAX (XmaxGrid,X[j]); - XminGrid = DMIN (XminGrid,X[j]); - YmaxGrid = DMAX (YmaxGrid,Y[j]); - YminGrid = DMIN (YminGrid,Y[j]); - } - } - dx = XmaxGrid - XminGrid; - dy = YmaxGrid - YminGrid; - XmaxGrid += 0.01 * dx; - YmaxGrid += 0.01 * dy; - XminGrid -= 0.01 * dx; - YminGrid -= 0.01 * dy; - - for(i=0;i<MESH->numTriangles;i++){ - a = MESH->delaunay[i].t.a; - b = MESH->delaunay[i].t.b; - c = MESH->delaunay[i].t.c; - - X[0] = XminBox = XmaxBox = MESH->points[a].where.h; - X[1] = MESH->points[b].where.h; - X[2] = MESH->points[c].where.h; - Y[0] = YminBox = YmaxBox = MESH->points[a].where.v; - Y[1] = MESH->points[b].where.v; - Y[2] = MESH->points[c].where.v; - - for(j=1;j<3;j++){ - XmaxBox = DMAX ( XmaxBox ,X[j] ); - XminBox = DMIN ( XminBox ,X[j] ); - YmaxBox = DMAX ( YmaxBox ,Y[j] ); - YminBox = DMIN ( YminBox ,Y[j] ); - } - ZmaxBox = 1.0; - ZminBox = 0.0; - - InvMap.Num = i; - InvMap.List = AllBricksForABox(); - List_Add(InvList, &InvMap); - } - - Invert_MappingLists(InvList, GridList); - List_Delete(InvList); -} - - -Delaunay * Find_Triangle (MPoint pt, DocRecord *MESH, int typ) { - - int a,b,c,i,found,KeyBrick,j; - Delaunay *del,*del2; - double Z,Znew; - PointRecord *ptr; - double Xcg,Ycg; - struct Map *pBrick; - - ptr = gPointArray; - gPointArray = MESH->points; - - if(MyMesh == MESH){ - KeyBrick = InWhichBrick(pt.h,pt.v,0.0); - if((pBrick = (struct Map *)List_PQuery(GridList, &KeyBrick, fcmp_Map)) == NULL){ - if(typ == A_TOUT_PRIX){ - gPointArray = ptr; - return(NULL); - } - } - else{ - for(i=0;i<List_Nbr(pBrick->List);i++){ - j = *(int *)List_Pointer(pBrick->List,i); - a = MESH->delaunay[j].t.a; - b = MESH->delaunay[j].t.b; - c = MESH->delaunay[j].t.c; - if(MESH->delaunay[j].t.position != EXTERN || typ == BOF){ - if(PtInTriangle(pt,a,b,c)){ - gPointArray = ptr; - return(&MESH->delaunay[j]); - } - } - } - if(typ == A_TOUT_PRIX) { - gPointArray = ptr; - return NULL; - } - } - } - else { - i=0; - found = 0; - while (!found && i<MESH->numTriangles) { - if( (!PtInTriangle(pt,MESH->delaunay[i].t.a,MESH->delaunay[i].t.b, - MESH->delaunay[i].t.c)) || - (MESH->delaunay[i].t.position == EXTERN && typ != BOF ))i++; - else - found = 1; - }; - - if(found == 1){ - gPointArray = ptr; - return(&(MESH->delaunay[i])); - } - if(typ == A_TOUT_PRIX){ - gPointArray = ptr; - return NULL; - } - } - - del = &(MESH->delaunay[0]); - - Xcg = gPointArray[del->t.a].where.h + - gPointArray[del->t.b].where.h + - gPointArray[del->t.c].where.h; - - Ycg = gPointArray[del->t.a].where.v + - gPointArray[del->t.b].where.v + - gPointArray[del->t.c].where.v; - - Xcg/=3.; - Ycg/=3.; - - Z = DSQR(Xcg-pt.h) + DSQR(Ycg-pt.v); - - for (i=1;i<MESH->numTriangles;i++){ - del2 = &(MESH->delaunay[i]); - Xcg = gPointArray[del2->t.a].where.h + - gPointArray[del2->t.b].where.h + - gPointArray[del2->t.c].where.h; - Ycg = gPointArray[del2->t.a].where.v + - gPointArray[del2->t.b].where.v + - gPointArray[del2->t.c].where.v; - Xcg /= 3. ; - Ycg /= 3.; - Znew = DSQR(Xcg-pt.h) + DSQR(Ycg-pt.v); - if (Znew<Z){ - del = del2; - Z = Znew; - } - } - - gPointArray = ptr; - return del; -} - -int PtInTriangle(MPoint p , PointNumero a , PointNumero b , PointNumero c){ - double Xmin , Xmax , Ymin, Ymax , Xtr[4],Ytr[4],A[2],B[2],X,Y,Signus[3]; - int i; - - X = p.h; - Y = p.v; - Xtr[0] = Xmax = Xmin = gPointArray[a].where.h; - Xtr[3] = gPointArray[a].where.h; - Xtr[1] = gPointArray[b].where.h; - Xtr[2] = gPointArray[c].where.h; - Ytr[0] = Ymax = Ymin = gPointArray[a].where.v; - Ytr[3] = gPointArray[a].where.v; - Ytr[1] = gPointArray[b].where.v; - Ytr[2] = gPointArray[c].where.v; - - for(i=1;i<3;i++){ - Xmin = (Xtr[i]<Xmin)?Xtr[i]:Xmin; - Xmax = (Xtr[i]>Xmax)?Xtr[i]:Xmax; - Ymin = (Ytr[i]<Ymin)?Ytr[i]:Ymin; - Ymax = (Ytr[i]>Ymax)?Ytr[i]:Ymax; - } - - if(X>Xmax || X<Xmin || Y>Ymax || Y<Ymin) return(0); - - for (i=0;i<3;i++){ - A[0] = Xtr[i+1] - Xtr[i]; - A[1] = Ytr[i+1] - Ytr[i]; - B[0] = X - Xtr[i]; - B[1] = Y - Ytr[i]; - Signus[i] = A[0] * B[1] - A[1] * B[0]; - } - for (i=0;i<2;i++){ - if(( Signus[i] * Signus[i+1] ) <= 0 ) return(0); - } - return(1); -} - diff --git a/Mesh/2D_Cylindrical.cpp b/Mesh/2D_Cylindrical.cpp deleted file mode 100644 index 3b3e8e89aed77cc3964311ac5365bbb7640f7765..0000000000000000000000000000000000000000 --- a/Mesh/2D_Cylindrical.cpp +++ /dev/null @@ -1,290 +0,0 @@ -// $Id: 2D_Cylindrical.cpp,v 1.7 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Mesh.h" -#include "Context.h" - -extern Mesh *THEM; -extern Context_T CTX; - -static Surface *SURF; -double TETAMIN, TETAMAX, TETAFABSMIN; - -void ChangePi (void *a, void *dum){ - Vertex *v; - v = *(Vertex **) a; - - if ((v->Pos.X / SURF->Cyl.radius1) >= TETAMIN + .99999 * Pi){ - Msg(INFO, "%g -> ", v->Pos.X / SURF->Cyl.radius1); - v->Pos.X -= (2. * Pi) * SURF->Cyl.radius1; - Msg(INFO, "%g -> ", v->Pos.X / SURF->Cyl.radius1); - } -} - -void TETAMINMAX (void *a, void *dum){ - Vertex *v; - double ZRepere, S, C, y[3], teta; - double p[3], z[3], x[3], o[3]; - - v = *(Vertex **) a; - - p[0] = v->Pos.X - SURF->Cyl.center[0]; - p[1] = v->Pos.Y - SURF->Cyl.center[1]; - p[2] = v->Pos.Z - SURF->Cyl.center[2]; - z[0] = SURF->Cyl.zaxis[0]; - z[1] = SURF->Cyl.zaxis[1]; - z[2] = SURF->Cyl.zaxis[2]; - norme (z); - prosca (p, z, &ZRepere); - - //ZRepere = fabs(ZRepere); - - o[0] = p[0] - ZRepere * z[0]; - o[1] = p[1] - ZRepere * z[1]; - o[2] = p[2] - ZRepere * z[2]; - x[0] = SURF->Cyl.xaxis[0]; - x[1] = SURF->Cyl.xaxis[1]; - x[2] = SURF->Cyl.xaxis[2]; - - norme (o); - norme (x); - prodve (z, x, y); - norme (y); - prosca (o, x, &C); - prosca (o, y, &S); - teta = atan2 (S, C); - TETAMIN = DMIN (teta, TETAMIN); - TETAMAX = DMAX (teta, TETAMAX); -} - -/* SURFACES CYLINDRIQUES */ -void XYZtoTZ (void *a, void *dum){ - Vertex *v; - double ZRepere, S, C, y[3], teta; - double p[3], z[3], x[3], o[3]; - - v = *(Vertex **) a; - - p[0] = v->Pos.X - SURF->Cyl.center[0]; - p[1] = v->Pos.Y - SURF->Cyl.center[1]; - p[2] = v->Pos.Z - SURF->Cyl.center[2]; - z[0] = SURF->Cyl.zaxis[0]; - z[1] = SURF->Cyl.zaxis[1]; - z[2] = SURF->Cyl.zaxis[2]; - norme (z); - prosca (p, z, &ZRepere); - - //ZRepere = fabs(ZRepere); - - o[0] = p[0] - ZRepere * z[0]; - o[1] = p[1] - ZRepere * z[1]; - o[2] = p[2] - ZRepere * z[2]; - x[0] = SURF->Cyl.xaxis[0]; - x[1] = SURF->Cyl.xaxis[1]; - x[2] = SURF->Cyl.xaxis[2]; - - norme (o); - norme (x); - prodve (z, x, y); - norme (y); - prosca (o, x, &C); - prosca (o, y, &S); - teta = atan2 (S, C); - Msg(DEBUG, "pt %d %g %g", v->Num, ZRepere, teta); - - v->Pos.X = teta * SURF->Cyl.radius1; - v->Pos.Y = ZRepere; - v->Pos.Z = 0.0; -} - -void TZtoXYZ (void *a, void *dum){ - Vertex *v; - double d[3], x[3], prv[3]; - double XX, YY, ZZ; - - v = *(Vertex **) a; - d[0] = SURF->Cyl.zaxis[0]; - d[1] = SURF->Cyl.zaxis[1]; - d[2] = SURF->Cyl.zaxis[2]; - norme (d); - x[0] = SURF->Cyl.xaxis[0]; - x[1] = SURF->Cyl.xaxis[1]; - x[2] = SURF->Cyl.xaxis[2]; - norme (x); - prodve (d, x, prv); - norme (prv); - - XX = SURF->Cyl.center[0] + v->Pos.Y * d[0] + - SURF->Cyl.radius1 * cos (v->Pos.X / SURF->Cyl.radius1) * x[0] + - SURF->Cyl.radius1 * (sin (v->Pos.X / SURF->Cyl.radius1)) * prv[0]; - YY = SURF->Cyl.center[1] + v->Pos.Y * d[1] + - SURF->Cyl.radius1 * cos (v->Pos.X / SURF->Cyl.radius1) * x[1] + - SURF->Cyl.radius1 * (sin (v->Pos.X / SURF->Cyl.radius1)) * prv[1]; - ZZ = SURF->Cyl.center[2] + v->Pos.Y * d[2] + - SURF->Cyl.radius1 * cos (v->Pos.X / SURF->Cyl.radius1) * x[2] + - SURF->Cyl.radius1 * (sin (v->Pos.X / SURF->Cyl.radius1)) * prv[2]; - - v->Pos.X = XX; - v->Pos.Y = YY; - v->Pos.Z = ZZ; -} - -/* SURFACES CONIQUES */ -void XYZtoCone (void *a, void *dum){ - Vertex *v; - double ZRepere, S, C, y[3], teta; - double p[3], z[3], x[3], o[3]; - double inclinaison, ract; - - v = *(Vertex **) a; - - p[0] = v->Pos.X - SURF->Cyl.center[0]; - p[1] = v->Pos.Y - SURF->Cyl.center[1]; - p[2] = v->Pos.Z - SURF->Cyl.center[2]; - z[0] = SURF->Cyl.zaxis[0]; - z[1] = SURF->Cyl.zaxis[1]; - z[2] = SURF->Cyl.zaxis[2]; - norme (z); - prosca (p, z, &ZRepere); - - //ZRepere = fabs(ZRepere); - - o[0] = p[0] - ZRepere * z[0]; - o[1] = p[1] - ZRepere * z[1]; - o[2] = p[2] - ZRepere * z[2]; - x[0] = SURF->Cyl.xaxis[0]; - x[1] = SURF->Cyl.xaxis[1]; - x[2] = SURF->Cyl.xaxis[2]; - - norme (o); - norme (x); - prodve (z, x, y); - norme (y); - prosca (o, x, &C); - prosca (o, y, &S); - teta = atan2 (S, C); - if (teta >= TETAMIN + .99999 * Pi) - teta -= (2. * Pi); - - inclinaison = Pi * SURF->Cyl.radius2 / 180.; - - ract = SURF->Cyl.radius1 - ZRepere * tan (inclinaison); - - v->Pos.X = ract * cos (teta); - v->Pos.Y = ract * sin (teta); - v->Pos.Z = 0.0; - Msg (DEBUG, "%g %g", ZRepere, v->Pos.X); -} - -void ConetoXYZ (void *a, void *dum){ - Vertex *v; - double d[3], z, x[3], prv[3]; - double XX, YY, ZZ; - double inclinaison, teta, radiusact; - - v = *(Vertex **) a; - d[0] = SURF->Cyl.zaxis[0]; - d[1] = SURF->Cyl.zaxis[1]; - d[2] = SURF->Cyl.zaxis[2]; - norme (d); - x[0] = SURF->Cyl.xaxis[0]; - x[1] = SURF->Cyl.xaxis[1]; - x[2] = SURF->Cyl.xaxis[2]; - norme (x); - prodve (d, x, prv); - norme (prv); - inclinaison = Pi * SURF->Cyl.radius2 / 180.; - z = (SURF->Cyl.radius1 - myhypot (v->Pos.X, v->Pos.Y)) / tan (inclinaison); - radiusact = (SURF->Cyl.radius1 + z * tan (inclinaison)); - teta = atan2 (v->Pos.Y, v->Pos.X); - - XX = SURF->Cyl.center[0] + z * d[0] + - radiusact * cos (teta) * x[0] + - radiusact * (sin (teta)) * prv[0]; - YY = SURF->Cyl.center[1] + z * d[1] + - radiusact * cos (teta) * x[1] + - radiusact * (sin (teta)) * prv[1]; - ZZ = SURF->Cyl.center[2] + z * d[2] + - radiusact * cos (teta) * x[2] + - radiusact * (sin (teta)) * prv[2]; - - v->Pos.X = XX; - v->Pos.Y = YY; - v->Pos.Z = ZZ; - -} - -int MeshCylindricalSurface (Surface * s){ - - return 0; - -#if 0 - - int i, j, ori; - Curve *pC; - Vertex *v; - Tree_T *tnxe; - char text[256]; - extern double MAXIMUM_LC_FOR_SURFACE; - - if (s->Typ != MSH_SURF_CYLNDR && s->Typ != MSH_SURF_CONE - && s->Typ != MSH_SURF_TORUS) - return 0; - if (s->Typ == MSH_SURF_TORUS) - return 1; - - Msg (DEBUG, "z %d : %12.5E %12.5E %12.5E", s->Num, s->Cyl.zaxis[0], - s->Cyl.zaxis[1], s->Cyl.zaxis[2]); - Msg(DEBUG, "x %d : %12.5E %12.5E %12.5E", s->Num, s->Cyl.xaxis[0], - s->Cyl.xaxis[1], s->Cyl.xaxis[2]); - - SURF = s; - - for (i = 0; i < List_Nbr (s->Generatrices); i++){ - List_Read (s->Generatrices, i, &pC); - for (j = 0; j < List_Nbr (pC->Vertices); j++){ - List_Read (pC->Vertices, j, &v); - Tree_Insert (s->Vertices, List_Pointer (pC->Vertices, j)); - } - } - TETAMIN = 2. * Pi; - TETAMAX = -2. * Pi; - Tree_Action (s->Vertices, TETAMINMAX); - Tree_Action (s->Vertices, Freeze_Vertex); - - if (s->Typ == MSH_SURF_CYLNDR) - Tree_Action (s->Vertices, XYZtoTZ); - else if (s->Typ == MSH_SURF_CONE) - Tree_Action (s->Vertices, XYZtoCone); - - Msg(DEBUG, "%12.5E %12.5E", TETAMAX, TETAMIN); - - if ((s->Typ == MSH_SURF_CYLNDR) && (TETAMAX - TETAMIN > Pi * 1.01)) - Tree_Action (s->Vertices, ChangePi); - - ori = Calcule_Contours (s); - MAXIMUM_LC_FOR_SURFACE = SURF->Cyl.radius1 / 3.; - - if (CTX.mesh.algo == DELAUNAY_OLDALGO) - Maillage_Automatique_VieuxCode (s, THEM, ori); - else - AlgorithmeMaillage2DAnisotropeModeJF (s); - - for(i = 0 ; i < CTX.mesh.nb_smoothing ; i++){ - tnxe = Tree_Create (sizeof (NXE), compareNXE); - create_NXE (s->Vertices, s->Simplexes, tnxe); - Tree_Action (tnxe, ActionLiss); - Tree_Delete (tnxe); - } - - if (s->Typ == MSH_SURF_CYLNDR) - Tree_Action (s->Vertices, TZtoXYZ); - else if (s->Typ == MSH_SURF_CONE) - Tree_Action (s->Vertices, ConetoXYZ); - Tree_Action (s->Vertices, deFreeze_Vertex); - - return 1; - -#endif -} diff --git a/Mesh/2D_DivAndConq.cpp b/Mesh/2D_DivAndConq.cpp deleted file mode 100644 index 0e6c17f5f9f7b8ff5bf92ea6e7d01a9ee9a11b71..0000000000000000000000000000000000000000 --- a/Mesh/2D_DivAndConq.cpp +++ /dev/null @@ -1,517 +0,0 @@ -// $Id: 2D_DivAndConq.cpp,v 1.11 2001-08-11 23:28:32 geuzaine Exp $ - -/* - - A L G O R I T H M E D I V I D E A N D C O N Q U E R - - le noeud de cette methode est de pouvoir fusionner - deux triangulations de Delaunay en une seule (routine merge) - on procede alors recursivement en separant les points en deux - groupes puis en separant les groupes en 2 ... jusqu'a n'obtenir - que 1 2 ou 3 points (la triangulation est alors triviale) - - Dans le mailleur, on utilise cet algorithme pour construire - le maillage initial - - !!! il faut PERTURBER les points d'une faible valeur aleatoire - pour eviter d'avoir 3 points alignes ou 4 points cocycliques !!! - - doc : structure contenant la triangulation - -*/ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Mesh.h" -#include "2D_Mesh.h" - -extern double LC2D; - -PointRecord *pPointArray; -DocPeek gDocTemp; - -int Insert(PointNumero a,PointNumero b); -int Delete(PointNumero a,PointNumero b); - -void PushgPointArray(PointRecord *ptr){ - pPointArray = ptr; -} - -PointRecord *PopgPointArray(void){ - return(pPointArray) ; -} - -PointNumero Predecessor(PointNumero a, PointNumero b){ - DListPeek p; - - p = pPointArray[a].adjacent; - if (p == NULL) - return -1; - - do { - if (p->point_num == b) return (Pred(p)->point_num); - p = Pred(p); - } while (p != pPointArray[a].adjacent); - - return -1; - -} - - -PointNumero Successor(PointNumero a,PointNumero b){ - DListPeek p; - - p = pPointArray[a].adjacent; - if (p == NULL) - return -1; - - do { - if (p->point_num == b) return (Succ(p)->point_num); - p = Succ(p); - } while (p != pPointArray[a].adjacent); - - return -1; - -} - -int FixFirst(PointNumero x,PointNumero f){ - DListPeek p,copy; - int out = 0; - - p = pPointArray[x].adjacent; - if (p == NULL) - return(0); - copy = p; - do { - if (p->point_num == f){ - pPointArray[x].adjacent = p; - out = 1; - } - else - p = p->next; - } while ((p != copy) && !out); - return out; -} - -PointNumero First(PointNumero x){ - return (pPointArray[x].adjacent)->point_num; -} - -Segment LowerCommonTangent(DT vl,DT vr){ - PointNumero x,y,z,z1,z2,temp; - Segment s; - - x = vl.end; /* vu le tri, c'est le point le + a droite */ - y = vr.begin; /* idem, le + a gauche */ - z = First(y); - z1 = First(x); - z2 = Predecessor(x,z1); - for (;;) { - if (Is_right_of(x,y,z)){ - temp = z; - z = Successor(z,y); - y = temp; - } - else if (Is_right_of(x,y,z2)){ - temp = z2; - z2 = Predecessor(z2,x); - x = temp; - } - else { - s.from = x; - s.to = y; - return s; - } - } -} - - -Segment UpperCommonTangent(DT vl,DT vr){ - PointNumero x,y,z,z1,z2,temp; - Segment s; - - x = vl.end; /* vu le tri, c'est le point le + a droite */ - y = vr.begin; /* idem, le + a gauche */ - z = First(y); - z1 = First(x); - z2 = Predecessor(y,z); - for (;;){ - if (Is_left_of(x,y,z2)){ - temp = z2; - z2 = Predecessor(z2,y); - y = temp; - } - else if (Is_left_of(x,y,z1)){ - temp = z1; - z1 = Successor(z1,x); - x = temp; - } - else{ - s.from = x; - s.to = y; - return s; - } - } -} - - -/* return 1 if the point k is NOT in the circumcircle of - triangle hij */ - -int Qtest(PointNumero h,PointNumero i,PointNumero j,PointNumero k){ - double xc,yc,rcarre,distca; - - if ((h == i) && (h == j) && (h == k)){ - Msg(GERROR, "3 identical points in Qtest"); - return(0); /* returning 1 will cause looping for ever */ - } - if (CircumCircle( (double) pPointArray[h].where.h, - (double) pPointArray[h].where.v, - (double) pPointArray[i].where.h, - (double) pPointArray[i].where.v, - (double) pPointArray[j].where.h, - (double) pPointArray[j].where.v, - &xc, &yc )){ - rcarre = square(xc - (double) pPointArray[i].where.h) + - square(yc - (double) pPointArray[i].where.v); - - distca = square(xc - (double) pPointArray[k].where.h) + - square(yc - (double) pPointArray[k].where.v); - - return (distca > rcarre); - } - else - return(0); /* point not in circle, because no circle ! */ -} - -int merge(DT vl,DT vr){ - Segment bt,ut; - int a,b,out; - PointNumero r,r1,r2,l,l1,l2; - - bt = LowerCommonTangent(vl,vr); - ut = UpperCommonTangent(vl,vr); - l = bt.from; /* left endpoint of BT */ - r = bt.to; /* right endpoint of BT */ - - while ((l != ut.from) || (r != ut.to)) { - a = b = 0; - if (!Insert(l,r)) return(0); - - r1 = Predecessor(r,l); - if (r1 == -1) return(0); - if (Is_right_of(l,r,r1)) - a = 1; - else{ - out = 0; - while (!out){ - r2 = Predecessor(r,r1); - if (r2 == -1) return(0); - if (r2 < vr.begin) - out = 1; - else if (Qtest(l,r,r1,r2)) - out = 1; - else{ - if (!Delete(r,r1)) return(0); - r1 = r2; - if (Is_right_of(l,r,r1)) out = a = 1; - } - } - } - - l1 = Successor(l,r); - if (l1 == -1) return(0); - if (Is_left_of(r,l,l1)) - b = 1; - else{ - out = 0; - while (!out){ - l2 = Successor(l,l1); - if (l2 == -1) return(0); - if (l2 > vl.end) - out = 1; - else if (Qtest(r,l,l1,l2)) - out = 1; - else{ - if (!Delete(l,l1)) return(0); - l1 = l2; - if (Is_left_of(r,l,l1)) out = b = 1; - } - } - } - - if (a) - l = l1; - else if (b) - r = r1; - else{ - if (Qtest(l,r,r1,l1)) - r = r1; - else - l = l1; - } - } - if (!Insert(l,r)) return(0); - - if (!FixFirst(ut.to,ut.from)) return(0); - if (!FixFirst(bt.from,bt.to)) return(0); - return(1); -} - - -DT recur_trig(PointNumero left,PointNumero right){ - int n,m; - DT dt; - - dt.begin = left; - dt.end = right; - n = right - left + 1; /* nombre de points a triangulariser */ - switch (n){ - case 0: - case 1: - /* 0 ou 1 points -> rien a faire */ - break; - - case 2: /* deux points : cas trivial */ - Insert(left,right); - FixFirst(left,right); - FixFirst(right,left); - break; - - case 3: /* trois points : cas trivial */ - Insert(left,right); - Insert(left,left + 1); - Insert(left + 1,right); - if (Is_right_of(left,right,left + 1)){ - FixFirst(left,left + 1); - FixFirst(left + 1,right); - FixFirst(right,left); - } - else{ - FixFirst(left,right); - FixFirst(left + 1,left); - FixFirst(right,left + 1); - } - break; - - default: /* plus de trois points : cas recursif */ - m = (left + right) >> 1; - if (!merge(recur_trig(left,m),recur_trig(m + 1,right))) - - break; - } - return dt; -} - -int comparePoints(const void *i, const void *j){ - double x,y; - - x = ((PointRecord *)i)->where.h - ((PointRecord *)j)->where.h; - if (x == 0.) { - y = ((PointRecord *)i)->where.v - ((PointRecord *)j)->where.v; - return ((y < 0.) ? -1 : 1); - } - else - return ((x < 0.) ? -1 : 1); -} - - -/* this fonction builds the delaunay triangulation and the voronoi for a - window. All error handling is done here. */ - -int DelaunayAndVoronoi(DocPeek doc){ - PushgPointArray(doc->points); - - if (doc->numPoints < 2) return(1); - - qsort(doc->points,doc->numPoints,sizeof(PointRecord),comparePoints); - gDocTemp = doc; - recur_trig(0,doc->numPoints - 1); - - return 1; -} - - -/* this routine puts in xc and yc the coord of the center - of the circumcircle of triangle (x1,y1),(x2,y2),(x3,y3) */ - -int CircumCircle(double x1,double y1,double x2,double y2,double x3,double y3, - double *xc,double *yc){ - double d,a1,a2,a3; - - - d = 2. * (double)(y1*(x2-x3)+y2*(x3-x1)+y3*(x1-x2)); - if (d == 0.0){ - Msg(WARNING, "Colinear points in circum circle computation"); - *xc = *yc = -99999.; - return(0); - } - - a1 = x1*x1 + y1*y1; - a2 = x2*x2 + y2*y2; - a3 = x3*x3 + y3*y3; - *xc = (double) ((a1*(y3-y2) + a2*(y1-y3) + a3*(y2-y1)) / d); - *yc = (double) ((a1*(x2-x3) + a2*(x3-x1) + a3*(x1-x2)) / d); - - if(fabs(d) < 1.e-12 * DSQR(LC2D)) - Msg(WARNING, "Almost colinear points in circum circle computation (d = %g)", d); - - return(1); -} - - -int Is_right_of(PointNumero x,PointNumero y,PointNumero check){ - return Is_left_of(y,x,check); -} - -int Is_left_of(PointNumero x,PointNumero y,PointNumero check){ - static double xx,yy,alpha,beta; - - yy = (double) (pPointArray[y].where.v - pPointArray[x].where.v); - xx = (double) (pPointArray[y].where.h - pPointArray[x].where.h); - alpha = atan2(yy,xx); - - yy = (double) (pPointArray[check].where.v - pPointArray[x].where.v); - xx = (double) (pPointArray[check].where.h - pPointArray[x].where.h); - beta = atan2(yy,xx) - alpha; - if (beta <= 0) beta += Deux_Pi; - - return ((beta >= 0) && (beta <= Pi)); -} - -/* This routine insert the point 'newPoint' in the list dlist, - respecting the clock-wise orientation. */ - -int DListInsert(DListRecord **dlist, MPoint center, PointNumero newPoint){ - DListRecord *p, *newp; - double alpha1,alpha,beta,xx,yy; - int first; - - newp = (DListRecord*) Malloc(sizeof(DListRecord)); - newp->point_num = newPoint; - - if (*dlist == NULL){ - *dlist = newp; - Pred(*dlist) = newp; - Succ(*dlist) = newp; - return(1); - } - if (Succ(*dlist) == *dlist){ - Pred(*dlist) = newp; - Succ(*dlist) = newp; - Pred(newp) = *dlist; - Succ(newp) = *dlist; - return(1); - } - /* If we are here, the double-linked circular list has 2 or more - elements, so we have to calculate where to put the new one. */ - - p = *dlist; - first = p->point_num; - - /* first, compute polar coord. of the first point. */ - yy = (double) (pPointArray[first].where.v - center.v); - xx = (double) (pPointArray[first].where.h - center.h); - alpha1 = atan2(yy,xx); - - /* compute polar coord of the point to insert. */ - yy = (double) (pPointArray[newPoint].where.v - center.v); - xx = (double) (pPointArray[newPoint].where.h - center.h); - beta = atan2(yy,xx) - alpha1; - if (beta <= 0) beta += Deux_Pi; - - do{ - yy = (double) (pPointArray[Succ(p)->point_num].where.v - center.v); - xx = (double) (pPointArray[Succ(p)->point_num].where.h - center.h); - alpha = atan2(yy,xx) - alpha1; - if (alpha <= 1.e-15) alpha += Deux_Pi; - if (alpha >= beta){ - Succ(newp) = Succ(p); - Succ(p) = newp; - Pred(newp) = p; - Pred(Succ(newp)) = newp; - return(1); - } - p = Succ(p); - } while (p != *dlist); - - /*** ON NE DOIT JAMAIS ARRIVER ICI ***/ - return(0); -} - -int Insert(PointNumero a,PointNumero b){ - int rslt; - - /* This routine inserts the point 'a' in the adjency list of 'b' and - the point 'b' in the adjency list of 'a'. */ - - rslt = DListInsert(&pPointArray[a].adjacent,pPointArray[a].where,b); - rslt &= DListInsert(&pPointArray[b].adjacent,pPointArray[b].where,a); - - return rslt; -} - - - -int DListDelete(DListPeek *dlist,PointNumero oldPoint){ - DListPeek p; - - if (*dlist == NULL) - return(0); - if (Succ(*dlist) == *dlist){ - if ((*dlist)->point_num == oldPoint){ - Free(*dlist); - *dlist = NULL; - return(1); - } - else - return(0); - } - p = *dlist; - do{ - if (p->point_num == oldPoint){ - Succ(Pred(p)) = Succ(p); - Pred(Succ(p)) = Pred(p); - if (p == *dlist){ - *dlist = Succ(p); - } - Free(p); - return(1); - } - p = Succ(p); - } while (p != *dlist); - - return(0); -} - - -/* This routine removes the point 'a' in the adjency list of 'b' and - the point 'b' in the adjency list of 'a'. */ - -int Delete(PointNumero a,PointNumero b){ - int rslt; - - rslt = DListDelete(&pPointArray[a].adjacent,b); - rslt &= DListDelete(&pPointArray[b].adjacent,a); - - return rslt; -} - -/* Cette routine efface toutes les listes d'adjacence du pPointArray. */ - -void remove_all_dlist(int n, PointRecord *pPointArray){ - int i; - DListPeek p,temp; - - for (i=0;i<n;i++) - if (pPointArray[i].adjacent != NULL){ - p = pPointArray[i].adjacent; - do{ - temp = p; - p = Pred(p); - Free(temp); - } while (p != pPointArray[i].adjacent); - pPointArray[i].adjacent = NULL; - } -} - diff --git a/Mesh/2D_Elliptic.cpp b/Mesh/2D_Elliptic.cpp deleted file mode 100644 index 57bcdeca76aa35fff40721a0e395bc24a7c4e6dc..0000000000000000000000000000000000000000 --- a/Mesh/2D_Elliptic.cpp +++ /dev/null @@ -1,242 +0,0 @@ -// $Id: 2D_Elliptic.cpp,v 1.7 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "CAD.h" -#include "Mesh.h" - -extern Mesh *THEM; -extern int CurrentNodeNumber; - -int MeshEllipticSurface (Surface * sur){ - - int i, j, k, nb, N1, N2, N3, N4; - Curve *GG[444]; - Vertex **list; - Simplex *simp; - double alpha, beta, gamma, u, v, lc, x, y, z; - Vertex *S[4], *v11, *v12, *v13, *v21, *v22, *v23, *v31, *v32, *v33; - List_T *l1, *l2, *l3, *l4; - - if (sur->Method != ELLIPTIC) - return (0); - - nb = List_Nbr (sur->Generatrices); - if (nb < 4) - return (0); - - for (i = 0; i < nb; i++){ - List_Read (sur->Generatrices, i, &GG[i]); - } - - if (!(S[0] = FindPoint (sur->ipar[0], THEM))) - return 0; - if (!(S[1] = FindPoint (sur->ipar[1], THEM))) - return 0; - if (!(S[2] = FindPoint (sur->ipar[2], THEM))) - return 0; - if (!(S[3] = FindPoint (sur->ipar[3], THEM))) - return 0; - N1 = N2 = N3 = N4 = 0; - /*Remplissure de la premiere cuvee de merde */ - l1 = List_Create (20, 10, sizeof (Vertex *)); - for (i = 0; i < nb; i++){ - if (!compareVertex (&GG[i]->beg, &S[0])){ - j = i; - do{ - if (!List_Nbr (l1)) - List_Add (l1, List_Pointer (GG[j]->Vertices, 0)); - for (k = 1; k < List_Nbr (GG[j]->Vertices); k++) - List_Add (l1, List_Pointer (GG[j]->Vertices, k)); - j = (j + 1 < nb) ? j + 1 : 0; - if (j == i) - return 0; - } - while (compareVertex (&GG[j]->beg, &S[1])); - } - } - /*Remplissure de la deuxieme cuvee de merde */ - l2 = List_Create (20, 10, sizeof (Vertex *)); - for (i = 0; i < nb; i++){ - if (!compareVertex (&GG[i]->beg, &S[1])){ - j = i; - do{ - if (!List_Nbr (l2)) - List_Add (l2, List_Pointer (GG[j]->Vertices, 0)); - for (k = 1; k < List_Nbr (GG[j]->Vertices); k++) - List_Add (l2, List_Pointer (GG[j]->Vertices, k)); - j = (j + 1 < nb) ? j + 1 : 0; - if (j == i) - return 0; - } - while (compareVertex (&GG[j]->beg, &S[2])); - } - } - /*Remplissure de la TROISIEME cuvee de merde */ - l3 = List_Create (20, 10, sizeof (Vertex *)); - for (i = 0; i < nb; i++){ - if (!compareVertex (&GG[i]->beg, &S[2])){ - j = i; - do{ - if (!List_Nbr (l3)) - List_Add (l3, List_Pointer (GG[j]->Vertices, 0)); - for (k = 1; k < List_Nbr (GG[j]->Vertices); k++) - List_Add (l3, List_Pointer (GG[j]->Vertices, k)); - j = (j + 1 < nb) ? j + 1 : 0; - if (j == i) - return 0; - } - while (compareVertex (&GG[j]->beg, &S[3])); - } - } - /*Remplissure de la quatrieme cuvee de merde */ - l4 = List_Create (20, 10, sizeof (Vertex *)); - for (i = 0; i < nb; i++){ - if (!compareVertex (&GG[i]->beg, &S[3])){ - j = i; - do{ - if (!List_Nbr (l4)) - List_Add (l4, List_Pointer (GG[j]->Vertices, 0)); - for (k = 1; k < List_Nbr (GG[j]->Vertices); k++) - List_Add (l4, List_Pointer (GG[j]->Vertices, k)); - j = (j + 1 < nb) ? j + 1 : 0; - if (j == i) - return 0; - } - while (compareVertex (&GG[j]->beg, &S[0])); - } - } - N1 = List_Nbr (l1); - N2 = List_Nbr (l2); - N3 = List_Nbr (l3); - N4 = List_Nbr (l4); - if (N1 != N3 || N2 != N4){ - List_Delete (l1); - List_Delete (l2); - List_Delete (l3); - List_Delete (l4); - return 0; - } - - - sur->Nu = N1; - sur->Nv = N2; - list = (Vertex **) Malloc (N1 * N2 * sizeof (Vertex *)); - - for (i = 0; i < N1; i++){ - for (j = 0; j < N2; j++){ - if (i == 0){ - List_Read (l4, N2 - j - 1, &list[i + N1 * j]); - } - else if (i == N1 - 1){ - List_Read (l2, j, &list[i + N1 * j]); - } - else if (j == 0){ - List_Read (l1, i, &list[i + N1 * j]); - } - else if (j == N2 - 1){ - List_Read (l3, N1 - i - 1, &list[i + N1 * j]); - } - else{ - u = 1. - 2. * (double) i / double (N1 - 1); - v = 1. - 2. * (double) j / double (N2 - 1); - x = 0.25 * ((S[0]->Pos.X * (1 + u) * (1. + v)) + - (S[1]->Pos.X * (1 - u) * (1. + v)) + - (S[2]->Pos.X * (1 - u) * (1. - v)) + - (S[3]->Pos.X * (1 + u) * (1. - v))); - y = 0.25 * ((S[0]->Pos.Y * (1 + u) * (1. + v)) + - (S[1]->Pos.Y * (1 - u) * (1. + v)) + - (S[2]->Pos.Y * (1 - u) * (1. - v)) + - (S[3]->Pos.Y * (1 + u) * (1. - v))); - z = 0.25 * ((S[0]->Pos.Z * (1 + u) * (1. + v)) + - (S[1]->Pos.Z * (1 - u) * (1. + v)) + - (S[2]->Pos.Z * (1 - u) * (1. - v)) + - (S[3]->Pos.Z * (1 + u) * (1. - v))); - lc = 0.25 * ((S[0]->lc * (1 + u) * (1. + v)) + - (S[1]->lc * (1 - u) * (1. + v)) + - (S[2]->lc * (1 - u) * (1. - v)) + - (S[3]->lc * (1 + u) * (1. - v))); - - list[i + N1 * j] = Create_Vertex (++CurrentNodeNumber, x, y, z, lc, 0.0); - } - } - } - - k = 0; - - while (1){ - k++; - if (k > 1000) - break; - for (i = 1; i < N1 - 1; i++){ - for (j = 1; j < N2 - 1; j++){ - v11 = list[i - 1 + N1 * (j - 1)]; - v12 = list[i + N1 * (j - 1)]; - v13 = list[i + 1 + N1 * (j - 1)]; - v21 = list[i - 1 + N1 * (j)]; - v22 = list[i + N1 * (j)]; - v23 = list[i + 1 + N1 * (j)]; - v31 = list[i - 1 + N1 * (j + 1)]; - v32 = list[i + N1 * (j + 1)]; - v33 = list[i + 1 + N1 * (j + 1)]; - - alpha = 0.25 * (DSQR (v23->Pos.X - v21->Pos.X) + - DSQR (v23->Pos.Y - v21->Pos.Y)); - gamma = 0.25 * (DSQR (v32->Pos.X - v12->Pos.X) + - DSQR (v32->Pos.Y - v12->Pos.Y)); - beta = 0.0625 * ((v32->Pos.X - v12->Pos.X) * - (v23->Pos.X - v21->Pos.X) + - (v32->Pos.Y - v12->Pos.Y) * - (v23->Pos.Y - v21->Pos.Y)); - - v22->Pos.X = 0.5 * (alpha * (v32->Pos.X + v12->Pos.X) + - gamma * (v23->Pos.X + v21->Pos.X) - - 2. * beta * (v33->Pos.X - v13->Pos.X - v31->Pos.X + v11->Pos.X)) - / (alpha + gamma); - v22->Pos.Y = 0.5 * (alpha * (v32->Pos.Y + v12->Pos.Y) + - gamma * (v23->Pos.Y + v21->Pos.Y) - - 2. * beta * (v33->Pos.Y - v13->Pos.Y - v31->Pos.Y + v11->Pos.Y)) - / (alpha + gamma); - v22->Pos.Z = 0.5 * (alpha * (v32->Pos.Z + v12->Pos.Z) + - gamma * (v23->Pos.Z + v21->Pos.Z) - - 2. * beta * (v33->Pos.Z - v13->Pos.Z - v31->Pos.Z + v11->Pos.Z)) - / (alpha + gamma); - - } - } - - } - for (i = 0; i < N1 - 1; i++){ - for (j = 0; j < N2 - 1; j++){ - if (sur->Recombine){ - simp = Create_Quadrangle - (list[(i) + N1 * (j)], list[(i + 1) + N1 * (j)], - list[(i + 1) + N1 * (j + 1)], list[i + N1 * (j + 1)]); - simp->iEnt = sur->Num; - Tree_Add (sur->Simplexes, &simp); - List_Add (sur->TrsfSimplexes, &simp); - } - else{ - simp = Create_Simplex (list[(i) + N1 * (j)], list[(i + 1) + N1 * (j)], - list[(i) + N1 * (j + 1)], NULL); - simp->iEnt = sur->Num; - Tree_Add (sur->Simplexes, &simp); - List_Add (sur->TrsfSimplexes, &simp); - - simp = Create_Simplex (list[(i + 1) + N1 * (j + 1)], list[(i) + N1 * (j + 1)], - list[(i + 1) + N1 * (j)], NULL); - simp->iEnt = sur->Num; - Tree_Add (sur->Simplexes, &simp); - List_Add (sur->TrsfSimplexes, &simp); - } - } - } - - // We count this here, to be able to distinguish very quickly - // between triangles and quadrangles later - if (sur->Recombine) - THEM->Statistics[8] += List_Nbr(sur->TrsfSimplexes); - - return 1; -} diff --git a/Mesh/2D_InitMesh.cpp b/Mesh/2D_InitMesh.cpp deleted file mode 100644 index 90450b828cf055e9fa01628aa683eadb4ae9d0fa..0000000000000000000000000000000000000000 --- a/Mesh/2D_InitMesh.cpp +++ /dev/null @@ -1,429 +0,0 @@ -// $Id: 2D_InitMesh.cpp,v 1.9 2001-08-13 09:38:14 geuzaine Exp $ - -/* - - Generation du maillage initial 2D - - Dans l'algorithme de maillage, on doit creer un maillage initial a l'aide - de contours orientes aire a doite. Deux types de problemes peuvent se presenter : - - 1) probleme courant : un triangle se trouve a l'exterieur du contour, il faut - que sa variable de localisation soit declaree externe. - - 2) probleme rare : une arete du contour n'a pas ete creee - - On procede comme suit : - trouve le triangle, on procede de la facon suivante : - - on trie les aretes de tous les triangles ; - - Pour chaque contour on prend chaque arete orientee ; - - Si cette arete n'existe pas (bsearch return false) alors on cherche - les 2 triangles reliant cette arete et on les modifie - - Si cette arete possede 2 triangles adjacents, on declare externe - le triangle dont le troisieme noeud se trouve a gauche de l'arete. - - illustration - ------------ - - probleme 1) + = point du contour - - - 3 - - - + --------+ + - + - - 1 \ / + - \ / + - \ / + - + + - 2 3 a gauche de 1-2 -> tr externe - - - probleme 2) arete inexistante 1-2 - - +,*,@ contours - - +1 + - / \ /|\ - / \ / | \ - / \ / | \ - / \ / | \ - * @ ---> *----+----@ - \ / \ | / - \ / \ | / - \ / \ | / - \ / \|/ - +2 + - -*/ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Mesh.h" -#include "2D_Mesh.h" - -static int pointA,pointB,Counter,Stagnant,StopNow; -static Tree_T *ETree,*EDToSwap; - -extern PointRecord *gPointArray; - -int *permut; - -typedef struct { - int from; - int to; - int NbOccur; - Delaunay *Liste[2]; -}ED; - - -void makepermut (int numpoints){ - int i, ip ; - permut = (int *) Malloc (numpoints * sizeof (int)); - for ( i=0 ; i<numpoints ; i++ ){ - ip = gPointArray[i].permu; - permut[ip] = i; - } -} - -int crossED ( ED * e ){ - double Xma,Xmb,Yma,Ymb,det,t,q; - double XMa,XMb,YMa,YMb; - double xa1,xa2,ya1,ya2; - double xb1,xb2,yb1,yb2; - - xa1 = gPointArray[pointA].where.h; - xa2 = gPointArray[pointB].where.h; - ya1 = gPointArray[pointA].where.v; - ya2 = gPointArray[pointB].where.v; - - xb1 = gPointArray[e->from].where.h; - xb2 = gPointArray[e->to].where.h; - yb1 = gPointArray[e->from].where.v; - yb2 = gPointArray[e->to].where.v; - - Xma = DMIN(xa1,xa2); - Xmb = DMIN(xb1,xb2); - - XMa = DMAX(xa1,xa2); - XMb = DMAX(xb1,xb2); - - if(XMa < Xmb || XMb < Xma)return(0); - - Yma = DMIN(ya1,ya2); - Ymb = DMIN(yb1,yb2); - - YMa = DMAX(ya1,ya2); - YMb = DMAX(yb1,yb2); - - if(YMa < Ymb || YMb < Yma)return(0); - - det = (xa2 - xa1)*(yb1-yb2) - (xb1 - xb2)*(ya2-ya1); - - if(det == 0.0){ - return(0); - } - - t = ((xb1 - xa1)*(yb1-yb2) - (xb1 - xb2)*(yb1-ya1))/det; - q = ((xa2 - xa1)*(yb1-ya1) - (ya2 - ya1)*(xb1-xa1))/det; - - if(t>1. || t<0.)return(0); - if(q>1. || q<0.)return(0); - return(1); -} - -int compareED2 (const void *a, const void *b){ - ED *q,*w; - q=(ED*)a; - w=(ED*)b; - if(q->NbOccur > w->NbOccur)return(-1); - if(q->NbOccur < w->NbOccur)return(1); - if(q->from > w->from)return(1); - if(q->from < w->from)return(-1); - if(q->to > w->to)return(1); - if(q->to < w->to)return(-1); - return(0); -} - -int compareED (const void *a, const void *b){ - ED *q,*w; - q=(ED*)a; - w=(ED*)b; - if(q->from > w->from)return(1); - if(q->from < w->from)return(-1); - if(q->to > w->to)return(1); - if(q->to < w->to)return(-1); - return(0); -} - -void DoWeSwapED ( void *data , void *dummy){ - ED *e; - - e = (ED*)data; - - if(e->from == pointA || e->from == pointB || - e->to == pointA || e->to == pointB){ - return; - } - else if ( Tree_PQuery ( EDToSwap,e) ){ - } - else if ( crossED ( e ) ) { - Tree_Add ( EDToSwap ,e); - } -} - -void Print ( void *data , void *dummy){ - ED *e; - - e = (ED*)data; - Msg(INFO,"%d %d",e->from,e->to); -} - -void SwapED ( void *data , void *dummy){ - ED *e,E; - int from,to; - - e = (ED*)data; - - if(Stagnant && Counter <= StopNow)return; - else if(Stagnant)Counter++; - - if(e->from != e->Liste[0]->t.a && e->from != e->Liste[0]->t.b && - e->from != e->Liste[0]->t.c ) - return; - if(e->from != e->Liste[1]->t.a && e->from != e->Liste[1]->t.b && - e->from != e->Liste[1]->t.c ) - return; - if(e->to != e->Liste[0]->t.a && e->to != e->Liste[0]->t.b && - e->to != e->Liste[0]->t.c ) - return; - if(e->to != e->Liste[1]->t.a && e->to != e->Liste[1]->t.b && - e->to != e->Liste[1]->t.c ) - return; - - - if(e->from != e->Liste[0]->t.a && e->to != e->Liste[0]->t.a) - from = e->Liste[0]->t.a; - else if(e->from != e->Liste[0]->t.b && e->to != e->Liste[0]->t.b) - from = e->Liste[0]->t.b; - else if(e->from != e->Liste[0]->t.c && e->to != e->Liste[0]->t.c) - from = e->Liste[0]->t.c; - - if(e->from != e->Liste[1]->t.a && e->to != e->Liste[1]->t.a) - to = e->Liste[1]->t.a; - else if(e->from != e->Liste[1]->t.b && e->to != e->Liste[1]->t.b) - to = e->Liste[1]->t.b; - else if(e->from != e->Liste[1]->t.c && e->to != e->Liste[1]->t.c) - to = e->Liste[1]->t.c; - - pointA = e->from; - pointB = e->to; - E.from = from; - E.to = to; - if(!crossED(&E))return; - - e->Liste[0]->t.a = from; - e->Liste[0]->t.b = to; - e->Liste[0]->t.c = e->from; - - e->Liste[1]->t.a = from; - e->Liste[1]->t.b = to; - e->Liste[1]->t.c = e->to; - - e->from = IMAX(from,to); - e->to = IMIN(from,to); -} - -void SuppressInETree( void *data , void *dummy){ - if(!Tree_Suppress(ETree,data)) - Msg(WARNING, "Cannot suppress in ETree"); -} - -void AddInETree( void *data , void *dummy){ - Tree_Add(ETree,data); -} - -int verifie_cas_scabreux (int pa, int pb, ContourRecord **ListContours, int Nc){ - ED Edge; - int i,k,a,b; - ContourRecord *contour; - - - Edge.from = IMAX(pa,pb); - Edge.to = IMIN(pa,pb); - for(k=0;k<Nc;k++){ - contour = ListContours[k]; - for ( i = -1 ; i < (contour->numpoints - 1) ; i++) { - if(i == -1){ - a = permut [ contour->oriented_points[0].permu ]; - b = permut [ contour->oriented_points[contour->numpoints - 1].permu ]; - } - else{ - a = permut [ contour->oriented_points[i].permu ]; - b = permut [ contour->oriented_points[i+1].permu ]; - } - - pointA = IMAX(a,b); - pointB = IMIN(a,b); - if(a != pa && b != pa && a != pb && b != pb) - if(crossED(&Edge)) return (1); - } - } - return (0); -} - -void verify_edges (List_T *ListDelaunay, ContourRecord **ListContour, - int NumContours , int NumDelaunay){ - - ED *pEdge; - ED Edge; - int ok,max,i,k,c,a,b; - ContourRecord *contour; - Delaunay *del_P; - - max = 100; - - c = 0; - do { - c++; - if(c>max)break; - ETree = Tree_Create ( sizeof (Edge) , compareED ); - for (i=0;i< NumDelaunay;i++) { - - del_P = *(Delaunay**)List_Pointer(ListDelaunay, i); - - Edge.from = IMAX ( del_P->t.a, del_P->t.b ); - Edge.to = IMIN ( del_P->t.a, del_P->t.b ); - Edge.NbOccur = 1; - - if((pEdge = (ED*)Tree_PQuery(ETree,&Edge))){ - pEdge->Liste[1] = del_P; - } - else { - Edge.Liste[0] = del_P; - Tree_Add (ETree,&Edge); - } - - Edge.from = IMAX ( del_P->t.a, del_P->t.c ); - Edge.to = IMIN ( del_P->t.a, del_P->t.c ); - - if((pEdge = (ED*)Tree_PQuery(ETree,&Edge))){ - pEdge->Liste[1] = del_P; - } - else { - Edge.Liste[0] = del_P; - Tree_Add (ETree,&Edge); - } - - Edge.from = IMAX ( del_P->t.c, del_P->t.b ); - Edge.to = IMIN ( del_P->t.c, del_P->t.b ); - - if((pEdge = (ED*)Tree_PQuery(ETree,&Edge))){ - pEdge->Liste[1] = del_P; - } - else { - Edge.Liste[0] = del_P; - Tree_Add (ETree,&Edge); - } - } - - ok = 0; - for(k=0;k<NumContours;k++){ - contour = ListContour[k]; - for ( i = -1 ; i < contour->numpoints - 1 ; i++){ - - if(i == -1){ - a = permut [ contour->oriented_points[0].permu ]; - b = permut [ contour->oriented_points[contour->numpoints - 1].permu ]; - } - else{ - a = permut [ contour->oriented_points[i].permu ]; - b = permut [ contour->oriented_points[i+1].permu ]; - } - - Edge.from = IMAX(a,b); - Edge.to = IMIN(a,b); - - if(!Tree_Search( ETree , &Edge ))ok++;; - } - } - - if(!ok){ - return; - } - Msg(INFO, "Swapping (%d missing edges)", ok); - - EDToSwap = NULL; - if(EDToSwap)Tree_Delete(EDToSwap); - EDToSwap = Tree_Create (sizeof(ED),compareED2); - for(k=0;k<NumContours;k++){ - contour = ListContour[k]; - for ( i = -1 ; i < contour->numpoints - 1 ; i++){ - - if(i == -1){ - a = permut [ contour->oriented_points[0].permu ]; - b = permut [ contour->oriented_points[contour->numpoints - 1].permu ]; - } - else{ - a = permut [ contour->oriented_points[i].permu ]; - b = permut [ contour->oriented_points[i+1].permu ]; - } - - pointA = IMAX(a,b); - pointB = IMIN(a,b); - - Tree_Action ( ETree , DoWeSwapED ); - - } - } - Msg(INFO, "Elimination (%d swaps)", Tree_Nbr(EDToSwap)); - - Tree_Action (EDToSwap , SuppressInETree); - Tree_Action (EDToSwap , SwapED); - Tree_Action (EDToSwap , AddInETree); - }while(Tree_Nbr(EDToSwap)); -/* - Tree_Delete(EDToSwap); - Tree_Delete(ETree); -*/ -} - - - -int comparepermu(const void *i, const void *j){ - return ( gPointArray[*(PointNumero *)i].permu - gPointArray[*(PointNumero *)j].permu); -} - -void verify_inside (Delaunay * ListDelaunay , int NumDelaunay ){ - - PointNumero pt[3], compare, a, b; - int i, inside, cont[3]; - - for ( i=0 ; i < NumDelaunay ; i++){ - - pt[0] = ListDelaunay[i].t.a; - pt[1] = ListDelaunay[i].t.b; - pt[2] = ListDelaunay[i].t.c; - qsort(pt,3,sizeof(PointNumero),comparepermu); - - cont[0] = gPointArray[pt[0]].numcontour; - cont[1] = gPointArray[pt[1]].numcontour; - cont[2] = gPointArray[pt[2]].numcontour; - - - if((cont[1] != cont[2])||(cont[0]!=cont[1])||(cont[0]!=cont[2])) - inside = 1; - else - inside = 0; - - - a = pt[0]; - b = pt[1]; - compare = pt[2]; - - if ((Is_left_of ( a,b,compare ) && (inside == 0))){ - ListDelaunay[i].t.position = EXTERN ; - } - - } - return; - -} - diff --git a/Mesh/2D_Links.cpp b/Mesh/2D_Links.cpp deleted file mode 100644 index 1165b56731beb8099c043dd2c93925c86585f8fa..0000000000000000000000000000000000000000 --- a/Mesh/2D_Links.cpp +++ /dev/null @@ -1,269 +0,0 @@ -// $Id: 2D_Links.cpp,v 1.9 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Mesh.h" -#include "2D_Mesh.h" - -extern PointRecord *gPointArray; -extern int LocalNewPoint; -extern DocRecord *FGMESH; - -extern PointNumero First(PointNumero x); - -/* compte les points sur le polygone convexe */ - -int CountPointsOnHull(int n, PointRecord *pPointArray){ - PointNumero p,p2,temp; - int i; - - if (pPointArray[0].adjacent == NULL) return 0; - i = 1; - p = 0; - p2 = First(0); - while ((p2 != 0) && (i < n)) { - i++; - temp = p2; - p2 = Successor(p2,p); - p = temp; - } - return ((i <= n) ? i : -1); -} - - -PointNumero *ConvertDlistToArray(DListPeek *dlist,int *n){ - DListPeek p,temp; - int i,max = 0; - PointNumero *ptr; - - p = *dlist; - do{ - max++; - p = Pred(p); - } while (p != *dlist); - ptr = (PointNumero *) Malloc((int) ((max+1) * sizeof(PointNumero))); - if (ptr == NULL) return NULL; - p = *dlist; - for (i=0;i<max;i++){ - ptr[i] = p->point_num; - temp = p; - p = Pred(p); - Free(temp); - } - ptr[max]=ptr[0]; - *dlist = NULL; - *n = max; - return ptr; -} - - -/* Convertir les listes d'adjacence en triangles */ - -int Conversion(DocPeek doc ){ - - /* on suppose que n >= 3 gPointArray est suppose OK. */ - - Striangle *striangle; - int n,i,j; - int count = 0,count2 = 0; - PointNumero aa,bb,cc; - PointRecord *ptemp; - - ptemp = gPointArray; - gPointArray = doc->points; - - n = doc->numPoints; - striangle = (Striangle *) Malloc((int) (n * sizeof(Striangle))); - count2 = (int) CountPointsOnHull(n,doc->points); - - /* nombre de triangles que l'on doit obtenir */ - count2 = 2 * (n - 1) - count2; - - if(doc->delaunay)Free (doc->delaunay); - - doc->delaunay = (Delaunay *) Malloc(2*count2 * sizeof(Delaunay)); - - for (i=0;i<n;i++){ - /* on cree une liste de points connectes au point i (t) + nombre de points (t_length) */ - striangle[i].t = ConvertDlistToArray(&gPointArray[i].adjacent,&striangle[i].t_length); - striangle[i].info = NULL; - striangle[i].info_length = 0; - } - - /* on balaye les noeuds de gauche a droite -> on cree les triangles */ - count = 0; - for (i=0;i<n;i++){ - for (j=0;j<striangle[i].t_length;j++){ - if ( ( striangle[i].t[j] > i) && ( striangle[i].t[j+1] > i) && - (Is_right_of(i,striangle[i].t[j],striangle[i].t[j+1])) ) { - aa = i; - bb = striangle[i].t[j]; - cc = striangle[i].t[j+1]; - filldel(&doc->delaunay[count],aa,bb,cc,gPointArray,NULL); - count++; - } - } - } - for (i=0;i<n;i++) Free(striangle[i].t); - Free(striangle); - doc->numTriangles = count2; - gPointArray = ptemp; - return(1); -} - - -int compareEdge(const void *e1, const void *e2){ - PointNumero tmp; - - if ((tmp = ((edge *)e1)->from - ((edge *)e2)->from) != 0) return(tmp); - return(((edge *)e1)->to - ((edge *)e2)->to); -} - -/* pour la liste de delaunays ListDelaunay, CreateLinks cree les liens entre - triangles c.a.d determine les voisins de chaque triangle */ - -int CreateLinks(List_T * ListDelaunay , int NumDelaunay, - ContourRecord **ListContours , int Nc){ - int i; - edge *ListEdges; - MPoint pt; - Delaunay *del_Pi, *del_Pj; - - ListEdges = (edge *) Malloc((3* NumDelaunay + 2)* sizeof(edge)); - - ListEdges[3* NumDelaunay + 1].num=0; - - for (i=0;i< NumDelaunay;i++){ - - del_Pi = *(Delaunay**)List_Pointer(ListDelaunay, i); - - /* arete a b */ - if (del_Pi->t.a > del_Pi->t.b ){ - ListEdges[3*i].from = del_Pi->t.a; - ListEdges[3*i].to = del_Pi->t.b; - ListEdges[3*i].num = i; - } - else { - ListEdges[3*i].from = del_Pi->t.b; - ListEdges[3*i].to = del_Pi->t.a; - ListEdges[3*i].num = i; - } - - /* arete b c */ - if (del_Pi->t.b > del_Pi->t.c ){ - ListEdges[3*i+1].from = del_Pi->t.b; - ListEdges[3*i+1].to = del_Pi->t.c; - ListEdges[3*i+1].num = i; - } - else { - ListEdges[3*i+1].from = del_Pi->t.c; - ListEdges[3*i+1].to = del_Pi->t.b; - ListEdges[3*i+1].num = i; - } - - /* arete c a */ - if (del_Pi->t.c > del_Pi->t.a ){ - ListEdges[3*i+2].from = del_Pi->t.c; - ListEdges[3*i+2].to = del_Pi->t.a; - ListEdges[3*i+2].num = i; - } - else { - ListEdges[3*i+2].from = del_Pi->t.a; - ListEdges[3*i+2].to = del_Pi->t.c; - ListEdges[3*i+2].num = i; - } - - } - - qsort(ListEdges,3*NumDelaunay,sizeof(edge),compareEdge); - - i=0; - - do { - - if ( (ListEdges[i].from == ListEdges[i+1].from) && - (ListEdges[i].to == ListEdges[i+1].to)){ /* create link */ - - del_Pi = *(Delaunay**)List_Pointer(ListDelaunay, ListEdges[i].num); - del_Pj = *(Delaunay**)List_Pointer(ListDelaunay, ListEdges[i+1].num); - - if ( ( del_Pi->t.position != EXTERN ) && - ( del_Pj->t.position != EXTERN ) && - ( (del_Pj->t.info == TOLINK ) || - (del_Pi->t.info == TOLINK ) ) ) { - - if (del_Pi->v.voisin1 == NULL) - del_Pi->v.voisin1 = del_Pj; - else if (del_Pi->v.voisin2 == NULL) - del_Pi->v.voisin2 = del_Pj; - else if (del_Pi->v.voisin3 == NULL) - del_Pi->v.voisin3 = del_Pj; - else - Msg(GERROR, "Bad link for triangle"); - - if (del_Pj->v.voisin1 == NULL) - del_Pj->v.voisin1 = del_Pi; - else if (del_Pj->v.voisin2 == NULL) - del_Pj->v.voisin2 = del_Pi; - else if (del_Pj->v.voisin3 == NULL) - del_Pj->v.voisin3 = del_Pi; - else - Msg(GERROR, "Bad link for triangle"); - } - i+=2; - } - else - i++; - } while ( i < 3*NumDelaunay ); - - Free(ListEdges); - - for(i=0 ; i<NumDelaunay ;i++){ - del_Pi = *(Delaunay**)List_Pointer(ListDelaunay, i); - - if(del_Pi->t.position != EXTERN){ - pt.h = del_Pi->t.xc; - pt.v = del_Pi->t.yc; - - if(!PtInTriangle(pt, del_Pi->t.a, del_Pi->t.b, - del_Pi->t.c)){ - if(!Find_Triangle(pt,FGMESH,A_TOUT_PRIX)){ - if(LocalNewPoint == VORONOI_INSERT) { - del_Pi->t.position = ACCEPTED; - } - del_Pi->t.quality_value /= 1000.; - } - } - } - } - - if((LocalNewPoint == VORONOI_INSERT)){ - for(i=0 ; i<NumDelaunay ;i++){ - del_Pi = *(Delaunay**)List_Pointer(ListDelaunay, i); - if( ((del_Pi->t.position == NONACCEPTED ) || (del_Pi->t.position == INTERN )) && - (del_Pi->t.info == TOLINK )){ - if ((del_Pi->v.voisin1 == NULL) || - (del_Pi->v.voisin2 == NULL) || - (del_Pi->v.voisin3 == NULL)){ - del_Pi->t.position = ACTIF; - } - else if ((del_Pi->v.voisin1->t.position == ACCEPTED) && - (del_Pi->v.voisin2->t.position == ACCEPTED) && - (del_Pi->v.voisin3->t.position == ACCEPTED)){ - del_Pi->t.position = ACCEPTED; - } - else if ((del_Pi->v.voisin1->t.position == ACCEPTED) || - (del_Pi->v.voisin2->t.position == ACCEPTED) || - (del_Pi->v.voisin3->t.position == ACCEPTED)){ - del_Pi->t.position = ACTIF; - } - else { - del_Pi->t.position = WAITING; - } - } - } - } - - return(1); -} - diff --git a/Mesh/2D_Mesh.cpp b/Mesh/2D_Mesh.cpp deleted file mode 100644 index a77a6639c3c2f291bdbb4cad051093d8e7fac118..0000000000000000000000000000000000000000 --- a/Mesh/2D_Mesh.cpp +++ /dev/null @@ -1,972 +0,0 @@ -// $Id: 2D_Mesh.cpp,v 1.32 2001-08-11 23:28:32 geuzaine Exp $ - -/* - Maillage Delaunay d'une surface (Point insertion Technique) - - 3 types de maillages sont proposes - - Center of circum circle point insertion - - Voronoi Point Insertion (la meilleure en general) - - G Point insertion (intermediaire) - - Le maillage surfacique passe par la determination d'un plan - dont on minimise l'ecart au sens des moindes carres par rap- - port a la surface : - plan ax + bx + cz = 1 - tangeante = t = (a,b,c) -*/ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "CAD.h" -#include "Mesh.h" -#include "Utils.h" -#include "Create.h" -#include "2D_Mesh.h" -#include "Context.h" - -extern Mesh *THEM; -extern Context_T CTX; -extern int CurrentNodeNumber; - -PointRecord *gPointArray; -DocRecord *BGMESH, *FGMESH; -int LocalNewPoint, is_3D = 0; -double LC2D ; - -static Surface *THESURFACE, *THESUPPORT; - -void ProjetteSurface (void *a, void *b){ - Vertex *v; - v = *(Vertex **) a; - - if (!v->ListCurves) - ProjectPointOnSurface (THESUPPORT, *v); -} - -void Projette_Plan_Moyen (void *a, void *b){ - Vertex *v = *(Vertex **) a; - Projette (v, THESURFACE->plan); -} - -void Projette_Inverse (void *a, void *b){ - Vertex *v = *(Vertex **) a; - Projette (v, THESURFACE->invplan); -} - -void Plan_Moyen (void *data, void *dum){ - int i, j; - Vertex *v; - Curve *pC; - Surface **pS, *s; - static List_T *points; - static int deb = 1; - - pS = (Surface **) data; - s = *pS; - - if (deb){ - points = List_Create (10, 10, sizeof (Vertex *)); - deb = 0; - } - else - List_Reset (points); - - switch (s->Typ){ - case MSH_SURF_PLAN: - case MSH_SURF_TRIC: - case MSH_SURF_REGL: - case MSH_SURF_NURBS: - case MSH_SURF_TRIMMED: - for (i = 0; i < List_Nbr (s->Generatrices); i++){ - List_Read (s->Generatrices, i, &pC); - for (j = 0; j < List_Nbr (pC->Vertices); j++){ - List_Read (pC->Vertices, j, &v); - List_Add (points, &v); - Tree_Insert (s->Vertices, List_Pointer (pC->Vertices, j)); - } - } - break; - } - - MeanPlane(points, s); -} - - -int Calcule_Contours (Surface * s){ - int i, j, ori, ORI; - Vertex *v, *first, *last; - List_T *l, *linv; - Curve *c; - double n[] = {0., 0., 1.}; - - l = List_Create (10, 10, sizeof (Vertex *)); - for (i = 0; i < List_Nbr (s->Generatrices); i++){ - List_Read (s->Generatrices, i, &c); - if (!List_Nbr (l)){ - List_Read (c->Vertices, 0, &first); - } - for (j = 1; j < List_Nbr (c->Vertices); j++){ - List_Read (c->Vertices, j, &v); - List_Add (l, &v); - if (j == List_Nbr (c->Vertices) - 1){ - last = v; - } - } - if (!compareVertex (&last, &first)){ - ori = Oriente (l, n); - - /* Le premier contour est oriente aire a droite - Les autes sont des trous orientes aire a gauche */ - - if (!List_Nbr (s->Contours)) - ORI = ori; - - if ((!List_Nbr (s->Contours) && !ori) || - (List_Nbr (s->Contours) && ori)){ - linv = List_Create (10, 10, sizeof (Vertex *)); - List_Invert (l, linv); - List_Delete (l); - l = linv; - } - List_Add (s->Contours, &l); - l = List_Create (10, 10, sizeof (Vertex *)); - } - } - return ORI; -} - - -void Calcule_Z (void *data, void *dum){ - Vertex **pv, *v; - double Z, U, V; - - pv = (Vertex **) data; - v = *pv; - if (v->Frozen || v->Num < 0) - return; - - XYtoUV (THESUPPORT, &v->Pos.X, &v->Pos.Y, &U, &V, &Z); - v->Pos.Z = Z; -} - -void Calcule_Z_Plan (void *data, void *dum){ - Vertex **pv, *v; - Vertex V; - - V.Pos.X = THESURFACE->a; - V.Pos.Y = THESURFACE->b; - V.Pos.Z = THESURFACE->c; - - Projette (&V, THESURFACE->plan); - - pv = (Vertex **) data; - v = *pv; - if (V.Pos.Z != 0.0) - v->Pos.Z = (THESURFACE->d - V.Pos.X * v->Pos.X - V.Pos.Y * v->Pos.Y) - / V.Pos.Z; - else - v->Pos.Z = 0.0; -} - - -void Add_In_Mesh (void *a, void *b){ - if (!Tree_Search (THEM->Vertices, a)) - Tree_Add (THEM->Vertices, a); -} - -void Freeze_Vertex (void *a, void *b){ - Vertex *pv; - pv = *(Vertex **) a; - pv->Freeze.X = pv->Pos.X; - pv->Freeze.Y = pv->Pos.Y; - pv->Freeze.Z = pv->Pos.Z; - pv->Frozen = 1; -} - -void deFreeze_Vertex (void *a, void *b){ - Vertex *pv; - pv = *(Vertex **) a; - if (!pv->Frozen) - return; - pv->Pos.X = pv->Freeze.X; - pv->Pos.Y = pv->Freeze.Y; - pv->Pos.Z = pv->Freeze.Z; - pv->Frozen = 0; -} - -void PutVertex_OnSurf (void *a, void *b){ - Vertex *pv; - pv = *(Vertex **) a; - if (!pv->ListSurf) - pv->ListSurf = List_Create (1, 1, sizeof (Surface *)); - List_Add (pv->ListSurf, &THESURFACE); -} - - -/* remplis la structure Delaunay d'un triangle cree */ - -Delaunay * testconv (avlptr * root, int *conv, DocRecord * ptr){ - - avlptr *proot; - double qual; - Delaunay *pdel; - - proot = root; - - pdel = NULL; - - *conv = 0; - if (*root == NULL) - *conv = 1; - else{ - pdel = findrightest (*proot, ptr); - qual = pdel->t.quality_value; - switch (LocalNewPoint){ - case CENTER_CIRCCIRC: - case BARYCENTER: - if (qual < CONV_VALUE) - *conv = 1; - break; - case VORONOI_INSERT: - if ((*root) == NULL) - *conv = 1; - break; - } - } - return (pdel); -} - - -int mesh_domain (ContourPeek * ListContours, int numcontours, - maillage * mai, int *numpoints, int OnlyTheInitialMesh){ - List_T *kill_L, *del_L ; - MPoint pt; - DocRecord docm, *doc; - int conv,i,j,nump,numact,numlink,numkil,numaloc,numtri,numtrr,numtrwait; - Delaunay *del, *del_P, *deladd, **listdel; - PointNumero aa, bb, cc, a, b, c; - DListPeek list, p, q; - avlptr *root, *proot, *root_w, *root_acc; - double volume_old, volume_new; - - root = (avlptr *) Malloc (sizeof (avlptr)); - root_w = (avlptr *) Malloc (sizeof (avlptr)); - root_acc = (avlptr *) Malloc (sizeof (avlptr)); - - nump = 0; - for (i = 0; i < numcontours; i++) - nump += ListContours[i]->numpoints; - - /* creation du maillage initial grace au puissant algorithme "divide and conquer" */ - - doc = &docm; - FGMESH = &docm; - doc->points = (PointRecord *) Malloc ((nump + 100) * sizeof(PointRecord)); - gPointArray = doc->points; - - numaloc = nump; - doc->delaunay = 0; - doc->numPoints = nump; - doc->numTriangles = 0; - mai->numtriangles = 0; - mai->numpoints = 0; - - if (!numcontours){ - Msg(GERROR, "No contour"); - return 0; - } - - numact = 0; - for (i = 0; i < numcontours; i++){ - for (j = 0; j < ListContours[i]->numpoints; j++){ - doc->points[numact + j].where.h = - ListContours[i]->oriented_points[j].where.h - + ListContours[i]->perturbations[j].h; - doc->points[numact + j].where.v = - ListContours[i]->oriented_points[j].where.v - + ListContours[i]->perturbations[j].v; - doc->points[numact + j].quality = - ListContours[i]->oriented_points[j].quality; - doc->points[numact + j].initial = - ListContours[i]->oriented_points[j].initial; - ListContours[i]->oriented_points[j].permu = numact + j; - doc->points[numact + j].permu = numact + j; - doc->points[numact + j].numcontour = ListContours[i]->numerocontour; - doc->points[numact + j].adjacent = NULL; - } - numact += ListContours[i]->numpoints; - } - - DelaunayAndVoronoi (doc); - Conversion (doc); - remove_all_dlist (doc->numPoints, doc->points); - - if (!is_3D || CTX.mesh.constrained_bgmesh){ - BGMESH = doc; - InitBricks (BGMESH); - } - else - BGMESH = NULL; - - /* elimination des triangles exterieurs + verification de l'existence - des edges (coherence) */ - - makepermut (nump); - del_L = List_Create(doc->numTriangles, 1000, sizeof(Delaunay*)); - - for(i= 0;i<doc->numTriangles;i++){ - del_P = &doc->delaunay[i] ; - List_Add(del_L, &del_P); - } - - verify_edges (del_L, ListContours, numcontours, doc->numTriangles); - verify_inside (doc->delaunay, doc->numTriangles); - - /* creation des liens ( triangles voisins ) */ - - CreateLinks (del_L, doc->numTriangles, ListContours, numcontours); - - /* initialisation de l'arbre */ - - (*root) = (*root_w) = (*root_acc) = NULL; - - int onlyinit = OnlyTheInitialMesh; - - if (doc->numTriangles == 1){ - doc->delaunay[0].t.position = INTERN; - Msg(INFO, "Only one triangle in initial mesh (skipping refinement)"); - onlyinit = 1; - } - - for (i = 0; i < doc->numTriangles; i++){ - if (doc->delaunay[i].t.position != EXTERN){ - del = &doc->delaunay[i]; - switch (LocalNewPoint){ - case CENTER_CIRCCIRC: - case BARYCENTER: - Insert_Triangle (root, del); - break; - case VORONOI_INSERT: - switch (del->t.position){ - case ACTIF: - case INTERN: - Insert_Triangle (root, del); - break; - case WAITING: - Insert_Triangle (root_w, del); - break; - case ACCEPTED: - Insert_Triangle (root_acc, del); - break; - } - } - } - } - - - /* maillage proprement dit : - 1) Les triangles sont tries dans l'arbre suivant leur qualite - 2) on ajoute un noeud au c.g du plus mauvais - 3) on reconstruit le delaunay par Bowyer-Watson - 4) on ajoute les triangles dans l'arbre et on recommence - jusque quand tous les triangles sont OK */ - - del = testconv (root, &conv, doc); - - PushgPointArray (doc->points); - - List_Reset(del_L); - kill_L = List_Create(1000, 1000, sizeof(Delaunay*)); - - if (onlyinit) - conv = 1; - - while (conv != 1){ - - pt = Localize (del, doc); - - numlink = 0; - numkil = 0; - list = NULL; - - if (!PE_Del_Triangle (del, pt, &list, kill_L, del_L, &numlink, &numkil)){ - Msg(WARNING, "Triangle non deleted"); - Delete_Triangle (root, del); - Delete_Triangle (root_w, del); - del->t.quality_value /= 10.; - switch (LocalNewPoint){ - case CENTER_CIRCCIRC: - case BARYCENTER: - Insert_Triangle (root, del); - break; - case VORONOI_INSERT: - del->t.position = ACCEPTED; - Insert_Triangle (root_acc, del); - break; - } - - numlink = numkil = 0; - if (list != NULL){ - p = list; - do{ - q = p; - p = Pred (p); - Free (q); - } - while (p != list); - } - list = NULL; - del = testconv (root, &conv, doc); - continue; - } - - /* Test du Volume */ - - i = 0; - p = list; - volume_new = 0.0; - do{ - q = p->next; - bb = p->point_num; - cc = q->point_num; - volume_new += fabs ((doc->points[bb].where.h - pt.h) * - (doc->points[cc].where.v - doc->points[bb].where.v) - - (doc->points[cc].where.h - doc->points[bb].where.h) * - (doc->points[bb].where.v - pt.v)); - p = q; - } while (p != list); - - volume_old = 0.0; - for (i = 0; i < numkil; i++){ - del_P = *(Delaunay**)List_Pointer(kill_L, i); - aa = del_P->t.a; - bb = del_P->t.b; - cc = del_P->t.c; - volume_old += fabs ((doc->points[bb].where.h - doc->points[aa].where.h) * - (doc->points[cc].where.v - doc->points[bb].where.v) - - (doc->points[cc].where.h - doc->points[bb].where.h) * - (doc->points[bb].where.v - doc->points[aa].where.v)); - } - - if ((volume_old - volume_new) / (volume_old + volume_new) > 1.e-6){ - Msg(WARNING, "Volume has changed (%g->%g)", volume_old, volume_new); - Delete_Triangle (root, del); - Delete_Triangle (root_w, del); - del->t.quality_value /= 10.; - switch (LocalNewPoint){ - case CENTER_CIRCCIRC: - case BARYCENTER: - Insert_Triangle (root, del); - break; - case VORONOI_INSERT: - del->t.position = ACCEPTED; - Insert_Triangle (root_acc, del); - break; - } - - numlink = numkil = 0; - if (list != NULL){ - p = list; - do{ - q = p; - p = Pred (p); - Free (q); - } while (p != list); - } - list = NULL; - del = testconv (root, &conv, doc); - continue; - } - - /* Fin test du volume */ - - for (i = 0; i < numkil; i++){ - del_P = *(Delaunay**)List_Pointer(kill_L, i); - - switch (LocalNewPoint){ - case CENTER_CIRCCIRC: - case BARYCENTER: - Delete_Triangle (root, del_P); - break; - case VORONOI_INSERT: - switch (del_P->t.position){ - case WAITING: - Delete_Triangle (root_w, del_P); - break; - case ACTIF: - case INTERN: - Delete_Triangle (root, del_P); - break; - case ACCEPTED: - Delete_Triangle (root_acc, del_P); - break; - } - } - // MEMORY_LEAK -JF - // Free(del_P); - } - - *numpoints = doc->numPoints; - Insert_Point (pt, numpoints, &numaloc, doc, BGMESH, is_3D); - doc->points = gPointArray; - doc->numPoints = *numpoints; - - i = 0; - p = list; - - do{ - q = p->next; - - aa = doc->numPoints - 1; - bb = p->point_num; - cc = q->point_num; - - deladd = (Delaunay *) Malloc (sizeof (Delaunay)); - - filldel (deladd, aa, bb, cc, doc->points, BGMESH); - - List_Put(del_L, numlink+i, &deladd); - i++; - p = q; - - } while (p != list); - - p = list; - - do{ - q = p; - p = Pred (p); - Free (q); - } while (p != list); - - CreateLinks (del_L, i + numlink, ListContours, numcontours); - - for (j = 0; j < i; j++){ - del_P = *(Delaunay**)List_Pointer(del_L, j+numlink) ; - switch (LocalNewPoint) { - case CENTER_CIRCCIRC: - case BARYCENTER: - Insert_Triangle (root, del_P); - break; - case VORONOI_INSERT: - switch (del_P->t.position){ - case ACTIF: - case INTERN: - Insert_Triangle (root, del_P); - break; - case WAITING: - Insert_Triangle (root_w, del_P); - break; - case ACCEPTED: - Insert_Triangle (root_acc, del_P); - break; - } - } - } - - del = testconv (root, &conv, doc); - - } - - List_Delete(kill_L); - - numtri = 0; - numtrwait = 0; - - if (*root_w != NULL){ - proot = root_w; - avltree_count (*proot, &numtrwait); - } - - numtrr = 0; - - proot = root; - switch (LocalNewPoint){ - case VORONOI_INSERT: - proot = root_acc; - break; - } - avltree_count (*proot, &numtrr); - - alloue_Mai_Del (mai, numtrr + numtrwait + 1, 100); - - listdel = mai->listdel; - numtri = 0; - avltree_print(*proot,listdel,&numtri); - if(numtrwait != 0){ - numtri = 0; - avltree_print(*root_w,(Delaunay**)del_L->array,&numtri); - for(i=0;i<numtrwait;i++){ - mai->listdel[i+numtrr] = *(Delaunay**)List_Pointer(del_L, i); - } - avltree_remove(root_w); - } - avltree_remove(root); - - List_Delete(del_L); - - mai->numtriangles = numtrr + numtrwait; - mai->numpoints = doc->numPoints; - mai->points = doc->points; - - /* Tous Les Triangles doivent etre orientes */ - - if (!mai->numtriangles){ - Msg(GERROR, "No triangles in surface mesh"); - return 0; - //mai->numtriangles = 1; - } - - for (i = 0; i < mai->numtriangles; i++){ - a = mai->listdel[i]->t.a; - b = mai->listdel[i]->t.b; - c = mai->listdel[i]->t.c; - - mai->listdel[i]->v.voisin1 = NULL; - if (((doc->points[b].where.h - doc->points[a].where.h) * - (doc->points[c].where.v - doc->points[b].where.v) - - (doc->points[c].where.h - doc->points[b].where.h) * - (doc->points[b].where.v - doc->points[a].where.v)) > 0.0){ - mai->listdel[i]->t.a = b; - mai->listdel[i]->t.b = a; - } - } - // MEMORY LEAK (JF) - // Free(doc->delaunay); - // doc->delaunay = 0; - return 1; -} - -void Maillage_Automatique_VieuxCode (Surface * pS, Mesh * m, int ori){ - ContourRecord *cp, **liste; - List_T *c; - Vertex *v, V[3], *ver[3], **pp[3]; - maillage M; - int err, i, j, k, N, a, b, d; - Simplex *s; - double Xmin, Xmax, Ymin, Ymax; - - - if (m->BGM.Typ == WITHPOINTS){ - is_3D = 0; - } - else{ - is_3D = 1; - } - - liste = (ContourPeek *) Malloc (List_Nbr (pS->Contours) * sizeof (ContourPeek)); - - k = 0; - - for (i = 0; i < List_Nbr (pS->Contours); i++){ - cp = (ContourRecord *) Malloc (sizeof (ContourRecord)); - List_Read (pS->Contours, i, &c); - cp->oriented_points = (PointRecord *) Malloc (List_Nbr (c) * sizeof (PointRecord)); - cp->perturbations = (MPoint *) Malloc (List_Nbr (c) * sizeof (MPoint)); - cp->numerocontour = i; - - for (j = 0; j < List_Nbr (c); j++){ - List_Read (c, j, &v); - if(!j){ - Xmin = Xmax = v->Pos.X ; - Ymin = Ymax = v->Pos.Y ; - } - else{ - Xmin = DMIN(Xmin, v->Pos.X) ; - Xmax = DMAX(Xmax, v->Pos.X) ; - Ymin = DMIN(Ymin, v->Pos.Y) ; - Ymax = DMAX(Ymax, v->Pos.Y) ; - } - } - - LC2D = sqrt(DSQR(Xmax-Xmin)+DSQR(Ymax-Ymin)); - - for (j = 0; j < List_Nbr (c); j++){ - List_Read (c, j, &v); - cp->oriented_points[j].where.h = v->Pos.X; - cp->oriented_points[j].where.v = v->Pos.Y; - - // On pourrait imaginer diviser les perturbations par un facteur - // dependant de v->lc, mais ca n'a pas l'air d'ameliorer le bignou - - cp->perturbations[j].h = CTX.mesh.rand_factor * LC2D * - (double)rand()/(double)RAND_MAX; - cp->perturbations[j].v = CTX.mesh.rand_factor * LC2D * - (double)rand()/(double)RAND_MAX; - - cp->oriented_points[j].numcontour = i; - cp->oriented_points[j].quality = v->lc; - cp->oriented_points[j].permu = k++; - cp->oriented_points[j].initial = v->Num; - } - cp->numpoints = List_Nbr (c); - liste[i] = cp; - } - - if (pS->Method) - mesh_domain (liste, List_Nbr (pS->Contours), &M, &N, 0); - - for (i = 0; i < M.numpoints; i++){ - if (gPointArray[i].initial < 0){ - gPointArray[i].initial = ++CurrentNodeNumber; - v = Create_Vertex (gPointArray[i].initial, gPointArray[i].where.h, - gPointArray[i].where.v, 0.0, gPointArray[i].quality, 0.0); - if (!Tree_Search (pS->Vertices, &v)) - Tree_Add (pS->Vertices, &v); - } - } - for (i = 0; i < 3; i++) - ver[i] = &V[i]; - - for (i = 0; i < M.numtriangles; i++){ - - a = M.listdel[i]->t.a; - b = M.listdel[i]->t.b; - d = M.listdel[i]->t.c; - - ver[0]->Num = gPointArray[a].initial; - ver[1]->Num = gPointArray[b].initial; - ver[2]->Num = gPointArray[d].initial; - err = 0; - for (j = 0; j < 3; j++){ - if ((pp[j] = (Vertex **) Tree_PQuery (pS->Vertices, &ver[j]))){ - } - else{ - err = 1; - Msg(GERROR, "Unknown vertex %d", ver[j]->Num); - } - } - if (ori && !err) - s = Create_Simplex (*pp[0], *pp[1], *pp[2], NULL); - else if (!err) - s = Create_Simplex (*pp[0], *pp[2], *pp[1], NULL); - if (!err){ - s->iEnt = pS->Num; - Tree_Insert (pS->Simplexes, &s); - } - // MEMORY LEAK (JF) - // Free(M.listdel[i]); - } - // ANOTHER ONE (JF) - Free (M.listdel); - Free (gPointArray); -} - - -void Make_Mesh_With_Points (DocRecord * ptr, PointRecord * Liste, int Numpoints){ - ptr->numTriangles = 0; - ptr->points = Liste; - ptr->numPoints = Numpoints; - ptr->delaunay = 0; - DelaunayAndVoronoi (ptr); - Conversion (ptr); - remove_all_dlist (ptr->numPoints, ptr->points); -} - -void filldel (Delaunay * deladd, int aa, int bb, int cc, - PointRecord * points, DocRecord * mesh){ - - double qual, newqual, L; - MPoint pt2, pt4; - Vertex *v, *dum; - - deladd->t.a = aa; - deladd->t.b = bb; - deladd->t.c = cc; - deladd->t.info = TOLINK; - deladd->t.info2 = 0; - deladd->v.voisin1 = NULL; - deladd->v.voisin2 = NULL; - deladd->v.voisin3 = NULL; - - CircumCircle (points[aa].where.h, - points[aa].where.v, - points[bb].where.h, - points[bb].where.v, - points[cc].where.h, - points[cc].where.v, - &deladd->t.xc, - &deladd->t.yc); - - pt2.h = deladd->t.xc; - pt2.v = deladd->t.yc; - if (!is_3D){ - if (mesh){ - newqual = find_quality (pt2, mesh); - } - else{ - newqual = (points[aa].quality + points[bb].quality + points[cc].quality) / 3.; - } - v = Create_Vertex (-1, pt2.h, pt2.v, 0.0, 0.0, 0.0); - Calcule_Z_Plan (&v, &dum); - Projette_Inverse (&v, &dum); - Free_Vertex (&v,0); - } - else{ - v = Create_Vertex (-1, pt2.h, pt2.v, 0.0, 0.0, 0.0); - Calcule_Z_Plan (&v, &dum); - Projette_Inverse (&v, &dum); - qual = Lc_XYZ (v->Pos.X, v->Pos.Y, v->Pos.Z, THEM); - if(CTX.mesh.constrained_bgmesh){ - if (mesh){ - newqual = MIN(qual,find_quality (pt2, mesh)); - } - else{ - newqual = MIN(qual, (points[aa].quality + points[bb].quality + points[cc].quality) / 3.); - } - } - else - newqual = qual; - Free_Vertex (&v,0); - } - - switch (LocalNewPoint){ - case CENTER_CIRCCIRC: - case BARYCENTER: - deladd->t.quality_value = - sqrt ((deladd->t.xc - points[cc].where.h) * (deladd->t.xc - points[cc].where.h) + - (deladd->t.yc - points[cc].where.v) * (deladd->t.yc - points[cc].where.v) - ) / newqual; - deladd->t.position = INTERN; - break; - - case VORONOI_INSERT: - pt4.h = points[bb].where.h; - pt4.v = points[bb].where.v; - //pt3.h = .5 * (points[bb].where.h + points[cc].where.h); - //pt3.v = .5 * (points[bb].where.v + points[cc].where.v); - deladd->t.quality_value = myhypot (pt2.h - pt4.h, pt2.v - pt4.v); - L = newqual / deladd->t.quality_value; - if (L > 1.5) - deladd->t.position = ACCEPTED; - else - deladd->t.position = NONACCEPTED; - break; - } -} - -void ActionEndTheCurve (void *a, void *b){ - Curve *c = *(Curve **) a; - End_Curve (c); -} - -void Maillage_Surface (void *data, void *dum){ - Surface **pS, *s; - Tree_T *tnxe; - int ori, nbqua = 0; - - pS = (Surface **) data; - s = *pS; - - if (!s->Support) - return; - - if(s->Dirty){ - Msg(INFO, "Not meshing dirty Surface %d", s->Num); - return; - } - - THESUPPORT = s->Support; - THESURFACE = s; - - LocalNewPoint = CTX.mesh.point_insertion; - - if (Tree_Nbr (s->Simplexes)) - Tree_Delete (s->Simplexes); - s->Simplexes = Tree_Create (sizeof (Simplex *), compareQuality); - if (Tree_Nbr (s->Vertices)) - Tree_Delete (s->Vertices); - s->Vertices = Tree_Create (sizeof (Vertex *), compareVertex); - - Msg(STATUS3, "Meshing Surface %d", s->Num); - - if (MeshTransfiniteSurface (s) || - MeshEllipticSurface (s) || - MeshCylindricalSurface (s) || - MeshParametricSurface (s) || - Extrude_Mesh (s)){ - Tree_Action (THEM->Points, PutVertex_OnSurf); - Tree_Action (s->Vertices, PutVertex_OnSurf); - Tree_Action (s->Vertices, Add_In_Mesh); - if (CTX.mesh.degree == 2) - Degre2 (THEM->Vertices, s->Vertices, s->Simplexes, NULL, s); - THEM->Statistics[5] += Tree_Nbr(THESURFACE->Vertices); - THEM->Statistics[7] += Tree_Nbr(THESURFACE->Simplexes); - - /* void TRIE_MON_GARS(void *a, void *b); - Tree_Action (THES->Simplexes, TRIE_MON_GARS); - Link_Simplexes(NULL, THES->Simplexes); - void constraint_the_edge (int ,int ,int); - constraint_the_edge (6, 45, 85); - */ - return; - } - - int TypSurface = s->Typ; - s->Typ = MSH_SURF_PLAN; - Plan_Moyen (pS, dum); - - Tree_Action (THEM->Points, Freeze_Vertex); - Tree_Action (s->Vertices, Freeze_Vertex); - Tree_Action (THEM->Points, Projette_Plan_Moyen); - Tree_Action (s->Vertices, Projette_Plan_Moyen); - Tree_Action (THEM->Curves, ActionEndTheCurve); - - End_Surface (s); - - ori = Calcule_Contours (s); - - if (CTX.mesh.algo == DELAUNAY_OLDALGO) - Maillage_Automatique_VieuxCode (s, THEM, ori); - else - AlgorithmeMaillage2DAnisotropeModeJF (s); - - if(CTX.mesh.nb_smoothing){ - Msg(STATUS3, "Mesh smoothing"); - tnxe = Tree_Create (sizeof (NXE), compareNXE); - create_NXE (s->Vertices, s->Simplexes, tnxe); - for (int i = 0; i < CTX.mesh.nb_smoothing; i++) - Tree_Action (tnxe, ActionLiss); - // MEMORY LEAK (JF) - delete_NXE (tnxe); - } - - - if (s->Recombine) - nbqua = Recombine (s->Vertices, s->Simplexes, s->RecombineAngle); - - s->Typ = TypSurface; - - if (s->Typ != MSH_SURF_PLAN){ - if (s->Extrude) - s->Extrude->Rotate (s->plan); - Tree_Action (s->Vertices, Calcule_Z); - if (s->Extrude) - s->Extrude->Rotate (s->invplan); - } - else - Tree_Action (s->Vertices, Calcule_Z_Plan); - - Tree_Action (s->Vertices, Projette_Inverse); - Tree_Action (THEM->Points, Projette_Inverse); - - Tree_Action (THEM->Points, deFreeze_Vertex); - Tree_Action (s->Vertices, deFreeze_Vertex); - - Tree_Action (THEM->Points, PutVertex_OnSurf); - Tree_Action (s->Vertices, PutVertex_OnSurf); - Tree_Action (s->Vertices, Add_In_Mesh); - - Tree_Action (THEM->Curves, ActionEndTheCurve); - End_Surface (s->Support); - End_Surface (s); - - if (CTX.mesh.degree == 2) - Degre2 (THEM->Vertices, THEM->VertexEdges, s->Simplexes, NULL, THESUPPORT); - - THEM->Statistics[5] += Tree_Nbr(THESURFACE->Vertices); - THEM->Statistics[7] += Tree_Nbr(THESURFACE->Simplexes); // tri+qua - THEM->Statistics[8] += nbqua; - -} diff --git a/Mesh/2D_Mesh.h b/Mesh/2D_Mesh.h deleted file mode 100644 index 2657828585337be43e6d46ccdb855118af6dc3ba..0000000000000000000000000000000000000000 --- a/Mesh/2D_Mesh.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef _2D_MESH_H_ -#define _2D_MESH_H_ - -typedef struct avl{ - void *treedata; - int balance; - struct avl *left; - struct avl *right; -}avlstruct; - -typedef avlstruct *avlptr; - -int remove_tree (avlstruct ** root); -int insert_avltree (avlstruct ** root, void *item, - int (*fcmp)(void *a, void *b)); -int delete_avltree (avlstruct ** root, void *item, - int (*fcmp)(void *a, void *b)); -int avltree_remove (avlstruct **root); -void avltree_count (avlptr root, int *numtri); -void avltree_print (avlptr root, Delaunay **listdel, int *numtri); -int avltree_insert (avlstruct **root, void *item, - int (*fcmp)(void *a, void *b)); -int avltree_delete (avlstruct **root, void *item, - int (*fcmp)(void *a, void *b)); -void findtree(avlptr root, double *qualm, - Delaunay **delf, DocRecord *MESH); -Delaunay *findrightest(avlptr root, DocRecord *MESH); - - -PointNumero Successor(PointNumero a,PointNumero b); - -Delaunay * Find_Triangle (MPoint pt, DocRecord *MESH, int typ); -int Insert_Triangle (avlstruct **root, Delaunay * del); -int Delete_Triangle ( avlstruct **root, Delaunay * del ); -int Insert_Point (MPoint pt, int *numpoints, int *numalloc, - DocRecord *doc, DocRecord *BGM, int is3d); -MPoint Localize (Delaunay * del , DocRecord *MESH); -void alloue_Mai_Pts(maillage *mai , int Nballoc , int incrAlloc); -void alloue_Mai_Del(maillage *mai , int Nballoc , int incrAlloc); - -void InitBricks (DocRecord *MESH); -int PtInTriangle(MPoint p , PointNumero a , PointNumero b , PointNumero c); -int DelaunayAndVoronoi(DocPeek doc); - -int Conversion(DocPeek doc ); -int CreateLinks(List_T * ListDelaunay , int NumDelaunay, - ContourRecord **ListContours , int Nc); - -void makepermut (int numpoints); -void verify_edges (List_T *ListDelaunay, ContourRecord **ListContour, - int NumContours , int NumDelaunay); -void verify_inside (Delaunay * ListDelaunay , int NumDelaunay ); - -void PushgPointArray(PointRecord *ptr); -void remove_all_dlist(int n, PointRecord *pPointArray); - -int PE_Del_Triangle (Delaunay *del , MPoint pt, DListPeek *ListEdges , - List_T *listkill, List_T *listDelforlink, - int *numlink, int *numdel); - -void filldel (Delaunay * deladd, int aa, int bb, int cc, - PointRecord * points, DocRecord * mesh); - -int CircumCircle(double x1,double y1,double x2,double y2,double x3,double y3, - double *xc,double *yc); -double find_quality (MPoint center, DocRecord * BGMESH); -void create_NXE (Tree_T * TreeAllNod, Tree_T * TreeAllElg, - Tree_T * TreeAllNXE); -void delete_NXE (Tree_T * TreeAllNXE); - -int Is_left_of(PointNumero x,PointNumero y,PointNumero check); -int Is_right_of(PointNumero x,PointNumero y,PointNumero check); -int DListInsert(DListRecord **dlist, MPoint center, PointNumero newPoint); -int DListDelete(DListPeek *dlist,PointNumero oldPoint); - -#endif diff --git a/Mesh/2D_Mesh_Aniso.cpp b/Mesh/2D_Mesh_Aniso.cpp deleted file mode 100644 index 83982b2fee6724d748faa1e80fd3ae6dfcb10c7d..0000000000000000000000000000000000000000 --- a/Mesh/2D_Mesh_Aniso.cpp +++ /dev/null @@ -1,1137 +0,0 @@ -// $Id: 2D_Mesh_Aniso.cpp,v 1.19 2001-08-13 09:38:14 geuzaine Exp $ - -/* - Jean-Francois Remacle - - Maillage Delaunay 2-D Anisotrope - Tres joli (a mon avis) -*/ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "CAD.h" -#include "Mesh.h" -#include "Interpolation.h" -#include "Create.h" -#include "Context.h" - -extern Context_T CTX ; -extern double LC2D ; - -void draw_polygon_2d (double r, double g, double b, int n, - double *x, double *y, double *z); - -MeshParameters:: MeshParameters (): - NbSmoothing (3), - DelaunayAlgorithm (DELAUNAY_NEWALGO), - DelaunayInsertionMethod (INSERTION_CENTROID), - DelaunayQuality (QUALITY_EDGES_BASED), - DelaunayKernel (DELAUNAY_KERANISO), - InteractiveDelaunay (false) -{ -} - -extern Simplex MyNewBoundary; -extern Mesh *THEM; -extern int CurrentNodeNumber; -extern double MAXIMUM_LC_FOR_SURFACE; -extern int Alerte_Point_Scabreux; -extern PointRecord *gPointArray; -extern Surface *PARAMETRIC; - -static Tree_T *Tsd, *Sim_Sur_Le_Bord ; -static List_T *Simplexes_Destroyed, *Simplexes_New, *Suppress; -static Simplex *THES; -static Vertex *THEV; -static Surface *SURF; -static Tree_T *FacesTree; -static int ZONEELIMINEE, Methode = 0; -static double volume; -static List_T *coquille; -static Edge *THEEDGE; - -double Interpole_lcTriangle (Simplex * s, Vertex * vv){ - double Xp, Yp, X[3], Y[3], det, u, v, q1, q2, q3; - - Xp = vv->Pos.X; - Yp = vv->Pos.Y; - - X[0] = s->V[0]->Pos.X; - X[1] = s->V[1]->Pos.X; - X[2] = s->V[2]->Pos.X; - - Y[0] = s->V[0]->Pos.Y; - Y[1] = s->V[1]->Pos.Y; - Y[2] = s->V[2]->Pos.Y; - - q1 = s->V[0]->lc; - q2 = s->V[1]->lc; - q3 = s->V[2]->lc; - - det = (X[2] - X[0]) * (Y[1] - Y[0]) - (Y[2] - Y[0]) * (X[1] - X[0]); - - if (det != 0.0){ - u = ((Xp - X[0]) * (Y[1] - Y[0]) - (Yp - Y[0]) * (X[1] - X[0])) / det; - v = ((X[2] - X[0]) * (Yp - Y[0]) - (Y[2] - Y[0]) * (Xp - X[0])) / det; - } - else{ - u = v = 0.0; - } - return (q1 * (1. - u - v) + q2 * v + q3 * u); -} - - -/* Au sens Riemannien, trouver le centre de l'ellipse - triangle de sommets (x1,x2,x3) - - T T - (x-x1) M (x-x1) = (x-x2) M (x-x2) - T T - (x-x1) M (x-x1) = (x-x3) M (x-x3) - */ - -void matXmat (int n, double mat1[3][3], double mat2[3][3], double Res[3][3]){ - for (int i = 0; i < n; i++){ - for (int j = 0; j < n; j++){ - Res[i][j] = 0.0; - for (int k = 0; k < n; k++) - Res[i][j] += mat1[i][k] * mat2[k][j]; - } - } -} - -void TmatXmat (int n, double mat1[3][3], double mat2[3][3], double Res[3][3]){ - for (int i = 0; i < n; i++){ - for (int j = 0; j < n; j++){ - Res[i][j] = 0.0; - for (int k = 0; k < n; k++) - Res[i][j] += mat1[k][i] * mat2[k][j]; - } - } -} - -Simplex * Create_Simplex_For2dmesh (Vertex * v1, Vertex * v2, Vertex * v3, Vertex * v4){ - Simplex *s; - double p12, p23, p13; - - s = Create_Simplex (v1, v2, v3, v4); - - THEM->Metric->setSimplexQuality (s, PARAMETRIC); - - if (PARAMETRIC){ - if ((!v2->ListCurves && !v3->ListCurves && !v3->ListCurves)){ - prosca (v1->us, v2->us, &p12); - p12 = fabs (p12); - prosca (v1->us, v3->us, &p13); - p13 = fabs (p13); - prosca (v2->us, v3->us, &p23); - p23 = fabs (p23); - if (s->Quality < CONV_VALUE && - (p12 < THEM->Metric->min_cos || p13 < THEM->Metric->min_cos || - p23 < THEM->Metric->min_cos)) - s->Quality = 1.0; - } - } - return s; -} - -/*En l'honneur de ma femme Stephanie... */ - -void VSIM_2D (void *a, void *b){ - Simplex *S; - - S = *(Simplex **) a; - if (S->V[2]) - volume += fabs (S->Volume_Simplexe2D ()); -} - -void Box_2_Triangles (List_T * P, Surface * s){ -#define FACT 1.1 -#define LOIN 0.2 - - int i, j; - static int pts[4][2] = { {0, 0}, - {1, 0}, - {1, 1}, - {0, 1} }; - static int tri[2][3] = { {1, 4, 2}, - {2, 4, 3} }; - double Xm, Ym, XM, YM, Xc, Yc; - Simplex *S, *ps; - Vertex *V, *v, *pv; - List_T *smp; - - smp = List_Create (2, 1, sizeof (Simplex *)); - - V = (Vertex *) Malloc (4 * sizeof (Vertex)); - - for (i = 0; i < List_Nbr (P); i++){ - List_Read (P, i, &v); - if (!i){ - Xm = XM = v->Pos.X; - Ym = YM = v->Pos.Y; - } - else{ - Xm = DMIN (Xm, v->Pos.X); - XM = DMAX (XM, v->Pos.X); - Ym = DMIN (Ym, v->Pos.Y); - YM = DMAX (YM, v->Pos.Y); - } - } - if (Xm == XM) - XM = Xm + 1.; - if (Ym == YM) - YM = Ym + 1.; - - Xc = XM - Xm; - Yc = YM - Ym; - - /* initialisation de la grille */ - - s->Grid.init = 0; - s->Grid.min.X = Xm - LOIN * FACT * Xc; - s->Grid.min.Y = Ym - LOIN * FACT * Yc; - s->Grid.max.X = XM + LOIN * FACT * Xc; - s->Grid.max.Y = YM + LOIN * FACT * Yc; - - s->Grid.Nx = s->Grid.Ny = 20; - - /* Longueur Caracteristique */ - - LC2D = sqrt (Xc * Xc + Yc * Yc); - - for (i = 0; i < 4; i++){ - if (pts[i][0]) - V[i].Freeze.X = V[i].Pos.X = Xm - LOIN * Xc; - else - V[i].Freeze.X = V[i].Pos.X = XM + LOIN * Xc; - if (pts[i][1]) - V[i].Freeze.Y = V[i].Pos.Y = Ym - LOIN * Yc; - else - V[i].Freeze.Y = V[i].Pos.Y = YM + LOIN * Yc; - - V[i].Freeze.Z = V[i].Pos.Z = 0.0; - - V[i].Num = -(++CurrentNodeNumber); - V[i].ListSurf = NULL; - pv = &V[i]; - pv->lc = 1.0; - pv->Mov = NULL; - Tree_Replace (s->Vertices, &pv); - } - - /* 2 Triangles forment le maillage de la boite */ - - for (i = 0; i < 2; i++){ - S = Create_Simplex_For2dmesh (&V[tri[i][0] - 1], &V[tri[i][1] - 1], - &V[tri[i][2] - 1], NULL); - List_Add (smp, &S); - S->iEnt = s->Num; - } - - Link_Simplexes (smp, NULL); - for (i = 0; i < List_Nbr (smp); i++){ - List_Read (smp, i, &ps); - for (j = 0; j < 3; j++) - if (ps->S[j] == NULL) - ps->S[j] = &MyNewBoundary; - Tree_Replace (s->Simplexes, &ps); - } - // MEMORY LEAK (JF) - List_Delete(smp); - -} - - -int Intersect_Edges_2d (Edge * a, Edge * b){ - double mat[2][2]; - double rhs[2], x[2]; - mat[0][0] = (a->V[1]->Pos.X - a->V[0]->Pos.X); - mat[0][1] = -(b->V[1]->Pos.X - b->V[0]->Pos.X); - mat[1][0] = (a->V[1]->Pos.Y - a->V[0]->Pos.Y); - mat[1][1] = -(b->V[1]->Pos.Y - b->V[0]->Pos.Y); - rhs[0] = b->V[0]->Pos.X - a->V[0]->Pos.X; - rhs[1] = b->V[0]->Pos.Y - a->V[0]->Pos.Y; - if (!sys2x2 (mat, rhs, x)) - return 0; - if (x[0] > 0.0 && x[0] < 1.0 && x[1] > 0.0 && x[1] < 1.0) - return 1; - return 0; -} - -int compareedgeptr (const void *a, const void *b){ - int i1, i2, j1, j2; - Edge *q, *w; - - q = *(Edge **) a; - w = *(Edge **) b; - i1 = IMAX (q->V[0]->Num, q->V[1]->Num); - i2 = IMAX (w->V[0]->Num, w->V[1]->Num); - j1 = IMIN (q->V[0]->Num, q->V[1]->Num); - j2 = IMIN (w->V[0]->Num, w->V[1]->Num); - - if (i1 < i2) - return (1); - if (i1 > i2) - return (-1); - if (j1 < j2) - return (1); - if (j1 > j2) - return (-1); - return 0; -} - -void putaindecoquille_2D (void *a, void *b){ - Edge *e = (Edge *) a; - if (!compareVertex (&e->V[0], &THEEDGE->V[0]) || - !compareVertex (&e->V[0], &THEEDGE->V[1]) || - !compareVertex (&e->V[1], &THEEDGE->V[0]) || - !compareVertex (&e->V[1], &THEEDGE->V[1])){ - return; - } - if (Intersect_Edges_2d (e, THEEDGE)) - List_Add (coquille, &e); -} - -void Recover_Edge (Surface * s, Edge * e, EdgesContainer & Edges){ - THEEDGE = e; - int i; - Edge *me, E; - Vertex *v[2]; - - coquille = List_Create (3, 3, sizeof (Edge *)); - /*On cherche la coquille */ - Tree_Action (Edges.AllEdges, putaindecoquille_2D); - Msg(INFO, "Edge %d->%d, %d intersections", - e->V[0]->Num, e->V[1]->Num, List_Nbr (coquille)); - - if(List_Nbr(coquille)==1){ - Msg(WARNING, "Unable to swap edge"); - List_Delete (coquille); - return; - } - - /*on swappe au hasard jusqu'a ce qu l'arete soit recuperee */ - while (List_Nbr(coquille)){ - - i = (int) (List_Nbr(coquille)*rand()/(RAND_MAX+1.0)); - //i = rand () % List_Nbr (coquille); - List_Read (coquille, i, &me); - v[0] = me->V[0]; - v[1] = me->V[1]; - List_Suppress (coquille, &me, compareedgeptr); - Edges.SwapEdge (v); - if (Edges.Search (e->V[0], e->V[1])) - break; - E.V[0] = v[0]; - E.V[1] = v[1]; - me = (Edge *) Tree_PQuery (Edges.AllEdges, &E); - putaindecoquille_2D (me, NULL); - } - - List_Delete (coquille); - - Msg(INFO, "Edge recovered"); - /*On swappe */ -} - -void constraint_the_edge (int isurf, int iv1, int iv2){ - Vertex *v1 = FindVertex (iv1, THEM); - Vertex *v2 = FindVertex (iv2, THEM); - Surface *s = FindSurface (isurf, THEM); - Edge e; - - if (!v1 || !v2) - return; - EdgesContainer EdgesOnSurface (s->Simplexes, false); - e.V[0] = v1; - e.V[1] = v2; - if (!EdgesOnSurface.Search (v1, v2)){ - Recover_Edge (s, &e, EdgesOnSurface); - } -} - -void missing_edges_2d (Surface * s){ - int i, j; - Curve *c; - Vertex *v1, *v2; - Edge e; - - EdgesContainer EdgesOnSurface (s->Simplexes, false); - - for (i = 0; i < List_Nbr (s->Generatrices); i++){ - List_Read (s->Generatrices, i, &c); - for (j = 1; j < List_Nbr (c->Vertices); j++){ - List_Read (c->Vertices, j - 1, &v1); - List_Read (c->Vertices, j, &v2); - e.V[0] = v1; - e.V[1] = v2; - if (!EdgesOnSurface.Search (v1, v2)) { - Msg(INFO, "Missing edge %d->%d", v1->Num, v2->Num); - Recover_Edge (s, &e, EdgesOnSurface); - } - } - } -} - -int Restore_Boundary (Surface * s){ - missing_edges_2d (s); - return 1; -} - -int Maillage_Edge (Vertex * v1, Vertex * v2, List_T * Points){ - int i; - static int qq = 1; - Simplex S, *s; - - s = &S; - s->F[0].V[0] = v1; - s->F[0].V[1] = v2; - - if (Tree_Search (FacesTree, &s)) - return 0; - - s = Create_Simplex_For2dmesh (v1, v2, NULL, NULL); - Tree_Add (FacesTree, &s); - - Curve *c = Create_Curve (qq++, MSH_SEGM_LINE, 1, NULL, NULL, -1, -1, 0, 1); - Vertex *v; - c->Control_Points = List_Create (2, 1, sizeof (Vertex *)); - List_Add (c->Control_Points, &v1); - List_Add (c->Control_Points, &v2); - c->beg = v1; - c->end = v2; - Maillage_Curve (&c, NULL); - for (i = 1; i < List_Nbr (c->Vertices) - 1; i++){ - List_Read (c->Vertices, i, &v); - List_Delete (v->ListCurves); - v->ListCurves = NULL; - List_Add (Points, &v); - } - List_Delete (c->Vertices); - List_Delete (c->Control_Points); - Free_Curve (&c,0); - return 1; -} - -void Action_First_Simplexes_2D (void *a, void *b){ - Simplex *q; - - if (!THES){ - q = *(Simplex **) a; - if (q->Pt_In_Ellipsis (THEV, THEM->Metric->m)){ - THES = q; - } - } -} - -void Fill_Sim_Des_2D (void *a, void *b){ - Simplex *S; - S = *(Simplex **) a; - if (S->Pt_In_Ellipsis (THEV, THEM->Metric->m)) - List_Add (Simplexes_Destroyed, a); -} - -void TStoLS_2D (void *a, void *b){ - List_Add (Simplexes_Destroyed, a); -} - -void TAtoLA_2D (void *a, void *b){ - List_Add (Simplexes_New, a); -} - -void CrSi_2D (void *a, void *b){ - SxF *S; - Simplex *s; - S = (SxF *) a; - if (S->NumFaceSimpl == 1){ - s = Create_Simplex_For2dmesh (THEV, S->F.V[0], S->F.V[1], NULL); - s->iEnt = ZONEELIMINEE; - List_Add (Simplexes_New, &s); - } - else if (S->NumFaceSimpl != 2){ - Msg(GERROR, "Panic in CrSi_2D..."); - } -} - -void NewSimplexes_2D (Surface * s, List_T * Sim, List_T * news){ - int i, j; - Tree_T *SimXFac; - Simplex *S; - SxF SXF, *pSXF; - - SimXFac = Tree_Create (sizeof (SxF), compareSxF); - - for (i = 0; i < List_Nbr (Sim); i++){ - List_Read (Sim, i, &S); - if (!i) - ZONEELIMINEE = S->iEnt; - else{ - if (S->iEnt != ZONEELIMINEE){ - Msg(WARNING, "Huh! The elimination failed %d %d", - S->iEnt, ZONEELIMINEE); - } - } - for (j = 0; j < 3; j++){ - SXF.F = S->F[j]; - - if ((pSXF = (SxF *) Tree_PQuery (SimXFac, &SXF))) { - (pSXF->NumFaceSimpl)++; - } - else { - SXF.NumFaceSimpl = 1; - Tree_Add (SimXFac, &SXF); - } - } - } - - /* Les faces non communes sont obligatoirement a la frontiere ... - -> Nouveaux simplexes */ - - Tree_Action (SimXFac, CrSi_2D); - Tree_Delete (SimXFac); -} - -int recur_bowyer_2D (Simplex * s){ - int i; - - Tree_Insert (Tsd, &s); - for (i = 0; i < 3; i++){ - if (s->S[i] && s->S[i] != &MyNewBoundary && !Tree_Query (Tsd, &s->S[i])){ - if (s->S[i]->Pt_In_Ellipsis (THEV, THEM->Metric->m) && (s->iEnt == s->S[i]->iEnt)){ - recur_bowyer_2D (s->S[i]); - } - else{ - if (s->iEnt != s->S[i]->iEnt){ - Alerte_Point_Scabreux = 1; - } - Tree_Insert (Sim_Sur_Le_Bord, &s->S[i]); - } - } - } - return 1; -} - - -bool draw_simplex2d (Surface * sur, Simplex * s, bool nouv){ - double x[3], y[3], z[3]; - Vertex v1, v2, v3; - - if (!THEM->MeshParams.InteractiveDelaunay) - return false; - - if (s == &MyNewBoundary || !s || !s->iEnt) - return false; - - v1 = InterpolateSurface (sur->Support, s->V[0]->Pos.X, s->V[0]->Pos.Y, 0, 0); - v2 = InterpolateSurface (sur->Support, s->V[1]->Pos.X, s->V[1]->Pos.Y, 0, 0); - v3 = InterpolateSurface (sur->Support, s->V[2]->Pos.X, s->V[2]->Pos.Y, 0, 0); - - x[0] = v1.Pos.X; - x[1] = v2.Pos.X; - x[2] = v3.Pos.X; - y[0] = v1.Pos.Y; - y[1] = v2.Pos.Y; - y[2] = v3.Pos.Y; - z[0] = v1.Pos.Z; - z[1] = v2.Pos.Z; - z[2] = v3.Pos.Z; - - if (nouv) - draw_polygon_2d (1., 0., 0., 3, x, y, z); - else - draw_polygon_2d (0., 0., 0., 3, x, y, z); - - return true; -} - -bool Bowyer_Watson_2D (Surface * sur, Vertex * v, Simplex * S, int force){ - int i; - Simplex *s; - static int init = 1; - double volumeold, volumenew; - - THEV = v; - - double x = (S->V[0]->Pos.X + S->V[1]->Pos.X + S->V[2]->Pos.X) / 3.; - double y = (S->V[0]->Pos.Y + S->V[1]->Pos.Y + S->V[2]->Pos.Y) / 3.; - - if (force) - THEM->Metric->setMetricMin (x, y, sur->Support); - else - THEM->Metric->setMetric (x, y, sur->Support); - - Tsd = Tree_Create (sizeof (Simplex *), compareSimplex); - Sim_Sur_Le_Bord = Tree_Create (sizeof (Simplex *), compareSimplex); - if (init){ - Simplexes_New = List_Create (10, 10, sizeof (Simplex *)); - Simplexes_Destroyed = List_Create (10, 10, sizeof (Simplex *)); - init = 0; - } - - if (Methode){ - Tree_Action (sur->Simplexes, Fill_Sim_Des_2D); - S = NULL; - } - else{ - recur_bowyer_2D (S); - } - - Tree_Action (Tsd, TStoLS_2D); - NewSimplexes_2D (sur, Simplexes_Destroyed, Simplexes_New); - - /* calcul des volumes des simplexes crees */ - - if (Alerte_Point_Scabreux || !CTX.mesh.speed_max){ - volume = 0.0; - for (i = 0; i < List_Nbr (Simplexes_Destroyed); i++){ - VSIM_2D (List_Pointer (Simplexes_Destroyed, i), NULL); - } - volumeold = volume; - volume = 0.0; - for (i = 0; i < List_Nbr (Simplexes_New); i++){ - VSIM_2D (List_Pointer (Simplexes_New, i), NULL); - } - volumenew = volume; - if (volumeold + volumenew == 0.0) - volumenew = 1.0; - } - else{ - volumeold = 1.0; - volumenew = 1.0; - } - - /* critere du volume */ - - if ((fabs (volumeold - volumenew) / (volumeold + volumenew)) > 1.e-8){ - if (S){ - Tree_Suppress (sur->Simplexes, &S); - S->Quality /= 2.; - Tree_Add (sur->Simplexes, &S); - } - if(force){ - List_Reset (Simplexes_New); - List_Reset (Simplexes_Destroyed); - Tree_Delete (Sim_Sur_Le_Bord); - Tree_Delete (Tsd); - return false; - } - } - else{ - Tree_Add (sur->Vertices, &THEV); - - /* Suppression des simplexes elimines */ - for (i = 0; i < List_Nbr (Simplexes_Destroyed); i++){ - List_Read (Simplexes_Destroyed, i, &s); - draw_simplex2d (sur, s, 0); - if (!Tree_Suppress (sur->Simplexes, &s)){ - Msg(WARNING, "Failed to suppress simplex %d", s->Num); - } - Free_Simplex (&s,0); - } - for (i = 0; i < List_Nbr (Simplexes_New); i++){ - List_Read (Simplexes_New, i, &s); - draw_simplex2d (sur, s, 1); - Tree_Add (sur->Simplexes, &s); - } - - /* Creation des liens entre nouveaux simplexes */ - - Tree_Action (Sim_Sur_Le_Bord, TAtoLA_2D); - Link_Simplexes (Simplexes_New, sur->Simplexes); - } - - List_Reset (Simplexes_New); - List_Reset (Simplexes_Destroyed); - Tree_Delete (Sim_Sur_Le_Bord); - Tree_Delete (Tsd); - return true; -} - -void Convex_Hull_Mesh_2D (List_T * Points, Surface * s){ - int i, N; - - N = List_Nbr (Points); - - Box_2_Triangles (Points, s); - for (i = 0; i < N; i++){ - THES = NULL; - List_Read (Points, i, &THEV); - Tree_Action (s->Simplexes, Action_First_Simplexes_2D); - /* - if(i%n == n-1){ - volume = 0.0; - Tree_Action(s->Simplexes,VSIM_2D); - Msg(STATUS3, %d->%d Nodes, %d Elements",i+1,N,Tree_Nbr(s->Simplexes)); - } - */ - if (!THES){ - Msg(GERROR, "Vertex (%g,%g,%g) in no simplex", - THEV->Pos.X, THEV->Pos.Y, THEV->Pos.Z); - THEV->Pos.X += CTX.mesh.rand_factor * LC2D * rand()/RAND_MAX; - THEV->Pos.Y += CTX.mesh.rand_factor * LC2D * rand()/RAND_MAX; - THEV->Pos.Z += CTX.mesh.rand_factor * LC2D * rand()/RAND_MAX; - Tree_Action (s->Simplexes, Action_First_Simplexes_2D); - } - bool ca_marche = Bowyer_Watson_2D (s, THEV, THES, 1); - while(!ca_marche){ - double dx = CTX.mesh.rand_factor * LC2D * rand()/RAND_MAX; - double dy = CTX.mesh.rand_factor * LC2D * rand()/RAND_MAX; - THEV->Pos.X += dx; - THEV->Pos.Y += dy; - ca_marche = Bowyer_Watson_2D (s, THEV, THES, 1); - THEV->Pos.X -= dx; - THEV->Pos.Y -= dy; - } - } - -} - -/* recuperation de la surface */ - -static List_T *ListCurves, *ListAllCurves; -static Tree_T *keep; -static Simplex *SIMP; -static int iSurface; - -void attribueSurface (void *a, void *b){ - Simplex *s; - s = *(Simplex **) a; - s->iEnt = iSurface; -} - -void Trouve_Simplex_2D (void *a, void *b){ - Simplex *s; - if (SIMP != NULL) - return; - s = *(Simplex **) a; - if (s->iEnt < 0) - SIMP = s; -} - -void Trouve_Simplex_Bord_2D (void *a, void *b){ - Simplex *s; - - if (SIMP != NULL) - return; - s = *(Simplex **) a; - if (s->V[0]->Num < 0 || s->V[1]->Num < 0 || s->V[2]->Num < 0) - SIMP = s; -} - -void CourbesDansSurface (Surface * s, List_T * ListAllCurves){ - int i, iseg; - Curve *c; - for (i = 0; i < List_Nbr (s->Generatrices); i++){ - List_Read (s->Generatrices, i, &c); - iseg = abs (c->Num); - List_Replace (ListAllCurves, &iseg, fcmp_int); - } -} - -int isListaSurface (List_T * ListSurf, Surface * s){ - int NN, j, srf; - bool found; - Curve *c; - NN = 0; - found = true; - for (j = 0; j < List_Nbr (s->Generatrices); j++){ - List_Read (s->Generatrices, j, &c); - srf = abs (c->Num); - if (!List_Search (ListSurf, &srf, fcmp_int)){ - found = false; - } - else - NN++; - } - if (found && NN == List_Nbr (ListSurf)) - return s->Num; - return 0; -} - -static List_T *StackSimp; -#define MAX_DEPTH 500 - -void recur_trouve_surface (Simplex * s, int *Depth){ - int i, j; - Simplex *pS, S; - - if (s->iEnt != -1) - return; - - if ((*Depth) > MAX_DEPTH){ - List_Add (StackSimp, &s); - return; - } - - (*Depth)++; - s->iEnt = -2; - Tree_Add (keep, &s); - for (i = 0; i < 3; i++){ - pS = &S; - pS->F[0] = s->F[i]; - if (Tree_Query (FacesTree, &pS) && List_Search (ListAllCurves, &pS->iEnt, fcmp_int)){ - j = abs (pS->iEnt); - List_Replace (ListCurves, &j, fcmp_int); - } - else if (s->S[i] && s->S[i] != &MyNewBoundary){ - recur_trouve_surface (s->S[i], Depth); - } - } - (*Depth)--; -} - -extern int compareSimpSurf (const void *a, const void *b); - -void Restore_Surface (Surface * s){ - int N; - int i, depth; - - StackSimp = List_Create (100, 100, sizeof (Simplex *)); - ListCurves = List_Create (2, 2, sizeof (int)); - iSurface = -1; - Tree_Action (s->Simplexes, attribueSurface); - - /* Les simplexes sur le bord exterieur sont elimines */ - ListAllCurves = List_Create (10, 3, sizeof (int)); - CourbesDansSurface (s, ListAllCurves); - - - SIMP = NULL; - Tree_Action (s->Simplexes, Trouve_Simplex_Bord_2D); - - if (SIMP){ - List_Add (StackSimp, &SIMP); - keep = Tree_Create (sizeof (Simplex *), compareQuality); - depth = 0; - i = 0; - do{ - List_Read (StackSimp, i, &SIMP); - recur_trouve_surface (SIMP, &depth); - } - while (++i < List_Nbr (StackSimp)); - List_Reset (StackSimp); - - N = Tree_Nbr (keep); - - iSurface = 0; - Tree_Action (keep, attribueSurface); - Tree_Delete (keep); - List_Reset (ListCurves); - } - - while (1){ - SIMP = NULL; - keep = Tree_Create (sizeof (Simplex *), compareQuality); - Tree_Action (s->Simplexes, Trouve_Simplex_2D); - if (!SIMP) - break; - List_Add (StackSimp, &SIMP); - depth = 0; - i = 0; - do{ - List_Read (StackSimp, i, &SIMP); - recur_trouve_surface (SIMP, &depth); - }while (++i < List_Nbr (StackSimp)); - - iSurface = isListaSurface (ListCurves, s); - - N = Tree_Nbr (keep); - Msg(INFO, "Initial mesh of Surface %d: %d simplices, %d/%d curves, %d faces", - iSurface, N, List_Nbr (ListCurves), List_Nbr (ListAllCurves), - Tree_Nbr (FacesTree)); - - Tree_Action (keep, attribueSurface); - Tree_Delete (keep); - List_Reset (ListCurves); - List_Reset (StackSimp); - } - // MEMORY LEAK (JF) - List_Delete (StackSimp); - List_Delete (ListCurves); - List_Delete (ListAllCurves); - -} - -void suppress_simplex_2D (void *data, void *dum){ - Simplex **pv; - - pv = (Simplex **) data; - if ((*pv)->iEnt == 0) - List_Add (Suppress, pv); -} - -Vertex * NewVertex_2D (Simplex * s){ - Vertex *v; - double lc; - lc = (s->V[0]->lc + s->V[1]->lc + s->V[2]->lc) / 3. ; - - //lc = DMIN(MAXIMUM_LC_FOR_SURFACE,lc); - - /*v = Create_Vertex( ++CurrentNodeNumber, - (s->V[0]->Pos.X + s->V[1]->Pos.X + s->V[2]->Pos.X)/3., - (s->V[0]->Pos.Y + s->V[1]->Pos.Y + s->V[2]->Pos.Y)/3., - 0.0, lc, 0.0); - */ - - if (THEM->MeshParams.DelaunayInsertionMethod == INSERTION_CENTROID) - v = Create_Vertex (++CurrentNodeNumber, s->Center.X, s->Center.Y, 0.0, lc, 0.0); - else if (THEM->MeshParams.DelaunayInsertionMethod == INSERTION_EDGE) { - Vertex *vv[2]; - double l = THEM->Metric->getWorstEdge (s, PARAMETRIC, vv); - double f = 0.5; - - if (vv[0]->lc <= vv[1]->lc) - f = vv[0]->lc / l; - else - f = 1. - (vv[1]->lc / l); - - if (f >= 1) - v = Create_Vertex (++CurrentNodeNumber, s->Center.X, s->Center.Y, 0.0, lc, 0.0); - else - v = Create_Vertex (++CurrentNodeNumber, - f * vv[0]->Pos.X + (1. - f) * vv[1]->Pos.X, - f * vv[0]->Pos.Y + (1. - f) * vv[1]->Pos.Y, 0.0, lc, 0.0); - } - - v->lc = Interpole_lcTriangle (s, v); - - if (PARAMETRIC){ - if (!v->ListCurves) - Normal2Surface (PARAMETRIC->Support, v->Pos.X, v->Pos.Y, v->us); - else { - v->us[0] = v->us[1] = v->us[2] = 0.0; - } - } - return (v); -} - -extern Mesh *LOCAL; - -void TRIE_MON_GARS (void *a, void *b){ - Simplex *s = *(Simplex **) a; - s->Fourre_Simplexe (s->V[0], s->V[1], s->V[2], s->V[3]); - s->iEnt = SURF->Num; - s->S[0] = s->S[1] = s->S[2] = NULL; - THEM->Metric->setSimplexQuality (s, PARAMETRIC); - //SURF->Num; - //qsort(s->F[0].V,3,sizeof(Vertex*),compareVertex); -} - -void RandomSwapEdges2d (Surface * s){ - int i, j = 1, k; - List_T *AllTrg = Tree2List (s->Simplexes); - Simplex *t; - for (i = 0; i < List_Nbr (AllTrg); i++){ - k = rand () % List_Nbr (AllTrg); - List_Read (AllTrg, k, &t); - j = rand () % 3; - if (draw_simplex2d (s, t, false)) - draw_simplex2d (s, t->S[j], false); - t->SwapEdge (j); - if (draw_simplex2d (s, t, true)) - draw_simplex2d (s, t->S[j], true); - } -} - -void IntelligentSwapEdges (Surface * s, GMSHMetric * m){ - int i, j, k; - List_T *AllTrg = Tree2List (s->Simplexes); - Vertex *p[4], *q[4]; - Simplex *t; - for (i = 0; i < List_Nbr (AllTrg); i++) { - k = rand () % List_Nbr (AllTrg); - List_Read (AllTrg, k, &t); - j = rand () % 3; - if (t->ExtractOppositeEdges (j, p, q)){ - double qp = 2. * m->EdgeLengthOnSurface (s, p, 1) - / (RacineDeTrois * (p[0]->lc + p[1]->lc)); - double qq = 2. * m->EdgeLengthOnSurface (s, q, 1) - / (RacineDeTrois * (q[0]->lc + q[1]->lc)); - if (fabs (qp) > fabs (qq)){ - if (draw_simplex2d (s, t, false)) - draw_simplex2d (s, t->S[j], false); - t->SwapEdge (j); - if (draw_simplex2d (s, t, true)) - draw_simplex2d (s, t->S[j], true); - } - } - } - List_Delete (AllTrg); -} - -int AlgorithmeMaillage2DAnisotropeModeJF (Surface * s){ - List_T *Points = List_Create (100, 100, sizeof (Vertex *)); - int j, i, N, n; - List_T *c; - Curve *cur, *curinv; - extern int FACE_DIMENSION; - Simplex *simp; - Vertex *newv; - static int COUNT = 0; - - FACE_DIMENSION = 1; - - SURF = s; - LOCAL = NULL; - - if (s->Typ == MSH_SURF_PLAN || s->Typ == MSH_SURF_REGL || s->Typ == MSH_SURF_TRIC) - PARAMETRIC = NULL; - - ZONEELIMINEE = s->Num; - - for (i = 0; i < List_Nbr (s->Contours); i++){ - List_Read (s->Contours, i, &c); - for (j = 0; j < List_Nbr (c); j++){ - Vertex *pv; - List_Read (c, j, &pv); - List_Add (Points, &pv); - } - } - - N = List_Nbr (Points); - n = N + 100; - - Msg(STATUS2, "Mesh 2D... (initial)"); - - Convex_Hull_Mesh_2D (Points, s); - List_Reset (Points); - Link_Simplexes (NULL, s->Simplexes); - - //return 1; - - if (!Restore_Boundary (s)){ - //s->Simplexes = Tree_Create(sizeof(Simplex*),compareSimplex); - FACE_DIMENSION = 2; - Tree_Action (s->Simplexes, TRIE_MON_GARS); - return 1; - } - - Tree_Action (s->Simplexes, TRIE_MON_GARS); - Link_Simplexes (NULL, s->Simplexes); - List_T *List = Tree2List (s->Simplexes); - Tree_Delete (s->Simplexes); - s->Simplexes = Tree_Create (sizeof (Simplex *), compareQuality); - for (i = 0; i < List_Nbr (List); i++) - Tree_Add (s->Simplexes, List_Pointer (List, i)); - List_Delete (List); - - // return 1; - - FacesTree = Tree_Create (sizeof (Simplex *), compareSimpSurf); - for (i = 0; i < List_Nbr (s->Generatrices); i++){ - List_Read (s->Generatrices, i, &cur); - curinv = FindCurve (abs (cur->Num), THEM); - List_T *temp = Tree2List (curinv->Simplexes); - for (j = 0; j < List_Nbr (temp); j++){ - Tree_Add (FacesTree, List_Pointer (temp, j)); - } - List_Delete (temp); - } - - Restore_Surface (s); - - // MEMORY LEAK (JF) - Tree_Delete(FacesTree); - - Suppress = List_Create (10, 10, sizeof (Simplex *)); - Tree_Action (s->Simplexes, suppress_simplex_2D); - for (i = 0; i < List_Nbr (Suppress); i++){ - Tree_Suppress (s->Simplexes, List_Pointer (Suppress, i)); - } - - Msg(STATUS2, "Mesh 2D... (final)"); - - if(!Tree_Right (s->Simplexes, &simp)) - Msg(WARNING, "No simplex left"); - else{ - i = 0; - while ( simp->Quality > CONV_VALUE){ - newv = NewVertex_2D (simp); - while (!simp->Pt_In_Simplex_2D (newv) && - (simp->S[0] == &MyNewBoundary || !simp->S[0]->Pt_In_Simplex_2D (newv)) && - (simp->S[1] == &MyNewBoundary || !simp->S[1]->Pt_In_Simplex_2D (newv)) && - (simp->S[2] == &MyNewBoundary || !simp->S[2]->Pt_In_Simplex_2D (newv))){ - /* - Msg(INFO,"pt : %12.5E %12.5E",newv->Pos.X,newv->Pos.Y); - Msg(INFO,"not in : (%12.5E %12.5E) (%12.5E %12.5E) (%12.5E %12.5E)", - simp->V[0]->Pos.X,simp->V[0]->Pos.Y,simp->V[1]->Pos.X, - simp->V[1]->Pos.Y,simp->V[2]->Pos.X,simp->V[2]->Pos.Y); - */ - Tree_Suppress (s->Simplexes, &simp); - simp->Quality /= 2.; - Tree_Insert (s->Simplexes, &simp); - Tree_Right (s->Simplexes, &simp); - if (simp->Quality < CONV_VALUE) - break; - newv = NewVertex_2D (simp); - } - if (simp->Quality < CONV_VALUE) - break; - i++; - if (i % n == n - 1){ - volume = 0.0; - Tree_Action (s->Simplexes, VSIM_2D); - Msg(STATUS3, "Nod=%d Elm=%d", - Tree_Nbr (s->Vertices), Tree_Nbr (s->Simplexes)); - Msg(STATUS1, "Vol(%g) Conv(%g->%g)", volume, simp->Quality, CONV_VALUE); - } - Bowyer_Watson_2D (s, newv, simp, 0); - Tree_Right (s->Simplexes, &simp); - //if(i>COUNT)break; - } - } - - //for(i=0;i<3;i++)RandomSwapEdges2d(s); - //for(i=0;i<2;i++)IntelligentSwapEdges(s,THEM->Metric); - - List_Reset (Points); - FACE_DIMENSION = 2; - COUNT++; - - Tree_Action (s->Simplexes, TRIE_MON_GARS); - Link_Simplexes (NULL, s->Simplexes); - List = Tree2List (s->Simplexes); - Tree_Delete (s->Simplexes); - s->Simplexes = Tree_Create (sizeof (Simplex *), compareSimplex); - for (i = 0; i < List_Nbr (List); i++) - Tree_Add (s->Simplexes, List_Pointer (List, i)); - List_Delete (List); - - /*suppression des points de la boite */ - List = Tree2List (s->Vertices); - for (i = 0; i < List_Nbr (List); i++){ - List_Read (List, i, &THEV); - if (THEV->Num < 0){ - Tree_Suppress (s->Vertices, &THEV); - // BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG - // MEMORY LEAK (JF) BUT THIS CAUSES PROBLEMS AFTER !! - // Free(THEV); - // BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG BUG - } - } - List_Delete (List); - - if(!Tree_Nbr(s->Simplexes)) - Msg(GERROR, "No triangles in surface %d", s->Num); - - /* - RandomSwapEdges2d(s); - for(i=0;i<1;i++)IntelligentSwapEdges(s,THEM->Metric); - */ - //IntelligentSwapEdges(s,THEM->Metric); - - List_Delete (Points); - - - // WAS A MEMORY LEAK - for (i = 0; i < List_Nbr (Suppress); i++){ - Free_Simplex(List_Pointer (Suppress, i),0); - } - List_Delete (Suppress); - - - return 1; -} - diff --git a/Mesh/2D_Parametric.cpp b/Mesh/2D_Parametric.cpp deleted file mode 100644 index 0996538f4dc49f1b255b774bb455656115f027d7..0000000000000000000000000000000000000000 --- a/Mesh/2D_Parametric.cpp +++ /dev/null @@ -1,128 +0,0 @@ -// $Id: 2D_Parametric.cpp,v 1.6 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "CAD.h" -#include "Interpolation.h" -#include "Mesh.h" -#include "2D_Mesh.h" -#include "Create.h" -#include "Context.h" - -extern Mesh *THEM; -extern Context_T CTX; - -static Surface *SURF; -Surface *PARAMETRIC; - -/* SURFACES CYLINDRIQUES */ - -void XYZtoUV (void *a, void *dum){ - Vertex *v; - double uu, vv; - v = *(Vertex **) a; - ProjectPointOnSurface (SURF->Support, v, &uu, &vv); - v->Pos.X = uu; - v->Pos.Y = vv; - v->Pos.Z = 0.0; -} - -void UVtoXYZ (void *a, void *dum){ - Vertex *v, n; - v = *(Vertex **) a; - - n = InterpolateSurface (SURF->Support, v->Pos.X, v->Pos.Y, 0, 0); - - v->Pos.X = n.Pos.X; - v->Pos.Y = n.Pos.Y; - v->Pos.Z = n.Pos.Z; -} - -void printMetric (Mesh * m, Surface * s, char *name){ - - int N = 10, M = 10, i, j; - double u, v; - FILE *f = fopen (name, "w"); - if (!f) - return; - fprintf (f, "View \"metric\" Offset{0,0,0} {\n"); - for (i = 0; i < N; i++){ - u = (s->ku[0]) + (s->ku[s->Nu + s->OrderU] - s->ku[0]) - * (double) i / (double) (N - 1); - for (j = 0; j < M; j++){ - v = (s->kv[0]) + (s->kv[s->Nv + s->OrderV] - s->kv[0]) - * (double) j / (double) (M - 1); - m->Metric->setMetric (u, v, s); - fprintf (f, "VT (%f,%f,0,%f,%f,0,%f,%f,0)" - "{%g,%g,%g,%g,%g,%g,%g,%g,%g};\n", - u, v, u, v, u, v, - m->Metric->m[0][0], m->Metric->m[0][1], 0.0, - m->Metric->m[0][0], m->Metric->m[0][1], 0.0, - m->Metric->m[0][0], m->Metric->m[0][1], 0.0); - fprintf (f, "VT (%f,%f,0,%f,%f,0,%f,%f,0)" - "{%g,%g,%g,%g,%g,%g,%g,%g,%g};\n", - u, v, u, v, u, v, - m->Metric->m[1][0], m->Metric->m[1][1], 0.0, - m->Metric->m[1][0], m->Metric->m[1][1], 0.0, - m->Metric->m[1][0], m->Metric->m[1][1], 0.0); - } - } - fprintf (f, "};\n"); - fclose (f); -} - -int MeshParametricSurface (Surface * s){ - - int i, j, ori; - Curve *pC; - Vertex *v; - Tree_T *tnxe; - - PARAMETRIC = s; - - if (s->Typ == MSH_SURF_NURBS) - return 1; - if (s->Typ != MSH_SURF_TRIMMED || s->Support->Typ != MSH_SURF_NURBS) - return 0; - - SURF = s; - if (!List_Nbr (s->Generatrices)) - return 1; - for (i = 0; i < List_Nbr (s->Generatrices); i++){ - List_Read (s->Generatrices, i, &pC); - for (j = 0; j < List_Nbr (pC->Vertices); j++){ - List_Read (pC->Vertices, j, &v); - Tree_Insert (s->Vertices, List_Pointer (pC->Vertices, j)); - } - } - - //printMetric(THEM,s,"metric.pos"); - - Tree_Action (s->Vertices, Freeze_Vertex); - - Tree_Action (s->Vertices, XYZtoUV); - ori = Calcule_Contours (s); - - if (!AlgorithmeMaillage2DAnisotropeModeJF (s)) - Maillage_Automatique_VieuxCode (s, THEM, ori); - - if (CTX.mesh.nb_smoothing){ - tnxe = Tree_Create (sizeof (NXE), compareNXE); - create_NXE (s->Vertices, s->Simplexes, tnxe); - - for(i = 0 ; i < CTX.mesh.nb_smoothing ; i++) - Tree_Action (tnxe, ActionLiss); - - //AmelioreSurface_EliminationTripet (s, THEM, tnxe); - - Tree_Delete (tnxe); - } - - Tree_Action (s->Vertices, UVtoXYZ); - Tree_Action (s->Vertices, deFreeze_Vertex); - - PARAMETRIC = NULL; - - return 1; -} diff --git a/Mesh/2D_Recombine.cpp b/Mesh/2D_Recombine.cpp deleted file mode 100644 index 91806c3365fce56b61a822ca418da72732b8ac73..0000000000000000000000000000000000000000 --- a/Mesh/2D_Recombine.cpp +++ /dev/null @@ -1,123 +0,0 @@ -// $Id: 2D_Recombine.cpp,v 1.9 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Mesh.h" -#include "Utils.h" -#include "2D_Mesh.h" -#include "Create.h" -#include "Context.h" - -extern Context_T CTX; - -Tree_T *RecEdges,*Triangles; -Tree_T *RecSimplex,*TREEELM; -double ALPHA; -int RECNUM; - -void addTriangles(void *data, void *dum){ - Simplex *S; - S = *(Simplex**)data; - if(S->V[2] && !S->V[3])Tree_Add(Triangles,&S); -} - -void addrecedges (void *a, void *b){ - Edge *ed; - ed = (Edge*)a; - if(ed->a < ALPHA)Tree_Add(RecEdges,ed); -} - -void CalculeAngles (void *a, void *b){ - Edge *ed; - double Angle; - - ed = (Edge*)a; - if(List_Nbr(ed->Simplexes) != 2){ - ed->a = 90.; - return; - } - - Angle = fabs(90. - angle_3pts(ed->O[0],ed->V[0],ed->O[1])); - Angle = DMAX(fabs(90. - angle_3pts(ed->V[0],ed->O[1],ed->V[1])),Angle); - Angle = DMAX(fabs(90. - angle_3pts(ed->O[1],ed->V[1],ed->O[0])),Angle); - Angle = DMAX(fabs(90. - angle_3pts(ed->V[0],ed->O[0],ed->V[1])),Angle); - ed->a = Angle; -} - - -void Recombine_Farce (void *a, void *b){ - Edge *ed; - Simplex *s1,*s2; - ed = (Edge*)a; - - if (ed->a < ALPHA){ - List_Read(ed->Simplexes,0,&s1); - List_Read(ed->Simplexes,1,&s2); - if(Tree_Search(RecSimplex,&s1)) return; - if(s1->V[3]) return; - if(Tree_Search(RecSimplex,&s2)) return; - if(s2->V[3]) return; - Tree_Add(RecSimplex,&s1); - Tree_Suppress(TREEELM,&s1); - s2->V[3] = ed->V[0]; - s2->V[2] = ed->O[0]; - s2->V[1] = ed->V[1]; - s2->V[0] = ed->O[1]; - RECNUM++; - } -} - -int Recombine (Tree_T *TreeAllVert, Tree_T *TreeAllElg, double a){ - Tree_T *TreeEdges,*tnxe; - int ntot; - - ALPHA = a; - TREEELM = TreeAllElg; - ntot = 0; - - while(1){ - - /* Initialisation */ - RECNUM = 0; - TreeEdges = Tree_Create(sizeof(Edge),compareedge); - RecEdges = Tree_Create(sizeof(Edge),compareedge_angle); - RecSimplex = Tree_Create(sizeof(Simplex*),compareSimplex); - Triangles = Tree_Create(sizeof(Simplex*),compareSimplex); - - /* Recombinaison */ - Tree_Action(TreeAllElg,addTriangles); - crEdges(Triangles,TreeEdges); - Tree_Action(TreeEdges,CalculeAngles); - Tree_Action(TreeEdges,addrecedges); - Tree_Action(RecEdges,Recombine_Farce); - - /* Lissage */ - if(CTX.mesh.nb_smoothing){ - Msg(STATUS3, "Mesh smoothing"); - tnxe = Tree_Create(sizeof(NXE),compareNXE); - create_NXE(TreeAllVert,TreeAllElg,tnxe); - for (int i = 0; i < CTX.mesh.nb_smoothing; i++) - Tree_Action(tnxe,ActionLissSurf); - // MEMORY LEAK (JF) - delete_NXE(tnxe); - } - - /* Destruction */ - Tree_Delete(TreeEdges); - Tree_Delete(RecEdges); - Tree_Delete(RecSimplex); - Tree_Delete(Triangles); - - /* Si aucune recombinaison -> fin */ - ntot += RECNUM; - if(!RECNUM)break; - } - - Msg(STATUS2, "Recombined %d Quadrangles",ntot); - - return ntot ; - -} - - - diff --git a/Mesh/2D_SMesh.cpp b/Mesh/2D_SMesh.cpp deleted file mode 100644 index a5360db3b6425d12374c3c58d7e7c1483fef3dd1..0000000000000000000000000000000000000000 --- a/Mesh/2D_SMesh.cpp +++ /dev/null @@ -1,288 +0,0 @@ -// $Id: 2D_SMesh.cpp,v 1.7 2001-06-03 11:21:02 geuzaine Exp $ - -/* - Maillage transfini surfacique - *s2 - s3 c2 s2 /| - *-----------* / | - | | c2/ |c1 - c3| |c1 / | - | | / | - v *-----------* *-----* - | s0 c0 s1 s0 c0 s1 - *--u - - Decoupages : | - *--* - |\ | - | \| - *--*-- - s0 -> s1 -*/ - -#include "Gmsh.h" -#include "Geo.h" -#include "Mesh.h" -#include "Numeric.h" -#include "Interpolation.h" - -extern Mesh *THEM; -extern int CurrentNodeNumber; - -int index1d (int flag, int N, int n){ - switch(flag){ - case 0 : return(n); - case 1 : return(N-n-1); - default : return -1; - } -} - -int MeshTransfiniteSurface (Surface *sur) { - int i,j,k,flag,nb,N1,N2,issphere; - int nbquad=0,nbtri=0; - Curve *G[4],*GG[4]; - Vertex V,**vexist,*pV,*c1,*c2,**list,*CP[2]; - Simplex *simp; - double u,v; - int C_flag[4]; - Vertex *C[4],*S[4]; - - static int tab1qua[] = {0,1, 1,2, 3,2, 0,3}; - static int tab1tri[] = {0,1, 1,2, 0,2}; - static int tab2[] = {0,1, 1,0}; - - if (sur->Method != TRANSFINI) return(0); - - switch(sur->Typ){ - - case MSH_SURF_REGL: - case MSH_SURF_PLAN: - case MSH_SURF_TRIC: - case MSH_SURF_NURBS: - - nb = List_Nbr(sur->Generatrices); - if(nb != 3 && nb != 4) return(0); - - for(i=0;i<4;i++) G[i] = NULL ; - - for(i=0;i<nb;i++){ - V.Num = sur->ipar[i]; - pV = &V; - if((vexist = (Vertex**)Tree_PQuery(THEM->Vertices,&pV)) == NULL) { - Msg(WARNING, "Unknown Control Point %d in Transfinite Surface %d", - V.Num,sur->Num); - return(0); - } - else{ - S[i]=*vexist; - } - } - - for(i=0;i<nb;i++) List_Read(sur->Generatrices,i,&GG[i]); - - for(i=0;i<nb;i++){ - List_Read(GG[i]->Control_Points,0,&CP[0]); - List_Read(GG[i]->Control_Points,List_Nbr(GG[i]->Control_Points)-1,&CP[1]); - - for(flag=0;flag<2;flag++){ - for(k=0;k<nb;k++){ - if(nb == 4){ - if(S[tab1qua[2*k ]]->Num == CP[tab2[2*flag ]]->Num && - S[tab1qua[2*k+1]]->Num == CP[tab2[2*flag+1]]->Num){ - G[k]=GG[i]; - C_flag[k]=flag; - } - } - else{ - if(S[tab1tri[2*k ]]->Num == CP[tab2[2*flag ]]->Num && - S[tab1tri[2*k+1]]->Num == CP[tab2[2*flag+1]]->Num){ - G[k]=GG[i]; - C_flag[k]=flag; - } - } - } - } - } - - for(i=0;i<nb;i++) - if(G[i] == NULL) { - Msg(WARNING, "Wrong definition of Transfinite Surface %d", - sur->Num); - return(0); - } - - if(nb == 4) { - if((N1 = List_Nbr(G[0]->Vertices)) != List_Nbr(G[2]->Vertices)) return(0); - if((N2 = List_Nbr(G[1]->Vertices)) != List_Nbr(G[3]->Vertices)) return(0); - } - else { - if((N1 = List_Nbr(G[0]->Vertices)) != List_Nbr(G[2]->Vertices)) return(0); - N2 = List_Nbr(G[1]->Vertices); - } - - sur->Nu = N1; - sur->Nv = N2; - list = (Vertex**)Malloc(N1*N2*sizeof(Vertex*)); - - issphere = 1; - for(i=0;i<nb;i++){ - if(G[i]->Typ != MSH_SEGM_CIRC && G[i]->Typ != MSH_SEGM_CIRC_INV){ - issphere = 0; - } - else if (issphere){ - if(!i){ - List_Read(G[i]->Control_Points, 1, &c1); - } - else{ - List_Read(G[i]->Control_Points, 1, &c2); - if(compareVertex(&c1,&c2))issphere = 0; - } - } - } - - for(i=0;i<N1;i++){ - List_Read(G[0]->Vertices, index1d(C_flag[0],N1,i), &C[0]); - List_Read(G[2]->Vertices, index1d(C_flag[2],N1,i), &C[2]); - - if( (G[0]->Num>0 && C_flag[0]) || (G[0]->Num<0 && !C_flag[0]) ) - u = 1.-C[0]->u; - else - u = C[0]->u; - - for(j=0;j<N2;j++){ - List_Read(G[1]->Vertices, index1d(C_flag[1],N2,j), &C[1]); - if(nb == 4) - List_Read(G[3]->Vertices, index1d(C_flag[3],N2,j), &C[3]); - - if( (G[1]->Num>0 && C_flag[1]) || (G[1]->Num<0 && !C_flag[1]) ) - v = 1.-C[1]->u; - else - v = C[1]->u; - - if(i && j && i != N1-1 && j != N2-1){ - if (sur->Typ == MSH_SURF_NURBS) - V = InterpolateSurface (sur, u, v, 0, 0); - else if(nb == 4) - V = TransfiniteQua(*C[0],*C[1],*C[2],*C[3],*S[0],*S[1],*S[2],*S[3],u,v); - else - V = TransfiniteTri(*C[0],*C[1],*C[2],*S[0],*S[1],*S[2],u,v); - if(issphere) - TransfiniteSph(*C[0],*c1,&V); - list[i+N1*j] = Create_Vertex(++CurrentNodeNumber,V.Pos.X,V.Pos.Y,V.Pos.Z,V.lc,0.0); - } - else if(!i) - list[i+N1*j] = (nb == 4)?C[3]:C[2]; - else if(!j) - list[i+N1*j] = C[0]; - else if(i == N1-1) - list[i+N1*j] = C[1]; - else if(j == N2-1) - list[i+N1*j] = C[2]; - - list[i + N1 * j]->us[0] = u; - list[i + N1 * j]->us[1] = v; - } - } - - - for(i=0;i<N1;i++){ - for(j=0;j<N2;j++){ - List_Add(sur->TrsfVertices,&list[i+N1*j]); - } - } - - if(nb == 4){ - for(i=0;i<N1;i++){ - for(j=0;j<N2;j++){ - Tree_Replace(sur->Vertices,&list[i+N1*j]); - } - } - for(i=0;i<N1-1;i++){ - for(j=0;j<N2-1;j++){ - if(sur->Recombine){ - simp = Create_Quadrangle(list[(i) + N1*(j)], list[(i+1)+ N1*(j)], - list[(i+1)+ N1*(j+1)], list[(i)+ N1*(j+1)]); - simp->iEnt = sur->Num; - Tree_Add(sur->Simplexes,&simp); - List_Add(sur->TrsfSimplexes,&simp); - - nbquad++; - } - else{ - simp = Create_Simplex(list[(i) + N1*(j)], list[(i+1) + N1*(j)], - list[(i) + N1*(j+1)], NULL); - simp->iEnt = sur->Num; - Tree_Add(sur->Simplexes,&simp); - List_Add(sur->TrsfSimplexes,&simp); - - simp = Create_Simplex(list[(i+1) + N1*(j+1)], list[(i) + N1*(j+1)], - list[(i+1) + N1*(j)], NULL); - simp->iEnt = sur->Num; - Tree_Add(sur->Simplexes,&simp); - List_Add(sur->TrsfSimplexes,&simp); - - nbtri += 2; - } - } - } - } - else if(nb == 3) { - Tree_Replace(sur->Vertices,&list[0]); - for(i=1;i<N1;i++){ - for(j=0;j<N2;j++){ - Tree_Replace(sur->Vertices,&list[i+N1*j]); - } - } - for(j=0;j<N2-1;j++){ - simp = Create_Simplex(list[1 + N1*(j+1)], list[N1*(j+1)],list[1 + N1*(j)],NULL); - simp->iEnt = sur->Num; - Tree_Add(sur->Simplexes,&simp); - List_Add(sur->TrsfSimplexes,&simp); - - nbtri++; - } - for(i=1;i<N1-1;i++){ - for(j=0;j<N2-1;j++){ - if(sur->Recombine){ - simp = Create_Quadrangle(list[(i) + N1*(j)],list[(i+1) + N1*(j)], - list[(i+1) + N1*(j+1)],list[i+N1*(j+1)]); - simp->iEnt = sur->Num; - Tree_Add(sur->Simplexes,&simp); - List_Add(sur->TrsfSimplexes,&simp); - - nbquad++; - } - else{ - simp = Create_Simplex(list[(i) + N1*(j)], list[(i+1) + N1*(j)], - list[(i) + N1*(j+1)],NULL); - simp->iEnt = sur->Num; - Tree_Add(sur->Simplexes,&simp); - List_Add(sur->TrsfSimplexes,&simp); - - simp = Create_Simplex(list[(i+1) + N1*(j+1)], list[(i) + N1*(j+1)], - list[(i+1) + N1*(j)], NULL); - simp->iEnt = sur->Num; - Tree_Add(sur->Simplexes,&simp); - List_Add(sur->TrsfSimplexes,&simp); - - nbtri += 2; - } - } - } - - } - break; - - default: - return(0); - } - - Free(list); - - // We count this here, to be able to distinguish very quickly - // between triangles and quadrangles later - THEM->Statistics[8] += nbquad; - - return(1); -} - diff --git a/Mesh/2D_Tree.cpp b/Mesh/2D_Tree.cpp deleted file mode 100644 index 46e0735944f00398a2af98c2328a5803512eb315..0000000000000000000000000000000000000000 --- a/Mesh/2D_Tree.cpp +++ /dev/null @@ -1,137 +0,0 @@ -// $Id: 2D_Tree.cpp,v 1.4 2001-01-08 08:05:44 geuzaine Exp $ - -#include "Gmsh.h" -#include "Mesh.h" -#include "2D_Mesh.h" - -/* BOUSILLE L'ARBRE TOTALEMENT (pas les donnees mais les liens) */ - -int avltree_remove (avlstruct **root){ - int delete_this_node = 0; - - if(*root == NULL) return(1); - - if (((*root)->left == NULL) && ((*root)->right == NULL)) - delete_this_node = 1; - else - { - if ((*root)->left == NULL) - if (avltree_remove(&(*root)->left)) - { - Free((*root)->left); - (*root)->left = NULL; - } - if ((*root)->right == NULL) - if (avltree_remove(&(*root)->right)) - { - Free((*root)->right); - (*root)->right = NULL; - } - if (((*root)->left == NULL) && ((*root)->right == NULL)) - delete_this_node = 1; - } - return delete_this_node; -} - - -/* INSERE UN NOEUD */ - -int avltree_insert (avlstruct **root, void *item, - int (*fcmp)(void *a, void *b)){ - int cmpresult; - - if(*root != NULL) - cmpresult = fcmp(item,(*root)->treedata); - - if (*root == NULL){ - *root = (avlstruct *) Malloc (sizeof(avlstruct)); - (*root)->treedata = item; - (*root)->left = NULL; - (*root)->right = NULL; - } - else if (cmpresult < 0) - avltree_insert(&(*root)->left,item,fcmp); - else - avltree_insert(&(*root)->right,item,fcmp); - return(1); -} - - - -/* EFFACE UN NOEUD */ - -int avltree_delete (avlstruct **root, void *item, - int (*fcmp)(void *a, void *b)){ - - avlstruct *t1,*t12; - int cmpresult; - - if(*root != NULL) - cmpresult = fcmp(item , (*root)->treedata); - - if (*root == NULL) { - return(1); - } - if (cmpresult < 0){ - return(avltree_delete(&(*root)->left,item,fcmp)); - } - else if (cmpresult > 0){ - return(avltree_delete(&(*root)->right,item,fcmp)); - } - else if ((cmpresult == 0)) { - if (((*root)->right == NULL) && (&(*root)->left == NULL)){ - Free(*root); - return(1); - } - else if((*root)->right == NULL){ - t1 = (*root)->left; - Free(*root); - *root = t1; - return(1); - } - else if ((*root)->left == NULL){ - t1 = (*root)->right; - Free(*root); - *root = t1; - return(1); - } - else{ - t1 = t12 = (*root)->right; - while(t12->left != NULL) - t12 = t12->left; - t12->left = (*root)->left; - Free(*root); - *root = t1; - return(1); - } - } - else{ - return(avltree_delete(&(*root)->left,item,fcmp)); - } - -} - -/* compte le nombre d'elements d'un arbre */ - -void avltree_count (avlptr root, int *numtri){ - - if(root != NULL){ - avltree_count(root->left,numtri); - - (*numtri)++; - - avltree_count(root->right,numtri); - } -} - - -/* deroule l'arbre dans un vecteur */ - -void avltree_print (avlptr root, Delaunay **listdel, int *numtri){ - if(root != NULL){ - avltree_print(root->left,listdel,numtri); - listdel[(*numtri)++] = (Delaunay*)(root)->treedata; - avltree_print(root->right,listdel,numtri); - } -} - diff --git a/Mesh/2D_Util.cpp b/Mesh/2D_Util.cpp deleted file mode 100644 index 32dc5e8d6051a9fd8d04fffb906c58e09920c58a..0000000000000000000000000000000000000000 --- a/Mesh/2D_Util.cpp +++ /dev/null @@ -1,373 +0,0 @@ -// $Id: 2D_Util.cpp,v 1.12 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Mesh.h" -#include "2D_Mesh.h" -#include "Context.h" - -extern Context_T CTX; -extern int LocalNewPoint; -extern PointRecord *gPointArray; -extern Mesh *THEM; - -int Comparekey(void * d1,void * d2){ - - double val ; - PointNumero a,b,c,aa,bb,cc; - - a = ((Delaunay*)d1)->t.a; - b = ((Delaunay*)d1)->t.b; - c = ((Delaunay*)d1)->t.c; - aa = ((Delaunay*)d2)->t.a; - bb = ((Delaunay*)d2)->t.b; - cc = ((Delaunay*)d2)->t.c; - - val = ((Delaunay*)d2)->t.quality_value - ((Delaunay*)d1)->t.quality_value; - - if ((aa==a)&&(bb==b)&&(cc==c)){ - return 0; - } - else if (val > 1.e-21 ) - return 1; - else if (val < -1.e-21 ) - return -1; - else{ - if (((Delaunay*)d1)->t.xc > ((Delaunay*)d2)->t.xc) - return -1; - else - return 1; - } -} - -int Insert_Triangle (avlstruct **root, Delaunay * del){ - - if ( !avltree_insert(root,del,Comparekey) ) return(0); - - return(1); -} - -int Delete_Triangle ( avlstruct **root, Delaunay * del ){ - - if (!avltree_delete(root,del,Comparekey)) return(0); - - if (*root == NULL) return(0); - return(1); -} - -int Insert_Point (MPoint pt, int *numpoints, int *numalloc, - DocRecord *doc, DocRecord *BGM, int is3d){ - Vertex *v,*dum; - double qual; - - if ( *numpoints >= *numalloc ) { - gPointArray = (PointRecord *) Realloc(gPointArray, - (*numalloc + 1000) * sizeof(PointRecord)); - *numalloc += 1000; - doc->points = gPointArray; - } - PushgPointArray(gPointArray); - gPointArray[*numpoints].where.h = pt.h; - gPointArray[*numpoints].where.v = pt.v; - gPointArray[*numpoints].numcontour = -1; - gPointArray[*numpoints].initial = -1; - if(!is3d) - gPointArray[*numpoints].quality = find_quality(pt,BGM); - else{ - v = Create_Vertex (-1,pt.h,pt.v,0.0,0.0,0.0); - Calcule_Z_Plan(&v, &dum); - Projette_Inverse(&v, &dum); - qual = Lc_XYZ ( v->Pos.X,v->Pos.Y,v->Pos.Z,THEM) ; - if(CTX.mesh.constrained_bgmesh) - gPointArray[*numpoints].quality = MIN(find_quality(pt,BGM),qual); - else - gPointArray[*numpoints].quality = qual; - Free_Vertex(&v,0); - } - - (*numpoints)++; - - return 1; -} - -void findtree(avlptr root, double *qualm, Delaunay **delf, DocRecord *MESH){ - - /* - trouve le triangle possedant le facteur de qualite max - modif : le centre du cercle circonscrit de ce triangle - doit etre dans le domaine - */ - - MPoint pt; - double q; - Delaunay *del; - - if(root != NULL){ - findtree((root)->left,qualm,delf,MESH); - del = (Delaunay*)root->treedata; - q = del->t.quality_value; - pt.h = del->t.xc; - pt.v = del->t.yc; - if ((q>*qualm) && (Find_Triangle (pt ,MESH,A_TOUT_PRIX) != NULL) ){ - *qualm = q; - *delf = del; - } - findtree((root)->right,qualm,delf,MESH); - } -} - - -Delaunay *findrightest(avlptr root, DocRecord *MESH){ - - Delaunay *del,**dee; - MPoint pt; - avlptr exroot; - double qualm; - - exroot = root; - - while((exroot)->left != NULL){ - exroot = (exroot)->left; - } - - del = (Delaunay*)(exroot)->treedata; - pt.h = del->t.xc; - pt.v = del->t.yc; - if( (LocalNewPoint == VORONOI_INSERT) ||(LocalNewPoint == SQUARE_TRI) ) - return del; - - if(Find_Triangle(pt,MESH,A_TOUT_PRIX) != NULL )return del; - - exroot = root; - del = (Delaunay*)(root)->treedata; - qualm = del->t.quality_value; - dee = &del; - findtree(exroot, &qualm, dee, MESH); - del = *dee; - - return (del); -} - -double lengthseg (MPoint a, MPoint b){ - return (pow(DSQR(a.h-b.h)+DSQR(a.v-b.v),0.5)); -} - - -MPoint Localize (Delaunay * del , DocRecord *MESH) { - - /* - Routine de localisation du point a inserer. - Variable globale LocalNewPoint : - - CENTER_CIRCCIRC : au centre du cercle circonscrit - - VORONOI_INSERT : sur une branche de voronoi - - BARYCENTER : au centre de gravite - - SQUARE_TRI : essaie de creer des triangles rectangles isoceles - dans le but de mailler avec des quadrangles - */ - - MPoint pt,pta,ptb,ptc,ptm; - PointNumero a,b; - double p,q,val,vec[2],ro,rm; - Delaunay *v1,*v2,*v3,*del2 ; - - switch (LocalNewPoint) { - - case (CENTER_CIRCCIRC) : - - pt.h = del->t.xc; - pt.v = del->t.yc; - - return(pt); - - case (BARYCENTER) : - - pt.h = ( gPointArray[del->t.a].where.h + gPointArray[del->t.b].where.h - + gPointArray[del->t.c].where.h ) /3.; - pt.v = ( gPointArray[del->t.a].where.v + gPointArray[del->t.b].where.v - + gPointArray[del->t.c].where.v ) /3.; - - return(pt); - - case (VORONOI_INSERT) : - case (SQUARE_TRI) : - - /* - si le triangle est pres d'un bord -> ce bord est l'arete choisie - */ - if ((v1 = del->v.voisin1) == NULL) { - /* v1 == NULL; */ - v2 = del->v.voisin2; - v3 = del->v.voisin3; - } - else if ((v2 = del->v.voisin2) == NULL) { - v1 = NULL; - v2 = del->v.voisin1; - v3 = del->v.voisin3; - } - else if ((v3 = del->v.voisin3) == NULL) { - v1 = NULL; - v2 = del->v.voisin1; - v3 = del->v.voisin2; - } - else { - v1 = del->v.voisin1; - v2 = del->v.voisin2; - v3 = del->v.voisin3; - } - - /* - Si l'arete est un bord -> - */ - if (v1 == NULL){ - - if((v2 != NULL) && (v3 != NULL) ) { - - if ( ((del->t.a == v2->t.a) || (del->t.a == v2->t.b) || (del->t.a == v2->t.c)) && - ((del->t.a == v3->t.a) || (del->t.a == v3->t.b) || (del->t.a == v3->t.c))){ - a = del->t.b; - b = del->t.c; - } - else if ( ((del->t.b == v2->t.a) || (del->t.b == v2->t.b) || (del->t.b == v2->t.c)) && - ((del->t.b == v3->t.a) || (del->t.b == v3->t.b) || (del->t.b == v3->t.c))){ - a = del->t.a; - b = del->t.c; - } - else if ( ((del->t.c == v2->t.a) || (del->t.c == v2->t.b) || (del->t.c == v2->t.c)) && - ((del->t.c == v3->t.a) || (del->t.c == v3->t.b) || (del->t.c == v3->t.c))){ - a = del->t.a; - b = del->t.b; - } - else{ - Msg(GERROR, "Voronoi insert 1"); - } - } - else if(v2 != NULL) { - if((del->t.a != v2->t.c) && (del->t.a != v2->t.c) && (del->t.a != v2->t.c)){ - a = del->t.a; - b = del->t.b; - } - else if((del->t.b != v2->t.c) && (del->t.b != v2->t.c) && (del->t.b != v2->t.c)){ - a = del->t.b; - b = del->t.c; - } - else if((del->t.c != v2->t.c) && (del->t.c != v2->t.c) && (del->t.c != v2->t.c)){ - a = del->t.a; - b = del->t.c; - } - else { - Msg(GERROR,"Voronoi insert 2"); - } - } - else if(v3 != NULL) { - if((del->t.a != v3->t.c) && (del->t.a != v3->t.c) && (del->t.a != v3->t.c)){ - a = del->t.a; - b = del->t.b; - } - else if((del->t.b != v3->t.c) && (del->t.b != v3->t.c) && (del->t.b != v3->t.c)){ - a = del->t.b; - b = del->t.c; - } - else if((del->t.c != v3->t.c) && (del->t.c != v3->t.c) && (del->t.c != v3->t.c)){ - a = del->t.a; - b = del->t.c; - } - else { - Msg(GERROR, "Voronoi insert 3"); - } - } - } - else { - if( v1->t.position == ACCEPTED )del2 = v1; - else if( v2->t.position == ACCEPTED )del2 = v2; - else if( v3->t.position == ACCEPTED )del2 = v3; - else { - Msg(GERROR,"Coherence in Localize"); - } - - if((del->t.a != del2->t.a) && (del->t.a != del2->t.b) && (del->t.a != del2->t.c)){ - a = del->t.b; - b = del->t.c; - } - else if((del->t.b != del2->t.a) && (del->t.b != del2->t.b) && (del->t.b != del2->t.c)){ - a = del->t.a; - b = del->t.c; - } - else if((del->t.c != del2->t.a) && (del->t.c != del2->t.b) && (del->t.c != del2->t.c)){ - a = del->t.a; - b = del->t.b; - } - else{ - Msg(GERROR,"Voronoi insert"); - } - } - - /* - On sait que l'arete du nouveau triangle est a b - */ - - pta.h = gPointArray[a].where.h; - ptb.h = gPointArray[b].where.h; - pta.v = gPointArray[a].where.v; - ptb.v = gPointArray[b].where.v; - - /* - pte.h = gPointArray[c].where.h; - pte.v = gPointArray[c].where.v; - */ - - p = 0.5 * lengthseg(pta,ptb); - - ptc.h = del->t.xc; - ptc.v = del->t.yc; - - ptm.h = 0.5*( pta.h + ptb.h ); - ptm.v = 0.5*( pta.v + ptb.v ); - - q = lengthseg(ptm,ptc); - - vec[0] = (ptc.h - ptm.h)/q; - vec[1] = (ptc.v - ptm.v)/q; - - val = (p*p + q*q) / (2.*q); - - ro = find_quality(ptm,MESH)/RacineDeTrois; - - rm = ((ro > q )? ro : ro ); - rm = ((rm < val)? rm : val); - - // WARNING RANDOM - - pt.h = ptm.h + vec[0] * (rm + pow( rm*rm - p * p,0.5 )) ; - //+ (double) (rand() % 1000) / 1.e8; - pt.v = ptm.v + vec[1] * (rm + pow( rm*rm - p * p,0.5 )) ; - //+ (double) (rand() % 1000) / 1.e8; - - return(pt); - } - - pt.h = 0.0; - pt.v = 0.0; - return pt; - -} - -/********************************************************************/ - -void alloue_Mai_Pts(maillage *mai , int Nballoc , int incrAlloc){ - int i; - - mai->points = (PointRecord *)Malloc(Nballoc*sizeof(PointRecord)); - for(i=0;i<Nballoc;i++){ - mai->points[i].where.h=0.0; - mai->points[i].where.v=0.0; - } - mai->IncrAllocPoints = incrAlloc; - mai->NumAllocPoints = Nballoc; -} - -void alloue_Mai_Del(maillage *mai , int Nballoc , int incrAlloc){ - mai->listdel = (delpeek *)Malloc(Nballoc * sizeof(delpeek)); - mai->IncrAllocTri = incrAlloc; - mai->NumAllocTri = Nballoc; -} - diff --git a/Mesh/3D_BGMesh.cpp b/Mesh/3D_BGMesh.cpp deleted file mode 100644 index 092e579a3e69698cd1660e75d428077b2a845e30..0000000000000000000000000000000000000000 --- a/Mesh/3D_BGMesh.cpp +++ /dev/null @@ -1,396 +0,0 @@ -// $Id: 3D_BGMesh.cpp,v 1.17 2001-04-25 20:42:39 geuzaine Exp $ - -#include "Gmsh.h" -#include "Mesh.h" -#include "2D_Mesh.h" -#include "3D_Mesh.h" -#include "Adapt.h" -#include "Views.h" -#include "Numeric.h" -#include "Context.h" - -extern Mesh *THEM; -extern Context_T CTX; - -static Mesh m; -static double XX, YY, ZZ, D, LL; - -void ExportLcFieldOnVolume (Mesh * M){ - List_T *l = Tree2List (M->Volumes); - Volume *vol; - Simplex *simp; - FILE *f = fopen ("OutFile.pos", "w"); - - if(!f){ - Msg(GERROR, "Unable to open file"); - return; - } - - fprintf (f, "View \"LC_FIELD\" Offset{0,0,0} {\n"); - for (int i = 0; i < List_Nbr (l); i++){ - List_Read (l, i, &vol); - List_T *ll = Tree2List (vol->Simplexes); - for (int j = 0; j < List_Nbr (ll); j++){ - List_Read (ll, j, &simp); - simp->ExportLcField (f); - } - List_Delete (ll); - } - List_Delete (l); - fprintf (f, "};\n"); - fclose (f); -} - -void ExportLcFieldOnSurfaces (Mesh * M){ - List_T *l = Tree2List (M->Surfaces); - Surface *surf; - Simplex *simp; - FILE *f = fopen ("OutFileS.pos", "w"); - - if(!f){ - Msg(GERROR, "Unable to open file"); - return; - } - - fprintf (f, "View \"LC_FIELD\" Offset{0,0,0} {\n"); - for (int i = 0; i < List_Nbr (l); i++){ - List_Read (l, i, &surf); - List_T *ll = Tree2List (surf->Simplexes); - for (int j = 0; j < List_Nbr (ll); j++){ - List_Read (ll, j, &simp); - simp->ExportLcField (f); - } - List_Delete (ll); - } - List_Delete (l); - fprintf (f, "};\n"); - fclose (f); -} - -void findcloser (void *a, void *b){ - Vertex *v; - double dd; - v = *(Vertex **) a; - dd = DSQR (v->Pos.X - XX) + DSQR (v->Pos.Y - YY) + DSQR (v->Pos.Z - ZZ); - if (dd < D){ - D = dd; - LL = v->lc; - } -} - -void LCBGM (double X, double Y, double Z, double *l){ - if (Pt_In_Volume (X, Y, Z, &m, l, .01)); - else if (Pt_In_Volume (X, Y, Z, &m, l, .02)); - else if (Pt_In_Volume (X, Y, Z, &m, l, .07)); - else if (Pt_In_Volume (X, Y, Z, &m, l, .1)); - else if (Pt_In_Volume (X, Y, Z, &m, l, .2)); - else if (Pt_In_Volume (X, Y, Z, &m, l, .8)); - else if (Pt_In_Volume (X, Y, Z, &m, l, 20.)); - else { - XX = X; - YY = Y; - ZZ = Z; - D = 1.e24; - LL = 1; - Tree_Action (m.Vertices, findcloser); - *l = LL; - } -} - -double Lc_XYZ (double X, double Y, double Z, Mesh * m){ - double l; - - //l = 0.1 * fabs(cos(2 * 3.14159 * X) * cos( 2 * 3.14159 * Y)) + 0.01; - //return l; - - switch (m->BGM.Typ){ - case FUNCTION: - break; - case CONSTANT: - l = m->BGM.lc; - break; - case ONFILE: - LCBGM (X, Y, Z, &l); - break; - case WITHPOINTS: - Msg(WARNING, "Send a mail to <gmsh@geuz.org> if you see this (Lc_XYZ)"); - if (Pt_In_Volume (X, Y, Z, m, &l, 0.0)); - else if (Pt_In_Volume (X, Y, Z, m, &l, 0.2)); - else if (Pt_In_Volume (X, Y, Z, m, &l, 0.5)); - else{ - Msg(GERROR, "Exterior Point (%g,%g,%g)", X, Y, Z); - l = 1.e-25; - } - break; - } - return CTX.mesh.lc_factor*l; -} - -/* ------------------------------------------------------------------------ */ -/* B G M W i t h V i e w */ -/* ------------------------------------------------------------------------ */ - -static Tree_T *Pts; - -static void AIG (void *a, void *b){ - Simplex *s = *(Simplex **) a; - AddSimplexInGrid (&m, s, BOITE); -} - -int BGMWithView (Post_View * ErrView){ - static Vertex *VertexUp, *v, V, *ver[4]; - int i, j, k, nb; - double *X, *Y, *Z, *Val; - Simplex *si; - - VertexUp = Create_Vertex (-1, 0., 0., 1., 1., -1.0); - Pts = Tree_Create (sizeof (Vertex *), comparePosition); - - m.BGM.Typ = ONFILE; - - m.Vertices = Tree_Create (sizeof (Vertex *), compareVertex); - m.Simplexes = Tree_Create (sizeof (Simplex *), compareSimplex); - Create_BgMesh (ONFILE, .2, THEM); - - - k = 1; - if(ErrView->NbST){ - nb = List_Nbr(ErrView->ST) / ErrView->NbST ; - for(i = 0 ; i < List_Nbr(ErrView->ST) ; i+=nb){ - X = (double*)List_Pointer_Fast(ErrView->ST,i); - Y = (double*)List_Pointer_Fast(ErrView->ST,i+3); - Z = (double*)List_Pointer_Fast(ErrView->ST,i+6); - Val = (double*)List_Pointer_Fast(ErrView->ST,i+9); - - for (j = 0; j < 3; j++){ - v = &V; - v->Pos.X = X[j]; - v->Pos.Y = Y[j]; - v->Pos.Z = Z[j]; - if (Tree_Query (Pts, &v)){ - ver[j] = v; - } - else{ - v = Create_Vertex (k++, X[j], Y[j], Z[j], Val[j], -1.0); - ver[j] = v; - Tree_Add (m.Vertices, &v); - Tree_Add (Pts, &v); - } - } - si = Create_Simplex (ver[0], ver[1], ver[2], VertexUp); - Tree_Add (m.Simplexes, &si); - } - } - - if(ErrView->NbSS){ - nb = List_Nbr(ErrView->SS) / ErrView->NbSS ; - for(i = 0 ; i < List_Nbr(ErrView->SS) ; i+=nb){ - X = (double*)List_Pointer_Fast(ErrView->SS,i); - Y = (double*)List_Pointer_Fast(ErrView->SS,i+4); - Z = (double*)List_Pointer_Fast(ErrView->SS,i+8); - Val = (double*)List_Pointer_Fast(ErrView->SS,i+12); - - for (j = 0; j < 4; j++){ - v = &V; - v->Pos.X = X[j]; - v->Pos.Y = Y[j]; - v->Pos.Z = Z[j]; - if (Tree_Query (Pts, &v)){ - ver[j] = v; - } - else{ - v = Create_Vertex (k++, X[j], Y[j], Z[j], Val[j], -1.0); - ver[j] = v; - Tree_Add (m.Vertices, &v); - Tree_Add (Pts, &v); - } - } - si = Create_Simplex (ver[0], ver[1], ver[2], ver[3]); - Tree_Add (m.Simplexes, &si); - } - } - - m.Grid.init = 0; - m.Grid.Nx = 10; - m.Grid.Ny = 10; - m.Grid.Nz = 10; - Tree_Action (m.Vertices, findminmax); - getminmax (&m.Grid.min.X, &m.Grid.min.Y, &m.Grid.min.Z, - &m.Grid.max.X, &m.Grid.max.Y, &m.Grid.max.Z); - - if (m.Grid.max.Z == m.Grid.min.Z){ - m.Grid.Nz = 1; - Tree_Add (m.Vertices, &VertexUp); - Tree_Action (m.Vertices, findminmax); - getminmax (&m.Grid.min.X, &m.Grid.min.Y, &m.Grid.min.Z, - &m.Grid.max.X, &m.Grid.max.Y, &m.Grid.max.Z); - } - - Tree_Action (m.Simplexes, AIG); - - Msg(INFO, "Background mesh loaded (%d nodes, %d elements)", - Tree_Nbr(m.Vertices), Tree_Nbr(m.Simplexes)); - - return (1); -} - - -double ErrorInView (Post_View * ErrView, int *n){ - double e, tot=0.0, *Val; - int i, j=0, nb; - - if(ErrView == NULL){ - Msg(WARNING, "Empty error view"); - return 0.; - } - - if(ErrView->NbST){ - nb = List_Nbr(ErrView->ST) / ErrView->NbST ; - for(i = 0 ; i < List_Nbr(ErrView->ST) ; i+=nb){ - Val = (double*)List_Pointer_Fast(ErrView->ST,i+9); - e = (Val[0] + Val[1] + Val[2]) / 3. ; - tot += e * e; - j++; - } - } - - if(ErrView->NbSS){ - nb = List_Nbr(ErrView->SS) / ErrView->NbSS ; - for(i = 0 ; i < List_Nbr(ErrView->SS) ; i+=nb){ - Val = (double*)List_Pointer_Fast(ErrView->SS,i+12); - e = (Val[0] + Val[1] + Val[2] + Val[3]) * 0.25 ; - tot += e * e; - j++; - } - } - - *n = j; - - return 100 * sqrt (tot); -} - - -/* ------------------------------------------------------------------------ */ -/* C r e a t e B G M */ -/* ------------------------------------------------------------------------ */ - -int CreateBGM (Post_View * ErrView, int OptiMethod, double Degree, - double OptiValue, double *ObjFunct, char *OutFile){ - double *h, *p, *e, xc, yc, zc, c[3], *X, *Y, *Z, *Val; - int N, i, j, dim, nb; - Simplex smp; - FILE *f; - - if (ErrView->NbSS) - dim = 3; - else - dim = 2; - - N = ErrView->NbSS + ErrView->NbST + 2; - - h = (double *) malloc (N * sizeof (double)); - e = (double *) malloc (N * sizeof (double)); - p = (double *) malloc (N * sizeof (double)); - - j = 0; - - if(ErrView->NbST){ - nb = List_Nbr(ErrView->ST) / ErrView->NbST ; - for(i = 0 ; i < List_Nbr(ErrView->ST) ; i+=nb){ - X = (double*)List_Pointer_Fast(ErrView->ST,i); - Y = (double*)List_Pointer_Fast(ErrView->ST,i+3); - Z = (double*)List_Pointer_Fast(ErrView->ST,i+6); - Val = (double*)List_Pointer_Fast(ErrView->ST,i+9); - /* - Attention, cette ligne est seulement valable en - 2d x-y. Si plus, calculer le centre du cercle en - 3d ou utiliser une autre mesure de taille. - */ - CircumCircle (X[0], Y[0], - X[1], Y[1], - X[2], Y[2], - &xc, &yc); - h[j + 1] = sqrt ((xc - X[0]) * (xc - X[0]) + - (yc - Y[0]) * (yc - Y[0])); - p[j + 1] = Degree; - e[j + 1] = (Val[0] + Val[1] + Val[2]) / 3. ; - j++; - } - } - - if(ErrView->NbSS){ - nb = List_Nbr(ErrView->SS) / ErrView->NbSS ; - for(i = 0 ; i < List_Nbr(ErrView->SS) ; i+=nb){ - X = (double*)List_Pointer_Fast(ErrView->SS,i); - Y = (double*)List_Pointer_Fast(ErrView->SS,i+3); - Z = (double*)List_Pointer_Fast(ErrView->SS,i+8); - Val = (double*)List_Pointer_Fast(ErrView->SS,i+12); - - smp.center_tet (X, Y, Z, c); - xc = c[0]; - yc = c[1]; - zc = c[2]; - - h[j + 1] = sqrt ((xc - X[0]) * (xc - X[0]) + - (yc - X[0]) * (yc - X[0]) + - (zc - Y[0]) * (zc - Y[0])); - p[j + 1] = Degree; - e[j + 1] = (Val[0] + Val[1] + Val[2] + Val[3]) * 0.25; - j++; - } - } - - *ObjFunct = AdaptMesh (j, OptiMethod, dim, e, h, p, OptiValue); - - f = fopen (OutFile, "w"); - - if(!f){ - Msg(GERROR, "Unable to open file '%s'", OutFile); - return 0; - } - - fprintf (f, "View \"Auto_BGMesh\" Offset{0,0,0} {\n"); - - j = 0; - - if(ErrView->NbST){ - nb = List_Nbr(ErrView->ST) / ErrView->NbST ; - for(i = 0 ; i < List_Nbr(ErrView->ST) ; i+=nb){ - X = (double*)List_Pointer_Fast(ErrView->ST,i); - Y = (double*)List_Pointer_Fast(ErrView->ST,i+3); - Z = (double*)List_Pointer_Fast(ErrView->ST,i+6); - Val = (double*)List_Pointer_Fast(ErrView->ST,i+9); - fprintf (f, "ST(%g,%g,%g,%g,%g,%g,%g,%g,%g){%g,%g,%g};\n", - X[0], Y[0], Z[0], - X[1], Y[1], Z[1], - X[2], Y[2], Z[2], - h[j], h[j], h[j]); - j++; - } - } - - if(ErrView->NbSS){ - nb = List_Nbr(ErrView->SS) / ErrView->NbSS ; - for(i = 0 ; i < List_Nbr(ErrView->SS) ; i+=nb){ - X = (double*)List_Pointer_Fast(ErrView->SS,i); - Y = (double*)List_Pointer_Fast(ErrView->SS,i+3); - Z = (double*)List_Pointer_Fast(ErrView->SS,i+8); - Val = (double*)List_Pointer_Fast(ErrView->SS,i+12); - fprintf (f, "SS(%g,%g,%g,%g,%g,%g,%g,%g,%g,%g,%g,%g){%g,%g,%g,%g};\n", - X[0], Y[0], Z[0], - X[1], Y[1], Z[1], - X[2], Y[2], Z[2], - X[3], Y[3], Z[3], - h[j], h[j], h[j], h[j]); - j++; - } - } - fprintf (f, "};\n"); - fclose (f); - - Msg(INFO, "Background mesh written in '%s'", OutFile); - - return 1; - -} - diff --git a/Mesh/3D_Bricks.cpp b/Mesh/3D_Bricks.cpp deleted file mode 100644 index 9c02ee80172672bde0fbed2223cf55b39c619d3b..0000000000000000000000000000000000000000 --- a/Mesh/3D_Bricks.cpp +++ /dev/null @@ -1,154 +0,0 @@ -// $Id: 3D_Bricks.cpp,v 1.7 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Mesh.h" - -Brick LaBrique (Grid_T * pGrid, double X, double Y, double Z){ - int Ix, Iy, Iz, index; - Brick B; - - B.N = -1; - B.pT = NULL; - if (X > pGrid->max.X || X < pGrid->min.X || Y > pGrid->max.Y || - Y < pGrid->min.Y || Z > pGrid->max.Z || Z < pGrid->min.Z){ - return (B); - } - - Ix = (int) ((double) pGrid->Nx * (X - pGrid->min.X) / (pGrid->max.X - pGrid->min.X)); - Iy = (int) ((double) pGrid->Ny * (Y - pGrid->min.Y) / (pGrid->max.Y - pGrid->min.Y)); - Iz = (int) ((double) pGrid->Nz * (Z - pGrid->min.Z) / (pGrid->max.Z - pGrid->min.Z)); - Ix = IMIN (Ix, pGrid->Nx - 1); - Iy = IMIN (Iy, pGrid->Ny - 1); - Iz = IMIN (Iz, pGrid->Nz - 1); - - if (Ix < 0) - Ix = 0; - if (Iy < 0) - Iy = 0; - if (Iz < 0) - Iz = 0; - - index = Ix + Iy * pGrid->Nx + Iz * pGrid->Nx * pGrid->Ny; - List_Read (pGrid->Bricks, index, &B); - return (B); -} - - -int DEBUT = 0; -Coord MINIM, MAXIM; - -void getminmax (double *xmin, double *ymin, double *zmin, - double *xmax, double *ymax, double *zmax){ - - double dx, dy, dz, f; - - dx = MAXIM.X - MINIM.X; - dy = MAXIM.Y - MINIM.Y; - dz = MAXIM.Z - MINIM.Z; - f = .1; - - *xmin = MINIM.X - f * dx; - *ymin = MINIM.Y - f * dy; - *zmin = MINIM.Z - f * dz; - *xmax = MAXIM.X + f * dx; - *ymax = MAXIM.Y + f * dy; - *zmax = MAXIM.Z + f * dz; -} - -void findminmax (void *a, void *b){ - - Vertex *v; - v = *(Vertex **) a; - - if (!DEBUT){ - MINIM.X = DMIN (MINIM.X, v->Pos.X); - MAXIM.X = DMAX (MAXIM.X, v->Pos.X); - MINIM.Y = DMIN (MINIM.Y, v->Pos.Y); - MAXIM.Y = DMAX (MAXIM.Y, v->Pos.Y); - MINIM.Z = DMIN (MINIM.Z, v->Pos.Z); - MAXIM.Z = DMAX (MAXIM.Z, v->Pos.Z); - } - else{ - DEBUT = 0; - MINIM.X = v->Pos.X; - MAXIM.X = v->Pos.X; - MINIM.Y = v->Pos.Y; - MAXIM.Y = v->Pos.Y; - MINIM.Z = v->Pos.Z; - MAXIM.Z = v->Pos.Z; - } -} - - -void AddSimplexInGrid (Mesh * m, Simplex * s, int boule_boite){ - - double XminBox, XmaxBox, YminBox, YmaxBox, ZmaxBox, ZminBox; - int Ix1, Ix2, Iy1, Iy2, Iz1, Iz2; - int i, j, k, index; - Brick Br, *pBrick; - - if (!m->Grid.init){ - m->Grid.Bricks = List_Create (m->Grid.Nx * m->Grid.Ny * m->Grid.Nz, 10, sizeof (Brick)); - for (i = 0; i < m->Grid.Nx * m->Grid.Ny * m->Grid.Nz; i++){ - Br.pT = List_Create (2, 2, sizeof (Simplex *)); - Br.N = i + 1; - List_Add (m->Grid.Bricks, &Br); - } - m->Grid.init = 1; - } - - if (boule_boite == BOITE){ - XminBox = XmaxBox = s->V[0]->Pos.X; - YminBox = YmaxBox = s->V[0]->Pos.Y; - ZminBox = ZmaxBox = s->V[0]->Pos.Z; - for (i = 1; i < 4; i++){ - XminBox = DMIN (XminBox, s->V[i]->Pos.X); - XmaxBox = DMAX (XmaxBox, s->V[i]->Pos.X); - YminBox = DMIN (YminBox, s->V[i]->Pos.Y); - YmaxBox = DMAX (YmaxBox, s->V[i]->Pos.Y); - ZminBox = DMIN (ZminBox, s->V[i]->Pos.Z); - ZmaxBox = DMAX (ZmaxBox, s->V[i]->Pos.Z); - } - } - else if (boule_boite == BOULE){ - XminBox = s->Center.X - s->Radius; - XmaxBox = s->Center.X + s->Radius; - YminBox = s->Center.Y - s->Radius; - YmaxBox = s->Center.Y + s->Radius; - ZminBox = s->Center.Z - s->Radius; - ZmaxBox = s->Center.Z + s->Radius; - } - - - Ix1 = (int) ((double) m->Grid.Nx * (XminBox - m->Grid.min.X) / - (m->Grid.max.X - m->Grid.min.X)); - Ix2 = (int) ((double) m->Grid.Nx * (XmaxBox - m->Grid.min.X) / - (m->Grid.max.X - m->Grid.min.X)); - Iy1 = (int) ((double) m->Grid.Ny * (YminBox - m->Grid.min.Y) / - (m->Grid.max.Y - m->Grid.min.Y)); - Iy2 = (int) ((double) m->Grid.Ny * (YmaxBox - m->Grid.min.Y) / - (m->Grid.max.Y - m->Grid.min.Y)); - Iz1 = (int) ((double) m->Grid.Nz * (ZminBox - m->Grid.min.Z) / - (m->Grid.max.Z - m->Grid.min.Z)); - Iz2 = (int) ((double) m->Grid.Nz * (ZmaxBox - m->Grid.min.Z) / - (m->Grid.max.Z - m->Grid.min.Z)); - - Ix1 = IMAX (Ix1, 0); - Ix2 = IMIN (Ix2, m->Grid.Nx - 1); - Iy1 = IMAX (Iy1, 0); - Iy2 = IMIN (Iy2, m->Grid.Ny - 1); - Iz1 = IMAX (Iz1, 0); - Iz2 = IMIN (Iz2, m->Grid.Nz - 1); - - for (i = Ix1; i <= Ix2; i++){ - for (j = Iy1; j <= Iy2; j++){ - for (k = Iz1; k <= Iz2; k++){ - index = i + j * m->Grid.Nx + k * m->Grid.Nx * m->Grid.Ny; - pBrick = (Brick *) List_Pointer (m->Grid.Bricks, index); - List_Add (pBrick->pT, &s); - } - } - } - -} diff --git a/Mesh/3D_Coherence.cpp b/Mesh/3D_Coherence.cpp deleted file mode 100644 index c493d0eeeea72201e9f11cb9344734aba4a16fd0..0000000000000000000000000000000000000000 --- a/Mesh/3D_Coherence.cpp +++ /dev/null @@ -1,1550 +0,0 @@ -// $Id: 3D_Coherence.cpp,v 1.16 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "Mesh.h" -#include "3D_Mesh.h" -#include "Create.h" - -extern Mesh *THEM; -extern int CurrentNodeNumber, FACE_DIMENSION; -extern Simplex MyNewBoundary; - -static Volume *THEVOL; -static Edge *TheEdge; -static Face *TheFace; -static List_T *Teti; - -List_T *Missing, *MissingF, *MissingS; -Tree_T *EdgesTree, *FacesTree, *swaps; - -int edges_quad[4][2] = { {0, 1}, - {1, 2}, - {2, 3}, - {3, 0} }; -int edges_tetra[6][2] = { {0, 1}, - {1, 2}, - {2, 0}, - {3, 0}, - {3, 2}, - {3, 1} }; -int edges_non[3] = {2, 0, 1}; -int EdgesInVolume = 1; - -int memesens (Vertex * v1, Vertex * v2, Vertex * v3, - Vertex * c1, Vertex * c2, Vertex * c3){ - double v12[3], v13[3], n1[3], n2[3], p; - - v12[0] = c1->Pos.X - c2->Pos.X; - v12[1] = c1->Pos.Y - c2->Pos.Y; - v12[2] = c1->Pos.Z - c2->Pos.Z; - - v13[0] = c1->Pos.X - c3->Pos.X; - v13[1] = c1->Pos.Y - c3->Pos.Y; - v13[2] = c1->Pos.Z - c3->Pos.Z; - - prodve (v12, v13, n1); - - v12[0] = v1->Pos.X - v2->Pos.X; - v12[1] = v1->Pos.Y - v2->Pos.Y; - v12[2] = v1->Pos.Z - v2->Pos.Z; - - v13[0] = v1->Pos.X - v3->Pos.X; - v13[1] = v1->Pos.Y - v3->Pos.Y; - v13[2] = v1->Pos.Z - v3->Pos.Z; - - prodve (v12, v13, n2); - - prosca (n1, n2, &p); - - return ((p > 0) ? 1 : 0); -} - -static void pvertex (void *a, void *b){ - /* - Vertex *v; - v = (Vertex *) a; - printf ("noeud %d = (%12.5E,%12.5E,%12.5E)\n", v->Num, v->Pos.X, v->Pos.Y, v->Pos.Z); - */ -} - -static void pedge (void *a, void *b){ - /* - Edge *e; - e = (Edge *) a; - printf ("arete %d (%12.5E,%12.5E,%12.5E) -> %d (%12.5E,%12.5E,%12.5E)\n", - e->V[0]->Num, e->V[0]->Pos.X, e->V[0]->Pos.Y, e->V[0]->Pos.Z, - e->V[1]->Num, e->V[1]->Pos.X, e->V[1]->Pos.Y, e->V[1]->Pos.Z); - */ -} - -void find_quads (void *a, void *b){ - Edge *q; - Edge diag; - Simplex *s1, *s2; - q = (Edge *) a; - - if (!List_Search (Missing, q, compareedge)) - return; - - if (List_Nbr (q->Simplexes) != 2) - return; - - List_Read (q->Simplexes, 0, &s1); - List_Read (q->Simplexes, 1, &s2); - if (s1->iEnt != s2->iEnt) - return; - if (!q->O[1]) - return; - - diag.V[0] = q->O[0]; - diag.V[1] = q->O[1]; - - if (Tree_Search (EdgesTree, &diag)){ - Tree_Add (swaps, q); - } -} - -void swap_quads (void *a, void *b){ - Edge *q; - int i, K; - Simplex *s1, *s2; - Vertex *temp[3], *kk[3]; - q = (Edge *) a; - List_Read (q->Simplexes, 0, &s1); - List_Read (q->Simplexes, 1, &s2); - - K = -1; - - for (i = 0; i < 3; i++){ - if (!compareVertex (&q->O[0], &s1->V[i])) - K = i; - temp[i] = s1->V[i]; - } - /* - printf("s1 : %d %d %d ->",s1->V[0]->Num,s1->V[1]->Num,s1->V[2]->Num); - */ - kk[0] = q->O[0]; - kk[1] = (K == 2) ? s1->V[0] : s1->V[K + 1]; - kk[2] = q->O[1]; - - s1->V[0] = kk[0]; - s1->V[1] = kk[1]; - s1->V[2] = kk[2]; - /* - printf("%d %d %d \n",s1->V[0]->Num,s1->V[1]->Num,s1->V[2]->Num); - */ - s1->F[0].V[0] = s1->V[0]; - s1->F[0].V[1] = s1->V[1]; - s1->F[0].V[2] = s1->V[2]; - - /* - printf("s2 : %d %d %d ->",s2->V[0]->Num,s2->V[1]->Num,s2->V[2]->Num); - */ - s2->V[0] = q->O[1]; - s2->V[1] = (K == 0) ? temp[2] : temp[K - 1]; - s2->V[2] = q->O[0]; - /* - printf("%d %d %d \n",s2->V[0]->Num,s2->V[1]->Num,s2->V[2]->Num); - */ - s2->F[0].V[0] = s2->V[0]; - s2->F[0].V[1] = s2->V[1]; - s2->F[0].V[2] = s2->V[2]; - - qsort (s1->F[0].V, 3, sizeof (Vertex *), compareVertex); - qsort (s2->F[0].V, 3, sizeof (Vertex *), compareVertex); - - List_Suppress (Missing, q, compareedge); - q->V[0] = q->O[0]; - q->V[1] = q->O[1]; -} - - -void swap_quads2 (void *a, void *b){ - Edge *q; - Simplex *s1, *s2; - - q = (Edge *) a; - List_Read (q->Simplexes, 0, &s1); - List_Read (q->Simplexes, 1, &s2); - - if (memesens (s1->V[0], s1->V[1], s1->V[2], q->O[0], q->O[1], q->V[0])){ - s1->V[0] = q->O[0]; - s1->V[1] = q->O[1]; - s1->V[2] = q->V[0]; - } - else{ - s1->V[0] = q->O[1]; - s1->V[1] = q->O[0]; - s1->V[2] = q->V[0]; - } - - if (memesens (s2->V[0], s2->V[1], s2->V[2], q->O[0], q->O[1], q->V[1])){ - s2->V[0] = q->O[0]; - s2->V[1] = q->O[1]; - s2->V[2] = q->V[1]; - } - else{ - s2->V[0] = q->O[1]; - s2->V[1] = q->O[0]; - s2->V[2] = q->V[1]; - } - - s1->F[0].V[0] = s1->V[0]; - s1->F[0].V[1] = s1->V[1]; - s1->F[0].V[2] = s1->V[2]; - - s2->F[0].V[0] = s2->V[0]; - s2->F[0].V[1] = s2->V[1]; - s2->F[0].V[2] = s2->V[2]; - - qsort (s1->F[0].V, 3, sizeof (Vertex *), compareVertex); - qsort (s2->F[0].V, 3, sizeof (Vertex *), compareVertex); - - List_Suppress (Missing, q, compareedge); - q->V[0] = q->O[0]; - q->V[1] = q->O[1]; - -} - -void create_Quads (Volume * V){ - int i; - Surface *S; - swaps = Tree_Create (sizeof (Edge), compareedge); - for (i = 0; i < List_Nbr (V->Surfaces); i++){ - List_Read (V->Surfaces, i, &S); - Tree_Action (S->Edges, find_quads); - } - Tree_Action (swaps, swap_quads2); -} - -void create_Fac (void *a, void *b){ - Simplex **ps, *s; - int i; - ps = (Simplex **) a; - s = *ps; - for (i = 0; i < 4; i++){ - Tree_Insert (FacesTree, &s->F[i]); - } -} - - -void create_Faces (Volume * V){ - if(V->Faces) - { - Tree_Delete (V->Faces); - } - V->Faces = Tree_Create (sizeof (Face), compareFace); - FacesTree = V->Faces; - Tree_Action (V->Simplexes, create_Fac); -} - -void create_Edge (void *a, void *b){ - Simplex **ps, *s; - int N, i, j; - Edge E, *pE; - ps = (Simplex **) a; - s = *ps; - int edges[6][2]; - - if (s->V[3] && EdgesInVolume){ - N = 6; - for (i = 0; i < N; i++) - for (j = 0; j < 2; j++) - edges[i][j] = edges_tetra[i][j]; - } - else if (s->V[3]){ - N = 4; - for (i = 0; i < N; i++) - for (j = 0; j < 2; j++) - edges[i][j] = edges_quad[i][j]; - } - else if (s->V[2]){ - N = 3; - for (i = 0; i < N; i++) - for (j = 0; j < 2; j++) - edges[i][j] = edges_tetra[i][j]; - } - else{ - N = 1; - for (i = 0; i < N; i++) - for (j = 0; j < 2; j++) - edges[i][j] = edges_tetra[i][j]; - } - - for (i = 0; i < N; i++){ - E.V[0] = s->V[edges[i][0]]; - E.V[1] = s->V[edges[i][1]]; - if ((pE = (Edge *) Tree_PQuery (EdgesTree, &E))){ - List_Add (pE->Simplexes, ps); - if (N == 3) - pE->O[1] = s->V[edges_non[i]]; - } - else{ - E.Simplexes = List_Create (2, 1, sizeof (Simplex *)); - if (N == 3) - E.O[0] = s->V[edges_non[i]]; - if (N == 3) - E.O[1] = NULL; - List_Add (E.Simplexes, &s); - E.newv = NULL; - Tree_Replace (EdgesTree, &E); - } - } -} - -void create_Edges (Volume * V){ - int i; - Surface *S; - - // MEMORY LEAK (JF) - if(V->Edges) - { - Tree_Action(V->Edges,Free_Edge); - Tree_Delete(V->Edges); - } - - V->Edges = Tree_Create (sizeof (Edge), compareedge); - EdgesTree = V->Edges; - - Tree_Action (V->Simplexes, create_Edge); - for (i = 0; i < List_Nbr (V->Surfaces); i++){ - List_Read (V->Surfaces, i, &S); - // MEMORY LEAK (JF) - if(S->Edges) - { - // BUG BUG BUG (This causes crash) - //Tree_Action(S->Edges,Free_Edge); - Tree_Delete(S->Edges); - } - S->Edges = Tree_Create (sizeof (Edge), compareedge); - EdgesTree = S->Edges; - Tree_Action (S->Simplexes, create_Edge); - } -} - - -void crEdges (Tree_T * TreeElem, Tree_T * treeedges){ - EdgesTree = treeedges; - Tree_Action (TreeElem, create_Edge); -} - - -void find_missing (void *a, void *b){ - Edge *e; - - e = (Edge *) a; - - if (!Tree_Search (EdgesTree, e)){ - List_Add (Missing, e); - Tree_Add (EdgesTree, e); - } -} - -void find_missingf (void *a, void *b){ - Simplex *s; - s = *(Simplex **) a; - - if (!FacesTree || !Tree_Search (FacesTree, &s->F[0])){ - List_Add (MissingF, &s->F[0]); - List_Add (MissingS, &s); - } -} - - -List_T *Missing_Edges (Volume * V){ - int i; - Surface *S; - Missing = List_Create (10, 10, sizeof (Edge)); - - EdgesTree = V->Edges; - for (i = 0; i < List_Nbr (V->Surfaces); i++){ - List_Read (V->Surfaces, i, &S); - Tree_Action (S->Edges, find_missing); - } - return Missing; -} - -List_T *Missing_Faces (Volume * V){ - int i; - Surface *S; - MissingF = List_Create (10, 10, sizeof (Face)); - MissingS = List_Create (10, 10, sizeof (Simplex *)); - - for (i = 0; i < List_Nbr (V->Surfaces); i++){ - List_Read (V->Surfaces, i, &S); - Tree_Action (S->Simplexes, find_missingf); - } - return MissingF; -} - -/* Creation de listes de tetraedres qui intersectent - l'arete TheEdge */ - -List_T *traite; -Tree_T *traited; - -void Ajoute_traite (Simplex ** s){ - if (!Tree_Search (traited, s)){ - List_Add (traite, s); - Tree_Add (traited, s); - } -} - -Intersection *thei; -Vertex *m1, *m2, *e1, *e2; -Face *f1; -int Cloture; - -void fillRi (void *a, void *b){ - int i, c; - Simplex *s; - - s = *(Simplex **) a; - c = 0; - for (i = 0; i < 4; i++){ - if (!compareVertex (&e1, &s->V[i])) - c++; - if (!compareVertex (&e2, &s->V[i])) - c++; - } - if (c == 2){ - Ajoute_traite (&s); - } -} - -void fillTeti (void *a, void *b){ - int i; - Simplex *s; - - s = *(Simplex **) a; - for (i = 0; i < 4; i++){ - if (!compareVertex (&m1, &s->V[i])){ - List_Add (Teti, &s); - return; - } - } -} - -Tree_T *TreexNewv; - -typedef struct{ - int ef; - Edge e; - Face *f; - Vertex *newv; -} xNewv; - -int compxNewv (const void *a, const void *b){ - xNewv *q, *w; - - q = (xNewv *) a; - w = (xNewv *) b; - if (q->ef != w->ef) - return (q->ef - w->ef); - if (q->ef == 1) - return compareedge (&q->e, &w->e); - if (q->ef == 2) - return compareFace (q->f, w->f); - return 1; -} - -/* - --------------------------------------------------- - Pour + de details, voir les travaux de P.L. George. - --------------------------------------------------- - - Les routines ci dessous ont pour but de retrouver les - aretes manquantes d'un maillage initial 3-D. - - En resume, il faut d'abord trouver ces aretes : find_missing - - Ensuite, il faut decouvrir les intersections des aretes manquantes - avec les tetraedres du maillage, les intersections sont de plusieurs - types : - - intersection noeud-noeud (type 1) - intersection arete-face (type 2) - intersection face -face (type 3) - intersection arete-arete (type 4) - intersection face -noeud (type 5) - intersection arete-noeud (type 6) - intersection noeud seul (type 7) - intersection arete seule (type 8) - - Selon le type d'intersection, on appliquera une transformation locale au maillage - de telle sorte que l'arete manquante est recouvree. - */ - - -#define eps_prec (-1.e-10) - -int Edge_Node (Edge * e, Vertex * v){ - double u=0.0, lc; - - if (!compareVertex (&e->V[0], &v)) - return 1; - if (!compareVertex (&e->V[1], &v)) - return 1; - - lc = myhypot (myhypot (e->V[0]->Pos.X - e->V[1]->Pos.X, e->V[0]->Pos.Y - e->V[1]->Pos.Y), - e->V[0]->Pos.Z - e->V[1]->Pos.Z); - - if (e->V[0]->Pos.X != e->V[1]->Pos.X){ - u = (v->Pos.X - e->V[0]->Pos.X) / (e->V[1]->Pos.X - e->V[0]->Pos.X); - } - else if (e->V[0]->Pos.Y != e->V[1]->Pos.Y){ - u = (v->Pos.Y - e->V[0]->Pos.Y) / (e->V[1]->Pos.Y - e->V[0]->Pos.Y); - } - else if (e->V[0]->Pos.Z != e->V[1]->Pos.Z){ - u = (v->Pos.Z - e->V[0]->Pos.Z) / (e->V[1]->Pos.Z - e->V[0]->Pos.Z); - } - - if (u < -eps_prec || u > 1. + eps_prec) - return 0; - if (fabs ((1. - u) * e->V[0]->Pos.X + u * e->V[1]->Pos.X - v->Pos.X) > 1.e-7 * lc){ - return 0; - } - if (fabs ((1. - u) * e->V[0]->Pos.Y + u * e->V[1]->Pos.Y - v->Pos.Y) > 1.e-7 * lc){ - return 0; - } - if (fabs ((1. - u) * e->V[0]->Pos.Z + u * e->V[1]->Pos.Z - v->Pos.Z) > 1.e-7 * lc){ - return 0; - } - return 2; -} - -List_T *SurfComm (List_T * S1, List_T * S2){ - int i; - List_T *List; - Surface *s; - List = List_Create (2, 2, sizeof (Surface *)); - - if (!S1 || !S2) - return List; - - for (i = 0; i < List_Nbr (S1); i++){ - List_Read (S1, i, &s); - if (List_Search (S2, &s, compareSurface)) - List_Add (List, &s); - } - return List; -} - - -Vertex *Edge_Face (Edge * e, Face * f){ - Vertex *v; - - double mat[3][3], det; - double b[3], res[3]; - - if (!compareVertex (&e->V[0], &f->V[0])) - return NULL; - if (!compareVertex (&e->V[0], &f->V[1])) - return NULL; - if (!compareVertex (&e->V[0], &f->V[2])) - return NULL; - if (!compareVertex (&e->V[1], &f->V[0])) - return NULL; - if (!compareVertex (&e->V[1], &f->V[1])) - return NULL; - if (!compareVertex (&e->V[1], &f->V[2])) - return NULL; - - mat[0][0] = f->V[1]->Pos.X - f->V[0]->Pos.X; - mat[0][1] = f->V[2]->Pos.X - f->V[0]->Pos.X; - mat[0][2] = e->V[0]->Pos.X - e->V[1]->Pos.X; - - mat[1][0] = f->V[1]->Pos.Y - f->V[0]->Pos.Y; - mat[1][1] = f->V[2]->Pos.Y - f->V[0]->Pos.Y; - mat[1][2] = e->V[0]->Pos.Y - e->V[1]->Pos.Y; - - mat[2][0] = f->V[1]->Pos.Z - f->V[0]->Pos.Z; - mat[2][1] = f->V[2]->Pos.Z - f->V[0]->Pos.Z; - mat[2][2] = e->V[0]->Pos.Z - e->V[1]->Pos.Z; - - b[0] = e->V[0]->Pos.X - f->V[0]->Pos.X; - b[1] = e->V[0]->Pos.Y - f->V[0]->Pos.Y; - b[2] = e->V[0]->Pos.Z - f->V[0]->Pos.Z; - - if (!sys3x3 (mat, b, res, &det)) - return NULL; - - /* res donne les coordonnees u,v de l'intersection dans la - face et donne w la coordonnee de l'intersection dans - l'arete - */ - /* coordonnees dans l'arete */ - if (res[2] >= 1.0 - eps_prec || res[2] <= eps_prec) - return NULL; - - /* coordonnees dans la face */ - if (res[0] >= 1.0 + eps_prec || res[0] <= -eps_prec) - return NULL; - if (res[1] <= -eps_prec || res[1] >= 1. + eps_prec - res[0]) - return NULL; - - - if (res[0] == 1.0 || res[2] == 0.0 || res[0] == 0.0 || - res[1] == 1. - res[0] || res[1] == 0.0 || res[0] == 1.0){ - Msg(DEBUG1, "Face p1 %g %g %g", f->V[0]->Pos.X, f->V[0]->Pos.Y, f->V[0]->Pos.Z); - Msg(DEBUG2, "facette p2 %g %g %g", f->V[1]->Pos.X, f->V[1]->Pos.Y, f->V[1]->Pos.Z); - Msg(DEBUG2, "facette p3 %g %g %g", f->V[2]->Pos.X, f->V[2]->Pos.Y, f->V[2]->Pos.Z); - Msg(DEBUG2, "edge e2 %g %g %g", e->V[0]->Pos.X, e->V[0]->Pos.Y, e->V[0]->Pos.Z); - Msg(DEBUG2, "edge e3 %g %g %g", e->V[1]->Pos.X, e->V[1]->Pos.Y, e->V[1]->Pos.Z); - Msg(DEBUG3, "%g %g %g", res[0], res[1], res[2]); - } - - v = Create_Vertex (++CurrentNodeNumber, - (1. - res[2]) * e->V[0]->Pos.X + res[2] * e->V[1]->Pos.X, - (1. - res[2]) * e->V[0]->Pos.Y + res[2] * e->V[1]->Pos.Y, - (1. - res[2]) * e->V[0]->Pos.Z + res[2] * e->V[1]->Pos.Z, - (1. - res[2]) * e->V[0]->lc + res[2] * e->V[1]->lc, 0.0); - v->ListSurf = List_Create (1, 1, sizeof (Surface *)); - - return v; -} - - -Vertex *Edge_Edge (Edge * e, Vertex * v1, Vertex * v2){ - Vertex *v; - int dir; - //int dx1, dx2, dy1, dy2, dz1, dz2; - double mat[2][2]; - double b[3], res[3]; - double XmaxS, XminS, YmaxS, YminS, ZmaxS, ZminS, lc; - double XmaxV, XminV, YmaxV, YminV, ZmaxV, ZminV, val; - - if (!compareVertex (&e->V[0], &v1)) - return NULL; - if (!compareVertex (&e->V[1], &v1)) - return NULL; - if (!compareVertex (&e->V[0], &v2)) - return NULL; - if (!compareVertex (&e->V[1], &v2)) - return NULL; - - XminS = DMIN (e->V[0]->Pos.X, e->V[1]->Pos.X); - XmaxS = DMAX (e->V[0]->Pos.X, e->V[1]->Pos.X); - YminS = DMIN (e->V[0]->Pos.Y, e->V[1]->Pos.Y); - YmaxS = DMAX (e->V[0]->Pos.Y, e->V[1]->Pos.Y); - ZminS = DMIN (e->V[0]->Pos.Z, e->V[1]->Pos.Z); - ZmaxS = DMAX (e->V[0]->Pos.Z, e->V[1]->Pos.Z); - - XminV = DMIN (v1->Pos.X, v2->Pos.X); - XmaxV = DMAX (v1->Pos.X, v2->Pos.X); - YminV = DMIN (v1->Pos.Y, v2->Pos.Y); - YmaxV = DMAX (v1->Pos.Y, v2->Pos.Y); - ZminV = DMIN (v1->Pos.Z, v2->Pos.Z); - ZmaxV = DMAX (v1->Pos.Z, v2->Pos.Z); - - if (XmaxS < XminV || XmaxV < XminS) - return NULL; - if (YmaxS < YminV || YmaxV < YminS) - return NULL; - if (ZmaxS < ZminV || ZmaxV < ZminS) - return NULL; - - lc = myhypot (myhypot (XminV - XmaxV, YminV - YmaxV), ZminV - ZmaxV); - - /* - if (e->V[1]->Pos.X != e->V[0]->Pos.X && - fabs (e->V[1]->Pos.X - e->V[0]->Pos.X) / lc > 1.e-2) - dx1 = 1; - else - dx1 = 0; - if (e->V[1]->Pos.Y != e->V[0]->Pos.Y && - fabs (e->V[1]->Pos.Y - e->V[0]->Pos.Y) / lc > 1.e-2) - dy1 = 1; - else - dy1 = 0; - if (e->V[1]->Pos.Z != e->V[0]->Pos.Z && - fabs (e->V[1]->Pos.Z - e->V[0]->Pos.Z) / lc > 1.e-2) - dz1 = 1; - else - dz1 = 0; - - if (v1->Pos.X != v2->Pos.X && - fabs (v1->Pos.X - v2->Pos.X) / lc > 1.e-2) - dx2 = 1; - else - dx2 = 0; - if (v1->Pos.Y != v2->Pos.Y && - fabs (v1->Pos.Y - v2->Pos.Y) / lc > 1.e-2) - dy2 = 1; - else - dy2 = 0; - if (v1->Pos.Z != v2->Pos.Z && - fabs (v1->Pos.Z - v2->Pos.Z) / lc > 1.e-2) - dz2 = 1; - else - dz2 = 0; - - if(dx1 && dx2){ - mat[0][0] = e->V[1]->Pos.X - e->V[0]->Pos.X; - mat[0][1] = v1->Pos.X - v2->Pos.X; - b[0] = - e->V[0]->Pos.X + v1->Pos.X; - if(dy1 || dy2){ - mat[1][0] = e->V[1]->Pos.Y - e->V[0]->Pos.Y; - mat[1][1] = v1->Pos.Y - v2->Pos.Y; - b[1] = - e->V[0]->Pos.Y + v1->Pos.Y; - dir = 2; - } - else if(dz1 || dz2){ - mat[1][0] = e->V[1]->Pos.Z - e->V[0]->Pos.Z; - mat[1][1] = v1->Pos.Z - v2->Pos.Z; - b[1] = - e->V[0]->Pos.Z + v1->Pos.Z; - dir = 3; - } - } - else if (dy1 && dy2){ - mat[0][0] = e->V[1]->Pos.Y - e->V[0]->Pos.Y; - mat[0][1] = v1->Pos.Y - v2->Pos.Y; - b[0] = - e->V[0]->Pos.Y + v1->Pos.Y; - if(dy1 || dy2){ - mat[1][0] = e->V[1]->Pos.Y - e->V[0]->Pos.Y; - mat[1][1] = v1->Pos.Y - v2->Pos.Y; - b[1] = - e->V[0]->Pos.Y + v1->Pos.Y; - dir = 2; - } - else if(dz1 || dz2){ - mat[1][0] = e->V[1]->Pos.Z - e->V[0]->Pos.Z; - mat[1][1] = v1->Pos.Z - v2->Pos.Z; - b[1] = - e->V[0]->Pos.Z + v1->Pos.Z; - dir = 3; - } - } - */ - - - mat[0][0] = e->V[1]->Pos.X - e->V[0]->Pos.X; - mat[0][1] = v1->Pos.X - v2->Pos.X; - b[0] = -e->V[0]->Pos.X + v1->Pos.X; - mat[1][0] = e->V[1]->Pos.Y - e->V[0]->Pos.Y; - mat[1][1] = v1->Pos.Y - v2->Pos.Y; - b[1] = -e->V[0]->Pos.Y + v1->Pos.Y; - - if (!sys2x2 (mat, b, res)){ - mat[1][0] = e->V[1]->Pos.Z - e->V[0]->Pos.Z; - mat[1][1] = v1->Pos.Z - v2->Pos.Z; - b[1] = -e->V[0]->Pos.Z + v1->Pos.Z; - if (!sys2x2 (mat, b, res)){ - mat[0][0] = e->V[1]->Pos.Y - e->V[0]->Pos.Y; - mat[0][1] = v1->Pos.Y - v2->Pos.Y; - b[0] = -e->V[0]->Pos.Y + v1->Pos.Y; - if (!sys2x2 (mat, b, res)){ - /* SEGMENTS PARALLELES */ - /* printf("systeme singulier\n"); - printf("arete %d -> %d\n",v1->Num,v2->Num); - printf("arete %g %g %g --> %g %g %g\n", - v1->Pos.X,v1->Pos.Y,v1->Pos.Z,v2->Pos.X,v2->Pos.Y,v2->Pos.Z); - printf("arete %g %g %g --> %g %g %g\n", - e->V[0]->Pos.X,e->V[0]->Pos.Y,e->V[0]->Pos.Z, - e->V[1]->Pos.X,e->V[1]->Pos.Y,e->V[1]->Pos.Z); - printf("%g %g\n",mat[0][0],mat[0][1]); - printf("%g %g\n",mat[1][0],mat[1][1]); - getchar(); - */ - return NULL; - } - else{ - dir = 1; - } - } - else{ - dir = 2; - } - } - else{ - dir = 3; - } - - if (res[0] <= eps_prec || res[0] >= 1.0 - eps_prec) - return NULL; - if (res[1] <= eps_prec || res[1] >= 1.0 - eps_prec) - return NULL; - - switch (dir){ - case 1: - val = e->V[0]->Pos.X * (1. - res[0]) + e->V[1]->Pos.X * res[0] - - v1->Pos.X * (1. - res[1]) - v2->Pos.X * res[1]; - break; - case 2: - val = e->V[0]->Pos.Y * (1. - res[0]) + e->V[1]->Pos.Y * res[0] - - v1->Pos.Y * (1. - res[1]) - v2->Pos.Y * res[1]; - break; - case 3: - val = e->V[0]->Pos.Z * (1. - res[0]) + e->V[1]->Pos.Z * res[0] - - v1->Pos.Z * (1. - res[1]) - v2->Pos.Z * res[1]; - break; - } - if (fabs (val / lc) > 1.e-08 /*08 */ ) - return NULL; - v = Create_Vertex (++CurrentNodeNumber, - (1. - res[0]) * e->V[0]->Pos.X + res[0] * e->V[1]->Pos.X, - (1. - res[0]) * e->V[0]->Pos.Y + res[0] * e->V[1]->Pos.Y, - (1. - res[0]) * e->V[0]->Pos.Z + res[0] * e->V[1]->Pos.Z, - (1. - res[0]) * e->V[0]->lc + res[0] * e->V[1]->lc, 0.0); - - v->ListSurf = List_Create (1, 1, sizeof (Surface *)); - return v; - -} - -int intersection_2_aretes (double Xa, double Ya, double Za, - double Xb, double Yb, double Zb, - double Xc, double Yc, double Zc, - double Xd, double Yd, double Zd, - int p1, int p2, int p3, int p4, - double *X, double *Y, double *Z){ - Vertex *v1, *v2, *v3, *v4, *v; - Edge e; - v1 = Create_Vertex (p1, Xa, Ya, Za, 0.0, 0.0); - v2 = Create_Vertex (p2, Xb, Yb, Zb, 0.0, 0.0); - v3 = Create_Vertex (p3, Xc, Yc, Zc, 0.0, 0.0); - v4 = Create_Vertex (p4, Xd, Yd, Zd, 0.0, 0.0); - - e.V[0] = v3; - e.V[1] = v4; - - if ((v = Edge_Edge (&e, v1, v2))){ - - *X = v->Pos.X; - *Y = v->Pos.Y; - *Z = v->Pos.Z; - - Free (v1); - Free (v2); - Free (v3); - Free (v4); - Free (v); - return 1; - } - else{ - Free (v1); - Free (v2); - Free (v3); - Free (v4); - Free (v); - return 0; - } - -} - -List_T *NewPoints; - -void Intersect_Edge_Simplexe (Edge * e, Simplex * s, Intersection * I){ - - int i, NbInt, NbVer, NbEdg, NbFac, j; - Vertex *v; - double XminS, YminS, ZminS, XmaxS, YmaxS, ZmaxS; - double XminE, YminE, ZminE, XmaxE, YmaxE, ZmaxE; - xNewv x; - - /* On initialise l'intersection */ - - I->NbVertex = I->NbFace = I->NbEdge = 0; - I->s = s; - I->e = e; - I->NbIntersect = 0; - - /* - On regarde d'abord si une intersection est possible en - calculant les boites de l'arete et du simplexe - */ - - if (s->V[3]){ - NbVer = 4; - NbEdg = 6; - NbFac = 4; - NbInt = 2; - } - else if (s->V[2]){ - NbVer = 3; - NbEdg = 3; - NbFac = 1; - NbInt = 33; - } - - XminE = DMIN (e->V[0]->Pos.X, e->V[1]->Pos.X); - XmaxE = DMAX (e->V[0]->Pos.X, e->V[1]->Pos.X); - YminE = DMIN (e->V[0]->Pos.Y, e->V[1]->Pos.Y); - YmaxE = DMAX (e->V[0]->Pos.Y, e->V[1]->Pos.Y); - ZminE = DMIN (e->V[0]->Pos.Z, e->V[1]->Pos.Z); - ZmaxE = DMAX (e->V[0]->Pos.Z, e->V[1]->Pos.Z); - - XminS = s->V[0]->Pos.X; - XmaxS = s->V[0]->Pos.X; - YminS = s->V[0]->Pos.Y; - YmaxS = s->V[0]->Pos.Y; - ZminS = s->V[0]->Pos.Z; - ZmaxS = s->V[0]->Pos.Z; - - for (i = 1; i < NbVer; i++){ - XminS = DMIN (XminS, s->V[i]->Pos.X); - XmaxS = DMAX (XmaxS, s->V[i]->Pos.X); - YminS = DMIN (YminS, s->V[i]->Pos.Y); - YmaxS = DMAX (YmaxS, s->V[i]->Pos.Y); - ZminS = DMIN (ZminS, s->V[i]->Pos.Z); - ZmaxS = DMAX (ZmaxS, s->V[i]->Pos.Z); - } - if (XmaxS < XminE || XmaxE < XminS) - return; - if (YmaxS < YminE || YmaxE < YminS) - return; - if (ZmaxS < ZminE || ZmaxE < ZminS) - return; - - /* - On regarde si l'arete coupe un des 4 noeuds du - simplexe - */ - - for (i = 0; i < NbVer; i++){ - if ((j = Edge_Node (e, s->V[i]))){ - I->V[I->NbVertex] = s->V[i]; - I->iV[I->NbVertex++] = i; - (I->NbIntersect)++; - if (j == 2){ - List_Replace (NewPoints, &s->V[i], compareVertex); - /* printf("l'arete intersecte un noeud\n"); */ - pvertex (s->V[i], s->V[i]); - pedge (e, e); - } - } - } - - if (I->NbIntersect == NbInt) - return; - - /* On regarde si l'arete coupe une autre arete */ - for (i = 0; i < NbEdg; i++){ - x.ef = 1; - x.e.V[0] = s->V[edges_tetra[i][0]]; - x.e.V[1] = s->V[edges_tetra[i][1]]; - if (Tree_Query (TreexNewv, &x)){ - v = x.newv; - I->E[I->NbEdge] = i; - I->VE[(I->NbEdge)++] = v; - (I->NbIntersect)++; - } - else if ((v = Edge_Edge (e, s->V[edges_tetra[i][0]], - s->V[edges_tetra[i][1]]))) { - List_Add (NewPoints, &v); - I->E[I->NbEdge] = i; - I->VE[(I->NbEdge)++] = v; - (I->NbIntersect)++; - x.newv = v; - Tree_Add (TreexNewv, &x); - } - } - - if (I->NbIntersect == NbInt) - return; - - /* - On regarde si l'arete coupe une face - */ - - for (i = 0; i < NbFac; i++){ - x.ef = 2; - x.f = &s->F[i]; - if (Tree_Query (TreexNewv, &x)){ - v = x.newv; - I->VF[I->NbFace] = v; - I->F[I->NbFace] = &s->F[i]; - I->iF[(I->NbFace)++] = i; - (I->NbIntersect)++; - } - else if ((v = Edge_Face (e, &s->F[i]))){ - I->VF[I->NbFace] = v; - List_Add (NewPoints, &v); - I->F[I->NbFace] = &s->F[i]; - I->iF[I->NbFace++] = i; - (I->NbIntersect)++; - x.newv = v; - Tree_Add (TreexNewv, &x); - } - } -} - - -void Intersect_Face_Simplexe (Face * f, Simplex * s, Intersection * I){ - - int i ; - Vertex *v; - double XminS, YminS, ZminS, XmaxS, YmaxS, ZmaxS; - double XminE, YminE, ZminE, XmaxE, YmaxE, ZmaxE; - xNewv x; - - /* On initialise l'intersection */ - - I->NbVertex = I->NbFace = I->NbEdge = 0; - I->s = s; - I->f = f; - I->NbIntersect = 0; - - /* - On regarde d'abord si une intersection est possible en - calculant les boites de l'arete et du simplexe - */ - - XminE = DMIN (DMIN (f->V[0]->Pos.X, f->V[1]->Pos.X), f->V[2]->Pos.X); - XmaxE = DMAX (DMAX (f->V[0]->Pos.X, f->V[1]->Pos.X), f->V[2]->Pos.X); - YminE = DMIN (DMIN (f->V[0]->Pos.Y, f->V[1]->Pos.Y), f->V[2]->Pos.Y); - YmaxE = DMAX (DMAX (f->V[0]->Pos.Y, f->V[1]->Pos.Y), f->V[2]->Pos.Y); - ZminE = DMIN (DMIN (f->V[0]->Pos.Z, f->V[1]->Pos.Z), f->V[2]->Pos.Z); - ZmaxE = DMAX (DMAX (f->V[0]->Pos.Z, f->V[1]->Pos.Z), f->V[2]->Pos.Z); - - XminS = s->V[0]->Pos.X; - XmaxS = s->V[0]->Pos.X; - YminS = s->V[0]->Pos.Y; - YmaxS = s->V[0]->Pos.Y; - ZminS = s->V[0]->Pos.Z; - ZmaxS = s->V[0]->Pos.Z; - - for (i = 1; i < 4; i++){ - XminS = DMIN (XminS, s->V[i]->Pos.X); - XmaxS = DMAX (XmaxS, s->V[i]->Pos.X); - YminS = DMIN (YminS, s->V[i]->Pos.Y); - YmaxS = DMAX (YmaxS, s->V[i]->Pos.Y); - ZminS = DMIN (ZminS, s->V[i]->Pos.Z); - ZmaxS = DMAX (ZmaxS, s->V[i]->Pos.Z); - } - if (XmaxS < XminE || XmaxE < XminS) - return; - if (YmaxS < YminE || YmaxE < YminS) - return; - if (ZmaxS < ZminE || ZmaxE < ZminS) - return; - - /* On regarde si l'arete coupe la facette */ - for (i = 0; i < 6; i++){ - x.ef = 1; - x.e.V[0] = s->V[edges_tetra[i][0]]; - x.e.V[1] = s->V[edges_tetra[i][1]]; - if (Tree_Query (TreexNewv, &x)){ - v = x.newv; - I->E[I->NbEdge] = i; - I->VE[(I->NbEdge)++] = v; - (I->NbIntersect)++; - } - else if ((v = Edge_Face (&x.e, f))){ - /* printf("%d %d %d %d\n",s->V[0]->Num,s->V[1]->Num,s->V[2]->Num,s->V[3]->Num); */ - List_Add (NewPoints, &v); - I->E[I->NbEdge] = i; - I->VE[I->NbEdge] = v; - (I->NbEdge)++; - (I->NbIntersect)++; - x.newv = v; - Tree_Add (TreexNewv, &x); - } - } -} - -Tree_T *Actual_Tree, *TetAdd, *TetDel; - -static void _Add (void *data, void *dum){ - Tree_Add (Actual_Tree, data); -} -static void _Del (void *data, void *dum){ - Tree_Suppress (Actual_Tree, data); -} - -void Recover_Edge (void *a, void *b){ - Simplex *s; - Intersection I; - - s = *(Simplex **) a; - Intersect_Edge_Simplexe (TheEdge, s, &I); - if (I.NbIntersect){ - cut_tetraedre (&I, TetAdd, TetDel, THEVOL->Vertices); - } -} - -void Recover_Face (void *a, void *b){ - Simplex *s; - Intersection I; - - s = *(Simplex **) a; - Intersect_Face_Simplexe (TheFace, s, &I); - if (I.NbEdge){ - cut_tetraedre (&I, TetAdd, TetDel, THEVOL->Vertices); - } -} - -static double volume; - -static void VSIM (void *a, void *b){ - Simplex *S; - S = *(Simplex **) a; - if (S->V[3]) - volume += fabs (S->Volume_Simplexe ()); -} - -Vertex *DEPART; - -int comparePos (const void *a, const void *b){ - Vertex *q, *w; - double d1, d2; - q = *(Vertex **) a; - w = *(Vertex **) b; - - d1 = DSQR (q->Pos.X - DEPART->Pos.X) + - DSQR (q->Pos.Y - DEPART->Pos.Y) + - DSQR (q->Pos.Z - DEPART->Pos.Z); - d2 = DSQR (w->Pos.X - DEPART->Pos.X) + - DSQR (w->Pos.Y - DEPART->Pos.Y) + - DSQR (w->Pos.Z - DEPART->Pos.Z); - if (d1 < d2) - return 1; - if (d1 > d2) - return -1; - - exit (1); - return 1; -} - -List_T *ListFaces; - -void findFaces (void *a, void *b){ - Simplex *s; - int i; - s = *(Simplex **) a; - if (List_Search (NewPoints, &s->V[0], compareVertex) || - List_Search (NewPoints, &s->V[1], compareVertex) || - List_Search (NewPoints, &s->V[2], compareVertex) || - List_Search (NewPoints, &s->V[3], compareVertex)) - /* - printf("%d %d %d %d\n",s->V[0]->Num,s->V[1]->Num,s->V[2]->Num,s->V[3]->Num); - */ - for (i = 0; i < 4; i++){ - if (List_Search (NewPoints, &s->F[i].V[0], compareVertex) && - List_Search (NewPoints, &s->F[i].V[1], compareVertex) && - List_Search (NewPoints, &s->F[i].V[2], compareVertex)) - List_Replace (ListFaces, &s->F[i], compareFace); - } -} - -void findEdges (void *a, void *b){ -} - -Simplex * Create_Simplex_MemeSens (Simplex * sold, Vertex * v1, Vertex * v2, Vertex * v3){ - - Simplex *s; - - if (memesens (sold->V[0], sold->V[1], sold->V[2], v1, v2, v3) > 0.0){ - s = Create_Simplex (v1, v2, v3, NULL); - } - else{ - s = Create_Simplex (v2, v1, v3, NULL); - } - s->iEnt = sold->iEnt; - return s; -} - -int Coherence (Volume * v, Mesh * m){ - int i, j, k, Np, Nh; - Surface *s; - //Vertex V1, V2, *ver1, *ver2 ; - Face Face; - static Edge E, *pE1, *pE2, *pE3; - Simplex *simp, *simp1; - List_T *MissingEdges, *MissingFaces; - - FACE_DIMENSION = 2; - - //ver1 = &V1; - //ver2 = &V2; - - THEVOL = v; - - Remise_A_Zero (); - - create_Edges (v); - MissingEdges = Missing_Edges (v); - - /* Edge Swapping */ - create_Quads (v); - - /* Missing Edges */ - create_Edges (v); - MissingEdges = Missing_Edges (v); - - /* Missing Faces */ - create_Faces (v); - MissingFaces = Missing_Faces (v); - - /* Edges Recovery */ - Msg(STATUS3, "Boundary edges recovery"); - - volume = 0; - Tree_Action (v->Simplexes, VSIM); - Msg(INFO, "Volume = %g", volume); - - Msg(INFO1, "==================================================="); - Msg(INFO2, "Number of missing edges = %d", List_Nbr (Missing)); - Msg(INFO3, "==================================================="); - - for (i = 0; i < List_Nbr (Missing); i++){ - - pE1 = (Edge *) List_Pointer (Missing, i); - TheEdge = pE1; - - TreexNewv = Tree_Create (sizeof (xNewv), compxNewv); - NewPoints = List_Create (1, 1, sizeof (Vertex *)); - TetAdd = Tree_Create (sizeof (Simplex *), compareSimplex); - TetDel = Tree_Create (sizeof (Simplex *), compareSimplex); - - Tree_Action (v->Simplexes, Recover_Edge); - Actual_Tree = v->Simplexes; - Tree_Action (TetAdd, _Add); - Tree_Action (TetDel, _Del); - pE1->Liste = NewPoints; - /* - if(CTX.mesh.nb_smoothing){ - DEPART = pE1->V[0]; - List_Tri(NewPoints,comparePos); - for(j=0;j<List_Nbr(NewPoints);j++){ - List_Read(NewPoints,j,&ver1); - u = (double)(j+1) / (double)(List_Nbr(NewPoints)+1); - ver1->Pos.X = u * pE1->V[1]->Pos.X + (1.-u) * pE1->V[0]->Pos.X; - ver1->Pos.Y = u * pE1->V[1]->Pos.Y + (1.-u) * pE1->V[0]->Pos.Y; - ver1->Pos.Z = u * pE1->V[1]->Pos.Z + (1.-u) * pE1->V[0]->Pos.Z; - } - } - */ - Msg(INFO, "Edge %d->%d => %d division(s)", - pE1->V[0]->Num, pE1->V[1]->Num, List_Nbr(NewPoints)); - - if (!List_Nbr (NewPoints)) - Msg(GERROR, "Missing edge without any intersection (%g,%g,%g) (%g,%g,%g)", - pE1->V[0]->Pos.X, pE1->V[0]->Pos.Y, pE1->V[0]->Pos.Z, - pE1->V[1]->Pos.X, pE1->V[1]->Pos.Y, pE1->V[1]->Pos.Z); - - } - - Msg(STATUS3, "Boundary faces recovery"); - volume = 0; - Tree_Action (v->Simplexes, VSIM); - Msg(INFO, "Volume = %g", volume); - - /* Missing Faces */ - - Msg(INFO1, "==================================================="); - Msg(INFO2, "Number of missing faces = %d", List_Nbr (MissingFaces)); - Msg(INFO3, "==================================================="); - - for (i = 0; i < List_Nbr (MissingS); i++){ - List_Read (MissingS, i, &simp); - TheFace = &simp->F[0]; - Msg(INFO, "Face %d %d %d", simp->F[0].V[0]->Num, - simp->F[0].V[1]->Num, simp->F[0].V[2]->Num); - E.V[0] = simp->F[0].V[0]; - E.V[1] = simp->F[0].V[1]; - pE1 = (Edge *) List_PQuery (Missing, &E, compareedge); - E.V[0] = simp->F[0].V[1]; - E.V[1] = simp->F[0].V[2]; - pE2 = (Edge *) List_PQuery (Missing, &E, compareedge); - E.V[0] = simp->F[0].V[2]; - E.V[1] = simp->F[0].V[0]; - pE3 = (Edge *) List_PQuery (Missing, &E, compareedge); - - /* On verifie si c'est simple c a d si les tetraedres - couvrent entierement la face */ - NewPoints = List_Create (3, 1, sizeof (Vertex *)); - List_Add (NewPoints, &simp->F[0].V[0]); - if (pE1) - for (j = 0; j < List_Nbr (pE1->Liste); j++) - List_Add (NewPoints, List_Pointer (pE1->Liste, j)); - List_Add (NewPoints, &simp->F[0].V[1]); - if (pE2) - for (j = 0; j < List_Nbr (pE2->Liste); j++) - List_Add (NewPoints, List_Pointer (pE2->Liste, j)); - List_Add (NewPoints, &simp->F[0].V[2]); - if (pE3) - for (j = 0; j < List_Nbr (pE3->Liste); j++) - List_Add (NewPoints, List_Pointer (pE3->Liste, j)); - ListFaces = List_Create (2, 2, sizeof (Face)); - Tree_Action (v->Simplexes, findFaces); - - Nh = List_Nbr (NewPoints); - - /* il reste des intersections */ - - if (List_Nbr (ListFaces) != Nh - 2){ - /* - printf("Recherche des intersections\n"); - printf("La face initiale comprend %d faces existantes\n",List_Nbr(ListFaces)); - printf("La face est divisee en %d points\n",List_Nbr(NewPoints)); - */ - TreexNewv = Tree_Create (sizeof (xNewv), compxNewv); - TetAdd = Tree_Create (sizeof (Simplex *), compareSimplex); - TetDel = Tree_Create (sizeof (Simplex *), compareSimplex); - Tree_Action (v->Simplexes, Recover_Face); - /* - printf("La face est divisee en %d points %d %d \n", - List_Nbr(NewPoints),Tree_Nbr(TetAdd),Tree_Nbr(TetDel)); - */ - Actual_Tree = v->Simplexes; - Tree_Action (TetAdd, _Add); - Tree_Action (TetDel, _Del); - ListFaces = List_Create (2, 2, sizeof (Face)); - Tree_Action (v->Simplexes, findFaces); - } - - Np = List_Nbr (NewPoints); - - if (1 || List_Nbr (ListFaces) == 2 * (Np - 1) - Nh){ - - Msg(INFO, "Recoverable face (%d <--> %d=2*(%d-1)-%d)", - List_Nbr (ListFaces), 2 * (Np - 1) - Nh, Np, Nh); - - for (j = 0; j < List_Nbr (v->Surfaces); j++){ - List_Read (v->Surfaces, j, &s); - if (Tree_Search (s->Simplexes, &simp)){ - for (k = 0; k < List_Nbr (ListFaces); k++){ - List_Read (ListFaces, k, &Face); - simp1 = Create_Simplex_MemeSens (simp, Face.V[0], Face.V[1], Face.V[2]); - Tree_Add (s->Simplexes, &simp1); - Tree_Replace (s->Vertices, &Face.V[0]); - Tree_Replace (s->Vertices, &Face.V[1]); - Tree_Replace (s->Vertices, &Face.V[2]); - Tree_Replace (v->Vertices, &Face.V[0]); - Tree_Replace (v->Vertices, &Face.V[1]); - Tree_Replace (v->Vertices, &Face.V[2]); - } - Tree_Suppress (s->Simplexes, &simp); - } - } - } - else{ - Msg(GERROR, "*Unrecoverable* face (%d <--> %d=2*(%d-1)-%d)", - List_Nbr (ListFaces), 2 * (Np - 1) - Nh, Np, Nh); - for (k = 0; k < List_Nbr (ListFaces); k++){ - List_Read (ListFaces, k, &Face); - Msg(STATUS2, "Face %d %d %d", Face.V[0]->Num, Face.V[1]->Num, Face.V[2]->Num); - } - Tree_Action (v->Simplexes, findEdges); - } - } - - volume = 0; - Tree_Action (v->Simplexes, VSIM); - Msg(INFO, "Volume after edge/face recovery = %g", volume); - - /* Missing Edges */ - create_Edges (v); - MissingEdges = Missing_Edges (v); - - /* Missing Faces */ - create_Faces (v); - MissingFaces = Missing_Faces (v); - - Msg(INFO, "Final check: %d missing edges, %d missing faces", - List_Nbr(MissingEdges), List_Nbr(MissingFaces)); - - Impression_Resultats (); - - if (List_Nbr (MissingFaces) || List_Nbr (MissingEdges)){ - Msg(GERROR, "Could not restore all edges/faces"); - return 0; - } - - Link_Simplexes (NULL, v->Simplexes); - Msg(STATUS3, "Volume recovery"); - Restore_Volume (v); - - return 1; -} - -/* A partir d'un maillage de volume qui respecte la - frontiere, on attribue a chaque tetraedre son - numero de volume */ - -List_T *ListSurfaces, *ListAllSurf; -Tree_T *keep; -Simplex *SIMP; -int iVolume; - -void attribueVolume (void *a, void *b){ - Simplex *s; - s = *(Simplex **) a; - s->iEnt = iVolume; -} - -void Trouve_Simplex (void *a, void *b){ - Simplex *s; - if (SIMP != NULL) - return; - s = *(Simplex **) a; - if (s->iEnt < 0) - SIMP = s; -} - -void Trouve_Simplex_Bord (void *a, void *b){ - Simplex *s; - - if (SIMP != NULL) - return; - s = *(Simplex **) a; - if (s->V[0]->Num < 0 || s->V[1]->Num < 0 || s->V[2]->Num < 0 || s->V[3]->Num < 0) - SIMP = s; -} - -void SurfacesDansVolume (Volume * v, List_T * ListAllSurf){ - int i, iseg; - Surface *s; - for (i = 0; i < List_Nbr (v->Surfaces); i++) - { - List_Read (v->Surfaces, i, &s); - iseg = abs (s->Num); - List_Replace (ListAllSurf, &iseg, fcmp_int); - } -} - -int isListaVolume (List_T * ListSurf, Mesh * M){ - int NN, i, j, srf; - bool found; - Surface *Surf; - Volume *v; - List_T *AllVolumes = Tree2List (M->Volumes); - - for (i = 0; i < List_Nbr (AllVolumes); i++){ - List_Read (AllVolumes, i, &v); - found = true; - NN = 0; - if (v->Typ == MSH_VOLUME){ - for (j = 0; j < List_Nbr (v->Surfaces); j++){ - List_Read (v->Surfaces, j, &Surf); - srf = abs (Surf->Num); - if (!List_Search (ListSurf, &srf, fcmp_int)){ - found = false; - } - else - NN++; - } - if (found && NN == List_Nbr (ListSurf)) - return v->Num; - } - } - return 0; -} - -int compareSimpSurf (const void *a, const void *b){ - Simplex *q, *w; - q = *(Simplex **) a; - w = *(Simplex **) b; - return compareFace (&q->F[0], &w->F[0]); -} - -List_T *StackSimp; -#define MAX_DEPTH 500 - -void recur_trouve_volume (Simplex * s, int *Depth){ - int i, j; - Simplex *pS, S; - - if (s->iEnt != -1) - return; - - if ((*Depth) > MAX_DEPTH) { - List_Add (StackSimp, &s); - return; - } - - (*Depth)++; - s->iEnt = -2; - Tree_Add (keep, &s); - for (i = 0; i < 4; i++){ - pS = &S; - pS->F[0] = s->F[i]; - if (Tree_Query (FacesTree, &pS) && List_Search (ListAllSurf, &pS->iEnt, fcmp_int)){ - j = abs (pS->iEnt); - List_Replace (ListSurfaces, &j, fcmp_int); - } - else if (s->S[i] && s->S[i] != &MyNewBoundary){ - recur_trouve_volume (s->S[i], Depth); - } - } - (*Depth)--; -} - -void Restore_Volume (Volume * v){ - int N; - int j, i, depth; - Surface *s; - - StackSimp = List_Create (100, 100, sizeof (Simplex *)); - - FacesTree = Tree_Create (sizeof (Simplex *), compareSimpSurf); - Actual_Tree = FacesTree; - for (j = 0; j < List_Nbr (v->Surfaces); j++){ - List_Read (v->Surfaces, j, &s); - Tree_Action (s->Simplexes, _Add); - } - - ListSurfaces = List_Create (2, 2, sizeof (int)); - iVolume = -1; - Tree_Action (v->Simplexes, attribueVolume); - - /* Les simplexes sur le bord exterieur sont elimines */ - - ListAllSurf = List_Create (10, 3, sizeof (int)); - SurfacesDansVolume (v, ListAllSurf); - - SIMP = NULL; - Tree_Action (v->Simplexes, Trouve_Simplex_Bord); - - if (SIMP){ - List_Add (StackSimp, &SIMP); - keep = Tree_Create (sizeof (Simplex *), compareQuality); - depth = 0; - i = 0; - do{ - List_Read (StackSimp, i, &SIMP); - recur_trouve_volume (SIMP, &depth); - } while (++i < List_Nbr (StackSimp)); - List_Reset (StackSimp); - - for (i = 0; i < List_Nbr (ListSurfaces); i++){ - List_Read (ListSurfaces, i, &j); - Msg(STATUS2, "Surface %d", j); - } - - iVolume = 0; - Tree_Action (keep, attribueVolume); - Tree_Delete (keep); - List_Reset (ListSurfaces); - } - - while (1){ - SIMP = NULL; - keep = Tree_Create (sizeof (Simplex *), compareQuality); - Tree_Action (v->Simplexes, Trouve_Simplex); - if (!SIMP) - break; - List_Add (StackSimp, &SIMP); - depth = 0; - i = 0; - do{ - List_Read (StackSimp, i, &SIMP); - recur_trouve_volume (SIMP, &depth); - }while (++i < List_Nbr (StackSimp)); - - iVolume = isListaVolume (ListSurfaces, THEM); - - for (i = 0; i < List_Nbr (ListSurfaces); i++){ - List_Read (ListSurfaces, i, &j); - Msg(STATUS2, "Surface %d", j); - } - - N = Tree_Nbr (keep); - Msg(INFO, "Initial mesh of volume %d: %d simplices", iVolume, N); - Tree_Action (keep, attribueVolume); - Tree_Delete (keep); - List_Reset (ListSurfaces); - List_Reset (StackSimp); - } -} diff --git a/Mesh/3D_Divide.cpp b/Mesh/3D_Divide.cpp deleted file mode 100644 index a345e8567907134318672a7eaa82af04930b111b..0000000000000000000000000000000000000000 --- a/Mesh/3D_Divide.cpp +++ /dev/null @@ -1,737 +0,0 @@ -// $Id: 3D_Divide.cpp,v 1.12 2001-08-11 23:28:32 geuzaine Exp $ - -/* Routine de division des elements tetraedriques - ou triangulaires - - 1 triangle -> 4 triangles ; - 1 tetraedre -> noeuds 1 2 3 4 - faces 1 4 2 - 1 -*/ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Mesh.h" - -extern int edges_tetra[6][2]; -extern int CurrentNodeNumber; - -static Tree_T *New_Edges = NULL; -static int IENT; - -typedef struct { - int i; - int j; -}nxn; - -static int are_exists (Vertex *v1, Vertex *v2){ - nxn nx; - nx.i = IMAX(v1->Num,v2->Num); - nx.j = IMIN(v1->Num,v2->Num); - return Tree_Search(New_Edges,&nx); -} - -static void are_add (Vertex *v1, Vertex *v2){ - nxn nx; - nx.i = IMAX(v1->Num,v2->Num); - nx.j = IMIN(v1->Num,v2->Num); - Tree_Add(New_Edges,&nx); -} - -static int compnxn (const void *a, const void *b){ - nxn *q,*w; - q = (nxn*)a; - w = (nxn*)b; - if(q->i>w->i)return 1; - if(q->i<w->i)return -1; - if(q->j>w->j)return 1; - if(q->j<w->j)return -1; - return 0; -} - -static int FF,FV,EV,EE,FE,EEE,EEEE; -void Remise_A_Zero (void){ - FF=EE=FV=EV=FE=EEE=EEEE=0; -} - -void Impression_Resultats (void){ - - Msg(INFO1, "==================================================="); - Msg(INFO2, "Surface coherence results (number of intersections)"); - Msg(INFO2, "%d EV, %d EE, %d FV, %d FF, %d FE, %d EEE, %d EEEE", - EV, EE, FV, FF, FE, EEE, EEEE); - Msg(INFO3, "==================================================="); - -} - -int PARLE = 0; - -void cut_prism (Vertex * v1, Vertex * v2, Vertex * v3, - Vertex * v4, Vertex * v5, Vertex * v6, - Tree_T * newpoints, Tree_T * AddedTet){ - - Simplex *news; - Vertex *e1; - - Msg(INFO, "Prism cut"); - - /* test des meilleures aretes a creer */ - /* - if(!are_exists(v1,v6) && - !are_exists(v4,v3)){ - - if(fabs(angle_3p(v1,v4,v6)) > - fabs(angle_3p(v4,v6,v3))){ - are_add(v4,v3); - } - else{ - are_add(v1,v6); - } - } - - if(!are_exists(v3,v5) && - !are_exists(v6,v2)){ - - if(fabs(angle_3p(v6,v5,v2)) > - fabs(angle_3p(v5,v2,v3))){ - are_add(v5,v3); - } - else{ - are_add(v2,v6); - } - } - - if(!are_exists(v1,v5) && - !are_exists(v4,v2)){ - - if(fabs(angle_3p(v1,v4,v5)) > - fabs(angle_3p(v4,v5,v2))){ - are_add(v4,v2); - } - else{ - are_add(v1,v5); - } - } - */ - if (!are_exists (v1, v5) && //OK - !are_exists (v6, v2) && - !are_exists (v6, v1)){ - news = Create_Simplex (v1, v2, v3, v4); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (v4, v5, v6, v3); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (v2, v4, v5, v3); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - are_add (v4, v2); - are_add (v5, v3); - are_add (v4, v3); - } - else if (!are_exists (v1, v5) && //OK - !are_exists (v3, v5) && - !are_exists (v1, v6)){ - news = Create_Simplex (v1, v2, v3, v4); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (v4, v5, v6, v2); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (v4, v2, v6, v3); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - are_add (v4, v2); - are_add (v2, v6); - are_add (v4, v3); - } - else if (!are_exists (v1, v5) && //OK - !are_exists (v3, v5) && - !are_exists (v4, v3)){ - news = Create_Simplex (v1, v2, v3, v6); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (v4, v5, v6, v2); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (v2, v4, v6, v1); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - are_add (v4, v2); - are_add (v2, v6); - are_add (v6, v1); - } - else if (!are_exists (v4, v2) && //OK - !are_exists (v6, v2) && - !are_exists (v6, v1)){ - news = Create_Simplex (v1, v2, v3, v5); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (v4, v5, v6, v3); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (v1, v4, v5, v3); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - are_add (v5, v1); - are_add (v5, v3); - are_add (v4, v3); - } - else if (!are_exists (v4, v2) && //OK - !are_exists (v6, v2) && - !are_exists (v4, v3)){ - news = Create_Simplex (v1, v2, v3, v5); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (v4, v5, v6, v1); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (v1, v3, v5, v6); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - are_add (v5, v1); - are_add (v5, v3); - are_add (v6, v1); - } - else if (!are_exists (v4, v2) && //OK - !are_exists (v3, v5) && - !are_exists (v4, v3)){ - news = Create_Simplex (v1, v2, v3, v6); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (v4, v5, v6, v1); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (v1, v2, v5, v6); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - are_add (v5, v1); - are_add (v2, v6); - are_add (v6, v1); - } - - else if (are_exists (v6, v1) && - are_exists (v5, v3) && - are_exists (v4, v2)) { - Msg(INFO, "Found steiner prism 1!"); - - e1 = Create_Vertex - (++CurrentNodeNumber, - (v1->Pos.X + v2->Pos.X + v3->Pos.X + v4->Pos.X + v5->Pos.X + v6->Pos.X) / 6., - (v1->Pos.Y + v2->Pos.Y + v3->Pos.Y + v4->Pos.Y + v5->Pos.Y + v6->Pos.Y) / 6., - (v1->Pos.Z + v2->Pos.Z + v3->Pos.Z + v4->Pos.Z + v5->Pos.Z + v6->Pos.Z) / 6., - (v1->lc + v2->lc + v3->lc + v4->lc + v5->lc + v6->lc) / 6., - 0.0); - Tree_Add (newpoints, &e1); - news = Create_Simplex (e1, v6, v1, v4); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (e1, v6, v1, v3); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (e1, v5, v3, v6); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (e1, v5, v3, v2); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (e1, v4, v2, v1); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (e1, v4, v2, v5); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - } - - else if (are_exists (v4, v3) && - are_exists (v6, v2) && - are_exists (v5, v1)){ - Msg(INFO, "Found steiner prism 2!"); - - e1 = Create_Vertex - (++CurrentNodeNumber, - (v1->Pos.X + v2->Pos.X + v3->Pos.X + v4->Pos.X + v5->Pos.X + v6->Pos.X) / 6., - (v1->Pos.Y + v2->Pos.Y + v3->Pos.Y + v4->Pos.Y + v5->Pos.Y + v6->Pos.Y) / 6., - (v1->Pos.Z + v2->Pos.Z + v3->Pos.Z + v4->Pos.Z + v5->Pos.Z + v6->Pos.Z) / 6., - (v1->lc + v2->lc + v3->lc + v4->lc + v5->lc + v6->lc) / 6., - 0.0); - Tree_Add (newpoints, &e1); - news = Create_Simplex (e1, v4, v3, v6); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (e1, v4, v3, v1); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (e1, v6, v2, v5); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (e1, v6, v2, v3); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (e1, v5, v1, v4); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - news = Create_Simplex (e1, v5, v1, v2); - news->iEnt = IENT; - Tree_Add (AddedTet, &news); - - } - else{ - Msg(GERROR, "Uncoherent prism"); - } -} - - -void cut_tetraedre (Intersection * pI, Tree_T * AddedTet, Tree_T * TetDel, - Tree_T * newpoints){ - int i; - nxn nx; - Simplex *s; - Vertex *common, *other1, *other2, *lonely, *e1, *e2, *point1, *point2, *point3, *point4; - Vertex *v1, *v2, *v3, *v4, *v5, *v6, *v7, *v8; - - if (!New_Edges) - New_Edges = Tree_Create (sizeof (nxn), compnxn); - - IENT = pI->s->iEnt; - - /* 1 tetraedre -> 2 tetraedres */ - - if ((pI->NbEdge == 0) && (pI->NbFace == 0)){ - } - else if (pI->NbEdge == 1 && pI->NbFace == 0){ - - Tree_Add (TetDel, &pI->s); - - - EV++; - if (pI->E[0] == 0){ - /* Verifie */ - s = Create_Simplex (pI->s->V[2], pI->s->V[3], pI->s->V[0], pI->VE[0]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - if (PARLE) - printf ("ajout %d %d %d %d\n", - s->V[0]->Num, s->V[1]->Num, s->V[2]->Num, s->V[3]->Num); - s = Create_Simplex (pI->s->V[1], pI->s->V[3], pI->s->V[2], pI->VE[0]); - if (PARLE) - printf ("ajout %d %d %d %d\n", - s->V[0]->Num, s->V[1]->Num, s->V[2]->Num, s->V[3]->Num); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - } - if (pI->E[0] == 1){ - /* Verifie */ - s = Create_Simplex (pI->s->V[0], pI->s->V[3], pI->s->V[2], pI->VE[0]); - if (PARLE) - printf ("ajout %d %d %d %d\n", - s->V[0]->Num, s->V[1]->Num, s->V[2]->Num, s->V[3]->Num); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (pI->s->V[3], pI->s->V[1], pI->s->V[0], pI->VE[0]); - if (PARLE) - printf ("ajout %d %d %d %d\n", - s->V[0]->Num, s->V[1]->Num, s->V[2]->Num, s->V[3]->Num); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - } - if (pI->E[0] == 2){ - /* Verifie */ - s = Create_Simplex (pI->s->V[0], pI->s->V[1], pI->s->V[3], pI->VE[0]); - if (PARLE) - printf ("ajout %d %d %d %d\n", - s->V[0]->Num, s->V[1]->Num, s->V[2]->Num, s->V[3]->Num); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (pI->s->V[1], pI->s->V[3], pI->s->V[2], pI->VE[0]); - if (PARLE) - printf ("ajout %d %d %d %d\n", - s->V[0]->Num, s->V[1]->Num, s->V[2]->Num, s->V[3]->Num); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - } - if (pI->E[0] == 3){ - /* Verifie */ - s = Create_Simplex (pI->s->V[0], pI->s->V[1], pI->s->V[2], pI->VE[0]); - if (PARLE) - printf ("ajout %d %d %d %d\n", - s->V[0]->Num, s->V[1]->Num, s->V[2]->Num, s->V[3]->Num); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (pI->s->V[1], pI->s->V[2], pI->s->V[3], pI->VE[0]); - if (PARLE) - printf ("ajout %d %d %d %d\n", - s->V[0]->Num, s->V[1]->Num, s->V[2]->Num, s->V[3]->Num); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - } - if (pI->E[0] == 4){ - /* Verifie */ - s = Create_Simplex (pI->s->V[2], pI->s->V[0], pI->s->V[1], pI->VE[0]); - if (PARLE) - printf ("ajout %d %d %d %d\n", - s->V[0]->Num, s->V[1]->Num, s->V[2]->Num, s->V[3]->Num); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (pI->s->V[1], pI->s->V[3], pI->s->V[0], pI->VE[0]); - if (PARLE) - printf ("ajout %d %d %d %d\n", - s->V[0]->Num, s->V[1]->Num, s->V[2]->Num, s->V[3]->Num); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - } - if (pI->E[0] == 5){ - /* Verifie */ - s = Create_Simplex (pI->s->V[0], pI->s->V[3], pI->s->V[2], pI->VE[0]); - if (PARLE) - printf ("ajout %d %d %d %d\n", - s->V[0]->Num, s->V[1]->Num, s->V[2]->Num, s->V[3]->Num); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (pI->s->V[0], pI->s->V[1], pI->s->V[2], pI->VE[0]); - if (PARLE) - printf ("ajout %d %d %d %d\n", - s->V[0]->Num, s->V[1]->Num, s->V[2]->Num, s->V[3]->Num); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - } - } - else if (pI->NbVertex == 1 && pI->NbFace == 1){ - FV++; - Tree_Add (TetDel, &pI->s); - s = Create_Simplex (pI->V[0], pI->VF[0], pI->F[0]->V[0], pI->F[0]->V[1]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (pI->V[0], pI->VF[0], pI->F[0]->V[1], pI->F[0]->V[2]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (pI->V[0], pI->VF[0], pI->F[0]->V[2], pI->F[0]->V[0]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - } - - /* DU CUL LES COPINES - TROIS ARETES QUI PENETRENT LA MEME FACE - TRIPLETTE, TRIPLE PENETRATION */ - - else if (pI->NbEdge == 3){ - EEE++; - /* - printf("tet %d %d %d %d\n", - pI->s->V[0]->Num,pI->s->V[1]->Num,pI->s->V[2]->Num,pI->s->V[3]->Num); - printf("ed %d %d\n",pI->s->V[edges_tetra[pI->E[0]][0]]->Num, - pI->s->V[edges_tetra[pI->E[0]][1]]->Num); - printf("ed %d %d\n",pI->s->V[edges_tetra[pI->E[1]][0]]->Num, - pI->s->V[edges_tetra[pI->E[1]][1]]->Num); - printf("ed %d %d\n",pI->s->V[edges_tetra[pI->E[2]][0]]->Num, - pI->s->V[edges_tetra[pI->E[2]][1]]->Num); - */ - Tree_Add (TetDel, &pI->s); - v4 = pI->VE[0]; - v5 = pI->VE[1]; - v6 = pI->VE[2]; - if (pI->E[0] == 0 && pI->E[1] == 1 && pI->E[2] == 5){ - v1 = pI->s->V[0]; - v2 = pI->s->V[2]; - v3 = pI->s->V[3]; - v7 = pI->s->V[1]; - } - else if (pI->E[0] == 0 && pI->E[1] == 2 && pI->E[2] == 3){ - v1 = pI->s->V[1]; - v2 = pI->s->V[2]; - v3 = pI->s->V[3]; - v7 = pI->s->V[0]; - } - else if (pI->E[0] == 1 && pI->E[1] == 2 && pI->E[2] == 4){ - v1 = pI->s->V[1]; - v2 = pI->s->V[0]; - v3 = pI->s->V[3]; - v7 = pI->s->V[2]; - } - else if (pI->E[0] == 3 && pI->E[1] == 4 && pI->E[2] == 5){ - v1 = pI->s->V[0]; - v2 = pI->s->V[2]; - v3 = pI->s->V[1]; - v7 = pI->s->V[3]; - } - else{ - Msg(GERROR, "Three edges cut without common point!"); - return; - } - - s = Create_Simplex (v4, v5, v6, v7); - Tree_Add (AddedTet, &s); - cut_prism (v1, v2, v3, v4, v5, v6, newpoints, AddedTet); - - } - - else if (pI->NbFace == 2){ - FF++; - point3 = NULL; - Tree_Add (TetDel, &pI->s); - if (PARLE){ - printf ("simp = %d %d %d %d\n", - pI->s->V[0]->Num, pI->s->V[1]->Num, pI->s->V[2]->Num, pI->s->V[3]->Num); - printf ("are = %d %d\n", - pI->VF[0]->Num, pI->VF[1]->Num); - printf ("face1 = %d %d %d\n", - pI->F[0]->V[0]->Num, pI->F[0]->V[1]->Num, pI->F[0]->V[2]->Num); - printf ("face2 = %d %d %d\n", - pI->F[1]->V[0]->Num, pI->F[1]->V[1]->Num, pI->F[1]->V[2]->Num); - } - for (i = 0; i < 4; i++){ - if (compareVertex (&pI->F[0]->V[0], &pI->s->V[i]) && - compareVertex (&pI->F[0]->V[1], &pI->s->V[i]) && - compareVertex (&pI->F[0]->V[2], &pI->s->V[i])) - point1 = pI->s->V[i]; - else if (compareVertex (&pI->F[1]->V[0], &pI->s->V[i]) && - compareVertex (&pI->F[1]->V[1], &pI->s->V[i]) && - compareVertex (&pI->F[1]->V[2], &pI->s->V[i])) - point2 = pI->s->V[i]; - else if (point3) - point4 = pI->s->V[i]; - else - point3 = pI->s->V[i]; - } - s = Create_Simplex (point3, point4, pI->VF[0], pI->VF[1]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - if (PARLE) - printf ("simp = %d %d %d %d\n", - s->V[0]->Num, s->V[1]->Num, s->V[2]->Num, s->V[3]->Num); - s = Create_Simplex (point1, point4, pI->VF[0], pI->VF[1]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - if (PARLE) - printf ("simp = %d %d %d %d\n", - s->V[0]->Num, s->V[1]->Num, s->V[2]->Num, s->V[3]->Num); - s = Create_Simplex (point1, point3, pI->VF[0], pI->VF[1]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - if (PARLE) - printf ("simp = %d %d %d %d\n", - s->V[0]->Num, s->V[1]->Num, s->V[2]->Num, s->V[3]->Num); - s = Create_Simplex (point2, point4, point1, pI->VF[0]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - if (PARLE) - printf ("simp = %d %d %d %d\n", - s->V[0]->Num, s->V[1]->Num, s->V[2]->Num, s->V[3]->Num); - s = Create_Simplex (point2, point3, point1, pI->VF[0]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - if (PARLE) - printf ("simp = %d %d %d %d\n", - s->V[0]->Num, s->V[1]->Num, s->V[2]->Num, s->V[3]->Num); - } - - else if (pI->NbEdge == 2){ - EE++; - Tree_Add (TetDel, &pI->s); - if (pI->E[0] == 1 && pI->E[1] == 3){ - s = Create_Simplex (pI->s->V[0], pI->VE[1], pI->s->V[1], pI->VE[0]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (pI->s->V[0], pI->VE[1], pI->s->V[2], pI->VE[0]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (pI->s->V[1], pI->VE[1], pI->s->V[3], pI->VE[0]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (pI->s->V[2], pI->VE[1], pI->s->V[3], pI->VE[0]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - return; - } - else if (pI->E[0] == 2 && pI->E[1] == 5){ - s = Create_Simplex (pI->s->V[0], pI->VE[1], pI->s->V[1], pI->VE[0]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (pI->s->V[1], pI->VE[1], pI->s->V[2], pI->VE[0]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (pI->s->V[0], pI->VE[1], pI->s->V[3], pI->VE[0]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (pI->s->V[2], pI->VE[1], pI->s->V[3], pI->VE[0]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - return; - } - - else if (pI->E[0] == 0 && pI->E[1] == 4){ - s = Create_Simplex (pI->s->V[0], pI->VE[1], pI->s->V[2], pI->VE[0]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (pI->s->V[1], pI->VE[1], pI->s->V[2], pI->VE[0]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (pI->s->V[0], pI->VE[1], pI->s->V[3], pI->VE[0]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (pI->s->V[1], pI->VE[1], pI->s->V[3], pI->VE[0]); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - return; - } - - e1 = pI->VE[0]; - e2 = pI->VE[1]; - - if (!compareVertex (&pI->s->V[edges_tetra[pI->E[0]][0]], - &pI->s->V[edges_tetra[pI->E[1]][0]])){ - common = pI->s->V[edges_tetra[pI->E[0]][0]]; - other1 = pI->s->V[edges_tetra[pI->E[0]][1]]; - other2 = pI->s->V[edges_tetra[pI->E[1]][1]]; - } - else if (!compareVertex (&pI->s->V[edges_tetra[pI->E[0]][0]], - &pI->s->V[edges_tetra[pI->E[1]][1]])){ - common = pI->s->V[edges_tetra[pI->E[0]][0]]; - other1 = pI->s->V[edges_tetra[pI->E[0]][1]]; - other2 = pI->s->V[edges_tetra[pI->E[1]][0]]; - } - else if (!compareVertex (&pI->s->V[edges_tetra[pI->E[0]][1]], - &pI->s->V[edges_tetra[pI->E[1]][0]])){ - common = pI->s->V[edges_tetra[pI->E[0]][1]]; - other1 = pI->s->V[edges_tetra[pI->E[0]][0]]; - other2 = pI->s->V[edges_tetra[pI->E[1]][1]]; - } - else if (!compareVertex (&pI->s->V[edges_tetra[pI->E[0]][1]], - &pI->s->V[edges_tetra[pI->E[1]][1]])){ - common = pI->s->V[edges_tetra[pI->E[0]][1]]; - other1 = pI->s->V[edges_tetra[pI->E[0]][0]]; - other2 = pI->s->V[edges_tetra[pI->E[1]][0]]; - } - - for (i = 0; i < 4; i++){ - if (compareVertex (&pI->s->V[i], &common) && - compareVertex (&pI->s->V[i], &other1) && - compareVertex (&pI->s->V[i], &other2)) - lonely = pI->s->V[i]; - } - - nx.i = IMAX (e1->Num, other2->Num); - nx.j = IMIN (e1->Num, other2->Num); - - if (Tree_Search (New_Edges, &nx)){ - s = Create_Simplex (e1, other1, other2, lonely); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (e2, e1, common, lonely); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (e2, other2, e1, lonely); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - } - else{ - nx.i = IMAX (e2->Num, other1->Num); - nx.j = IMIN (e2->Num, other1->Num); - Tree_Add (New_Edges, &nx); - s = Create_Simplex (e1, other1, e2, lonely); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (e2, e1, common, lonely); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (e2, other1, other2, lonely); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - } - } - else if (pI->NbFace == 1 && pI->NbEdge == 1){ - FE++; - - Tree_Add (TetDel, &pI->s); - for (i = 0; i < 4; i++) - if (compareVertex (&pI->s->V[i], &pI->F[0]->V[0]) && - compareVertex (&pI->s->V[i], &pI->F[0]->V[1]) && - compareVertex (&pI->s->V[i], &pI->F[0]->V[2])) - v1 = pI->s->V[i]; - v2 = NULL; - v3 = NULL; - - for (i = 0; i < 4; i++){ - if (compareVertex (&pI->s->V[i], &v1)){ - if (compareVertex (&pI->s->V[i], &pI->s->V[edges_tetra[pI->E[0]][0]]) && - compareVertex (&pI->s->V[i], &pI->s->V[edges_tetra[pI->E[0]][1]])){ - if (v2) - v3 = pI->s->V[i]; - else - v2 = pI->s->V[i]; - } - else{ - v4 = pI->s->V[i]; - } - } - } - - e1 = pI->VE[0]; - e2 = pI->VF[0]; - - s = Create_Simplex (e1, e2, v3, v4); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (e1, e2, v2, v4); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (e1, e2, v2, v3); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - s = Create_Simplex (e1, v1, v2, v3); - s->iEnt = IENT; - Tree_Add (AddedTet, &s); - - } - else if (pI->NbEdge == 4){ - EEEE++; - - // Allez j-f il faut le faire ! - - Tree_Add (TetDel, &pI->s); - if (pI->E[0] == 1 && pI->E[1] == 2 && pI->E[2] == 3 && pI->E[3] == 5){ - v1 = pI->s->V[0]; - v2 = pI->s->V[1]; - v3 = pI->s->V[2]; - v4 = pI->s->V[3]; - v5 = pI->VE[1]; - v6 = pI->VE[2]; - v7 = pI->VE[0]; - v8 = pI->VE[3]; - } - else if (pI->E[0] == 0 && pI->E[1] == 2 && pI->E[2] == 4 && pI->E[3] == 5){ - v1 = pI->s->V[1]; - v2 = pI->s->V[2]; - v3 = pI->s->V[0]; - v4 = pI->s->V[3]; - v5 = pI->VE[0]; - v6 = pI->VE[3]; - v7 = pI->VE[1]; - v8 = pI->VE[2]; - } - else if (pI->E[0] == 0 && pI->E[1] == 1 && pI->E[2] == 3 && pI->E[3] == 4){ - v1 = pI->s->V[0]; - v2 = pI->s->V[2]; - v3 = pI->s->V[1]; - v4 = pI->s->V[3]; - v5 = pI->VE[0]; - v6 = pI->VE[2]; - v7 = pI->VE[1]; - v8 = pI->VE[3]; - } - else{ - Msg(GERROR, "Incoherent 4 edges intersection"); - return; - } - cut_prism (v8, v4, v6, v7, v3, v5, newpoints, AddedTet); - cut_prism (v2, v8, v7, v1, v6, v5, newpoints, AddedTet); - } - else{ - Msg(GERROR, "Error on cut %d %d %d", pI->NbVertex, pI->NbEdge, pI->NbFace); - } -} - - - - - diff --git a/Mesh/3D_Extrude.cpp b/Mesh/3D_Extrude.cpp deleted file mode 100644 index 7cfcea755de0e13da91e8d5365157e95506ea312..0000000000000000000000000000000000000000 --- a/Mesh/3D_Extrude.cpp +++ /dev/null @@ -1,767 +0,0 @@ -// $Id: 3D_Extrude.cpp,v 1.28 2001-08-13 10:43:16 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "CAD.h" -#include "Mesh.h" -#include "Context.h" -#include "Create.h" - -extern Mesh *THEM; -extern int CurrentNodeNumber; - -static Tree_T *Tree_Ares = NULL, *Tree_Swaps = NULL; -static int TEST_IS_ALL_OK; -static Surface *THES; -static Volume *THEV; -static ExtrudeParams *ep; -static Tree_T *Vertex_Bound = NULL, *ToAdd = NULL; - -typedef struct{ - int a, b; -}nxn; - -static int compnxn (const void *a, const void *b){ - nxn *q, *w; - q = (nxn *) a; - w = (nxn *) b; - if (q->a > w->a) - return 1; - if (q->a < w->a) - return -1; - if (q->b > w->b) - return 1; - if (q->b < w->b) - return -1; - return 0; -} - -void InitExtrude (){ - if (!Tree_Ares) - Tree_Ares = Tree_Create (sizeof (nxn), compnxn); - if (!Tree_Swaps) - Tree_Swaps = Tree_Create (sizeof (nxn), compnxn); - if(Vertex_Bound) - Tree_Delete(Vertex_Bound); - Vertex_Bound = Tree_Create (sizeof (Vertex *), comparePosition); - List_T *l1 = Tree2List (THEM->Points); - List_T *l2 = Tree2List (THEM->Vertices); - - for(int i=0;i<List_Nbr(l1);i++)Tree_Insert(Vertex_Bound,List_Pointer(l1,i)); - for(int i=0;i<List_Nbr(l2);i++)Tree_Insert(Vertex_Bound,List_Pointer(l2,i)); - - List_Delete(l1); - List_Delete(l2); -} - -void ExitExtrude (){ - if (Tree_Ares)Tree_Delete(Tree_Ares); - if (Tree_Swaps)Tree_Delete(Tree_Swaps); - if(Vertex_Bound)Tree_Delete (Vertex_Bound); - Tree_Ares = Tree_Swaps = NULL; - ToAdd = Vertex_Bound = NULL; -} - -int are_exist (Vertex * v1, Vertex * v2, Tree_T * t){ - nxn n; - n.a = IMAX (v1->Num, v2->Num); - n.b = IMIN (v1->Num, v2->Num); - return Tree_Search (t, &n); -} - -void are_cree (Vertex * v1, Vertex * v2, Tree_T * t){ - nxn n; - n.a = IMAX (v1->Num, v2->Num); - n.b = IMIN (v1->Num, v2->Num); - Tree_Replace (t, &n); -} - -void are_del (Vertex * v1, Vertex * v2, Tree_T * t){ - nxn n; - n.a = IMAX (v1->Num, v2->Num); - n.b = IMIN (v1->Num, v2->Num); - Tree_Suppress (t, &n); -} - - -void Extrude_Simplex_Phase1 (void *data, void *dum){ - Simplex **pS, *s; - int i, j, k; - Vertex *v1, *v2, *v3, *v4, *v5, *v6; - - pS = (Simplex **) data; - s = *pS; - - k = 0; - for (i = 0; i < ep->mesh.NbLayer; i++){ - for (j = 0; j < ep->mesh.NbElmLayer[i]; j++){ - List_Read (s->V[0]->Extruded_Points, k, &v1); - List_Read (s->V[1]->Extruded_Points, k, &v2); - List_Read (s->V[2]->Extruded_Points, k, &v3); - List_Read (s->V[0]->Extruded_Points, k + 1, &v4); - List_Read (s->V[1]->Extruded_Points, k + 1, &v5); - List_Read (s->V[2]->Extruded_Points, k + 1, &v6); - if (ep->mesh.Simplexes){ - k++; - if (!are_exist (v1, v5, Tree_Ares)) - are_cree (v2, v4, Tree_Ares); - if (!are_exist (v5, v3, Tree_Ares)) - are_cree (v2, v6, Tree_Ares); - if (!are_exist (v4, v3, Tree_Ares)) - are_cree (v1, v6, Tree_Ares); - } - else if (!s->V[3]){ - } - else{ - } - } - } -} - -void Extrude_Simplex_Phase3 (void *data, void *dum){ - - Simplex **pS, *s, *news; - Hexahedron *newh; - Prism *newp; - int i, j, k; - Vertex *v1, *v2, *v3, *v4, *v5, *v6, *v7, *v8; - - pS = (Simplex **) data; - s = *pS; - - if(s->V[3] && !ep->mesh.Recombine){ - Msg(GERROR, "You have to use 'Recombine' to extrude quadrangular meshes"); - return; - } - - k = 0; - for (i = 0; i < ep->mesh.NbLayer; i++){ - for (j = 0; j < ep->mesh.NbElmLayer[i]; j++){ - - if(s->V[3]){ - List_Read(s->V[0]->Extruded_Points,k,&v1); - List_Read(s->V[1]->Extruded_Points,k,&v2); - List_Read(s->V[2]->Extruded_Points,k,&v3); - List_Read(s->V[3]->Extruded_Points,k,&v4); - List_Read(s->V[0]->Extruded_Points,k+1,&v5); - List_Read(s->V[1]->Extruded_Points,k+1,&v6); - List_Read(s->V[2]->Extruded_Points,k+1,&v7); - List_Read(s->V[3]->Extruded_Points,k+1,&v8); - } - else{ - List_Read (s->V[0]->Extruded_Points, k, &v1); - List_Read (s->V[1]->Extruded_Points, k, &v2); - List_Read (s->V[2]->Extruded_Points, k, &v3); - List_Read (s->V[0]->Extruded_Points, k + 1, &v4); - List_Read (s->V[1]->Extruded_Points, k + 1, &v5); - List_Read (s->V[2]->Extruded_Points, k + 1, &v6); - } - - k++; - if (ep->mesh.ZonLayer[i]){ - - if(ep->mesh.Recombine){ - if(s->V[3]){ - newh = Create_Hexahedron(v1,v2,v3,v4,v5,v6,v7,v8); - newh->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add(THEV->Hexahedra,&newh); - } - else{ - newp = Create_Prism(v1,v2,v3,v4,v5,v6); - newp->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add(THEV->Prisms,&newp); - } - } - else{ - - if (are_exist (v4, v2, Tree_Ares) && - are_exist (v5, v3, Tree_Ares) && - are_exist (v4, v3, Tree_Ares)){ - news = Create_Simplex (v1, v2, v3, v4); - news->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add (THEV->Simplexes, &news); - news = Create_Simplex (v4, v5, v6, v3); - news->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add (THEV->Simplexes, &news); - news = Create_Simplex (v2, v4, v5, v3); - news->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add (THEV->Simplexes, &news); - } - if (are_exist (v4, v2, Tree_Ares) && - are_exist (v2, v6, Tree_Ares) && - are_exist (v4, v3, Tree_Ares)){ - news = Create_Simplex (v1, v2, v3, v4); - news->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add (THEV->Simplexes, &news); - news = Create_Simplex (v4, v5, v6, v2); - news->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add (THEV->Simplexes, &news); - news = Create_Simplex (v4, v2, v6, v3); - news->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add (THEV->Simplexes, &news); - } - if (are_exist (v4, v2, Tree_Ares) && - are_exist (v2, v6, Tree_Ares) && - are_exist (v6, v1, Tree_Ares)){ - news = Create_Simplex (v1, v2, v3, v6); - news->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add (THEV->Simplexes, &news); - news = Create_Simplex (v4, v5, v6, v2); - news->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add (THEV->Simplexes, &news); - news = Create_Simplex (v2, v4, v6, v1); - news->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add (THEV->Simplexes, &news); - } - if (are_exist (v5, v1, Tree_Ares) && - are_exist (v5, v3, Tree_Ares) && - are_exist (v4, v3, Tree_Ares)){ - news = Create_Simplex (v1, v2, v3, v5); - news->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add (THEV->Simplexes, &news); - news = Create_Simplex (v4, v5, v6, v3); - news->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add (THEV->Simplexes, &news); - news = Create_Simplex (v1, v4, v5, v3); - news->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add (THEV->Simplexes, &news); - } - if (are_exist (v5, v1, Tree_Ares) && - are_exist (v5, v3, Tree_Ares) && - are_exist (v6, v1, Tree_Ares)){ - news = Create_Simplex (v1, v2, v3, v5); - news->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add (THEV->Simplexes, &news); - news = Create_Simplex (v4, v5, v6, v1); - news->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add (THEV->Simplexes, &news); - news = Create_Simplex (v1, v3, v5, v6); - news->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add (THEV->Simplexes, &news); - } - if (are_exist (v5, v1, Tree_Ares) && - are_exist (v2, v6, Tree_Ares) && - are_exist (v6, v1, Tree_Ares)){ - news = Create_Simplex (v1, v2, v3, v6); - news->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add (THEV->Simplexes, &news); - news = Create_Simplex (v4, v5, v6, v1); - news->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add (THEV->Simplexes, &news); - news = Create_Simplex (v1, v2, v5, v6); - news->iEnt = ep->mesh.ZonLayer[i]; - Tree_Add (THEV->Simplexes, &news); - } - } - } - } - } -} - -void Extrude_Simplex_Phase2 (void *data, void *dum){ - - Simplex **pS, *s; - int i, j, k; - Vertex *v1, *v2, *v3, *v4, *v5, *v6; - - pS = (Simplex **) data; - s = *pS; - - k = 0; - for (i = 0; i < ep->mesh.NbLayer; i++){ - for (j = 0; j < ep->mesh.NbElmLayer[i]; j++){ - List_Read (s->V[0]->Extruded_Points, k, &v1); - List_Read (s->V[1]->Extruded_Points, k, &v2); - List_Read (s->V[2]->Extruded_Points, k, &v3); - List_Read (s->V[0]->Extruded_Points, k + 1, &v4); - List_Read (s->V[1]->Extruded_Points, k + 1, &v5); - List_Read (s->V[2]->Extruded_Points, k + 1, &v6); - k++; - if (are_exist (v4, v2, Tree_Ares) && - are_exist (v5, v3, Tree_Ares) && - are_exist (v1, v6, Tree_Ares)){ - TEST_IS_ALL_OK++; - if (!are_exist (v4, v2, Tree_Swaps)){ - are_del (v4, v2, Tree_Ares); - are_cree (v1, v5, Tree_Ares); - are_cree (v1, v5, Tree_Swaps); - are_cree (v4, v2, Tree_Swaps); - } - else if (!are_exist (v5, v3, Tree_Swaps)){ - are_del (v5, v3, Tree_Ares); - are_cree (v2, v6, Tree_Ares); - are_cree (v5, v3, Tree_Swaps); - are_cree (v2, v6, Tree_Swaps); - } - else if (!are_exist (v1, v6, Tree_Swaps)){ - are_del (v1, v6, Tree_Ares); - are_cree (v4, v3, Tree_Ares); - are_cree (v1, v6, Tree_Swaps); - are_cree (v4, v3, Tree_Swaps); - } - } - else if (are_exist (v1, v5, Tree_Ares) && - are_exist (v2, v6, Tree_Ares) && - are_exist (v4, v3, Tree_Ares)){ - TEST_IS_ALL_OK++; - if (!are_exist (v1, v5, Tree_Swaps)){ - are_del (v1, v5, Tree_Ares); - are_cree (v4, v2, Tree_Ares); - are_cree (v1, v5, Tree_Swaps); - are_cree (v4, v2, Tree_Swaps); - } - else if (!are_exist (v2, v6, Tree_Swaps)){ - are_del (v2, v6, Tree_Ares); - are_cree (v5, v3, Tree_Ares); - are_cree (v5, v3, Tree_Swaps); - are_cree (v2, v6, Tree_Swaps); - } - else if (!are_exist (v4, v3, Tree_Swaps)){ - are_del (v4, v3, Tree_Ares); - are_cree (v1, v6, Tree_Ares); - are_cree (v1, v6, Tree_Swaps); - are_cree (v4, v3, Tree_Swaps); - } - } - } - } -} - - -void Extrude_Vertex (void *data, void *dum){ - - Vertex **pV, *v, *newv; - int i, j; - - pV = (Vertex **) data; - v = *pV; - - // We should _not_ return here, since 1 point can be extruded along - // several directions (this was of course not the case in the old - // extrusion generator...) - if (v->Extruded_Points) // return; - List_Delete (v->Extruded_Points); - - v->Extruded_Points = List_Create (ep->mesh.NbLayer, 1, sizeof (Vertex *)); - List_Add (v->Extruded_Points, &v); - - for (i = 0; i < ep->mesh.NbLayer; i++){ - for (j = 0; j < ep->mesh.NbElmLayer[i]; j++){ - newv = Create_Vertex (++CurrentNodeNumber, v->Pos.X, - v->Pos.Y, v->Pos.Z, v->lc, v->u); - ep->Extrude (i, j + 1, newv->Pos.X, newv->Pos.Y, newv->Pos.Z); - - if (Vertex_Bound && (pV = (Vertex **) Tree_PQuery (Vertex_Bound, &newv))){ - Free_Vertex (&newv,0); - List_Add (v->Extruded_Points, pV); - if (ToAdd) - Tree_Insert (ToAdd, pV); - } - else{ - List_Add (v->Extruded_Points, &newv); - Tree_Insert (THEM->Vertices, &newv); - Tree_Insert (Vertex_Bound, &newv); - if (ToAdd) - Tree_Insert (ToAdd, &newv); - } - } - } -} - -void Extrude_Surface1 (Surface * s){ - THES = s; - Tree_Action (s->Vertices, Extrude_Vertex); - if(!ep->mesh.Recombine) Tree_Action (s->Simplexes, Extrude_Simplex_Phase1); -} - -void Extrude_Surface2 (Surface * s){ - THES = s; - Tree_Action (s->Simplexes, Extrude_Simplex_Phase2); -} - - -void Extrude_Surface3 (Surface * s){ - THES = s; - Tree_Action (s->Simplexes, Extrude_Simplex_Phase3); -} - - -void Extrude_Seg (Vertex * V1, Vertex * V2){ - int i, j, k; - Vertex *v1, *v2, *v3, *v4; - Simplex *s; - - k = 0; - for (i = 0; i < ep->mesh.NbLayer; i++){ - for (j = 0; j < ep->mesh.NbElmLayer[i]; j++){ - List_Read (V1->Extruded_Points, k, &v1); - List_Read (V2->Extruded_Points, k, &v2); - List_Read (V1->Extruded_Points, k + 1, &v3); - List_Read (V2->Extruded_Points, k + 1, &v4); - if(ep->mesh.Recombine){ - s = Create_Quadrangle(v1,v2,v4,v3); - s->iEnt = THES->Num; - s->Num = -s->Num; //Tag quadrangles to re-extrude - Tree_Add(THES->Simplexes,&s); - } - else{ - if (are_exist (v3, v2, Tree_Ares)){ - s = Create_Simplex (v3, v2, v1, NULL); - s->iEnt = THES->Num; - s->Num = -s->Num; //Tag triangles to re-extrude - Tree_Add (THES->Simplexes, &s); - s = Create_Simplex (v3, v4, v2, NULL); - s->iEnt = THES->Num; - s->Num = -s->Num; //Tag triangles to re-extrude - Tree_Add (THES->Simplexes, &s); - } - else{ - s = Create_Simplex (v3, v4, v1, NULL); - s->iEnt = THES->Num; - s->Num = -s->Num; //Tag triangles to re-extrude - Tree_Add (THES->Simplexes, &s); - s = Create_Simplex (v1, v4, v2, NULL); - s->iEnt = THES->Num; - s->Num = -s->Num; //Tag triangles to re-extrude - Tree_Add (THES->Simplexes, &s); - } - } - k++; - } - } - -} - -void Extrude_Curve (void *data, void *dum){ - Curve **pC, *c; - Vertex *v1, *v2; - int i; - pC = (Curve **) data; - c = *pC; - - //if (c->Num < 0) return; - - for (i = 0; i < List_Nbr (c->Vertices) - 1; i++){ - List_Read (c->Vertices, i, &v1); - List_Read (c->Vertices, i + 1, &v2); - Extrude_Seg (v1, v2); - } -} - -void copy_mesh (Curve * from, Curve * to, int direction){ - List_T *list = from->Vertices; - Vertex *vi, *v, **vv, **vexist; - - int nb = List_Nbr(to->Vertices); - if(nb){ - if(nb != List_Nbr(from->Vertices)) - Msg(GERROR, "Uncompatible extrusion of curve %d into curve %d", - from->Num, to->Num); - return; - } - - to->Vertices = List_Create (List_Nbr(from->Vertices), 2, sizeof (Vertex *)); - - vv = &to->beg; - if ((vexist = (Vertex **) Tree_PQuery (THEM->Vertices, vv))){ - (*vexist)->u = to->ubeg; - Tree_Insert (THEM->Vertices, vexist); - Tree_Insert (Vertex_Bound, vexist); - if ((*vexist)->ListCurves) - List_Add ((*vexist)->ListCurves, &to); - List_Add (to->Vertices, vexist); - } - else{ - vi = Create_Vertex ((*vv)->Num, (*vv)->Pos.X, (*vv)->Pos.Y, (*vv)->Pos.Z, - (*vv)->lc, to->ubeg); - Tree_Insert (THEM->Vertices, &vi); - Tree_Insert (Vertex_Bound, &vi); - vi->ListCurves = List_Create (1, 1, sizeof (Curve *)); - List_Add (vi->ListCurves, &to); - List_Add (to->Vertices, &vi); - } - - for (int i = 1; i < List_Nbr(list)-1; i++){ - if(direction < 0) - List_Read (list, List_Nbr(list)-1-i, &v); - else - List_Read (list, i, &v); - vi = Create_Vertex (++CurrentNodeNumber, v->Pos.X, - v->Pos.Y, v->Pos.Z, v->lc, (direction>0)?v->u:(1.-v->u)); - ep->Extrude (ep->mesh.NbLayer - 1, ep->mesh.NbElmLayer[ep->mesh.NbLayer - 1], - vi->Pos.X, vi->Pos.Y, vi->Pos.Z); - Tree_Insert (THEM->Vertices, &vi); - Tree_Insert (Vertex_Bound, &vi); - if(!vi->ListCurves) - vi->ListCurves = List_Create (1, 1, sizeof (Curve *)); - List_Add (vi->ListCurves, &to); - List_Add (to->Vertices, &vi); - } - - vv = &to->end; - if ((vexist = (Vertex **) Tree_PQuery (THEM->Vertices, vv))){ - (*vexist)->u = to->uend; - Tree_Insert (THEM->Vertices, vexist); - Tree_Insert (Vertex_Bound, vexist); - if ((*vexist)->ListCurves) - List_Add ((*vexist)->ListCurves, &to); - List_Add (to->Vertices, vexist); - } - else{ - vi = Create_Vertex ((*vv)->Num, (*vv)->Pos.X, (*vv)->Pos.Y, (*vv)->Pos.Z, - (*vv)->lc, to->uend); - Tree_Insert (THEM->Vertices, &vi); - Tree_Insert (Vertex_Bound, &vi); - vi->ListCurves = List_Create (1, 1, sizeof (Curve *)); - List_Add (vi->ListCurves, &to); - List_Add (to->Vertices, &vi); - } - - -} - -int Extrude_Mesh (Curve * c){ - int i; - Vertex **v, *pV, **vexist, *v1; - - if (!c->Extrude || !c->Extrude->mesh.ExtrudeMesh) return false; - - InitExtrude(); - - ep = c->Extrude; - - if (ep->geo.Mode == EXTRUDED_ENTITY){ - Extrude_Vertex (&c->beg, NULL); - c->Vertices = List_Create (List_Nbr (c->beg->Extruded_Points), 2, sizeof (Vertex *)); - v = &c->beg; - if ((vexist = (Vertex **) Tree_PQuery (THEM->Vertices, v))){ - (*vexist)->u = c->ubeg; - Tree_Insert (THEM->Vertices, vexist); - if ((*vexist)->ListCurves) - List_Add ((*vexist)->ListCurves, &c); - List_Add (c->Vertices, vexist); - } - else{ - pV = Create_Vertex ((*v)->Num, (*v)->Pos.X, (*v)->Pos.Y, (*v)->Pos.Z, (*v)->lc, 0.0); - pV->ListCurves = List_Create (1, 1, sizeof (Curve *)); - List_Add (pV->ListCurves, &c); - Tree_Insert (THEM->Vertices, &pV); - List_Add (c->Vertices, &pV); - } - - for (i = 1; i < List_Nbr (c->beg->Extruded_Points) - 1; i++){ - List_Read (c->beg->Extruded_Points, i, &v1); - if (!v1->ListCurves) v1->ListCurves = List_Create (1, 1, sizeof (Curve *)); - List_Add (v1->ListCurves, &c); - Tree_Insert (THEM->Vertices, &v1); - v1->u = (double) i / (double) List_Nbr (c->beg->Extruded_Points); - List_Add (c->Vertices, &v1); - } - - v = &c->end; - if ((vexist = (Vertex **) Tree_PQuery (THEM->Vertices, v))){ - (*vexist)->u = c->uend; - Tree_Insert (THEM->Vertices, vexist); - if ((*vexist)->ListCurves) - List_Add ((*vexist)->ListCurves, &c); - List_Add (c->Vertices, vexist); - } - else{ - pV = Create_Vertex ((*v)->Num, (*v)->Pos.X, (*v)->Pos.Y, (*v)->Pos.Z, (*v)->lc, 0.0); - pV->ListCurves = List_Create (1, 1, sizeof (Curve *)); - List_Add (pV->ListCurves, &c); - Tree_Insert (THEM->Vertices, &pV); - List_Add (c->Vertices, &pV); - } - return true; - } - else{ - Curve *cc = FindCurve (abs(ep->geo.Source), THEM); - if (!cc) return false; - copy_mesh (cc, c, sign(ep->geo.Source)); - return true; - } -} - -void copy_mesh (Surface * from, Surface * to){ - List_T *list = Tree2List (from->Simplexes); - Simplex *s, *news; - Vertex **pV, *vi[3], *v; - - int nb = Tree_Nbr(to->Simplexes); - if(nb){ - if(nb != Tree_Nbr(from->Simplexes)) - Msg(GERROR, "Uncompatible extrusion of surface %d into surface %d", - from->Num, to->Num); - return; - } - - for (int i = 0; i < List_Nbr (list); i++){ - List_Read (list, i, &s); - for (int j = 0; j < 4; j++){ - if(s->V[j]){ - v = s->V[j]; - vi[j] = Create_Vertex (++CurrentNodeNumber, v->Pos.X, - v->Pos.Y, v->Pos.Z, v->lc, v->u); - ep->Extrude (ep->mesh.NbLayer - 1, ep->mesh.NbElmLayer[ep->mesh.NbLayer - 1], - vi[j]->Pos.X, vi[j]->Pos.Y, vi[j]->Pos.Z); - if (Vertex_Bound && (pV = (Vertex **) Tree_PQuery (Vertex_Bound, &vi[j]))){ - Free_Vertex(&vi[j],0); - vi[j] = *pV; - } - else{ - Tree_Insert (THEM->Vertices, &vi[j]); - Tree_Insert (Vertex_Bound, &vi[j]); - } - if (ToAdd) - Tree_Insert (ToAdd, &vi[j]); - } - else{ - vi[j] = NULL; - } - } - if(vi[3]) - news = Create_Quadrangle (vi[0], vi[1], vi[2], vi[3]); - else - news = Create_Simplex (vi[0], vi[1], vi[2], NULL); - news->iEnt = to->Num; - Tree_Add (to->Simplexes, &news); - } - List_Delete (list); -} - -int Extrude_Mesh (Surface * s){ - int i; - Vertex *v1; - Curve *cc; - extern int FACE_DIMENSION; - - if (!s->Extrude || !s->Extrude->mesh.ExtrudeMesh) return false; - - InitExtrude (); - - FACE_DIMENSION = 2; - - ep = s->Extrude; - THES = s; - - ToAdd = s->Vertices; - - for (i = 0; i < List_Nbr (s->Generatrices); i++){ - List_Read (s->Generatrices, i, &cc); - for (int j = 0; j < List_Nbr (cc->Vertices); j++){ - List_Read (cc->Vertices, j, &v1); - Tree_Insert (Vertex_Bound, &v1); - } - } - if (ep->geo.Mode == EXTRUDED_ENTITY){ - Curve *c = FindCurve (abs(ep->geo.Source), THEM); - if (!c) return false; - for (i = 0; i < List_Nbr (c->Vertices); i++){ - List_Read (c->Vertices, i, &v1); - Extrude_Vertex (&v1, NULL); - } - Extrude_Curve (&c, NULL); - return true; - } - else{ - Surface *ss = FindSurface (ep->geo.Source, THEM); - if (!ss) return false; - copy_mesh (ss, s); - return true; - } - -} - -static Tree_T* tmp; - -void Free_NegativeSimplex (void *a, void *b){ - Simplex *s = *(Simplex**)a; - if(s){ - if(s->Num>=0){ - Tree_Add (tmp, &s); - } - else{ - delete s; - s = NULL; - } - } -} - -int Extrude_Mesh (Volume * v){ - int i, j; - Surface *ss; - Vertex *v1; - - if (!v->Extrude || !v->Extrude->mesh.ExtrudeMesh) return false; - - Msg(STATUS3, "Meshing Volume %d", v->Num); - - ep = v->Extrude; - THEV = v; - if (ep->geo.Mode == EXTRUDED_ENTITY){ - Surface *s = FindSurface (ep->geo.Source, THEM); - if (!s) return false; - - List_T *list; - for (i = 0; i < List_Nbr (v->Surfaces); i++){ - List_Read (v->Surfaces, i, &ss); - list = Tree2List (ss->Vertices); - for (int j = 0; j < List_Nbr (list); j++){ - List_Read (list, j, &v1); - Tree_Insert (Vertex_Bound, &v1); - } - List_Delete (list); - } - - list = Tree2List (s->Vertices); - for (i = 0; i < List_Nbr (list); i++){ - List_Read (list, i, &v1); - Extrude_Vertex (&v1, NULL); - } - List_Delete (list); - - Extrude_Surface1 (s); - - if(!ep->mesh.Recombine){ - j = TEST_IS_ALL_OK; - do{ - TEST_IS_ALL_OK = 0; - Extrude_Surface2 (s); - Msg(INFO, "Swapping %d",TEST_IS_ALL_OK); - if (TEST_IS_ALL_OK == j) - break; - j = TEST_IS_ALL_OK; - } - while (TEST_IS_ALL_OK); - } - - Extrude_Surface3 (s); - - // Well well ... I think I fixed the bug in extrude meshes. - // Volume mesh cannot always comply with surface mesh, so I delete the - // surface mesh and create a new one. Edges were stored in Tree_Ares - // so that now, the surface mesh is ok (edge swapping is easy in 2d). - // cretainly not the most efficient way to do it but it seems to work - // - // In order to suppress only the tri/qua that have to, i.e. all - // those created by the extrusion, they are tagged with a negative - // number, that they will keep their lives in order for adjacent - // volumes to respect the coherence of their common boundaries - - for (i = 0; i < List_Nbr (v->Surfaces); i++){ - List_Read (v->Surfaces, i, &ss); - tmp = Tree_Create (sizeof (Simplex *), compareQuality); - Tree_Action(ss->Simplexes, Free_NegativeSimplex); - Tree_Delete(ss->Simplexes); - ss->Simplexes = tmp; - Extrude_Mesh(ss); - } - - return true; - } - else{ - return false; - } -} diff --git a/Mesh/3D_Extrude_Old.cpp b/Mesh/3D_Extrude_Old.cpp deleted file mode 100644 index 2d22ec0ee5160c980eeb5919c8e7ac452b85085c..0000000000000000000000000000000000000000 --- a/Mesh/3D_Extrude_Old.cpp +++ /dev/null @@ -1,587 +0,0 @@ -// $Id: 3D_Extrude_Old.cpp,v 1.12 2001-08-11 23:28:32 geuzaine Exp $ - -// This is the old extrusion mesh generator -> only available through -// the command line option -extrude (w/o -recombine). This mesh -// generator pre-supposes a definition of surfaces in the XY plane, -// and will extrude everything along the Z axis, taking parameters -// interactively from standard input, e.g. -// -// gmsh test -extrude -recombine < params.ext -// -// The progression ratio defines a geometric progression for the -// definition of the elements heights: a factor of 2 means that the -// next element will be twice as high than the preceding one. -// -// All geometrical entities are automatically numbered: -// -// volumes: 3 * K1 + layer * K2 + surf->num -// New XY surfaces: 2 * K1 + layer * K2 + surf->num -// perp. surfaces: 1 * K1 + layer * K2 + curve->num -// perp. lines: 4 * K1 + layer * K2 + point->Num -// -// WARNING: -// -// There is no way to save XY generated lines or other entities for the -// moment - -#define MAXLAYERS 100 -#define K1 100.e6 -#define K2 1.e6 // to store MAXLAYERS - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "CAD.h" -#include "Mesh.h" -#include "Context.h" -#include "Create.h" - -extern Context_T CTX ; -extern Mesh *LOCAL, *THEM; -extern int CurrentNodeNumber; - -static Tree_T *Tree_Ares, *Tree_Swaps; - -FILE *file; -Mesh *THEm; -Surface *THES; -Volume *THEV; -int TEST_IS_ALL_OK, NbLayer; -int NbElmLayer [MAXLAYERS]; -int ZonLayer [MAXLAYERS]; -int LineLayer [MAXLAYERS]; -int SurfLayer [MAXLAYERS+1]; -double hLayer [MAXLAYERS]; -double parLayer [MAXLAYERS]; - - -typedef struct { - int a,b; -}nxn; - -static int compnxn(const void *a, const void *b){ - nxn *q,*w; - q = (nxn*)a; - w = (nxn*)b; - if(q->a > w->a)return 1; - if(q->a < w->a)return -1; - if(q->b > w->b)return 1; - if(q->b < w->b)return -1; - return 0; -} - -static void InitExtrudeParams (void){ - int i; - printf("Number of layers: "); - scanf("%d",&NbLayer); - if(NbLayer >MAXLAYERS) - Msg(GERROR, "Max number of layer exceeded"); - fprintf(file, "%d\n", NbLayer); fflush(file); - for(i=0;i<NbLayer;i++){ - printf("Number of elements in layer %d: ",i+1); - scanf("%d",&NbElmLayer[i]); - fprintf(file, "%d\n", NbElmLayer[i]);fflush(file); - - printf("Depth of layer %d: ",i+1); - scanf("%lf",&hLayer[i]); - fprintf(file, "%g\n", hLayer[i]);fflush(file); - - printf("Progresion ratio for layer %d: ",i+1); - scanf("%lf",&parLayer[i]); - fprintf(file, "%g\n", parLayer[i]);fflush(file); - } - Tree_Ares = Tree_Create(sizeof(nxn),compnxn); - Tree_Swaps = Tree_Create(sizeof(nxn),compnxn); -} - -static int are_exist(Vertex *v1,Vertex *v2, Tree_T *t){ - nxn n; - n.a = IMAX(v1->Num,v2->Num); - n.b = IMIN(v1->Num,v2->Num); - return Tree_Search(t,&n); -} - -static void are_cree(Vertex *v1,Vertex *v2, Tree_T *t){ - nxn n; - n.a = IMAX(v1->Num,v2->Num); - n.b = IMIN(v1->Num,v2->Num); - Tree_Replace(t,&n); -} - -static void are_del(Vertex *v1,Vertex *v2, Tree_T *t){ - nxn n; - n.a = IMAX(v1->Num,v2->Num); - n.b = IMIN(v1->Num,v2->Num); - Tree_Suppress(t,&n); -} - - -static void Extrude_Simplex_Phase1 (void *data , void *dum){ - - Simplex **pS , *s; - int i,j,k; - Vertex *v1,*v2,*v3,*v4,*v5,*v6; - - pS = (Simplex**)data; - s = *pS; - - k = 0; - for(i=0;i<NbLayer;i++){ - for(j=0;j<NbElmLayer[i];j++){ - List_Read(s->V[0]->Extruded_Points,k,&v1); - List_Read(s->V[1]->Extruded_Points,k,&v2); - List_Read(s->V[2]->Extruded_Points,k,&v3); - List_Read(s->V[0]->Extruded_Points,k+1,&v4); - List_Read(s->V[1]->Extruded_Points,k+1,&v5); - List_Read(s->V[2]->Extruded_Points,k+1,&v6); - k++; - if(!are_exist(v1,v5,Tree_Ares))are_cree(v2,v4,Tree_Ares); - if(!are_exist(v5,v3,Tree_Ares))are_cree(v2,v6,Tree_Ares); - if(!are_exist(v4,v3,Tree_Ares))are_cree(v1,v6,Tree_Ares); - } - } -} - -static void Extrude_Simplex_Phase3 (void *data , void *dum){ - - Simplex **pS , *s, *news; - Prism *newp; - Hexahedron *newh; - int i,j,k; - Vertex *v1,*v2,*v3,*v4,*v5,*v6,*v7,*v8; - - pS = (Simplex**)data; - s = *pS; - - if(s->V[3] && !CTX.mesh.oldxtrude_recombine){ - Msg(GERROR, "Non recombined extrusion impossible with quadrangles (use -recombine)"); - } - - k = 0; - for(i=0;i<=NbLayer;i++){ - if(SurfLayer[i]){ - List_Read(s->V[0]->Extruded_Points,k,&v1); - List_Read(s->V[1]->Extruded_Points,k,&v2); - List_Read(s->V[2]->Extruded_Points,k,&v3); - news = Create_Simplex(v1,v2,v3,NULL); - if(s->V[3]){ - List_Read(s->V[3]->Extruded_Points,k,&v4); - news->V[3] = v4; - } - news->iEnt = SurfLayer[i]; - Tree_Add(THEV->Simp_Surf,&news); - } - for(j=0;j<NbElmLayer[i];j++){ - k++; - } - } - - k = 0; - for(i=0;i<NbLayer;i++){ - for(j=0;j<NbElmLayer[i];j++){ - - if(s->V[3]){ - List_Read(s->V[0]->Extruded_Points,k,&v1); - List_Read(s->V[1]->Extruded_Points,k,&v2); - List_Read(s->V[2]->Extruded_Points,k,&v3); - List_Read(s->V[3]->Extruded_Points,k,&v4); - List_Read(s->V[0]->Extruded_Points,k+1,&v5); - List_Read(s->V[1]->Extruded_Points,k+1,&v6); - List_Read(s->V[2]->Extruded_Points,k+1,&v7); - List_Read(s->V[3]->Extruded_Points,k+1,&v8); - } - else{ - List_Read(s->V[0]->Extruded_Points,k,&v1); - List_Read(s->V[1]->Extruded_Points,k,&v2); - List_Read(s->V[2]->Extruded_Points,k,&v3); - List_Read(s->V[0]->Extruded_Points,k+1,&v4); - List_Read(s->V[1]->Extruded_Points,k+1,&v5); - List_Read(s->V[2]->Extruded_Points,k+1,&v6); - } - - k++; - if(ZonLayer[i]){ - if(CTX.mesh.oldxtrude_recombine){ - if(s->V[3]){ - newh = Create_Hexahedron(v1,v2,v3,v4,v5,v6,v7,v8); - newh->iEnt = ZonLayer[i]; - Tree_Add(THEV->Hexahedra,&newh); - } - else{ - newp = Create_Prism(v1,v2,v3,v4,v5,v6); - newp->iEnt = ZonLayer[i]; - Tree_Add(THEV->Prisms,&newp); - } - } - else{ - if(are_exist(v4,v2,Tree_Ares) && - are_exist(v5,v3,Tree_Ares) && - are_exist(v4,v3,Tree_Ares) ){ - news = Create_Simplex(v1,v2,v3,v4); - news->iEnt = ZonLayer[i]; - Tree_Add(THEV->Simplexes,&news); - news = Create_Simplex(v4,v5,v6,v3); - news->iEnt = ZonLayer[i]; - Tree_Add(THEV->Simplexes,&news); - news = Create_Simplex(v2,v4,v5,v3); - news->iEnt = ZonLayer[i]; - Tree_Add(THEV->Simplexes,&news); - } - if(are_exist(v4,v2,Tree_Ares) && - are_exist(v2,v6,Tree_Ares) && - are_exist(v4,v3,Tree_Ares) ){ - news = Create_Simplex(v1,v2,v3,v4); - news->iEnt = ZonLayer[i]; - Tree_Add(THEV->Simplexes,&news); - news = Create_Simplex(v4,v5,v6,v2); - news->iEnt = ZonLayer[i]; - Tree_Add(THEV->Simplexes,&news); - news = Create_Simplex(v4,v2,v6,v3); - news->iEnt = ZonLayer[i]; - Tree_Add(THEV->Simplexes,&news); - } - if(are_exist(v4,v2,Tree_Ares) && - are_exist(v2,v6,Tree_Ares) && - are_exist(v6,v1,Tree_Ares) ){ - news = Create_Simplex(v1,v2,v3,v6); - news->iEnt = ZonLayer[i]; - Tree_Add(THEV->Simplexes,&news); - news = Create_Simplex(v4,v5,v6,v2); - news->iEnt = ZonLayer[i]; - Tree_Add(THEV->Simplexes,&news); - news = Create_Simplex(v2,v4,v6,v1); - news->iEnt = ZonLayer[i]; - Tree_Add(THEV->Simplexes,&news); - } - if(are_exist(v5,v1,Tree_Ares) && - are_exist(v5,v3,Tree_Ares) && - are_exist(v4,v3,Tree_Ares) ){ - news = Create_Simplex(v1,v2,v3,v5); - news->iEnt = ZonLayer[i]; - Tree_Add(THEV->Simplexes,&news); - news = Create_Simplex(v4,v5,v6,v3); - news->iEnt = ZonLayer[i]; - Tree_Add(THEV->Simplexes,&news); - news = Create_Simplex(v1,v4,v5,v3); - news->iEnt = ZonLayer[i]; - Tree_Add(THEV->Simplexes,&news); - } - if(are_exist(v5,v1,Tree_Ares) && - are_exist(v5,v3,Tree_Ares) && - are_exist(v6,v1,Tree_Ares) ){ - news = Create_Simplex(v1,v2,v3,v5); - news->iEnt = ZonLayer[i]; - Tree_Add(THEV->Simplexes,&news); - news = Create_Simplex(v4,v5,v6,v1); - news->iEnt = ZonLayer[i]; - Tree_Add(THEV->Simplexes,&news); - news = Create_Simplex(v1,v3,v5,v6); - news->iEnt = ZonLayer[i]; - Tree_Add(THEV->Simplexes,&news); - } - if(are_exist(v5,v1,Tree_Ares) && - are_exist(v2,v6,Tree_Ares) && - are_exist(v6,v1,Tree_Ares) ){ - news = Create_Simplex(v1,v2,v3,v6); - news->iEnt = ZonLayer[i]; - Tree_Add(THEV->Simplexes,&news); - news = Create_Simplex(v4,v5,v6,v1); - news->iEnt = ZonLayer[i]; - Tree_Add(THEV->Simplexes,&news); - news = Create_Simplex(v1,v2,v5,v6); - news->iEnt = ZonLayer[i]; - Tree_Add(THEV->Simplexes,&news); - } - } - } - } - } -} - -static void Extrude_Simplex_Phase2 (void *data , void *dum){ - - Simplex **pS , *s; - int i,j,k; - Vertex *v1,*v2,*v3,*v4,*v5,*v6; - - pS = (Simplex**)data; - s = *pS; - - k = 0; - for(i=0;i<NbLayer;i++){ - for(j=0;j<NbElmLayer[i];j++){ - List_Read(s->V[0]->Extruded_Points,k,&v1); - List_Read(s->V[1]->Extruded_Points,k,&v2); - List_Read(s->V[2]->Extruded_Points,k,&v3); - List_Read(s->V[0]->Extruded_Points,k+1,&v4); - List_Read(s->V[1]->Extruded_Points,k+1,&v5); - List_Read(s->V[2]->Extruded_Points,k+1,&v6); - k++; - if(are_exist(v4,v2,Tree_Ares) && are_exist(v5,v3,Tree_Ares) && are_exist(v1,v6,Tree_Ares)){ - TEST_IS_ALL_OK++; - if(!are_exist(v4,v2,Tree_Swaps)){ - are_del(v4,v2,Tree_Ares); - are_cree(v1,v5,Tree_Ares); - are_cree(v1,v5,Tree_Swaps); - are_cree(v4,v2,Tree_Swaps); - } - else if(!are_exist(v5,v3,Tree_Swaps)){ - are_del(v5,v3,Tree_Ares); - are_cree(v2,v6,Tree_Ares); - are_cree(v5,v3,Tree_Swaps); - are_cree(v2,v6,Tree_Swaps); - } - else if(!are_exist(v1,v6,Tree_Swaps)){ - are_del(v1,v6,Tree_Ares); - are_cree(v4,v3,Tree_Ares); - are_cree(v1,v6,Tree_Swaps); - are_cree(v4,v3,Tree_Swaps); - } - } - else if(are_exist(v1,v5,Tree_Ares) && are_exist(v2,v6,Tree_Ares) && are_exist(v4,v3,Tree_Ares)){ - TEST_IS_ALL_OK++; - if(!are_exist(v1,v5,Tree_Swaps)){ - are_del(v1,v5,Tree_Ares); - are_cree(v4,v2,Tree_Ares); - are_cree(v1,v5,Tree_Swaps); - are_cree(v4,v2,Tree_Swaps); - } - else if(!are_exist(v2,v6,Tree_Swaps)){ - are_del(v2,v6,Tree_Ares); - are_cree(v5,v3,Tree_Ares); - are_cree(v5,v3,Tree_Swaps); - are_cree(v2,v6,Tree_Swaps); - } - else if(!are_exist(v4,v3,Tree_Swaps)){ - are_del(v4,v3,Tree_Ares); - are_cree(v1,v6,Tree_Ares); - are_cree(v1,v6,Tree_Swaps); - are_cree(v4,v3,Tree_Swaps); - } - } - } - } -} - -static void Extrude_Vertex (void *data , void *dum){ - - Vertex **pV , *v, *newv; - int i,j; - double h,a; - - pV = (Vertex**)data; - v = *pV; - if(v->Extruded_Points)return; - v->Extruded_Points = List_Create(NbLayer,1,sizeof(Vertex*)); - List_Add(v->Extruded_Points,&v); - h = 0.0; - - for(i=0;i<NbLayer;i++){ - - // Geometric progression ar^i - // Sum of n (=NbElmLayer[i]) terms = hLayer[i] = a (r^n-1)/(r-1) - - if(parLayer[i] == 1.) - a = hLayer[i]/(double)NbElmLayer[i]; - else - a = hLayer[i] * (parLayer[i]-1.)/(pow(parLayer[i],NbElmLayer[i])-1.) ; - - for(j=0;j<NbElmLayer[i];j++){ - - //h += hLayer[i]/(double)NbElmLayer[i]; - - h += a*pow(parLayer[i],j); - - newv = Create_Vertex(++CurrentNodeNumber,v->Pos.X,v->Pos.Y,v->Pos.Z + h, v->lc , v->u ); - Tree_Add(THEM->Vertices,&newv); - List_Add(v->Extruded_Points,&newv); - } - } -} - - -static void Extrude_Surface1 (void *data , void *dum){ - Surface **pS , *s; - if(!NbLayer)return; - pS = (Surface**)data; - s = THES = *pS; - - Tree_Action(s->Vertices,Extrude_Vertex); - if(!CTX.mesh.oldxtrude_recombine) Tree_Action(s->Simplexes,Extrude_Simplex_Phase1); -} - -static void Extrude_Surface2 (void *data , void *dum){ - Surface **pS , *s; - if(!NbLayer)return; - pS = (Surface**)data; - s = THES = *pS; - - Tree_Action(s->Simplexes,Extrude_Simplex_Phase2); -} - - -static void Extrude_Surface3 (void *data , void *dum){ - Surface **pS , *s; - int i; - if(!NbLayer)return; - pS = (Surface**)data; - s = THES = *pS; - - /* Numerotation automatique des entites physiques */ - Msg(INFO, "Extruding Surface %d", s->Num); - for(i=0;i<NbLayer;i++){ - ZonLayer[i] = (int)(3 * K1) + (int) ((i+1) * K2) + s->Num ; - } - SurfLayer[0] = s->Num ; - for(i=0;i<NbLayer;i++){ - SurfLayer[i+1] = (int)(2 * K1) + (int)((i+1) * K2) + s->Num ; - } - - Tree_Action(s->Simplexes,Extrude_Simplex_Phase3); -} - - -static void Extrude_Seg(Vertex *V1, Vertex *V2){ - - int i,j,k; - Vertex *v1,*v2,*v3,*v4; - Simplex *s; - - k = 0; - for(i=0;i<NbLayer;i++){ - for(j=0;j<NbElmLayer[i];j++){ - List_Read(V1->Extruded_Points,k,&v1); - List_Read(V2->Extruded_Points,k,&v2); - List_Read(V1->Extruded_Points,k+1,&v3); - List_Read(V2->Extruded_Points,k+1,&v4); - if(SurfLayer[i]){ - if(CTX.mesh.oldxtrude_recombine){ - s = Create_Simplex(v1,v2,v4,NULL); - s->V[3] = v3; - s->iEnt = SurfLayer[i]; - Tree_Add(THEV->Simp_Surf,&s); - } - else{ - if(are_exist(v3,v2,Tree_Ares)){ - s = Create_Simplex(v3,v2,v1,NULL); - s->iEnt = SurfLayer[i]; - Tree_Add(THEV->Simp_Surf,&s); - s = Create_Simplex(v3,v4,v2,NULL); - s->iEnt = SurfLayer[i]; - Tree_Add(THEV->Simp_Surf,&s); - } - else{ - s = Create_Simplex(v3,v4,v1,NULL); - s->iEnt = SurfLayer[i]; - Tree_Add(THEV->Simp_Surf,&s); - s = Create_Simplex(v1,v4,v2,NULL); - s->iEnt = SurfLayer[i]; - Tree_Add(THEV->Simp_Surf,&s); - } - } - } - k++; - } - } - -} - -static void Extrude_Curve (void *data , void *dum){ - Curve **pC , *c; - Vertex *v1,*v2; - int i; - if(!NbLayer)return; - pC = (Curve**)data; - c = *pC; - - if (c->Num < 0) return; - - /* Numerotation automatique des entites physiques */ - Msg(INFO, "Extruding Curve %d", c->Num); - for(i=0;i<NbLayer;i++){ - SurfLayer[i] = (int)(1 * K1) + (int)((i+1) * K2) + c->Num ; - } - - for(i=0;i<List_Nbr(c->Vertices)-1;i++){ - List_Read(c->Vertices,i,&v1); - List_Read(c->Vertices,i+1,&v2); - Extrude_Seg(v1,v2); - } -} - -static void Extrude_Pnt(Vertex *V1){ - int i,j,k; - Vertex *v1,*v2; - Simplex *s; - - k = 0; - for(i=0;i<NbLayer;i++){ - for(j=0;j<NbElmLayer[i];j++){ - List_Read(V1->Extruded_Points,k,&v1); - List_Read(V1->Extruded_Points,k+1,&v2); - if(LineLayer[i]){ - s = Create_Simplex(v1,v2,NULL,NULL); - s->iEnt = LineLayer[i]; - Tree_Add(THEV->Simp_Surf,&s); - } - k++; - } - } - -} - -static void Extrude_Point (void *data , void *dum){ - Vertex **pV, *v, **pV2; - int i; - - if(!NbLayer)return; - pV = (Vertex**)data; - v = *pV; - - /* Numerotation automatique des entites physiques */ - Msg(INFO, "Extruding Vertex %d", v->Num); - for(i=0;i<NbLayer;i++){ - LineLayer[i] = (int)(4 * K1) + (int)((i+1) * K2) + v->Num ; - } - - if((pV2 = (Vertex**)Tree_PQuery(THEM->Vertices, pV))){ - Extrude_Vertex(pV2, NULL); - Extrude_Pnt(*pV2); - } - -} - -void Extrude_Mesh_Old(Mesh *M){ - int j; - Mesh MM; - - file = fopen("xtrude","w"); - - InitExtrudeParams(); - LOCAL = &MM; - THEM = M; - - Create_BgMesh (WITHPOINTS, .2, LOCAL); - - Tree_Left(M->Volumes,&THEV); - Tree_Action(M->Surfaces, Extrude_Surface1); - - if(!CTX.mesh.oldxtrude_recombine){ - j = TEST_IS_ALL_OK; - do{ - TEST_IS_ALL_OK=0; - Tree_Action ( M->Surfaces , Extrude_Surface2 ); - Msg(INFO, "%d swaps", TEST_IS_ALL_OK); - if(TEST_IS_ALL_OK == j)break; - j = TEST_IS_ALL_OK; - }while(TEST_IS_ALL_OK); - } - - Tree_Action ( M->Surfaces , Extrude_Surface3 ); - Tree_Action ( M->Curves , Extrude_Curve ); - Tree_Action ( M->Points , Extrude_Point ); - - fclose(file); - -} - diff --git a/Mesh/3D_Mesh.cpp b/Mesh/3D_Mesh.cpp deleted file mode 100644 index d42bab8891cb2064ad8a65709f4057fa6d9c1c9e..0000000000000000000000000000000000000000 --- a/Mesh/3D_Mesh.cpp +++ /dev/null @@ -1,887 +0,0 @@ -// $Id: 3D_Mesh.cpp,v 1.26 2001-08-13 09:42:02 geuzaine Exp $ - -/* - - J-F Remacle 1995 - - MAILLAGE DELAUNAY 3D - - tant que l'arbre des tetraedres de qualites inacceptables - n'est pas vide { - prendre le plus mauvais tetraedre; - creer un nouveau point; - eliminer les tetraedres dont le cercle circonscrit contient le point; - reconstruire le volume convexe; - } - -*/ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Mesh.h" -#include "3D_Mesh.h" -#include "Create.h" -#include "Context.h" - -extern Mesh *THEM, *LOCAL; -extern Context_T CTX; -extern int CurrentNodeNumber, FACE_DIMENSION; - -static Tree_T *Tsd, *Sim_Sur_Le_Bord, *POINTS_TREE; -static List_T *Simplexes_Destroyed, *Simplexes_New, *Suppress; -static List_T *LLL, *POINTS; -static Simplex *THES; -static Vertex *THEV; -static Tree_T *SimXFac; -static double volume, LC3D; -static int ZONEELIMINEE, Methode = 0; - -Simplex MyNewBoundary; -int Alerte_Point_Scabreux; - -void DebugSimplexe (Simplex * s){ - int i; - - fprintf (stderr, "Simplexe %p = %d %d %d %d \n", - s, s->V[0]->Num, s->V[1]->Num, s->V[2]->Num, s->V[3]->Num); - - for (i = 0; i < 4; i++){ - if (s->S[i] != &MyNewBoundary) - printf (" face : %d %d %d -> Simplexe %p\n", - s->F[i].V[0]->Num, s->F[i].V[1]->Num, s->F[i].V[2]->Num, s->S[i]); - else - printf (" face : %d %d %d -> Simplexe Boundary\n", - s->F[i].V[0]->Num, s->F[i].V[1]->Num, s->F[i].V[2]->Num); - } -} - -void VSIM (void *a, void *b){ - Simplex *S; - - S = *(Simplex **) a; - if (S->V[3]) - volume += fabs (S->Volume_Simplexe ()); -} - -void add_points (void *a, void *b){ - Tree_Insert (POINTS_TREE, a); -} - -void add_points_2 (void *a, void *b){ - List_Add (POINTS, a); -} - - -double Interpole_lcTetraedre (Simplex * s, Vertex * v){ - double mat[3][3], rhs[3], sol[3], det; - - s->matsimpl (mat); - rhs[0] = v->Pos.X - s->V[0]->Pos.X; - rhs[1] = v->Pos.Y - s->V[0]->Pos.Y; - rhs[2] = v->Pos.Z - s->V[0]->Pos.Z; - - sys3x3 (mat, rhs, sol, &det); - if (det == 0.0 || - (1. - sol[0] - sol[1] - sol[2]) > 1. || - (1. - sol[0] - sol[1] - sol[2]) < 0. || - sol[0] > 1. || - sol[1] > 1. || - sol[2] > 1. || - sol[0] < 0. || - sol[1] < 0. || - sol[2] < 0.){ - return DMAX (s->V[0]->lc, DMAX (s->V[1]->lc, DMAX (s->V[2]->lc, s->V[3]->lc))); - //sol[0] = sol[1] = sol[2] = 0.25; - } - - return (s->V[0]->lc * (1. - sol[0] - sol[1] - sol[2]) + - sol[0] * s->V[1]->lc + - sol[1] * s->V[2]->lc + - sol[2] * s->V[3]->lc); -} - -Vertex *NewVertex (Simplex * s){ - Vertex *v; - - v = Create_Vertex (++CurrentNodeNumber, s->Center.X, s->Center.Y, s->Center.Z, 1., 0.0); - v->lc = Interpole_lcTetraedre (s, v); - - return (v); -} - -int Pt_In_Volume (double X, double Y, double Z, Mesh * m, - double *l, double tol){ - int i; - Vertex V; - double uvw[3]; - Simplex *s; - Brick B; - - V.Pos.X = X; - V.Pos.Y = Y; - V.Pos.Z = Z; - - if (!(m->BGM.Typ == ONFILE) && !m->BGM.bgm){ - *l = -1.0; - return (1); - } - - B = LaBrique (&m->Grid, X, Y, Z); - - if (B.N < 0){ - return (0); - } - - for (i = 0; i < List_Nbr (B.pT); i++){ - List_Read (B.pT, i, &s); - if (s->Pt_In_Simplexe (&V, uvw, tol)){ - *l = (1. - uvw[0] - uvw[1] - uvw[2]) * s->V[0]->lc - + uvw[0] * s->V[1]->lc - + uvw[1] * s->V[2]->lc - + uvw[2] * s->V[3]->lc; - return (1); - } - } - - return (0); -} - -int Pt_In_Circum (Simplex * s, Vertex * v){ - double d1, d2, eps; - - /* Determine si un point est dans le cercle circonscrit a un simplexe */ - - d1 = s->Radius; - d2 = sqrt (DSQR (v->Pos.X - s->Center.X) + - DSQR (v->Pos.Y - s->Center.Y) + - DSQR (v->Pos.Z - s->Center.Z)); - - eps = fabs (d1 - d2) / (d1 + d2); - - if (eps < 1.e-12){ - return (0); // return 1 ? 0 ? - } - - if (d2 < d1) - return (1); - - return (0); -} - -void Action_First_Simplexes (void *a, void *b){ - Simplex **q; - - if (!THES){ - q = (Simplex **) a; - if (Pt_In_Circum (*q, THEV)){ - THES = *q; - } - } -} - -void LiS (void *a, void *b){ - int j, N; - SxF SXF, *pSXF; - Simplex **pS, *S; - - pS = (Simplex **) a; - S = *pS; - N = (S->V[3]) ? 4 : 3; - - for (j = 0; j < N; j++){ - SXF.F = S->F[j]; - if ((pSXF = (SxF *) Tree_PQuery (SimXFac, &SXF))){ - /* Creation du lien */ - S->S[j] = pSXF->S; - pSXF->S->S[pSXF->NumFaceSimpl] = S; - } - else{ - SXF.S = S; - SXF.NumFaceSimpl = j; - Tree_Add (SimXFac, &SXF); - } - } -} - -void RzS (void *a, void *b){ - int j, N; - Simplex **pS, *S; - pS = (Simplex **) a; - S = *pS; - - N = (S->V[3]) ? 4 : 3; - - for (j = 0; j < N; j++){ - if ((S->S[j]) == NULL){ - S->S[j] = &MyNewBoundary; - } - } -} - -/* Cree les liens entre les simplexes, c.a.d recherche les voisins */ - -void Link_Simplexes (List_T * Sim, Tree_T * Tim){ - Simplex *S; - int i; - - SimXFac = Tree_Create (sizeof (SxF), compareSxF); - if (Sim){ - for (i = 0; i < List_Nbr (Sim); i++){ - List_Read (Sim, i, &S); - LiS (&S, NULL); - } - for (i = 0; i < List_Nbr (Sim); i++){ - List_Read (Sim, i, &S); - RzS (&S, NULL); - } - } - else{ - Tree_Action (Tim, LiS); - Tree_Action (Tim, RzS); - } - Tree_Delete (SimXFac); -} - -void Box_6_Tetraedron (List_T * P, Mesh * m){ -#define FACT 1.1 -#define LOIN 0.2 - - int i, j; - static int pts[8][3] = { {0, 0, 0}, - {1, 0, 0}, - {1, 1, 0}, - {0, 1, 0}, - {0, 0, 1}, - {1, 0, 1}, - {1, 1, 1}, - {0, 1, 1}}; - static int tet[6][4] = { {1, 5, 2, 4}, - {2, 5, 6, 4}, - {4, 5, 6, 8}, - {6, 4, 8, 7}, - {6, 4, 7, 3}, - {2, 3, 4, 6}}; - double Xm, Ym, Zm, XM, YM, ZM, Xc, Yc, Zc; - Simplex *S, *ps; - Vertex *V, *v, *pv; - List_T *smp; - - smp = List_Create (8, 1, sizeof (Simplex *)); - - V = (Vertex *) Malloc (8 * sizeof (Vertex)); - - for (i = 0; i < List_Nbr (P); i++){ - List_Read (P, i, &v); - if (!i){ - Xm = XM = v->Pos.X; - Ym = YM = v->Pos.Y; - Zm = ZM = v->Pos.Z; - } - else{ - Xm = DMIN (Xm, v->Pos.X); - XM = DMAX (XM, v->Pos.X); - Ym = DMIN (Ym, v->Pos.Y); - YM = DMAX (YM, v->Pos.Y); - Zm = DMIN (Zm, v->Pos.Z); - ZM = DMAX (ZM, v->Pos.Z); - } - } - if (Xm == XM) - XM = Xm + 1.; - if (Ym == YM) - YM = Ym + 1.; - if (Zm == ZM) - ZM = Zm + 1.; - - Xc = XM - Xm; - Yc = YM - Ym; - Zc = ZM - Zm; - - /* initialisation de la grille */ - - m->Grid.init = 0; - m->Grid.min.X = Xm - LOIN * FACT * Xc; - m->Grid.min.Y = Ym - LOIN * FACT * Yc; - m->Grid.min.Z = Zm - LOIN * FACT * Zc; - m->Grid.max.X = XM + LOIN * FACT * Xc; - m->Grid.max.Y = YM + LOIN * FACT * Yc; - m->Grid.max.Z = ZM + LOIN * FACT * Zc; - - m->Grid.Nx = m->Grid.Ny = m->Grid.Nz = 20; - - /* Longueur Caracteristique */ - - LC3D = sqrt (Xc * Xc + Yc * Yc + Zc * Zc); - - /* Points de la boite de 1 a 8 - - Z 8____________7 - | /| /| - | / | / | - | / | / | - 5|/___|________/6 | - | 4|________|___|3 - | / | / - | / Y | / - | / | / - |/____________|/___ X - 1 2 - - */ - - for (i = 0; i < 8; i++){ - if (pts[i][0]) - V[i].Pos.X = Xm - LOIN * Xc; - else - V[i].Pos.X = XM + LOIN * Xc; - - if (pts[i][1]) - V[i].Pos.Y = Ym - LOIN * Yc; - else - V[i].Pos.Y = YM + LOIN * Yc; - - if (pts[i][2]) - V[i].Pos.Z = Zm - LOIN * Zc; - else - V[i].Pos.Z = ZM + LOIN * Zc; - - V[i].Num = -(++CurrentNodeNumber); - pv = &V[i]; - pv->lc = 1.0; - pv->Mov = NULL; - Tree_Replace (m->Vertices, &pv); - } - - /* 6 Tetraedres forment le maillage de la boite */ - - for (i = 0; i < 6; i++){ - S = Create_Simplex (&V[tet[i][0] - 1], &V[tet[i][1] - 1], - &V[tet[i][2] - 1], &V[tet[i][3] - 1]); - List_Add (smp, &S); - } - - Link_Simplexes (smp, NULL); - for (i = 0; i < List_Nbr (smp); i++){ - List_Read (smp, i, &ps); - for (j = 0; j < 4; j++) - if (ps->S[j] == NULL) - ps->S[j] = &MyNewBoundary; - Tree_Replace (m->Simplexes, &ps); - } - -} - - -void Fill_Sim_Des (void *a, void *b){ - Simplex **S; - S = (Simplex **) a; - if (Pt_In_Circum (*S, THEV)) - List_Add (Simplexes_Destroyed, a); -} - -void TStoLS (void *a, void *b){ - List_Add (Simplexes_Destroyed, a); -} - -void TAtoLA (void *a, void *b){ - List_Add (Simplexes_New, a); -} - -void CrSi (void *a, void *b){ - SxF *S; - Simplex *s; - S = (SxF *) a; - if (S->NumFaceSimpl == 1){ - s = Create_Simplex (THEV, S->F.V[0], S->F.V[1], S->F.V[2]); - s->iEnt = ZONEELIMINEE; - THEM->Metric->setSimplexQuality (s); - List_Add (Simplexes_New, &s); - } - else if (S->NumFaceSimpl != 2){ - Msg(WARNING, "Huh! Panic in CrSi"); - } -} - - -void NewSimplexes (Mesh * m, List_T * Sim, List_T * news){ - int i, j; - Tree_T *SimXFac; - Simplex *S; - SxF SXF, *pSXF; - - SimXFac = Tree_Create (sizeof (SxF), compareSxF); - - for (i = 0; i < List_Nbr (Sim); i++){ - List_Read (Sim, i, &S); - if (!i) - ZONEELIMINEE = S->iEnt; - else { - if (S->iEnt != ZONEELIMINEE){ - Msg(WARNING, "Huh! The elimination failed %d %d", - S->iEnt, ZONEELIMINEE); - } - } - for (j = 0; j < 4; j++){ - SXF.F = S->F[j]; - if ((pSXF = (SxF *) Tree_PQuery (SimXFac, &SXF))){ - (pSXF->NumFaceSimpl)++; - } - else{ - SXF.NumFaceSimpl = 1; - Tree_Add (SimXFac, &SXF); - } - } - } - - /* Les faces non communes sont obligatoirement a la frontiere ... - -> Nouveaux simplexes */ - - Tree_Action (SimXFac, CrSi); - Tree_Delete (SimXFac); -} - - - -/* Methode recursive : Rempli Tsd les simplexes detruits - Invariant : Le simplexe est a eliminer - Le simplexe n'est pas encore considere */ - -int recur_bowyer (Simplex * s){ - int i; - - Tree_Insert (Tsd, &s); - for (i = 0; i < 4; i++){ - if (s->S[i] && s->S[i] != &MyNewBoundary && !Tree_Query (Tsd, &s->S[i])){ - if (Pt_In_Circum (s->S[i], THEV) && (s->iEnt == s->S[i]->iEnt)){ - recur_bowyer (s->S[i]); - } - else{ - if (s->iEnt != s->S[i]->iEnt){ - //Msg(WARNING, "Point scabreux %d", s->S[i]->Num); - Alerte_Point_Scabreux = 1; - } - Tree_Insert (Sim_Sur_Le_Bord, &s->S[i]); - } - } - } - return 1; -} - -bool Bowyer_Watson (Mesh * m, Vertex * v, Simplex * S, int force){ - int i; - Simplex *s; - // static int init = 1; - double volumeold, volumenew; - - THEV = v; - - double x = (S->V[0]->Pos.X + S->V[1]->Pos.X + S->V[2]->Pos.X + S->V[3]->Pos.X) / 4.; - double y = (S->V[0]->Pos.Y + S->V[1]->Pos.Y + S->V[2]->Pos.Y + S->V[3]->Pos.Y) / 4.; - double z = (S->V[0]->Pos.Z + S->V[1]->Pos.Z + S->V[2]->Pos.Z + S->V[3]->Pos.Z) / 4.; - - if (force) - THEM->Metric->Identity (); - else - THEM->Metric->setMetric (x, y, z); - - Tsd = Tree_Create (sizeof (Simplex *), compareSimplex); - Sim_Sur_Le_Bord = Tree_Create (sizeof (Simplex *), compareSimplex); - // if (init){ - // init = 0; - // } - List_Reset (Simplexes_Destroyed); - List_Reset (Simplexes_New); - - - if (Methode){ - Tree_Action (m->Simplexes, Fill_Sim_Des); - } - else{ - recur_bowyer (S); - } - - Tree_Action (Tsd, TStoLS); - NewSimplexes (m, Simplexes_Destroyed, Simplexes_New); - - /* calcul des volumes des simplexes crees */ - - if (Alerte_Point_Scabreux || !CTX.mesh.speed_max){ - volume = 0.0; - for (i = 0; i < List_Nbr (Simplexes_Destroyed); i++){ - VSIM (List_Pointer (Simplexes_Destroyed, i), NULL); - } - volumeold = volume; - volume = 0.0; - for (i = 0; i < List_Nbr (Simplexes_New); i++){ - VSIM (List_Pointer (Simplexes_New, i), NULL); - } - volumenew = volume; - } - else{ - volumeold = 1.0; - volumenew = 1.0; - } - - /* critere du volume */ - - if ((fabs (volumeold - volumenew) / (volumeold + volumenew)) > 1.e-8){ - if (Tree_Suppress (m->Simplexes, &S)){ - S->Quality = 0.0; - Tree_Add (m->Simplexes, &S); - } - if(force){ - List_Reset (Simplexes_Destroyed); - List_Reset (Simplexes_New); - Tree_Delete (Sim_Sur_Le_Bord); - Tree_Delete (Tsd); - //printf(" Aie Aie Aie volume changed %g -> %g\n",volumeold,volumenew); - return false; - } - } - else{ - Tree_Add (m->Vertices, &THEV); - for (i = 0; i < List_Nbr (Simplexes_New); i++){ - Tree_Add (m->Simplexes, List_Pointer (Simplexes_New, i)); - } - - /* Suppression des simplexes elimines */ - - for (i = 0; i < List_Nbr (Simplexes_Destroyed); i++){ - List_Read (Simplexes_Destroyed, i, &s); - if (!Tree_Suppress (m->Simplexes, &s)) - Msg(GERROR, "Impossible to delete simplex"); - // CORRECTION FROM Free(s) to that - Free_Simplex (&s,0); - } - - /* Creation des liens entre nouveaux simplexes */ - - Tree_Action (Sim_Sur_Le_Bord, TAtoLA); - Link_Simplexes (Simplexes_New, m->Simplexes); - } - - Tree_Delete (Sim_Sur_Le_Bord); - Tree_Delete (Tsd); - return true; -} - -double rand_sign(){ - double d = ((double)rand()/(double)RAND_MAX) ; - return (d < 0.5)?-1.0:1.0; -} - -void Convex_Hull_Mesh (List_T * Points, Mesh * m){ - int i, j, N, n; - int Nbr_OK = 0, Nbr_NOTOK = 0; - - N = List_Nbr (Points); - n = IMAX (N / 20, 1); - - Box_6_Tetraedron (Points, m); - // List_Sort (Points, comparePosition); - - for (i = 0; i < N; i++){ - THES = NULL; - List_Read (Points, i, &THEV); - - if (Simplexes_New) - for (j = 0; j < List_Nbr (Simplexes_New); j++){ - Action_First_Simplexes (List_Pointer (Simplexes_New, j), NULL); - } - - if (!THES){ - Tree_Action (m->Simplexes, Action_First_Simplexes); - Nbr_OK++; - } - else{ - Nbr_NOTOK++; - } - if (i % n == n - 1){ - volume = 0.0; - Tree_Action (m->Simplexes, VSIM); - Msg(STATUS3, "Nod=%d/%d Elm=%d", i+1,N,Tree_Nbr(m->Simplexes)); - Msg(STATUS1, "Vol=%g",volume); - } - if (!THES){ - Msg(WARNING, "Vertex (%g,%g,%g) in no simplex", - THEV->Pos.X,THEV->Pos.Y,THEV->Pos.Z); - THEV->Pos.X += 10 * CTX.mesh.rand_factor * LC3D * (double)rand()/(double)RAND_MAX; - THEV->Pos.Y += 10 * CTX.mesh.rand_factor * LC3D * (double)rand()/(double)RAND_MAX; - THEV->Pos.Z += 10 * CTX.mesh.rand_factor * LC3D * (double)rand()/(double)RAND_MAX; - Tree_Action (m->Simplexes, Action_First_Simplexes); - } - bool ca_marche = Bowyer_Watson (m, THEV, THES, 1); - int count = 0; - while(!ca_marche){ - //Msg(INFO, "Unable to add point %d (%g,%g,%g)", - // THEV->Num, THEV->Pos.X,THEV->Pos.Y,THEV->Pos.Z ); - count ++; - double dx = rand_sign() * 1000 * CTX.mesh.rand_factor * LC3D * - (double)rand()/(double)RAND_MAX; - double dy = rand_sign() * 1000 * CTX.mesh.rand_factor * LC3D * - (double)rand()/(double)RAND_MAX; - double dz = rand_sign() * 1000 * CTX.mesh.rand_factor * LC3D * - (double)rand()/(double)RAND_MAX; - THEV->Pos.X += dx; - THEV->Pos.Y += dy; - THEV->Pos.Z += dz; - THES = NULL; - Tree_Action (m->Simplexes, Action_First_Simplexes); - ca_marche = Bowyer_Watson (m, THEV, THES, 1); - THEV->Pos.X -= dx; - THEV->Pos.Y -= dy; - THEV->Pos.Z -= dz; - if(count > 5){ - N++; - List_Add(POINTS,&THEV); - Msg(WARNING, "Unable to add point %d (will do it later)", - THEV->Num); - break; - } - } - } -} - -void suppress_vertex (void *data, void *dum){ - Vertex **pv; - - pv = (Vertex **) data; - if ((*pv)->Num < 0) - List_Add (Suppress, pv); -} - -void suppress_simplex (void *data, void *dum){ - Simplex **pv; - - pv = (Simplex **) data; - if ((*pv)->iEnt == 0) - List_Add (Suppress, pv); - - /* - else{ - for(i=0;i<List_Nbr(TrsfVolNum);i++) - if((*pv)->iEnt == (*(int*)List_Pointer(TrsfVolNum,i))->Num) - List_Add(Suppress,pv); - } - */ -} - -void add_in_bgm (void *a, void *b){ - Simplex **s, *S; - - s = (Simplex **) a; - S = *s; - List_Add (LLL, S); -} - -void Bgm_With_Points (Mesh * bgm){ - int i; - Simplex *s; - - bgm->BGM.bgm = List_Create (Tree_Nbr (bgm->Simplexes), 10, sizeof (Simplex)); - LLL = bgm->BGM.bgm; - Tree_Action (bgm->Simplexes, add_in_bgm); - for (i = 0; i < List_Nbr (LLL); i++){ - s = (Simplex *) List_Pointer (LLL, i); - AddSimplexInGrid (bgm, s, BOITE); - } -} - -void Create_BgMesh (int Type, double lc, Mesh * m){ - m->BGM.Typ = Type; - switch (Type){ - case CONSTANT: - m->BGM.lc = lc; - break; - case ONFILE: - break; - case WITHPOINTS: - m->BGM.bgm = NULL; - break; - } -} - -void Maillage_Volume (void *data, void *dum){ - Volume *v, **pv; - Mesh M; - Surface S, *s; - Simplex *simp; - Vertex *newv; - int n, N; - double uvw[3]; - int i; - - // WE SHOULD ALLOCATE THESE GUYS HERE AND NOT IN Bowyer_Watson - // MEMORY BUG -JF - - Simplexes_New = List_Create (10, 10, sizeof (Simplex *)); - Simplexes_Destroyed = List_Create (10, 10, sizeof (Simplex *)); - - FACE_DIMENSION = 2; - - pv = (Volume **) data; - v = *pv; - - if(v->Dirty){ - Msg(INFO, "Not meshing dirty Volume %d", v->Num); - return; - } - - if (Extrude_Mesh (v)){ - } - else if (MeshTransfiniteVolume (v)){ - } - else if (v->Typ == 99999){ - - LOCAL = &M; - Create_BgMesh (THEM->BGM.Typ, .2, LOCAL); - s = &S; - - POINTS_TREE = Tree_Create (sizeof (Vertex *), comparePosition); - POINTS = List_Create (100, 100, sizeof (Vertex *)); - LOCAL->Simplexes = v->Simplexes; - LOCAL->Vertices = v->Vertices; - - for (i = 0; i < List_Nbr (v->Surfaces); i++){ - List_Read (v->Surfaces, i, &s); - Tree_Action (s->Vertices, add_points); - } - Tree_Action (POINTS_TREE, add_points_2); - Tree_Delete (POINTS_TREE); - - N = List_Nbr (POINTS); - n = N / 30 + 1; - - if(!N) return; - - /* Creation d'un maillage initial respectant la frontiere */ - - Msg(STATUS2, "Mesh 3D... (initial)"); - - Convex_Hull_Mesh (POINTS, LOCAL); - - while (!Coherence (v, LOCAL)); - - Link_Simplexes (NULL, LOCAL->Simplexes); - - /* Suppression des noeuds de num < 0 */ - - Suppress = List_Create (10, 10, sizeof (Vertex *)); - Tree_Action (v->Vertices, suppress_vertex); - for (i = 0; i < List_Nbr (Suppress); i++){ - Tree_Suppress (v->Vertices, List_Pointer (Suppress, i)); - } - List_Delete (Suppress); - - /* Suppression des elements dont le num de vol == 0 (cad qui - n'appartiennent a auncun volume defini) */ - - Suppress = List_Create (10, 10, sizeof (Simplex *)); - Tree_Action (v->Simplexes, suppress_simplex); - for (i = 0; i < List_Nbr (Suppress); i++){ - Tree_Suppress (v->Simplexes, List_Pointer (Suppress, i)); - } - - List_Delete (Suppress); - - if (Tree_Nbr (LOCAL->Simplexes) == 0) return; - - /* Si il reste quelque chose a mailler en volume : */ - - Msg(STATUS2, "Mesh 3D... (final)"); - - v->Simplexes = LOCAL->Simplexes; - - Bgm_With_Points (LOCAL); - POINTS_TREE = THEM->Simplexes; - - Tree_Right (LOCAL->Simplexes, &simp); - i = 0; - Progress (102); - while (simp->Quality > CONV_VALUE){ - newv = NewVertex (simp); - //double l; - //while(!Pt_In_Volume(newv->Pos.X,newv->Pos.Y,newv->Pos.Z,LOCAL,&l,0.0)){ - - while (!simp->Pt_In_Simplexe (newv, uvw, 1.e-5) && - (simp->S[0] == &MyNewBoundary || - !simp->S[0]->Pt_In_Simplexe (newv, uvw, 1.e-5)) && - (simp->S[1] == &MyNewBoundary || - !simp->S[1]->Pt_In_Simplexe (newv, uvw, 1.e-5)) && - (simp->S[2] == &MyNewBoundary || - !simp->S[2]->Pt_In_Simplexe (newv, uvw, 1.e-5)) && - (simp->S[3] == &MyNewBoundary || - !simp->S[3]->Pt_In_Simplexe (newv, uvw, 1.e-5))) { - Tree_Suppress (LOCAL->Simplexes, &simp); - simp->Quality = 0.1; - Tree_Insert (LOCAL->Simplexes, &simp); - Tree_Right (LOCAL->Simplexes, &simp); - if (simp->Quality < CONV_VALUE) - break; - newv = NewVertex (simp); - } - if (simp->Quality < CONV_VALUE) - break; - i++; - if (i % n == n - 1){ - volume = 0.0; - Tree_Action (LOCAL->Simplexes, VSIM); - Msg(STATUS3, "Nod=%d Elm=%d", - Tree_Nbr (LOCAL->Vertices), Tree_Nbr (LOCAL->Simplexes)); - Msg(STATUS1, "Vol(%g) Conv(%g->%g)", volume, simp->Quality, CONV_VALUE); - double adv = 100. * (CONV_VALUE / simp->Quality); - Progress ((int) adv); - } - Bowyer_Watson (LOCAL, newv, simp, 0); - Tree_Right (LOCAL->Simplexes, &simp); - } - - POINTS_TREE = THEM->Vertices; - Tree_Action (v->Vertices, add_points); - POINTS_TREE = THEM->Simplexes; - Tree_Action (v->Simplexes, add_points); - - Progress(-1); - - if (CTX.mesh.quality){ - extern void SwapEdges3D (Mesh * M, Volume * v, double GammaPrescribed, bool order); - Msg(STATUS3, "Swapping edges (1st pass)"); - SwapEdges3D (THEM, v, CTX.mesh.quality, true); - Msg(STATUS3, "Swapping edges (2nd pass)"); - SwapEdges3D (THEM, v, CTX.mesh.quality, false); - Msg(STATUS3, "Swapping edges (last pass)"); - SwapEdges3D (THEM, v, CTX.mesh.quality, true); - } - - if (CTX.mesh.nb_smoothing){ - /* - Msg(STATUS3, "Laplacian smoothing"); - tnxe = Tree_Create (sizeof (NXE), compareNXE); - create_NXE (v->Vertices, v->Simplexes, tnxe); - for (int i = 0; i < CTX.mesh.nb_smoothing; i++) - Tree_Action (tnxe, ActionLiss); - delete_NXE (tnxe); - Msg(STATUS3, "Swapping edges (last pass)"); - SwapEdges3D (THEM, v, 0.5, true); - */ - } - - if (CTX.mesh.degree == 2) - Degre2 (THEM->Vertices, THEM->VertexEdges, v->Simplexes, NULL, NULL); - } - - THEM->Statistics[6] += Tree_Nbr(v->Vertices); - THEM->Statistics[9] += Tree_Nbr(v->Simplexes); - THEM->Statistics[10] += Tree_Nbr(v->Hexahedra); - THEM->Statistics[11] += Tree_Nbr(v->Prisms); - - if(v->Typ == 99999){ - Gamma_Maillage (THEM, &THEM->Statistics[17], &THEM->Statistics[18], &THEM->Statistics[19]); - Eta_Maillage (THEM, &THEM->Statistics[20], &THEM->Statistics[21], &THEM->Statistics[22]); - R_Maillage (THEM, &THEM->Statistics[23], &THEM->Statistics[24], &THEM->Statistics[25]); - } - // WE SHOULD DESALLOCATE THESE GUYS HERE AND NOT NOWHERE ;-) - // MEMORY BUG -JF - List_Delete(Simplexes_New); - List_Delete(Simplexes_Destroyed); -} diff --git a/Mesh/3D_Mesh.h b/Mesh/3D_Mesh.h deleted file mode 100644 index 2b0d87bd67da28723e9945c604a6787dd663cbb9..0000000000000000000000000000000000000000 --- a/Mesh/3D_Mesh.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef _3D_MESH_H_ -#define _3D_MESH_H_ - -Brick LaBrique (Grid_T * pGrid, double X, double Y, double Z); -void AddSimplexInGrid (Mesh * m, Simplex * s, int boule_boite); -int Coherence (Volume * v, Mesh * m); -int Pt_In_Volume (double X, double Y, double Z, Mesh * m, - double *l, double tol); -void findminmax (void *a, void *b); -void getminmax (double *xmin, double *ymin, double *zmin, - double *xmax, double *ymax, double *zmax); -void cut_tetraedre (Intersection * pI, Tree_T * AddedTet, Tree_T * TetDel, - Tree_T * newpoints); -void Impression_Resultats (void); -void Restore_Volume (Volume * v); -void Remise_A_Zero (void); - -#endif diff --git a/Mesh/3D_SMesh.cpp b/Mesh/3D_SMesh.cpp deleted file mode 100644 index 77d893b4925f25eef2f5297f7b03597115c7f9d9..0000000000000000000000000000000000000000 --- a/Mesh/3D_SMesh.cpp +++ /dev/null @@ -1,513 +0,0 @@ -// $Id: 3D_SMesh.cpp,v 1.10 2001-08-13 09:38:14 geuzaine Exp $ - -/* - Maillage transfini volumique - - a0 s0 s1 f0 s0 s1 s5 s4 s6 - s7 s6 a1 s1 s2 f1 s1 s2 s6 s4 * - *-------* a2 s3 s2 f2 s3 s2 s6 s7 /|\ - |\s4 |\ a3 s0 s3 f3 s0 s3 s7 s4 / | \ - | *-------* s5 a4 s4 s5 f4 s0 s1 s2 s3 s7/s4/ |s2\ - | | s2| | a5 s5 s6 f5 s4 s5 s6 s7 *---*---* s5 - s3 *-|-----* | a6 s7 s6 | / \ | - \| \| a7 s4 s7 | / \ | - *-------* a8 s0 s4 |/ \| - v w s0 s1 a9 s1 s5 *-------* - \| a10 s2 s6 v w s3/s0 s1 - *--u a11 s3 s7 \| - *--u - - - Remarque : La definition d'un volume prismatique doit se faire dans l'ordre - donne sur le schema. (degenerescence obligatoirement en s0/s4) - -*/ - -#include "Gmsh.h" -#include "Mesh.h" -#include "Interpolation.h" -#include "Create.h" - -extern Mesh *THEM; -extern int CurrentNodeNumber; - -int index2d (int flag, int M, int N, int m, int n){ - switch(flag){ - case 0 : return(n + N*m); - case 1 : return(M*N - M*(n+1) + m); - case 2 : return(M*N - (n+N*m) - 1); - case 3 : return(M + n*M - m - 1); - case 4 : return(N + m*N - n - 1); - case 5 : return(M*N - (m+M*n) - 1); - case 6 : return(M*N - N*(m+1) + n); - case 7 : return(m + M*n); - default : return 0; - } -} - -void index_uv (int flag, Vertex * ver, double *u, double *v){ - switch (flag){ - case 0: *u = ver->us[0]; *v = ver->us[1]; break; - case 1: *u = ver->us[1]; *v = 1. - ver->us[0]; break; - case 2: *u = 1. - ver->us[0]; *v = 1. - ver->us[1]; break; - case 3: *u = 1. - ver->us[1]; *v = ver->us[0]; break; - case 4: *u = ver->us[0]; *v = 1. - ver->us[1]; break; - case 5: *u = 1. - ver->us[1]; *v = 1. - ver->us[0]; break; - case 6: *u = 1. - ver->us[0]; *v = ver->us[1]; break; - case 7: *u = ver->us[1]; *v = ver->us[0]; break; - } -} - -#define CREATE_HEX Create_Hexahedron(list[(i) + N1*(j) + N1*N2*(k)], \ - list[(i+1) + N1*(j) + N1*N2*(k)], \ - list[(i+1) + N1*(j+1) + N1*N2*(k)], \ - list[(i) + N1*(j+1) + N1*N2*(k)], \ - list[(i) + N1*(j) + N1*N2*(k+1)], \ - list[(i+1) + N1*(j) + N1*N2*(k+1)], \ - list[(i+1) + N1*(j+1) + N1*N2*(k+1)], \ - list[(i) + N1*(j+1) + N1*N2*(k+1)]) - -#define CREATE_PRISM_1 Create_Prism(list[(i) + N1*(j) + N1*N2*(k)], \ - list[(i+1) + N1*(j) + N1*N2*(k)], \ - list[(i) + N1*(j+1) + N1*N2*(k)], \ - list[(i) + N1*(j) + N1*N2*(k+1)], \ - list[(i+1) + N1*(j) + N1*N2*(k+1)], \ - list[(i) + N1*(j+1) + N1*N2*(k+1)]) - -#define CREATE_PRISM_2 Create_Prism(list[(i+1) + N1*(j+1) + N1*N2*(k)], \ - list[(i) + N1*(j+1) + N1*N2*(k)], \ - list[(i+1) + N1*(j) + N1*N2*(k)], \ - list[(i+1) + N1*(j+1) + N1*N2*(k+1)], \ - list[(i) + N1*(j+1) + N1*N2*(k+1)], \ - list[(i+1) + N1*(j) + N1*N2*(k+1)]) - -#define CREATE_SIM_1 Create_Simplex(list[(i) + N1*(j) + N1*N2*(k)], \ - list[(i+1) + N1*(j) + N1*N2*(k)], \ - list[(i) + N1*(j+1) + N1*N2*(k)], \ - list[(i) + N1*(j) + N1*N2*(k+1)]) - -#define CREATE_SIM_2 Create_Simplex(list[(i+1) + N1*(j) + N1*N2*(k)], \ - list[(i) + N1*(j+1) + N1*N2*(k)], \ - list[(i) + N1*(j) + N1*N2*(k+1)], \ - list[(i+1) + N1*(j) + N1*N2*(k+1)]) - -#define CREATE_SIM_3 Create_Simplex(list[(i) + N1*(j) + N1*N2*(k+1)], \ - list[(i+1) + N1*(j) + N1*N2*(k+1)], \ - list[(i) + N1*(j+1) + N1*N2*(k)], \ - list[(i) + N1*(j+1) + N1*N2*(k+1)]) - -#define CREATE_SIM_4 Create_Simplex(list[(i+1) + N1*(j) + N1*N2*(k)], \ - list[(i) + N1*(j+1) + N1*N2*(k)], \ - list[(i+1) + N1*(j) + N1*N2*(k+1)], \ - list[(i+1) + N1*(j+1) + N1*N2*(k)]) - -#define CREATE_SIM_5 Create_Simplex(list[(i) + N1*(j+1) + N1*N2*(k)], \ - list[(i) + N1*(j+1) + N1*N2*(k+1)], \ - list[(i+1) + N1*(j) + N1*N2*(k+1)], \ - list[(i+1) + N1*(j+1) + N1*N2*(k)]) - -#define CREATE_SIM_6 Create_Simplex(list[(i+1) + N1*(j) + N1*N2*(k+1)], \ - list[(i) + N1*(j+1) + N1*N2*(k+1)], \ - list[(i+1) + N1*(j+1) + N1*N2*(k+1)], \ - list[(i+1) + N1*(j+1) + N1*N2*(k)]) - -int MeshTransfiniteVolume (Volume *vol) { - int i,j,k,flag,nbs,nbp,nbg; - int nbtet=0, nbpri=0, nbhex=0; - Surface *G[6],*GG[6]; - Vertex V,**vexist,*pV,*CP[4],**list; - double u,v,w,dum; - int F_flag[6]; - int N1,N2,N3; - Vertex *F[6],*C[12],*Stmp[8],*S[8]; - Hexahedron *hexa; - Prism *prism; - Simplex *simp; - int NbFacesFound=0 ; - - static int tab1hex[] = {0,1,5,4, 1,2,6,5, 3,2,6,7, 0,3,7,4, 0,1,2,3, 4,5,6,7}; - static int tab2[] = {0,1,2,3, 1,2,3,0, 2,3,0,1, 3,0,1,2, - 3,2,1,0, 2,1,0,3, 1,0,3,2, 0,3,2,1}; - - if (vol->Method != TRANSFINI) return(0); - - nbs = List_Nbr(vol->Surfaces); - - if(nbs == 5) nbp = 6; - else if(nbs == 6) nbp = 8; - else return(0); - - Msg(STATUS3, "Meshing Volume %d", vol->Num); - - for(i=0;i<6;i++) G[i] = NULL ; - - for(i=0;i<nbp;i++){ - V.Num = vol->ipar[i]; - pV = &V; - if((vexist = (Vertex**)Tree_PQuery(THEM->Vertices,&pV)) == NULL) { - Msg(WARNING, "Unknown control point %d in Transfinite Volume %d", - V.Num,vol->Num); - return(0); - } - else{ - Stmp[i]=*vexist; - } - } - - if(nbp == 8){ - for(i=0;i<8;i++) S[i]=Stmp[i]; - } - else if(nbp == 6){ - S[0] = S[3] = Stmp[0]; - S[1] = Stmp[1]; - S[2] = Stmp[2]; - S[4] = S[7] = Stmp[3]; - S[5] = Stmp[4]; - S[6] = Stmp[5]; - } - - /* - for(i=0;i<8;i++) printf("S[%d]=%d \n", i, S[i]->Num); - */ - - for(i=0;i<nbs;i++) List_Read(vol->Surfaces,i,&GG[i]); - - for(i=0;i<nbs;i++){ - nbg = List_Nbr(GG[i]->Generatrices); - - for(j=0;j<nbg;j++){ - V.Num = GG[i]->ipar[j]; - pV = &V; - if((vexist = (Vertex**)Tree_PQuery(THEM->Vertices,&pV)) == NULL) { - Msg(WARNING, "Unknown control point %d in Transfinite Surface %d", - V.Num,GG[i]->Num); - return(0); - } - else{ - CP[j]=*vexist; - } - } - - if(nbg == 3) CP[3] = CP[0]; - - for(flag=0;flag<8;flag++){ - for(k=0;k<6;k++){ - if(S[tab1hex[4*k ]]->Num == CP[tab2[4*flag ]]->Num && - S[tab1hex[4*k+1]]->Num == CP[tab2[4*flag+1]]->Num && - S[tab1hex[4*k+2]]->Num == CP[tab2[4*flag+2]]->Num && - S[tab1hex[4*k+3]]->Num == CP[tab2[4*flag+3]]->Num ){ - G[k]=GG[i]; - F_flag[k]=flag; - NbFacesFound++; - /* - printf("TR3D: (k=%d) face trouvee %d (flag = %d) : nodes %d %d %d %d \n", - k,GG[i]->Num, flag, - S[tab1hex[4*k ]]->Num, - S[tab1hex[4*k+1]]->Num, - S[tab1hex[4*k+2]]->Num, - S[tab1hex[4*k+3]]->Num); - */ - } - } - } - } - - if(nbs == 6 && NbFacesFound != 6) { - Msg(WARNING, "Wrong definition of hexahedric Transfinite Volume %d", - vol->Num); - return(0); - } - - if(nbs == 5 && NbFacesFound != 5) { - Msg(WARNING1, "Wrong definition of prismatic Transfinite Volume %d", vol->Num); - Msg(WARNING2, "Possibly because the first and fourth points are not the"); - Msg(WARNING3, "degenerated ones"); - return(0); - } - - if(nbs == 6){ - for(i=0;i<6;i++){ - if(G[i] == NULL) { - Msg(WARNING, "Wrong definition of hexahedric Transfinite Volume %d", - vol->Num); - return(0); - } - } - } - else if(nbs == 5){ - for(i=0;i<6;i++){ - if(i != 3) { - if(G[i] == NULL) { - Msg(WARNING1, "Wrong definition of prismatic Transfinite Volume %d", vol->Num); - Msg(WARNING2, "Possibly because the first and fourth points are not the"); - Msg(WARNING3, "degenerated ones"); - return(0); - } - } - } - } - - - N1 = (F_flag[4] % 2 == 0) ? G[4]->Nu : G[4]->Nv ; - N2 = (F_flag[4] % 2 == 0) ? G[4]->Nv : G[4]->Nu ; - N3 = (F_flag[0] % 2 == 0) ? G[0]->Nv : G[0]->Nu ; - - /* - printf("N1(%d) N2(%d) N3(%d)\n", N1,N2,N3); - */ - - list = (Vertex**)Malloc(N1*N2*N3*sizeof(Vertex*)); - - for(i=0;i<N1;i++){ - - for(j=0;j<N2;j++){ - - List_Read(G[4]->TrsfVertices, index2d(F_flag[4],N1,N2, i, 0 ), &C[0]); - List_Read(G[4]->TrsfVertices, index2d(F_flag[4],N1,N2, N1-1, j ), &C[1]); - List_Read(G[4]->TrsfVertices, index2d(F_flag[4],N1,N2, i, N2-1), &C[2]); - List_Read(G[4]->TrsfVertices, index2d(F_flag[4],N1,N2, 0, j ), &C[3]); - List_Read(G[5]->TrsfVertices, index2d(F_flag[5],N1,N2, i, 0 ), &C[4]); - List_Read(G[5]->TrsfVertices, index2d(F_flag[5],N1,N2, N1-1, j ), &C[5]); - List_Read(G[5]->TrsfVertices, index2d(F_flag[5],N1,N2, i, N2-1), &C[6]); - List_Read(G[5]->TrsfVertices, index2d(F_flag[5],N1,N2, 0, j ), &C[7]); - - List_Read(G[4]->TrsfVertices, index2d(F_flag[4],N1,N2, i, j), &F[4]); - List_Read(G[5]->TrsfVertices, index2d(F_flag[5],N1,N2, i, j), &F[5]); - - index_uv(F_flag[4],F[4],&u,&v); - - for(k=0;k<N3;k++){ - - List_Read(G[0]->TrsfVertices, index2d(F_flag[0],N1,N3, 0, k), &C[8]); - List_Read(G[0]->TrsfVertices, index2d(F_flag[0],N1,N3, N1-1, k), &C[9]); - List_Read(G[2]->TrsfVertices, index2d(F_flag[2],N1,N3, N1-1, k), &C[10]); - List_Read(G[2]->TrsfVertices, index2d(F_flag[2],N1,N3, 0, k), &C[11]); - - List_Read(G[0]->TrsfVertices, index2d(F_flag[0],N1,N3, i, k), &F[0]); - List_Read(G[1]->TrsfVertices, index2d(F_flag[1],N2,N3, j, k), &F[1]); - List_Read(G[2]->TrsfVertices, index2d(F_flag[2],N1,N3, i, k), &F[2]); - if(nbs==6) - List_Read(G[3]->TrsfVertices, index2d(F_flag[3],N2,N3, j, k), &F[3]); - else if(nbs == 5) - F[3]=C[8]; - - index_uv(F_flag[0],F[0],&dum,&w); - - if(i && j && k && i != N1-1 && j != N2-1 && k != N3-1){ - V = TransfiniteHex(*F[0],*F[1],*F[2],*F[3],*F[4],*F[5], - *C[0],*C[1],*C[2],*C[3],*C[4],*C[5], - *C[6],*C[7],*C[8],*C[9],*C[10],*C[11], - *S[0],*S[1],*S[2],*S[3],*S[4],*S[5],*S[6],*S[7], - u,v,w); - list[i+N1*j+N1*N2*k] = Create_Vertex(++CurrentNodeNumber, - V.Pos.X,V.Pos.Y,V.Pos.Z,V.lc,0.0); - /* - printf(" NEW node : %f %f %f\n", list[i+N1*j+N1*N2*k]->Pos.X, - list[i+N1*j+N1*N2*k]->Pos.Y, list[i+N1*j+N1*N2*k]->Pos.Z); - */ - } - - else if(!i){ - list[i+N1*j+N1*N2*k] = F[3]; - } - else if(!j){ - list[i+N1*j+N1*N2*k] = F[0]; - } - else if(!k){ - list[i+N1*j+N1*N2*k] = F[4]; - } - else if(i == N1-1){ - list[i+N1*j+N1*N2*k] = F[1]; - } - else if(j == N2-1){ - list[i+N1*j+N1*N2*k] = F[2]; - } - else if(k == N3-1){ - list[i+N1*j+N1*N2*k] = F[5]; - } - - } - } - } - - for(i=0;i<N1;i++){ - for(j=0;j<N2;j++){ - for(k=0;k<N3;k++){ - Tree_Replace(THEM->Vertices,&list[i+N1*j+N1*N2*k]); - Tree_Replace(vol->Vertices,&list[i+N1*j+N1*N2*k]); - } - } - } - - if(nbs == 6){ - for(i=0;i<N1-1;i++){ - for(j=0;j<N2-1;j++){ - for(k=0;k<N3-1;k++){ - if(G[0]->Recombine && G[1]->Recombine && G[2]->Recombine && - G[3]->Recombine && G[4]->Recombine && G[5]->Recombine) { - hexa = CREATE_HEX; hexa->iEnt = vol->Num; Tree_Replace(vol->Hexahedra,&hexa); - - nbhex++; - } - else if (!G[0]->Recombine && G[1]->Recombine && !G[2]->Recombine && - G[3]->Recombine && G[4]->Recombine && G[5]->Recombine) { - prism = Create_Prism(list[(i) + N1*(j) + N1*N2*(k)], - list[(i+1) + N1*(j) + N1*N2*(k)], - list[(i) + N1*(j) + N1*N2*(k+1)], - list[(i) + N1*(j+1) + N1*N2*(k)], - list[(i+1) + N1*(j+1) + N1*N2*(k)], - list[(i) + N1*(j+1) + N1*N2*(k+1)]); - prism->iEnt = vol->Num; - Tree_Replace(vol->Prisms,&prism); - - prism = Create_Prism(list[(i+1) + N1*(j) + N1*N2*(k+1)], - list[(i) + N1*(j) + N1*N2*(k+1)], - list[(i+1) + N1*(j) + N1*N2*(k)], - list[(i+1) + N1*(j+1) + N1*N2*(k+1)], - list[(i) + N1*(j+1) + N1*N2*(k+1)], - list[(i+1) + N1*(j+1) + N1*N2*(k)]); - prism->iEnt = vol->Num; - Tree_Replace(vol->Prisms,&prism); - - nbpri +=2 ; - } - else if (G[0]->Recombine && !G[1]->Recombine && G[2]->Recombine && - !G[3]->Recombine && G[4]->Recombine && G[5]->Recombine) { - prism = Create_Prism(list[(i+1) + N1*(j) + N1*N2*(k)], - list[(i+1) + N1*(j+1) + N1*N2*(k)], - list[(i+1) + N1*(j) + N1*N2*(k+1)], - list[(i) + N1*(j) + N1*N2*(k)], - list[(i) + N1*(j+1) + N1*N2*(k)], - list[(i) + N1*(j) + N1*N2*(k+1)]); - prism->iEnt = vol->Num; - Tree_Replace(vol->Prisms,&prism); - - prism = Create_Prism(list[(i+1) + N1*(j+1) + N1*N2*(k+1)], - list[(i+1) + N1*(j) + N1*N2*(k+1)], - list[(i+1) + N1*(j+1) + N1*N2*(k)], - list[(i) + N1*(j+1) + N1*N2*(k+1)], - list[(i) + N1*(j) + N1*N2*(k+1)], - list[(i) + N1*(j+1) + N1*N2*(k)]); - prism->iEnt = vol->Num; - Tree_Replace(vol->Prisms,&prism); - - nbpri += 2 ; - } - else if (G[0]->Recombine && G[1]->Recombine && G[2]->Recombine && - G[3]->Recombine && !G[4]->Recombine && !G[5]->Recombine) { - prism = CREATE_PRISM_1; prism->iEnt = vol->Num; Tree_Replace(vol->Prisms,&prism); - prism = CREATE_PRISM_2; prism->iEnt = vol->Num; Tree_Replace(vol->Prisms,&prism); - - nbpri += 2; - } - else if (!G[0]->Recombine && !G[1]->Recombine && !G[2]->Recombine && - !G[3]->Recombine && !G[4]->Recombine && !G[5]->Recombine) { - simp = CREATE_SIM_1; simp->iEnt = vol->Num; Tree_Replace(vol->Simplexes,&simp); - simp = CREATE_SIM_2; simp->iEnt = vol->Num; Tree_Replace(vol->Simplexes,&simp); - simp = CREATE_SIM_3; simp->iEnt = vol->Num; Tree_Replace(vol->Simplexes,&simp); - simp = CREATE_SIM_4; simp->iEnt = vol->Num; Tree_Replace(vol->Simplexes,&simp); - simp = CREATE_SIM_5; simp->iEnt = vol->Num; Tree_Replace(vol->Simplexes,&simp); - simp = CREATE_SIM_6; simp->iEnt = vol->Num; Tree_Replace(vol->Simplexes,&simp); - - nbtet += 6; - } - else{ - Msg(WARNING, "Wrong surface recombining in Transfinite Volume %d", - vol->Num); - return(0); - } - } - } - } - } - else if (nbs == 5){ - for(j=0;j<N2-1;j++){ - for(k=0;k<N3-1;k++){ - if( ( G[0]->Recombine && G[1]->Recombine && G[2]->Recombine && - G[4]->Recombine && G[5]->Recombine) || - ( G[0]->Recombine && G[1]->Recombine && G[2]->Recombine && - !G[4]->Recombine && !G[5]->Recombine) ){ - prism = Create_Prism(list[ N1*(j) + N1*N2*(k)], - list[1 + N1*(j) + N1*N2*(k)], - list[1 + N1*(j+1) + N1*N2*(k)], - list[ N1*(j) + N1*N2*(k+1)], - list[1 + N1*(j) + N1*N2*(k+1)], - list[1 + N1*(j+1) + N1*N2*(k+1)]); - prism->iEnt = vol->Num; - Tree_Replace(vol->Prisms,&prism); - - nbpri++; - } - else if(!G[0]->Recombine && !G[1]->Recombine && !G[2]->Recombine && - !G[4]->Recombine && !G[5]->Recombine){ - simp = Create_Simplex(list[ + N1*(j) + N1*N2*(k)], - list[1 + N1*(j) + N1*N2*(k)], - list[1 + N1*(j+1) + N1*N2*(k)], - list[ + N1*(j) + N1*N2*(k+1)]); - simp->iEnt = vol->Num; - Tree_Replace(vol->Simplexes,&simp); - - simp = Create_Simplex(list[1 + N1*(j) + N1*N2*(k)], - list[1 + N1*(j+1) + N1*N2*(k)], - list[ + N1*(j) + N1*N2*(k+1)], - list[1 + N1*(j) + N1*N2*(k+1)]); - simp->iEnt = vol->Num; - Tree_Replace(vol->Simplexes,&simp); - - simp = Create_Simplex(list[ + N1*(j) + N1*N2*(k+1)], - list[1 + N1*(j+1) + N1*N2*(k+1)], - list[1 + N1*(j) + N1*N2*(k+1)], - list[1 + N1*(j+1) + N1*N2*(k)]); - simp->iEnt = vol->Num; - Tree_Replace(vol->Simplexes,&simp); - - nbtet += 2; - } - else{ - Msg(WARNING, "Wrong surface recombining in Transfinite Volume %d", - vol->Num); - return(0); - } - } - } - for(i=1;i<N1-1;i++){ - for(j=0;j<N2-1;j++){ - for(k=0;k<N3-1;k++){ - if(G[0]->Recombine && G[1]->Recombine && G[2]->Recombine && - G[4]->Recombine && G[5]->Recombine){ - hexa = CREATE_HEX; hexa->iEnt = vol->Num; Tree_Replace(vol->Hexahedra,&hexa); - - nbhex ++; - } - else if(G[0]->Recombine && G[1]->Recombine && G[2]->Recombine && - !G[4]->Recombine && !G[5]->Recombine){ - prism = CREATE_PRISM_1; prism->iEnt = vol->Num; Tree_Replace(vol->Prisms,&prism); - prism = CREATE_PRISM_2; prism->iEnt = vol->Num; Tree_Replace(vol->Prisms,&prism); - - nbpri += 2; - } - else if(!G[0]->Recombine && !G[1]->Recombine && !G[2]->Recombine && - !G[4]->Recombine && !G[5]->Recombine){ - simp = CREATE_SIM_1; simp->iEnt = vol->Num; Tree_Replace(vol->Simplexes,&simp); - simp = CREATE_SIM_2; simp->iEnt = vol->Num; Tree_Replace(vol->Simplexes,&simp); - simp = CREATE_SIM_3; simp->iEnt = vol->Num; Tree_Replace(vol->Simplexes,&simp); - simp = CREATE_SIM_4; simp->iEnt = vol->Num; Tree_Replace(vol->Simplexes,&simp); - simp = CREATE_SIM_5; simp->iEnt = vol->Num; Tree_Replace(vol->Simplexes,&simp); - simp = CREATE_SIM_6; simp->iEnt = vol->Num; Tree_Replace(vol->Simplexes,&simp); - - nbtet += 6; - } - else{ - Msg(WARNING, "Wrong surface recombining in Transfinite Volume %d", - vol->Num); - return(0); - } - } - } - } - } - - return(1); - -} - diff --git a/Mesh/Create.cpp b/Mesh/Create.cpp deleted file mode 100644 index c65a204159ea74c6ba713eac253e3b48d567419b..0000000000000000000000000000000000000000 --- a/Mesh/Create.cpp +++ /dev/null @@ -1,683 +0,0 @@ -// $Id: Create.cpp,v 1.23 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "CAD.h" -#include "Mesh.h" -#include "Utils.h" -#include "Context.h" -#include "Create.h" - -extern Mesh *THEM; -extern Context_T CTX; -extern int CurrentSimplexNumber; - -//static double CIRC_GRAN = 2.2; - -int compareNXE (const void *a, const void *b){ - NXE *q, *w; - - q = (NXE *) a; - w = (NXE *) b; - return (compareVertex (&q->v, &w->v)); -} - -int compareFxE (const void *a, const void *b){ - FxE *q, *w; - - q = (FxE *) a; - w = (FxE *) b; - return (compareFace (&q->Sorted, &w->Sorted)); -} - -int compareHexahedron (const void *a, const void *b){ - Hexahedron **q, **w; - - q = (Hexahedron **) a; - w = (Hexahedron **) b; - return ((*q)->Num - (*w)->Num); -} - -int compareSurfaceLoop (const void *a, const void *b){ - SurfaceLoop **q, **w; - - q = (SurfaceLoop **) a; - w = (SurfaceLoop **) b; - return ((*q)->Num - (*w)->Num); -} - -int compareEdgeLoop (const void *a, const void *b){ - EdgeLoop **q, **w; - - q = (EdgeLoop **) a; - w = (EdgeLoop **) b; - return ((*q)->Num - (*w)->Num); -} - -int comparePrism (const void *a, const void *b){ - Prism **q, **w; - - q = (Prism **) a; - w = (Prism **) b; - return ((*q)->Num - (*w)->Num); -} - -int compareQuality (const void *a, const void *b){ - double d; - Simplex **q, **w; - - q = (Simplex **) a; - w = (Simplex **) b; - d = (*q)->Quality - (*w)->Quality; - - if (d > 0) - return (1); - if (d < 0) - return (-1); - return ((*q)->Num - (*w)->Num); -} - -int compareCurve (const void *a, const void *b){ - Curve **q, **w; - - q = (Curve **) a; - w = (Curve **) b; - return ((*q)->Num - (*w)->Num); -} - -int compareAttractor (const void *a, const void *b){ - Attractor **q, **w; - - q = (Attractor **) a; - w = (Attractor **) b; - return ((*q)->Num - (*w)->Num); -} - -int compareSurface (const void *a, const void *b){ - Surface **q, **w; - - q = (Surface **) a; - w = (Surface **) b; - return ((*q)->Num - (*w)->Num); -} - -int compareVolume (const void *a, const void *b){ - Volume **q, **w; - - q = (Volume **) a; - w = (Volume **) b; - return ((*q)->Num - (*w)->Num); -} - -int compareSxF (const void *a, const void *b){ - SxF *q, *w; - - q = (SxF *) a; - w = (SxF *) b; - return compareFace (&q->F, &w->F); -} - -Attractor * Create_Attractor (int Num, double lc1, double lc2, double Radius, - Vertex * v, Curve * c, Surface * s){ - Attractor *pA; - - pA = (Attractor *) Malloc (sizeof (Attractor)); - pA->v = v; - pA->c = c; - pA->s = s; - pA->lc1 = lc1; - pA->lc2 = lc2; - pA->Radius = Radius; - return pA; -} - -void Add_SurfaceLoop (int Num, List_T * intlist, Mesh * M){ - SurfaceLoop *pSL; - int i, j; - pSL = (SurfaceLoop *) Malloc (sizeof (SurfaceLoop)); - pSL->Surfaces = List_Create (List_Nbr (intlist), 1, sizeof (int)); - pSL->Num = Num; - for (i = 0; i < List_Nbr (intlist); i++){ - List_Read (intlist, i, &j); - List_Add (pSL->Surfaces, &j); - } - Tree_Add (M->SurfaceLoops, &pSL); -} - -void Add_PhysicalGroup (int Num, int typ, List_T * intlist, Mesh * M){ - PhysicalGroup *pSL; - int i, j; - pSL = (PhysicalGroup *) Malloc (sizeof (PhysicalGroup)); - pSL->Entities = List_Create (List_Nbr (intlist), 1, sizeof (int)); - pSL->Num = Num; - pSL->Typ = typ; - for (i = 0; i < List_Nbr (intlist); i++){ - List_Read (intlist, i, &j); - List_Add (pSL->Entities, &j); - } - List_Add (M->PhysicalGroups, &pSL); -} - -void Add_EdgeLoop (int Num, List_T * intlist, Mesh * M){ - EdgeLoop *pEL; - int i, j; - pEL = (EdgeLoop *) Malloc (sizeof (EdgeLoop)); - pEL->Curves = List_Create (List_Nbr (intlist), 1, sizeof (int)); - pEL->Num = Num; - for (i = 0; i < List_Nbr (intlist); i++){ - List_Read (intlist, i, &j); - List_Add (pEL->Curves, &j); - } - Tree_Add (M->EdgeLoops, &pEL); -} - -void End_Curve (Curve * c){ - double det, R2, mat[3][3], R, A3, A1, A4; - Vertex *v[5], v1, v3, v4; - double dd[3], qq[3], AX, f1, f2, DP, dir32[3], dir12[3], n[3], m[3], dir42[3]; - double rhs[2], sys[2][2], sol[2]; - int i; - Curve *Curve; - - if (c->Typ == MSH_SEGM_CIRC || - c->Typ == MSH_SEGM_CIRC_INV || - c->Typ == MSH_SEGM_ELLI || - c->Typ == MSH_SEGM_ELLI_INV){ - - Curve = c; - - if (List_Nbr (Curve->Control_Points) == 4) - List_Read (Curve->Control_Points, 2, &v[4]); - else - v[4] = NULL; - - if (Curve->Typ == MSH_SEGM_CIRC_INV || - Curve->Typ == MSH_SEGM_ELLI_INV){ - List_Read (Curve->Control_Points, 0, &v[3]); - List_Read (Curve->Control_Points, 1, &v[2]); - if (!v[4]) - List_Read (Curve->Control_Points, 2, &v[1]); - else - List_Read (Curve->Control_Points, 3, &v[1]); - } - else{ - List_Read (Curve->Control_Points, 0, &v[1]); - List_Read (Curve->Control_Points, 1, &v[2]); - if (!v[4]) - List_Read (Curve->Control_Points, 2, &v[3]); - else - List_Read (Curve->Control_Points, 3, &v[3]); - } - - direction (v[2], v[3], dir32); - direction (v[2], v[1], dir12); - if (v[4]) - direction (v[2], v[4], dir42); - - /* - norme(dir32); - norme(dir12); - norme(dir42); - */ - - //prodve(dir12,dir32,n); - dd[0] = dir12[0]; - dd[1] = dir12[1]; - dd[2] = dir12[2]; - qq[0] = dir32[0]; - qq[1] = dir32[1]; - qq[2] = dir32[2]; - norme (dd); - norme (qq); - prodve (dd, qq, n); - if (fabs (n[0]) < 1.e-5 && fabs (n[1]) < 1.e-5 && fabs (n[2]) < 1.e-5){ - n[0] = Curve->Circle.n[0]; - n[1] = Curve->Circle.n[1]; - n[2] = Curve->Circle.n[2]; - } - - /* BOF BOF BOF */ - prodve (n, dir12, m); - - v1.Pos.X = dir12[0]; - v1.Pos.Y = dir12[1]; - v1.Pos.Z = dir12[2]; - v3.Pos.X = dir32[0]; - v3.Pos.Y = dir32[1]; - v3.Pos.Z = dir32[2]; - if (v[4]){ - v4.Pos.X = dir42[0]; - v4.Pos.Y = dir42[1]; - v4.Pos.Z = dir42[2]; - } - norme (dir12); - norme (n); - norme (m); - - mat[2][0] = Curve->Circle.invmat[0][2] = n[0]; - mat[2][1] = Curve->Circle.invmat[1][2] = n[1]; - mat[2][2] = Curve->Circle.invmat[2][2] = n[2]; - mat[1][0] = Curve->Circle.invmat[0][1] = m[0]; - mat[1][1] = Curve->Circle.invmat[1][1] = m[1]; - mat[1][2] = Curve->Circle.invmat[2][1] = m[2]; - mat[0][0] = Curve->Circle.invmat[0][0] = dir12[0]; - mat[0][1] = Curve->Circle.invmat[1][0] = dir12[1]; - mat[0][2] = Curve->Circle.invmat[2][0] = dir12[2]; - - if(CTX.geom.old_circle){ - if(n[0] == 0.0 && n[1] == 0.0){ - mat[2][0] = Curve->Circle.invmat[0][2] = 0; - mat[2][1] = Curve->Circle.invmat[1][2] = 0; - mat[2][2] = Curve->Circle.invmat[2][2] = 1; - mat[1][0] = Curve->Circle.invmat[0][1] = 0; - mat[1][1] = Curve->Circle.invmat[1][1] = 1; - mat[1][2] = Curve->Circle.invmat[2][1] = 0; - mat[0][0] = Curve->Circle.invmat[0][0] = 1; - mat[0][1] = Curve->Circle.invmat[1][0] = 0; - mat[0][2] = Curve->Circle.invmat[2][0] = 0; - } - } - - Projette (&v1, mat); - Projette (&v3, mat); - if (v[4]) - Projette (&v4, mat); - - R = sqrt (v1.Pos.X * v1.Pos.X + v1.Pos.Y * v1.Pos.Y); - R2 = sqrt (v3.Pos.X * v3.Pos.X + v3.Pos.Y * v3.Pos.Y); - A3 = myatan2 (v3.Pos.Y, v3.Pos.X); - if (v[4]) - A4 = myatan2 (v4.Pos.Y, v4.Pos.X); - else - A4 = 0.0; - A1 = myatan2 (v1.Pos.Y, v1.Pos.X); - - DP = 2 * Pi; - - A3 = angle_02pi (A3); - A1 = angle_02pi (A1); - if (v[4]) - A4 = angle_02pi (A4); - if (A1 >= A3) - A3 += DP; - if (A4 > A1) - A4 -= DP; - - if (v[4]){ - AX = (A1 - A4); - sys[0][0] = cos (AX) * cos (A4); - sys[0][1] = -sin (AX) * sin (A4); - sys[1][0] = cos (AX) * sin (A4); - sys[1][1] = sin (AX) * cos (A4); - rhs[0] = v1.Pos.X; - rhs[1] = v1.Pos.Y; - det = sys[0][0] * sys[1][1] - sys[1][0] * sys[0][1]; - if (det < 1.e-12){ - AX = (A3 - A4); - sys[0][0] = cos (AX) * cos (A4); - sys[0][1] = -sin (AX) * sin (A4); - sys[1][0] = cos (AX) * sin (A4); - sys[1][1] = sin (AX) * cos (A4); - rhs[0] = v3.Pos.X; - rhs[1] = v3.Pos.Y; - det = sys[0][0] * sys[1][1] - sys[1][0] * sys[0][1]; - } - if (det < 1.e-12){ - f1 = DMAX (R, R2); - f2 = DMIN (R, R2); - } - else{ - sys2x2 (sys, rhs, sol); - f1 = sol[0]; - f2 = sol[1]; - } - } - else{ - f1 = f2 = R; - } - - Curve->Circle.t1 = A1; - Curve->Circle.t2 = A3; - Curve->Circle.f1 = f1; - Curve->Circle.f2 = f2; - Curve->Circle.incl = A4; - - for (i = 0; i < 4; i++) - Curve->Circle.v[i] = v[i]; - - /* - if (!c->Circle.done){ - float proj[4][4]; - for (i = 0; i < 4; i++){ - for (int j = 0; j < 4; j++){ - if (i != 3 && j != 3) - proj[i][j] = Curve->Circle.f1 * Curve->Circle.invmat[i][j]; - else - proj[i][j] = 0.0; - } - } - proj[0][3] = Curve->Circle.v[2]->Pos.X; - proj[1][3] = Curve->Circle.v[2]->Pos.Y; - proj[2][3] = Curve->Circle.v[2]->Pos.Z; - proj[3][3] = 1.0; - c->Circle.done = 1; - } - */ - // Un cercle a au moins 16 pts par pi radiants - - // c->beg->lc = DMIN (R*Pi/(fabs(c->Circle.t1-c->Circle.t2)*CIRC_GRAN),c->beg->lc); - // c->end->lc = DMIN (R*Pi/(fabs(c->Circle.t1-c->Circle.t2)*CIRC_GRAN),c->end->lc); - - } - // MEMORY LEAK (JF) - if (c->cp) Free (c->cp); - c->cp = (float *) Malloc (4 * List_Nbr (c->Control_Points) * sizeof (float)); - for (i = 0; i < List_Nbr (c->Control_Points); i++){ - List_Read (c->Control_Points, i, &v[0]); - c->cp[4 * i] = v[0]->Pos.X; - c->cp[4 * i + 1] = v[0]->Pos.Y; - c->cp[4 * i + 2] = v[0]->Pos.Z; - c->cp[4 * i + 3] = v[0]->w; - } - -} - -void End_Surface (Surface * s){ - int i; - Vertex *v; - - if (!s->Control_Points || !List_Nbr(s->Control_Points)) - return; - - s->cp = (float *) Malloc (4 * List_Nbr (s->Control_Points) * sizeof (float)); - for (i = 0; i < List_Nbr (s->Control_Points); i++){ - List_Read (s->Control_Points, i, &v); - s->cp[4 * i] = v->Pos.X; - s->cp[4 * i + 1] = v->Pos.Y; - s->cp[4 * i + 2] = v->Pos.Z; - s->cp[4 * i + 3] = v->w; - } - -} - - - -Curve *Create_Curve (int Num, int Typ, int Order, List_T * Liste, - List_T * Knots, int p1, int p2, double u1, double u2){ - Curve *pC; - Vertex *v; - int i, j, iPnt; - double d; - double matcr[4][4] = { {-0.5, 1.5, -1.5, 0.5}, - {1.0, -2.5, 2.0, -0.5}, - {-0.5, 0.0, 0.5, 0.0}, - {0.0, 1.0, 0.0, 0.0} }; - double matbs[4][4] = { {-1.0, 3, -3, 1}, - {3, -6, 3.0, 0}, - {-3, 0.0, 3, 0.0}, - {1, 4, 1, 0.0} }; - double matbez[4][4] = { {-1.0, 3, -3, 1}, - {3, -6, 3.0, 0}, - {-3, 3.0, 0, 0.0}, - {1, 0, 0, 0.0} }; - - pC = (Curve *) Malloc (sizeof (Curve)); - pC->Dirty = 0; - pC->cp = NULL; - pC->Vertices = NULL; - pC->Extrude = NULL; - pC->Typ = Typ; - pC->Num = Num; - pC->Simplexes = Tree_Create (sizeof (Simplex *), compareSimplex); - pC->TrsfSimplexes = List_Create (1, 10, sizeof (Simplex *)); - pC->Circle.done = 0; - pC->Method = LIBRE; - pC->degre = Order; - pC->Circle.n[0] = 1.0; - pC->Circle.n[1] = 0.0; - pC->Circle.n[2] = 0.0; - if (Typ == MSH_SEGM_SPLN){ - for (i = 0; i < 4; i++) - for (j = 0; j < 4; j++) - pC->mat[i][j] = matcr[i][j]; - - } - else if (Typ == MSH_SEGM_BSPLN){ - for (i = 0; i < 4; i++) - for (j = 0; j < 4; j++) - pC->mat[i][j] = matbs[i][j] / 6.0; - } - else if (Typ == MSH_SEGM_BEZIER){ - for (i = 0; i < 4; i++) - for (j = 0; j < 4; j++) - pC->mat[i][j] = matbez[i][j]; - } - - pC->ubeg = u1; - pC->uend = u2; - - if (Knots){ - pC->k = (float *) malloc (List_Nbr (Knots) * sizeof (float)); - double kmin = .0, kmax = 1.; - List_Read (Knots, 0, &kmin); - List_Read (Knots, List_Nbr (Knots) - 1, &kmax); - pC->ubeg = kmin; - pC->uend = kmax; - for (i = 0; i < List_Nbr (Knots); i++){ - List_Read (Knots, i, &d); - pC->k[i] = (float) d; - } - } - else - pC->k = NULL; - - if (Liste){ - pC->Control_Points = List_Create (List_Nbr (Liste), 1, sizeof (Vertex *)); - for (j = 0; j < List_Nbr (Liste); j++){ - List_Read (Liste, j, &iPnt); - if ((v = FindPoint (iPnt, THEM))) - List_Add (pC->Control_Points, &v); - else - Msg(FATAL, "Unknown control point %d in Curve %d", iPnt, pC->Num); - } - } - else { - pC->Control_Points = NULL; - return pC; - } - - if (p1 < 0){ - List_Read (pC->Control_Points, 0, &pC->beg); - List_Read (pC->Control_Points, List_Nbr (pC->Control_Points) - 1, &pC->end); - } - else { - if ((v = FindPoint (p1, THEM))){ - pC->beg = v; - Msg(INFO, "Curve %d first control point %d ", pC->Num, v->Num); - } - else{ - List_Read (pC->Control_Points, 0, &pC->beg); - Msg(GERROR, "Unknown control point %d in Curve %d", p1, pC->Num); - } - if ((v = FindPoint (p2, THEM))){ - pC->end = v; - Msg(INFO, "Curve %d first control point %d ", pC->Num, v->Num); - } - else{ - List_Read (pC->Control_Points, List_Nbr (pC->Control_Points) - 1, &pC->end); - Msg(GERROR, "Unknown control point %d in Curve %d", p2, pC->Num); - } - } - - End_Curve (pC); - - return pC; -} - -void Free_Curve(void *a, void *b){ - Curve *pC = *(Curve**)a; - if(pC){ - List_Delete(pC->Vertices); - Tree_Action(pC->Simplexes, Free_Simplex); - Tree_Delete(pC->Simplexes); - List_Delete(pC->TrsfSimplexes); - Free(pC->k); - List_Delete(pC->Control_Points); - // MEMORY_LEAK (JF) - Free(pC->cp); - Free(pC); - pC = NULL; - } -} - -Surface * Create_Surface (int Num, int Typ, int Mat){ - Surface *pS; - - pS = (Surface *) Malloc (sizeof (Surface)); - pS->Dirty = 0; - pS->Num = Num; - pS->Typ = Typ; - pS->Mat = Mat; - pS->Method = LIBRE; - pS->Recombine = 0; - pS->RecombineAngle = 30; - pS->Simplexes = Tree_Create (sizeof (Simplex *), compareQuality); - pS->TrsfSimplexes = List_Create (1, 10, sizeof (Simplex *)); - pS->Vertices = Tree_Create (sizeof (Vertex *), compareVertex); - pS->TrsfVertices = List_Create (1, 10, sizeof (Vertex *)); - pS->Contours = List_Create (1, 1, sizeof (List_T *)); - pS->Orientations = NULL; - pS->Support = pS; - pS->Control_Points = List_Create (1, 10, sizeof (Vertex *)); - pS->Generatrices = NULL; - pS->Edges = NULL; - pS->Extrude = NULL; - pS->STL = NULL; - return (pS); -} - -void Free_Surface(void *a, void *b){ - Surface *pS = *(Surface**)a; - if(pS){ - Tree_Action(pS->Simplexes, Free_Simplex); - Tree_Delete(pS->Simplexes); - List_Delete(pS->TrsfSimplexes); - Tree_Delete(pS->Vertices); - List_Delete(pS->TrsfVertices); - List_Delete(pS->Contours); - List_Delete(pS->Control_Points); - List_Delete(pS->Generatrices); - // MEMORY LEAK (JF) - if(pS->Edges) - { - Tree_Action(pS->Edges,Free_Edge); - Tree_Delete(pS->Edges); - } - Free(pS); - pS = NULL; - } -} - -Volume * Create_Volume (int Num, int Typ, int Mat){ - Volume *pV; - - pV = (Volume *) Malloc (sizeof (Volume)); - pV->Dirty = 0; - pV->Num = Num; - pV->Typ = Typ; - pV->Mat = Mat; - pV->Method = LIBRE; - pV->Surfaces = List_Create (1, 2, sizeof (Surface *)); - pV->Simplexes = Tree_Create (sizeof (Simplex *), compareQuality); - pV->Vertices = Tree_Create (sizeof (Vertex *), compareVertex); - pV->Hexahedra = Tree_Create (sizeof (Hexahedron *), compareHexahedron); - pV->Prisms = Tree_Create (sizeof (Prism *), comparePrism); - pV->Simp_Surf = Tree_Create(sizeof(Simplex*),compareSimplex);// for old extrusion mesh generator - pV->Extrude = NULL; - pV->Edges = NULL; - pV->Faces = NULL; - return pV; -} - -void Free_Volume(void *a, void *b){ - - Volume *pV = *(Volume**)a; - if(pV){ - List_Delete(pV->Surfaces); //surfaces freed elsewhere - Tree_Action(pV->Simplexes, Free_Simplex); - Tree_Delete(pV->Simplexes); - Tree_Delete(pV->Simp_Surf); // for old extrusion mesh generator - Tree_Delete(pV->Vertices); //vertices freed elsewhere - Tree_Action(pV->Hexahedra, Free_Hexahedron); - Tree_Delete(pV->Hexahedra); - Tree_Action(pV->Prisms, Free_Prism); - Tree_Delete(pV->Prisms); - // MEMORY LEAK (JF) - if(pV->Edges) - { - Tree_Action(pV->Edges,Free_Edge); - Tree_Delete(pV->Edges); - } - if(pV->Faces) - { - Tree_Delete(pV->Faces); - } - Free(pV); - pV = NULL; - } -} - -Hexahedron * Create_Hexahedron (Vertex * v1, Vertex * v2, Vertex * v3, Vertex * v4, - Vertex * v5, Vertex * v6, Vertex * v7, Vertex * v8){ - Hexahedron *h; - - h = (Hexahedron *) Malloc (sizeof (Hexahedron)); - h->iEnt = -1; - h->Num = ++CurrentSimplexNumber; - h->V[0] = v1; - h->V[1] = v2; - h->V[2] = v3; - h->V[3] = v4; - h->V[4] = v5; - h->V[5] = v6; - h->V[6] = v7; - h->V[7] = v8; - h->VSUP = NULL; - - return (h); -} - -void Free_Hexahedron(void *a, void *b){ - Hexahedron *pH = *(Hexahedron**)a; - if(pH){ - Free(pH); - pH = NULL; - } -} - -Prism * Create_Prism (Vertex * v1, Vertex * v2, Vertex * v3, - Vertex * v4, Vertex * v5, Vertex * v6){ - Prism *p; - - p = (Prism *) Malloc (sizeof (Prism)); - p->iEnt = -1; - p->Num = ++CurrentSimplexNumber; - p->V[0] = v1; - p->V[1] = v2; - p->V[2] = v3; - p->V[3] = v4; - p->V[4] = v5; - p->V[5] = v6; - p->VSUP = NULL; - - return (p); -} - -void Free_Prism(void *a, void *b){ - Prism *pP = *(Prism**)a; - if(pP){ - Free(pP); - pP = NULL; - } -} diff --git a/Mesh/Create.h b/Mesh/Create.h deleted file mode 100644 index 0f7b2471bf56b7392db49f4caf94b3a0de5ed1f4..0000000000000000000000000000000000000000 --- a/Mesh/Create.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef _CREATE_H_ -#define _CREATE_H_ - -int compareNXE (const void *a, const void *b); -int compareFxE (const void *a, const void *b); -int compareHexahedron (const void *a, const void *b); -int compareSurfaceLoop (const void *a, const void *b); -int compareEdgeLoop (const void *a, const void *b); -int comparePrism (const void *a, const void *b); -int compareQuality (const void *a, const void *b); -int compareCurve (const void *a, const void *b); -int compareAttractor (const void *a, const void *b); -int compareSurface (const void *a, const void *b); -int compareVolume (const void *a, const void *b); -int compareSxF (const void *a, const void *b); - -Attractor * Create_Attractor (int Num, double lc1, double lc2, double Radius, - Vertex * v, Curve * c, Surface * s); -void Add_SurfaceLoop (int Num, List_T * intlist, Mesh * M); -void Add_PhysicalGroup (int Num, int typ, List_T * intlist, Mesh * M); -void Add_EdgeLoop (int Num, List_T * intlist, Mesh * M); - -void End_Curve (Curve * c); -void End_Surface (Surface * s); - -Curve *Create_Curve (int Num, int Typ, int Order, List_T * Liste, - List_T * Knots, int p1, int p2, double u1, double u2); -void Free_Curve(void *a, void *b); - -Surface * Create_Surface (int Num, int Typ, int Mat); -void Free_Surface(void *a, void *b); - -Volume * Create_Volume (int Num, int Typ, int Mat); -void Free_Volume(void *a, void *b); - -Hexahedron * Create_Hexahedron (Vertex * v1, Vertex * v2, Vertex * v3, Vertex * v4, - Vertex * v5, Vertex * v6, Vertex * v7, Vertex * v8); -void Free_Hexahedron(void *a, void *b); - -Prism * Create_Prism (Vertex * v1, Vertex * v2, Vertex * v3, - Vertex * v4, Vertex * v5, Vertex * v6); -void Free_Prism(void *a, void *b); - -#endif diff --git a/Mesh/CrossData.cpp b/Mesh/CrossData.cpp deleted file mode 100644 index ed863269e9a5c38ebce722b6c08ace611ae09b82..0000000000000000000000000000000000000000 --- a/Mesh/CrossData.cpp +++ /dev/null @@ -1,57 +0,0 @@ -// $Id: CrossData.cpp,v 1.5 2001-06-06 21:29:58 remacle Exp $ - - -#include "Gmsh.h" -#include "Mesh.h" - -Tree_T *TreeTemp; - -NXE::NXE() -{ - v = NULL; - Liste = NULL; -} - -NXE::~NXE() -{ - // if(Liste)List_Delete(Liste); -} - -void Delete_NXE (void *data, void *dummy) -{ - NXE *pnxe = (NXE*)data; - if(pnxe->Liste)List_Delete(pnxe->Liste); -} - -void AddTable (void *data, void *dummy){ - Simplex *s; - NXE nxe, *pnxe; - int i; - - s = *(Simplex **) data; - - for (i = 0; i < 4; i++){ - if (s->V[i]){ - nxe.v = s->V[i]; - if ((pnxe = (NXE *) Tree_PQuery (TreeTemp, &nxe))){ - List_Add (pnxe->Liste, &s); - } - else{ - nxe.Liste = List_Create (1, 1, sizeof (Simplex *)); - List_Add (nxe.Liste, &s); - Tree_Add (TreeTemp, &nxe); - } - } - } -} - -void create_NXE (Tree_T * TreeAllNod, Tree_T * TreeAllElg, - Tree_T * TreeAllNXE){ - TreeTemp = TreeAllNXE; - Tree_Action (TreeAllElg, AddTable); -} - -void delete_NXE (Tree_T * TreeAllNXE){ - Tree_Action (TreeAllNXE, Delete_NXE); - Tree_Delete (TreeAllNXE); -} diff --git a/Mesh/Edge.cpp b/Mesh/Edge.cpp deleted file mode 100644 index 357b88a5f8aa9b11f2769f01e30e41cca0d992d7..0000000000000000000000000000000000000000 --- a/Mesh/Edge.cpp +++ /dev/null @@ -1,196 +0,0 @@ -// $Id: Edge.cpp,v 1.6 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Mesh.h" -#include "Edge.h" -#include "Tools.h" - -static int edges_quad[4][2] = { {0, 1}, - {1, 2}, - {2, 3}, - {3, 0} }; -static int edges_tetra[6][2] = { {0, 1}, - {1, 2}, - {2, 0}, - {3, 0}, - {3, 2}, - {3, 1} }; -static int edges_non[3] = {2, 0, 1}; - -int compareedge (const void *a, const void *b){ - int i1, i2, j1, j2; - Edge *q, *w; - - q = (Edge *) a; - w = (Edge *) b; - i1 = IMAX (q->V[0]->Num, q->V[1]->Num); - i2 = IMAX (w->V[0]->Num, w->V[1]->Num); - j1 = IMIN (q->V[0]->Num, q->V[1]->Num); - j2 = IMIN (w->V[0]->Num, w->V[1]->Num); - - if (i1 < i2) - return (1); - if (i1 > i2) - return (-1); - if (j1 < j2) - return (1); - if (j1 > j2) - return (-1); - return 0; -} - -int compareedge_angle (const void *a, const void *b){ - Edge *q, *w; - - q = (Edge *) a; - w = (Edge *) b; - if (q->a >= w->a) - return (1); - return (-1); -} - -void EdgesContainer::AddEdges (Simplex * s, bool EdgesInVolume){ - int N, i, j; - Edge E, *pE; - int edges[6][2]; - - if (s->V[3] && EdgesInVolume){ - N = 6; - for (i = 0; i < N; i++) - for (j = 0; j < 2; j++) - edges[i][j] = edges_tetra[i][j]; - } - else if (s->V[3]){ - N = 4; - for (i = 0; i < N; i++) - for (j = 0; j < 2; j++) - edges[i][j] = edges_quad[i][j]; - } - else if (s->V[2]){ - N = 3; - for (i = 0; i < N; i++) - for (j = 0; j < 2; j++) - edges[i][j] = edges_tetra[i][j]; - } - else{ - N = 1; - for (i = 0; i < N; i++) - for (j = 0; j < 2; j++) - edges[i][j] = edges_tetra[i][j]; - } - - for (i = 0; i < N; i++){ - E.V[0] = s->V[edges[i][0]]; - E.V[1] = s->V[edges[i][1]]; - if ((pE = (Edge *) Tree_PQuery (AllEdges, &E))){ - List_Add (pE->Simplexes, &s); - if (N == 3) - pE->O[1] = s->V[edges_non[i]]; - } - else{ - E.Simplexes = List_Create (2, 1, sizeof (Simplex *)); - if (N == 3) - E.O[0] = s->V[edges_non[i]]; - if (N == 3) - E.O[1] = NULL; - List_Add (E.Simplexes, &s); - E.newv = NULL; - Tree_Replace (AllEdges, &E); - } - } -} - -EdgesContainer::EdgesContainer (Tree_T * Simplexes, bool EdgesInVolume){ - AllEdges = Tree_Create (sizeof (Edge), compareedge); - AddTree (Simplexes, EdgesInVolume); -} - -EdgesContainer::EdgesContainer (List_T * Surfaces){ - AllEdges = Tree_Create (sizeof (Edge), compareedge); - Surface *s; - for (int i = 0; i < List_Nbr (Surfaces); i++){ - List_Read (Surfaces, i, &s); - AddTree (s->Simplexes, false); - } -} - - -void EdgesContainer::AddTree (Tree_T * Simplexes, bool EdgesInVolume){ - Simplex *s; - List_T *temp = Tree2List (Simplexes); - for (int i = 0; i < List_Nbr (temp); i++){ - List_Read (temp, i, &s); - AddEdges (s, EdgesInVolume); - } - List_Delete (temp); -} - -void Free_Edge (void *a, void *b) -{ - Edge *e = (Edge*)a; - if(e->Liste)List_Delete(e->Liste); - if(e->Simplexes)List_Delete(e->Simplexes); - if(e->Points)List_Delete(e->Points); -} - -EdgesContainer::~EdgesContainer (){ - Tree_Action (AllEdges,Free_Edge); - Tree_Delete (AllEdges); -} -bool EdgesContainer::Search (Vertex * v1, Vertex * v2){ - Edge E; - E.V[0] = v1; - E.V[1] = v2; - if (!Tree_Search (AllEdges, &E)) - return false; - return true; -} - -void EdgesContainer::SwapEdge (Vertex * V[2]){ - Edge *e, E; - Simplex *s, *s1, *s2; - int i, j; - Vertex *p[2], *q[2]; - - E.V[0] = V[0]; - E.V[1] = V[1]; - e = (Edge *) Tree_PQuery (AllEdges, &E); - E = *e; - if (!e) - return; - List_Read (e->Simplexes, 0, &s1); - List_Read (e->Simplexes, 1, &s2); - - for (i = 0; i < 3; i++){ - if (s1->S[i] == s2){ - s1->ExtractOppositeEdges (i, p, q); - if (!s1->SwapEdge (i)) - return; - Tree_Suppress (AllEdges, &E); - E.V[0] = q[0]; - E.V[1] = q[1]; - Tree_Add (AllEdges, &E); - - E.V[0] = q[0]; - E.V[1] = p[0]; - e = (Edge *) Tree_PQuery (AllEdges, &E); - for (j = 0; j < 2; j++){ - List_Read (e->Simplexes, j, &s); - if (s == s2) - List_Write (e->Simplexes, j, &s1); - } - - E.V[0] = q[1]; - E.V[1] = p[1]; - e = (Edge *) Tree_PQuery (AllEdges, &E); - for (j = 0; j < 2; j++){ - List_Read (e->Simplexes, j, &s); - if (s == s1) - List_Write (e->Simplexes, j, &s2); - } - V[0] = q[0]; - V[1] = q[1]; - } - } -} diff --git a/Mesh/Edge.h b/Mesh/Edge.h deleted file mode 100644 index e6f70741990f2e643a4b9408ab31dd23abded213..0000000000000000000000000000000000000000 --- a/Mesh/Edge.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef _EDGE_H_ -#define _EDGE_H_ - -#include "List.h" -#include "Tree.h" -#include "Vertex.h" -#include "Simplex.h" - -class Edge { -public : - int Num; - Vertex *V[2]; - List_T *Simplexes; - Vertex *newv; - Vertex *O[2]; - double a; - List_T *Liste; - List_T *Points; - Edge() - { - Num = 0; - Liste = NULL; - Simplexes = NULL; - Points = NULL; - } - // MEMORY LEAK (JF) - ~Edge() - { - //if(Liste)List_Delete(Liste); - //if(Simplexes)List_Delete(Simplexes); - //if(Points)List_Delete(Points); - } -}; - -class EdgesContainer -{ - public : - Tree_T * AllEdges; - EdgesContainer (Tree_T *Simplexes, bool i = false); - EdgesContainer (List_T *Surfaces); - ~EdgesContainer(); - void AddTree (Tree_T *Simplexes, bool EdgesInVolume); - void AddEdges(Simplex *s, bool i); - void GetEdges(Simplex *s, bool i, Edge *ed[4],int *ori); - void RemoveEdge(Edge *e); - void SwapEdge (Vertex *v[2]); - bool Search(Vertex *v1, Vertex *v2); -}; - -int compareedge (const void *a, const void *b); -int compareedge_angle (const void *a, const void *b); -void Free_Edge(void *a, void *b); - -#endif diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp deleted file mode 100644 index b3e132fc55516e499d967634205ece5da813b8df..0000000000000000000000000000000000000000 --- a/Mesh/Generator.cpp +++ /dev/null @@ -1,276 +0,0 @@ -// $Id: Generator.cpp,v 1.24 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Mesh.h" -#include "Create.h" -#include "Context.h" -#include "OpenFile.h" - -extern Mesh *THEM; -extern Context_T CTX; -extern int CurrentNodeNumber, CurrentSimplexNumber; - -static List_T *Curves; - -void GetStatistics (double s[50]){ - int i; - THEM->Statistics[0] = Tree_Nbr (THEM->Points); - THEM->Statistics[1] = Tree_Nbr (THEM->Curves); - THEM->Statistics[2] = Tree_Nbr (THEM->Surfaces); - THEM->Statistics[3] = Tree_Nbr (THEM->Volumes); - for (i = 0; i < 50; i++) s[i] = THEM->Statistics[i]; -} - -void ApplyLcFactor_Point(void *a, void *b){ - Vertex *v = *(Vertex**)a; - if(v->lc <= 0.0){ - Msg(GERROR, "Wrong characteristic length (%g <= 0) for Point %d, defaulting to 1.0", - v->lc, v->Num); - v->lc = 1.0 ; - } - v->lc *= CTX.mesh.lc_factor; -} -void ApplyLcFactor_Attractor(void *a, void *b){ - Attractor *v = *(Attractor**)a; - v->lc1 *= CTX.mesh.lc_factor; - v->lc2 *= CTX.mesh.lc_factor; -} -void ApplyLcFactor(Mesh *M){ - Tree_Action(M->Points, ApplyLcFactor_Point); - List_Action(M->Metric->Attractors, ApplyLcFactor_Attractor); -} - -void Maillage_Dimension_0 (Mesh * M){ - for (int i = 0; i < 50; i++) - M->Statistics[i] = 0.0; - for (int i = 0; i < NB_HISTOGRAM; i++) - M->Histogram[0][i] = M->Histogram[1][i] = M->Histogram[2][i] = 0; - // This is the default type of BGM (lc associated with - // points of the geometry). It can be changed to - // - ONFILE by loading a view containing a bgmesh - // - CONSTANT - // - FUNCTION - Create_BgMesh (WITHPOINTS, .2, M); -} -void Maillage_Dimension_1 (Mesh * M){ - double t1, t2; - t1 = Cpu(); - Tree_Action (M->Curves, Maillage_Curve); - t2 = Cpu(); - M->Statistics[12] = t2 - t1; -} - -void Maillage_Dimension_2 (Mesh * M){ - int i; - Curve *c, *neew, C; - double t1, t2, shortest=1.e300; - - t1 = Cpu(); - - /* maillage 1-D inverses */ - - Curves = Tree2List (M->Curves); - for (i = 0; i < List_Nbr (Curves); i++){ - List_Read (Curves, i, &c); - if (c->Num > 0){ - if(c->l < shortest) shortest = c->l ; - neew = &C; - neew->Num = -c->Num; - Tree_Query (M->Curves, &neew); - neew->Vertices = List_Create (List_Nbr (c->Vertices), 1, sizeof (Vertex *)); - List_Invert (c->Vertices, neew->Vertices); - } - } - List_Delete (Curves); - - Msg(DEBUG, "Shortest curve has length %g", shortest); - - Tree_Action (M->Surfaces, Maillage_Surface); - - t2 = Cpu(); - - M->Statistics[13] = t2 - t1; -} - -void Maillage_Dimension_3 (Mesh * M){ - Volume *v; - double t1, t2; - Volume *vol; - - t1 = Cpu(); - - v = Create_Volume (99999, 99999, 99999); - - List_T *list = Tree2List (M->Volumes); - for (int i = 0; i < List_Nbr (list); i++){ - List_Read (list, i, &vol); - if ((!vol->Extrude || !vol->Extrude->mesh.ExtrudeMesh) && - (vol->Method != TRANSFINI)){ - for (int j = 0; j < List_Nbr (vol->Surfaces); j++){ - List_Replace (v->Surfaces, List_Pointer (vol->Surfaces, j), compareSurface); - } - } - } - List_Delete (list); - Tree_Insert (M->Volumes, &v); - - if(CTX.mesh.oldxtrude){//old automatic extrusion algorithm - void Extrude_Mesh_Old(Mesh *M); - Extrude_Mesh_Old(M); - } - else{ - Tree_Action (M->Volumes, Maillage_Volume); - } - - t2 = Cpu(); - - M->Statistics[14] = t2 - t1; -} - - -void Init_Mesh (Mesh * M, int all){ - THEM = M; - - ExitExtrude(); - - if (M->Vertices){ - Tree_Action (M->Vertices, Free_Vertex); - Tree_Delete (M->Vertices); - } - if (M->VertexEdges){ - Tree_Action (M->VertexEdges, Free_Vertex); - Tree_Delete (M->VertexEdges); - } - if (M->Simplexes){ - // Tree_Action (M->Simplexes, Free_Simplex); - //produit des crashes innatendus... - // normal, cette memoire est dupliquee - // dans les volumes. Je crois qu'on a besoin - // des 2, ce truc ne provoque pas de leaks. - Tree_Delete (M->Simplexes); - } - if (M->Points){ - Tree_Action (M->Points, Free_Vertex); - Tree_Delete (M->Points); - } - if (M->Curves){ - Tree_Action (M->Curves, Free_Curve); - Tree_Delete (M->Curves); - } - if (M->SurfaceLoops){ - //Tree_Action (M->SurfaceLoops, Free_SurfaceLoop); - Tree_Delete (M->SurfaceLoops); - } - if (M->EdgeLoops){ - //Tree_Action (M->EdgeLoops, Free_EdgeLoop); - Tree_Delete (M->EdgeLoops); - } - if (M->Surfaces){ - Tree_Action (M->Surfaces, Free_Surface); - Tree_Delete (M->Surfaces); - } - if (M->Volumes){ - Tree_Action (M->Volumes, Free_Volume);//produit des crashes innatendus... - Tree_Delete (M->Volumes); - } - if (M->PhysicalGroups){ - //Tree_Action (M->PhysicalGroups, Free_PhysicalGroup); - List_Delete (M->PhysicalGroups); - } - if (M->Metric){ - delete M->Metric; - } - - M->Vertices = Tree_Create (sizeof (Vertex *), compareVertex); - M->VertexEdges = Tree_Create (sizeof (Vertex *), compareVertex); - M->Simplexes = Tree_Create (sizeof (Simplex *), compareSimplex); - M->Points = Tree_Create (sizeof (Vertex *), compareVertex); - M->Curves = Tree_Create (sizeof (Curve *), compareCurve); - M->SurfaceLoops = Tree_Create (sizeof (SurfaceLoop *), compareSurfaceLoop); - M->EdgeLoops = Tree_Create (sizeof (EdgeLoop *), compareEdgeLoop); - M->Surfaces = Tree_Create (sizeof (Surface *), compareSurface); - M->Volumes = Tree_Create (sizeof (Volume *), compareVolume); - M->PhysicalGroups = List_Create (5, 5, sizeof (PhysicalGroup *)); - M->Metric = new GMSHMetric; - M->BGM.bgm = NULL; - CurrentNodeNumber = 1; - CurrentSimplexNumber = 0; - M->status = 0; -} - -void mai3d (Mesh * M, int Asked){ - double t1, t2; - int oldstatus; - - if(CTX.threads_lock){ - Msg(INFO, "I'm busy! Ask me that later..."); - return; - } - - M->MeshParams.DelaunayAlgorithm = CTX.mesh.algo ; - M->MeshParams.NbSmoothing = CTX.mesh.nb_smoothing ; - M->MeshParams.InteractiveDelaunay = CTX.mesh.interactive ; - - oldstatus = M->status; - - /* initialisations - Maillage 0-D */ - - if ((Asked > oldstatus && Asked >= 0 && oldstatus < 0) || - (Asked < oldstatus)){ - OpenProblem (CTX.filename); - M->status = 0; - } - - CTX.threads_lock = 1 ; - - /* Maillage 1-D */ - - if ((Asked > oldstatus && Asked > 0 && oldstatus < 1) || - (Asked < oldstatus && Asked > 0)){ - Msg(STATUS2, "Mesh 1D..."); - t1 = Cpu(); - - if(M->status > 1) - { - OpenProblem (CTX.filename); - } - - Maillage_Dimension_1 (M); - t2 = Cpu(); - Msg(STATUS2, "Mesh 1D complete (%g s)", t2 - t1); - M->status = 1; - } - - /* Maillage 2-D */ - - if ((Asked > oldstatus && Asked > 1 && oldstatus < 2) || - (Asked < oldstatus && Asked > 1)){ - Msg(STATUS2, "Mesh 2D..."); - t1 = Cpu(); - - if(M->status == 3) - { - OpenProblem (CTX.filename); - Maillage_Dimension_1 (M); - } - - Maillage_Dimension_2 (M); - t2 = Cpu(); - Msg(STATUS2, "Mesh 2D complete (%g s)", t2 - t1); - M->status = 2; - } - - /* Maillage 3-D */ - - if ((Asked > oldstatus && Asked > 2 && oldstatus < 3) || - (Asked < oldstatus && Asked > 2)){ - Msg(STATUS2, "Mesh 3D..."); - t1 = Cpu(); - Maillage_Dimension_3 (M); - t2 = Cpu(); - Msg(STATUS2, "Mesh 3D complete (%g s)", t2 - t1); - M->status = 3; - } - CTX.threads_lock = 0 ; -} diff --git a/Mesh/Interpolation.cpp b/Mesh/Interpolation.cpp deleted file mode 100644 index 30583f26f34e49c1afa59ed95b89f25d0c4dd905..0000000000000000000000000000000000000000 --- a/Mesh/Interpolation.cpp +++ /dev/null @@ -1,557 +0,0 @@ -// $Id: Interpolation.cpp,v 1.11 2001-08-12 20:45:02 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "CAD.h" -#include "Mesh.h" -#include "Utils.h" -#include "Interpolation.h" - -/* ------------------------------------------------------------------------ */ -/* I n t e r p o l a t e C u r v e */ -/* ------------------------------------------------------------------------ */ - -extern Mesh *THEM; - -Vertex InterpolateCurve (Curve * Curve, double u, int derivee){ - - int N, i, j; - Vertex D[2], V; - Vertex *v[5]; - double eps = 1.e-3, T[4], W, teta, t1, t2, t; - double vec[4]; - Vertex temp1, temp2; - - V.u = u; - - if (derivee){ - D[0] = InterpolateCurve (Curve, u, 0); - D[1] = InterpolateCurve (Curve, u + eps, 0); - V.Pos.X = (D[1].Pos.X - D[0].Pos.X) / eps; - V.Pos.Y = (D[1].Pos.Y - D[0].Pos.Y) / eps; - V.Pos.Z = (D[1].Pos.Z - D[0].Pos.Z) / eps; - return V; - } - - switch (Curve->Typ){ - - case MSH_SEGM_LINE: - - N = List_Nbr (Curve->Control_Points); - i = (int) ((double) (N - 1) * u); - while (i >= N - 1) - i--; - while (i < 0) - i++; - t1 = (double) (i) / (double) (N - 1); - t2 = (double) (i + 1) / (double) (N - 1); - t = (u - t1) / (t2 - t1); - List_Read (Curve->Control_Points, i, &v[1]); - List_Read (Curve->Control_Points, i + 1, &v[2]); - - V.lc = t * v[2]->lc + (1. - t) * v[1]->lc; - V.Pos.X = v[1]->Pos.X + t * (v[2]->Pos.X - v[1]->Pos.X); - V.Pos.Y = v[1]->Pos.Y + t * (v[2]->Pos.Y - v[1]->Pos.Y); - V.Pos.Z = v[1]->Pos.Z + t * (v[2]->Pos.Z - v[1]->Pos.Z); - V.w = v[1]->w + t * (v[2]->w - v[1]->w); - return V; - - case MSH_SEGM_PARAMETRIC: - V.Pos.X = evaluate_scalarfunction ("t", u, Curve->functu); - V.Pos.Y = evaluate_scalarfunction ("t", u, Curve->functv); - V.Pos.Z = evaluate_scalarfunction ("t", u, Curve->functw); - V.lc = (u * Curve->beg->lc + (1. - u) * Curve->end->lc); - V.w = (u * Curve->beg->w + (1. - u) * Curve->end->w); - return V; - - case MSH_SEGM_CIRC: - case MSH_SEGM_CIRC_INV: - case MSH_SEGM_ELLI: - case MSH_SEGM_ELLI_INV: - - if (Curve->Typ == MSH_SEGM_CIRC_INV || - Curve->Typ == MSH_SEGM_ELLI_INV){ - V.u = 1. - u; - u = V.u; - } - - teta = Curve->Circle.t1 - (Curve->Circle.t1 - Curve->Circle.t2) * u; - /* pour les ellipses */ - teta -= Curve->Circle.incl; - - V.Pos.X = Curve->Circle.f1 * cos (teta) * cos (Curve->Circle.incl) - - Curve->Circle.f2 * sin (teta) * sin (Curve->Circle.incl); - V.Pos.Y = Curve->Circle.f1 * cos (teta) * sin (Curve->Circle.incl) + - Curve->Circle.f2 * sin (teta) * cos (Curve->Circle.incl); - V.Pos.Z = 0.0; - Projette (&V, Curve->Circle.invmat); - V.Pos.X += Curve->Circle.v[2]->Pos.X; - V.Pos.Y += Curve->Circle.v[2]->Pos.Y; - V.Pos.Z += Curve->Circle.v[2]->Pos.Z; - V.w = (u * Curve->beg->w + (1. - u) * Curve->end->w); - - // ????? - V.lc = (u * Curve->end->lc + (1. - u) * Curve->beg->lc); - return V; - - case MSH_SEGM_BSPLN: - case MSH_SEGM_BEZIER: - V.lc = (u * Curve->beg->lc + (1. - u) * Curve->end->lc); - return InterpolateUBS (Curve, u, derivee); - - case MSH_SEGM_NURBS: - V.lc = (u * Curve->beg->lc + (1. - u) * Curve->end->lc); - return InterpolateNurbs (Curve, u, derivee); - - case MSH_SEGM_SPLN: - V.lc = (u * Curve->beg->lc + (1. - u) * Curve->end->lc); - N = List_Nbr (Curve->Control_Points); - - /* - 0 i P i+1 N-1 - vfirst*---------*---------*----X-----*----------*----------* vlast - 0 t1 absc t2 1 - 0 t 1 - - Splines uniformes -> Le point se trouve entre v[1] et v[2] - -> Calcul de l'abcisse curviligne locale t ( entre 0 et 1 ) - - 0 -> t1 - 1 -> t2 - u -> t - - Splines Lineiques -> Multilines - */ - - i = (int) ((double) (N - 1) * u); - if (i < 0) - i = 0; - if (i >= N - 1) - i = N - 2; - - t1 = (double) (i) / (double) (N - 1); - t2 = (double) (i + 1) / (double) (N - 1); - - t = (u - t1) / (t2 - t1); - - List_Read (Curve->Control_Points, i, &v[1]); - List_Read (Curve->Control_Points, i + 1, &v[2]); - - V.lc = t * v[1]->lc + (1. - t) * v[2]->lc; - - if (!i){ - v[0] = &temp1; - v[0]->Pos.X = 2. * v[1]->Pos.X - v[2]->Pos.X; - v[0]->Pos.Y = 2. * v[1]->Pos.Y - v[2]->Pos.Y; - v[0]->Pos.Z = 2. * v[1]->Pos.Z - v[2]->Pos.Z; - } - else{ - List_Read (Curve->Control_Points, i - 1, &v[0]); - } - - if (i == N - 2){ - v[3] = &temp2; - v[3]->Pos.X = 2. * v[2]->Pos.X - v[1]->Pos.X; - v[3]->Pos.Y = 2. * v[2]->Pos.Y - v[1]->Pos.Y; - v[3]->Pos.Z = 2. * v[2]->Pos.Z - v[1]->Pos.Z; - } - else{ - List_Read (Curve->Control_Points, i + 2, &v[3]); - } - - if (derivee){ - T[3] = 0.; - T[2] = 1.; - T[1] = 2. * t; - T[0] = 3. * t * t; - } - else{ - T[3] = 1.; - T[2] = t; - T[1] = t * t; - T[0] = t * t * t; - } - - V.Pos.X = V.Pos.Y = V.Pos.Z = W = 0.0; - for (i = 0; i < 4; i++){ - vec[i] = 0.0; - } - - /* X */ - for (i = 0; i < 4; i++){ - for (j = 0; j < 4; j++){ - vec[i] += Curve->mat[i][j] * v[j]->Pos.X; - } - } - - for (j = 0; j < 4; j++){ - V.Pos.X += T[j] * vec[j]; - vec[j] = 0.0; - } - - /* Y */ - for (i = 0; i < 4; i++){ - for (j = 0; j < 4; j++){ - vec[i] += Curve->mat[i][j] * v[j]->Pos.Y; - } - } - - for (j = 0; j < 4; j++){ - V.Pos.Y += T[j] * vec[j]; - vec[j] = 0.0; - } - - /* Z */ - for (i = 0; i < 4; i++){ - for (j = 0; j < 4; j++){ - vec[i] += Curve->mat[i][j] * v[j]->Pos.Z; - } - } - for (j = 0; j < 4; j++){ - V.Pos.Z += T[j] * vec[j]; - vec[j] = 0.0; - } - - /* W */ - for (i = 0; i < 4; i++){ - for (j = 0; j < 4; j++){ - vec[i] += Curve->mat[i][j] * v[j]->lc; - } - } - for (j = 0; j < 4; j++){ - W += T[j] * vec[j]; - } - - if (derivee){ - V.Pos.X /= ((t2 - t1)); - V.Pos.Y /= ((t2 - t1)); - V.Pos.Z /= ((t2 - t1)); - } - else{ - // V.Pos.X /= ((W)); - // V.Pos.Y /= ((W)); - // V.Pos.Z /= ((W)); - } - return V; - - default : - Msg(FATAL, "Unknown curve type in interpolation"); - return V; - } - -} - -/* ------------------------------------------------------------------------ */ -/* I n t e r p o l a t e S u r f a c e */ -/* ------------------------------------------------------------------------ */ - -/* Interpolation transfinie sur un quadrangle : - f(u,v) = (1-u)c4(v) + u c2(v) + (1-v)c1(u) + v c3(u) - - [ (1-u)(1-v)s1 + u(1-v)s2 + uv s3 + (1-u)v s4 ] */ - -#define TRAN_QUA(c1,c2,c3,c4,s1,s2,s3,s4,u,v) \ - (1.-u)*c4+u*c2+(1.-v)*c1+v*c3-((1.-u)*(1.-v)*s1+u*(1.-v)*s2+u*v*s3+(1.-u)*v*s4) - -Vertex TransfiniteQua (Vertex c1, Vertex c2, Vertex c3, Vertex c4, - Vertex s1, Vertex s2, Vertex s3, Vertex s4, - double u, double v){ - Vertex V; - - V.lc = TRAN_QUA (c1.lc, c2.lc, c3.lc, c4.lc, - s1.lc, s2.lc, s3.lc, s4.lc, u, v); - V.w = TRAN_QUA (c1.w, c2.w, c3.w, c4.w, - s1.w, s2.w, s3.w, s4.w, u, v); - V.Pos.X = TRAN_QUA (c1.Pos.X, c2.Pos.X, c3.Pos.X, c4.Pos.X, - s1.Pos.X, s2.Pos.X, s3.Pos.X, s4.Pos.X, u, v); - V.Pos.Y = TRAN_QUA (c1.Pos.Y, c2.Pos.Y, c3.Pos.Y, c4.Pos.Y, - s1.Pos.Y, s2.Pos.Y, s3.Pos.Y, s4.Pos.Y, u, v); - V.Pos.Z = TRAN_QUA (c1.Pos.Z, c2.Pos.Z, c3.Pos.Z, c4.Pos.Z, - s1.Pos.Z, s2.Pos.Z, s3.Pos.Z, s4.Pos.Z, u, v); - return (V); -} - -/* Interpolation transfinie sur un triangle : TRAN_QUA avec s1=s4=c4 - f(u,v) = u c2 (v) + (1-v) c1(u) + v c3(u) - u(1-v) s2 - uv s3 */ - -#define TRAN_TRI(c1,c2,c3,s1,s2,s3,u,v) u*c2+(1.-v)*c1+v*c3-(u*(1.-v)*s2+u*v*s3); - -Vertex TransfiniteTri (Vertex c1, Vertex c2, Vertex c3, - Vertex s1, Vertex s2, Vertex s3, - double u, double v){ - Vertex V; - - V.lc = TRAN_TRI (c1.lc, c2.lc, c3.lc, s1.lc, s2.lc, s3.lc, u, v); - V.w = TRAN_TRI (c1.w, c2.w, c3.w, s1.w, s2.w, s3.w, u, v); - V.Pos.X = TRAN_TRI (c1.Pos.X, c2.Pos.X, c3.Pos.X, - s1.Pos.X, s2.Pos.X, s3.Pos.X, u, v); - V.Pos.Y = TRAN_TRI (c1.Pos.Y, c2.Pos.Y, c3.Pos.Y, - s1.Pos.Y, s2.Pos.Y, s3.Pos.Y, u, v); - V.Pos.Z = TRAN_TRI (c1.Pos.Z, c2.Pos.Z, c3.Pos.Z, - s1.Pos.Z, s2.Pos.Z, s3.Pos.Z, u, v); - return (V); -} - -void TransfiniteSph (Vertex S, Vertex center, Vertex * T){ - double r, s, dirx, diry, dirz; - - r = sqrt (DSQR (S.Pos.X - center.Pos.X) + DSQR (S.Pos.Y - center.Pos.Y) - + DSQR (S.Pos.Z - center.Pos.Z)); - - s = sqrt (DSQR (T->Pos.X - center.Pos.X) + DSQR (T->Pos.Y - center.Pos.Y) - + DSQR (T->Pos.Z - center.Pos.Z)); - - dirx = (T->Pos.X - center.Pos.X) / s; - diry = (T->Pos.Y - center.Pos.Y) / s; - dirz = (T->Pos.Z - center.Pos.Z) / s; - - T->Pos.X = center.Pos.X + r * dirx; - T->Pos.Y = center.Pos.Y + r * diry; - T->Pos.Z = center.Pos.Z + r * dirz; -} - -Vertex InterpolateSurface (Surface * s, double u, double v, - int derivee, int u_v){ - Vertex *c1, *c2, T, D[4], V[4], *S[4]; - Curve *C[4]; - int i, issphere; - double eps = 1.e-6; - - if (derivee){ - if (u_v == 1){ - if (u - eps < 0.0){ - D[0] = InterpolateSurface (s, u, v, 0, 0); - D[1] = InterpolateSurface (s, u + eps, v, 0, 0); - } - else{ - D[0] = InterpolateSurface (s, u - eps, v, 0, 0); - D[1] = InterpolateSurface (s, u, v, 0, 0); - } - } - else if (u_v == 2){ - if (v - eps < 0.0){ - D[0] = InterpolateSurface (s, u, v, 0, 0); - D[1] = InterpolateSurface (s, u, v + eps, 0, 0); - } - else{ - D[0] = InterpolateSurface (s, u, v - eps, 0, 0); - D[1] = InterpolateSurface (s, u, v, 0, 0); - } - } - else{ - Msg(WARNING, "Arbitrary InterpolateSurface for derivative not done"); - /* - double epsc = eps * cos (t); - double epss = eps * sin (t); - if (v - epss < 0.0 && u - epsc < 0.0){ - D[0] = InterpolateSurface (s, u, v, 0, 0); - D[1] = InterpolateSurface (s, u + epsc, v + epss, 0, 0); - } - else if (v - epss < 0.0){ - D[0] = InterpolateSurface (s, u - epsc, v, 0, 0); - D[1] = InterpolateSurface (s, u, v + epss, 0, 0); - } - else if (u - epsc < 0.0){ - D[0] = InterpolateSurface (s, u, v - epss, 0, 0); - D[1] = InterpolateSurface (s, u + epsc, v, 0, 0); - } - else{ - D[0] = InterpolateSurface (s, u - epsc, v - epss, 0, 0); - D[1] = InterpolateSurface (s, u, v, 0, 0); - } - */ - } - T.Pos.X = (D[1].Pos.X - D[0].Pos.X) / eps; - T.Pos.Y = (D[1].Pos.Y - D[0].Pos.Y) / eps; - T.Pos.Z = (D[1].Pos.Z - D[0].Pos.Z) / eps; - return T; - } - - Vertex x (u, v, .0); - Vertex *xx = &x, *dum; - - if (s->Extrude && s->Extrude->geo.Mode == EXTRUDED_ENTITY && - s->Typ != MSH_SURF_PLAN){ - Curve *c = FindCurve (s->Extrude->geo.Source, THEM); - Vertex v1 = InterpolateCurve (c, u, 0); - s->Extrude->Extrude (v, v1.Pos.X, v1.Pos.Y, v1.Pos.Z); - return v1; - } - - switch (s->Typ){ - - case MSH_SURF_PLAN: - - Calcule_Z_Plan (&xx, &dum); - //Projette_Inverse(&xx, &dum); - return x; - - case MSH_SURF_REGL: - issphere = 1; - for (i = 0; i < 4; i++){ - List_Read (s->Generatrices, i, &C[i]); - if (C[i]->Typ != MSH_SEGM_CIRC && C[i]->Typ != MSH_SEGM_CIRC_INV){ - issphere = 0; - } - else if (issphere){ - if (!i){ - List_Read (C[i]->Control_Points, 1, &c1); - } - else{ - List_Read (C[i]->Control_Points, 1, &c2); - if (compareVertex (&c1, &c2)) - issphere = 0; - } - } - } - - S[0] = C[0]->beg; - S[1] = C[1]->beg; - S[2] = C[2]->beg; - S[3] = C[3]->beg; - - /* - List_Read(C[0]->Control_Points, 0, &S[0]); - List_Read(C[1]->Control_Points, 0, &S[1]); - List_Read(C[2]->Control_Points, 0, &S[2]); - List_Read(C[3]->Control_Points, 0, &S[3]); - */ - - V[0] = InterpolateCurve (C[0], C[0]->ubeg + (C[0]->uend - C[0]->ubeg) * u, 0); - V[1] = InterpolateCurve (C[1], C[1]->ubeg + (C[1]->uend - C[1]->ubeg) * v, 0); - V[2] = InterpolateCurve (C[2], C[2]->ubeg + (C[2]->uend - C[2]->ubeg) * (1. - u), 0); - V[3] = InterpolateCurve (C[3], C[3]->ubeg + (C[3]->uend - C[3]->ubeg) * (1. - v), 0); - - T = TransfiniteQua (V[0], V[1], V[2], V[3], *S[0], *S[1], *S[2], *S[3], u, v); - if (issphere) TransfiniteSph (*S[0], *c1, &T); - - return (T); - - case MSH_SURF_NURBS: - return InterpolateNurbsSurface (s, u, v); - - case MSH_SURF_TRIC: - issphere = 1; - for (i = 0; i < 3; i++){ - List_Read (s->Generatrices, i, &C[i]); - if (C[i]->Typ != MSH_SEGM_CIRC && C[i]->Typ != MSH_SEGM_CIRC_INV){ - issphere = 0; - } - else if (issphere){ - if (!i){ - List_Read (C[i]->Control_Points, 1, &c1); - } - else{ - List_Read (C[i]->Control_Points, 1, &c2); - if (compareVertex (&c1, &c2)) - issphere = 0; - } - } - } - - List_Read (C[0]->Control_Points, 0, &S[0]); - List_Read (C[1]->Control_Points, 0, &S[1]); - List_Read (C[2]->Control_Points, 0, &S[2]); - - V[0] = InterpolateCurve (C[0], u, 0); - V[1] = InterpolateCurve (C[1], v, 0); - V[2] = InterpolateCurve (C[2], 1. - u, 0); - - T = TransfiniteTri (V[0], V[1], V[2], *S[0], *S[1], *S[2], u, v); - if (issphere) TransfiniteSph (*S[0], *c1, &T); - - return (T); - - default : - Msg(FATAL, "Unknown surface type in interpolation"); - return T; - } - -} - - -/* ------------------------------------------------------------------------ */ -/* I n t e r p o l a t e V o l u m e */ -/* ------------------------------------------------------------------------ */ - -/* Interpolation transfinie sur un hexaedre - prisme (avec s1=s4=a4, s5=s8=a8, a9=a12=f4) - f(u,v) = (1-u) f4(v,w) + u f2(v,w) - + (1-v) f1(u,w) + v f3(u,w) - + (1-w) f5(u,v) + w f6(u,v) - - [ (1-u)(1-v) c9(w) + (1-u)v c12(w) + u(1-v) c10(w) + uv c11(w) ] - - [ (1-v)(1-w) c1(u) + (1-v)w c5(u) + v(1-w) c3(u) + vw c7(u) ] - - [ (1-u)(1-w) c4(v) + (1-w)u c2(v) + w(1-u) c8(v) + uw c6(v) ] - + [ (1-u)(1-v)(1-w) s1 + u(1-v)(1-w) s2 + uv(1-w) s3 + (1-u)v(1-w) s4 + - (1-u)(1-v)w s5 + u(1-v)w s6 + uvw s7 + (1-u)vw s8 ] -*/ - -#define TRAN_HEX(f1,f2,f3,f4,f5,f6,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,s1,s2,s3,s4,s5,s6,s7,s8,u,v,w) (1-u)*f4+u*f2+(1-v)*f1+v*f3+(1-w)*f5+w*f6-((1-u)*(1-v)*c9+(1-u)*v*c12+u*(1-v)*c10+u*v*c11)-((1-v)*(1-w)*c1+(1-v)*w*c5+v*(1-w)*c3+v*w*c7)-((1-u)*(1-w)*c4+(1-w)*u*c2+w*(1-u)*c8+u*w*c6)+(1-u)*(1-v)*(1-w)*s1+u*(1-v)*(1-w)*s2+u*v*(1-w)*s3+(1-u)*v*(1-w)*s4+(1-u)*(1-v)*w*s5+u*(1-v)*w*s6+u*v*w*s7+(1-u)*v*w*s8 - -Vertex TransfiniteHex (Vertex f1, Vertex f2, Vertex f3, Vertex f4, Vertex f5, Vertex f6, - Vertex c1, Vertex c2, Vertex c3, Vertex c4, Vertex c5, Vertex c6, - Vertex c7, Vertex c8, Vertex c9, Vertex c10, Vertex c11, Vertex c12, - Vertex s1, Vertex s2, Vertex s3, Vertex s4, - Vertex s5, Vertex s6, Vertex s7, Vertex s8, - double u, double v, double w){ - Vertex V; - - V.lc = TRAN_HEX (f1.lc, f2.lc, f3.lc, f4.lc, f5.lc, f6.lc, - c1.lc, c2.lc, c3.lc, c4.lc, c5.lc, c6.lc, - c7.lc, c8.lc, c9.lc, c10.lc, c11.lc, c12.lc, - s1.lc, s2.lc, s3.lc, s4.lc, s5.lc, s6.lc, s7.lc, s8.lc, - u, v, w); - - V.Pos.X = TRAN_HEX (f1.Pos.X, f2.Pos.X, f3.Pos.X, f4.Pos.X, f5.Pos.X, f6.Pos.X, - c1.Pos.X, c2.Pos.X, c3.Pos.X, c4.Pos.X, c5.Pos.X, c6.Pos.X, - c7.Pos.X, c8.Pos.X, c9.Pos.X, c10.Pos.X, c11.Pos.X, c12.Pos.X, - s1.Pos.X, s2.Pos.X, s3.Pos.X, s4.Pos.X, - s5.Pos.X, s6.Pos.X, s7.Pos.X, s8.Pos.X, - u, v, w); - - V.Pos.Y = TRAN_HEX (f1.Pos.Y, f2.Pos.Y, f3.Pos.Y, f4.Pos.Y, f5.Pos.Y, f6.Pos.Y, - c1.Pos.Y, c2.Pos.Y, c3.Pos.Y, c4.Pos.Y, c5.Pos.Y, c6.Pos.Y, - c7.Pos.Y, c8.Pos.Y, c9.Pos.Y, c10.Pos.Y, c11.Pos.Y, c12.Pos.Y, - s1.Pos.Y, s2.Pos.Y, s3.Pos.Y, s4.Pos.Y, - s5.Pos.Y, s6.Pos.Y, s7.Pos.Y, s8.Pos.Y, - u, v, w); - - V.Pos.Z = TRAN_HEX (f1.Pos.Z, f2.Pos.Z, f3.Pos.Z, f4.Pos.Z, f5.Pos.Z, f6.Pos.Z, - c1.Pos.Z, c2.Pos.Z, c3.Pos.Z, c4.Pos.Z, c5.Pos.Z, c6.Pos.Z, - c7.Pos.Z, c8.Pos.Z, c9.Pos.Z, c10.Pos.Z, c11.Pos.Z, c12.Pos.Z, - s1.Pos.Z, s2.Pos.Z, s3.Pos.Z, s4.Pos.Z, - s5.Pos.Z, s6.Pos.Z, s7.Pos.Z, s8.Pos.Z, - u, v, w); - - return (V); -} - -void Normal2Surface (Surface * s, double u, double v, double n[3]){ - Vertex du, dv; - double t1[3], t2[3]; - du = InterpolateSurface (s, u, v, 1, 1); - dv = InterpolateSurface (s, u, v, 1, 2); - t1[0] = du.Pos.X; - t1[1] = du.Pos.Y; - t1[2] = du.Pos.Z; - t2[0] = dv.Pos.X; - t2[1] = dv.Pos.Y; - t2[2] = dv.Pos.Z; - prodve (t1, t2, n); - norme (n); -} - -void HessianNormal2Surface (Surface * s, double u, double v, double n[3]){ - Vertex du, dv; - double t1[3], t2[3]; - du = InterpolateSurface (s, u, v, 1, 1); - dv = InterpolateSurface (s, u, v, 1, 2); - t1[0] = du.Pos.X; - t1[1] = du.Pos.Y; - t1[2] = du.Pos.Z; - t2[0] = dv.Pos.X; - t2[1] = dv.Pos.Y; - t2[2] = dv.Pos.Z; - prodve (t1, t2, n); - norme (n); -} diff --git a/Mesh/Interpolation.h b/Mesh/Interpolation.h deleted file mode 100644 index 33ca717052fc6d3f86691f0163ab6c5424c62bec..0000000000000000000000000000000000000000 --- a/Mesh/Interpolation.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef _INTERPOLATION_H_ -#define _INTERPOLATION_H_ - -Vertex InterpolateCurve (Curve * Curve, double u, int derivee); - -Vertex InterpolateSurface (Surface * s, double u, double v, - int derivee, int u_v); - -Vertex TransfiniteQua (Vertex c1, Vertex c2, Vertex c3, Vertex c4, - Vertex s1, Vertex s2, Vertex s3, Vertex s4, - double u, double v); - -Vertex TransfiniteTri (Vertex c1, Vertex c2, Vertex c3, - Vertex s1, Vertex s2, Vertex s3, - double u, double v); - -Vertex TransfiniteHex - (Vertex f1, Vertex f2, Vertex f3, Vertex f4, Vertex f5, Vertex f6, - Vertex c1, Vertex c2, Vertex c3, Vertex c4, Vertex c5, Vertex c6, - Vertex c7, Vertex c8, Vertex c9, Vertex c10, Vertex c11, Vertex c12, - Vertex s1, Vertex s2, Vertex s3, Vertex s4, - Vertex s5, Vertex s6, Vertex s7, Vertex s8, - double u, double v, double w); - -void TransfiniteSph (Vertex S, Vertex center, Vertex * T); - -void Normal2Surface (Surface * s, double u, double v, double n[3]); - -Vertex InterpolateCubicSpline (Vertex * v[4], double t, double mat[4][4], - int derivee, double t1, double t2); -Vertex InterpolateUBS (Curve * Curve, double u, int derivee); - -Vertex InterpolateNurbs (Curve * Curve, double u, int derivee); - -Vertex InterpolateNurbsSurface (Surface * s, double u, double v); - -#endif - - diff --git a/Mesh/Makefile b/Mesh/Makefile deleted file mode 100644 index 7e685396205660cc7c53564a01d134c4cba2a31e..0000000000000000000000000000000000000000 --- a/Mesh/Makefile +++ /dev/null @@ -1,300 +0,0 @@ -# $Id: Makefile,v 1.28 2001-08-11 23:32:22 geuzaine Exp $ -# -# Makefile for "libMesh.a" -# - -.IGNORE: - -CC = c++ -AR = ar ruvs -RM = rm -RANLIB = ranlib - -LIB = ../lib/libMesh.a -INCLUDE = -I../Adapt -I../Common -I../DataStr -I../Geo -I../Mesh\ - -I../Graphics -I../Motif -I../Parser -I../Fltk - -C_FLAGS = -g -Wall -OS_FLAGS = -D_LITTLE_ENDIAN -VERSION_FLAGS = - -RMFLAGS = -f -CFLAGS = $(C_FLAGS) $(OS_FLAGS) $(INCLUDE) - -SRC = 1D_Mesh.cpp \ - 2D_Mesh.cpp \ - 2D_SMesh.cpp \ - 2D_Elliptic.cpp \ - 2D_BGMesh.cpp \ - 2D_Recombine.cpp \ - 2D_InitMesh.cpp \ - 2D_Bowyer.cpp \ - 2D_Bricks.cpp \ - 2D_DivAndConq.cpp \ - 2D_Util.cpp \ - 2D_Links.cpp \ - 2D_Tree.cpp \ - 2D_Cylindrical.cpp \ - 2D_Parametric.cpp \ - 2D_Mesh_Aniso.cpp \ - 3D_Mesh.cpp \ - 3D_SMesh.cpp \ - 3D_BGMesh.cpp \ - 3D_Extrude.cpp \ - 3D_Extrude_Old.cpp \ - 3D_Coherence.cpp \ - 3D_Divide.cpp \ - 3D_Bricks.cpp \ - MeshQuality.cpp \ - Create.cpp \ - Generator.cpp \ - Print_Mesh.cpp \ - Read_Mesh.cpp \ - STL.cpp \ - SMS.cpp \ - SwapEdge.cpp \ - Utils.cpp \ - Metric.cpp \ - Nurbs.cpp \ - Interpolation.cpp \ - SecondOrder.cpp \ - Smoothing.cpp \ - CrossData.cpp \ - Vertex.cpp \ - Edge.cpp \ - Simplex.cpp - -OBJ = $(SRC:.cpp=.o) - -.SUFFIXES: .o .cpp - -$(LIB): $(OBJ) - $(AR) $(LIB) $(OBJ) - $(RANLIB) $(LIB) - -.cpp.o: - $(CC) $(CFLAGS) -c $< - -clean: - $(RM) $(RMFLAGS) *.o - -lint: - $(LINT) $(CFLAGS) $(SRC) - -depend: - (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ - $(CC) -MM $(CFLAGS) ${SRC} \ - ) >Makefile.new - cp Makefile Makefile.bak - cp Makefile.new Makefile - $(RM) $(RMFLAGS) Makefile.new - -# DO NOT DELETE THIS LINE -1D_Mesh.o: 1D_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h ../Geo/Geo.h \ - Mesh.h Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h \ - Utils.h ../Common/Context.h Interpolation.h -2D_Mesh.o: 2D_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h ../Geo/Geo.h \ - ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h Mesh.h Utils.h \ - Create.h 2D_Mesh.h ../Common/Context.h -2D_SMesh.o: 2D_SMesh.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Geo/Geo.h Mesh.h Vertex.h \ - Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h ../Common/Numeric.h \ - Interpolation.h -2D_Elliptic.o: 2D_Elliptic.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h ../Geo/Geo.h \ - ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h Mesh.h -2D_BGMesh.o: 2D_BGMesh.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h Mesh.h \ - Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h 2D_Mesh.h -2D_Recombine.o: 2D_Recombine.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h Mesh.h \ - Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h Utils.h \ - 2D_Mesh.h Create.h ../Common/Context.h -2D_InitMesh.o: 2D_InitMesh.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h Mesh.h \ - Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h 2D_Mesh.h -2D_Bowyer.o: 2D_Bowyer.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h Mesh.h \ - Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h 2D_Mesh.h -2D_Bricks.o: 2D_Bricks.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h Mesh.h \ - Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h 2D_Mesh.h -2D_DivAndConq.o: 2D_DivAndConq.cpp ../Common/Gmsh.h \ - ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \ - ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ - ../Common/Numeric.h Mesh.h Vertex.h Simplex.h Edge.h \ - ../Geo/ExtrudeParams.h Metric.h 2D_Mesh.h -2D_Util.o: 2D_Util.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h Mesh.h \ - Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h 2D_Mesh.h \ - ../Common/Context.h -2D_Links.o: 2D_Links.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h Mesh.h \ - Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h 2D_Mesh.h -2D_Tree.o: 2D_Tree.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h Mesh.h Vertex.h Simplex.h Edge.h \ - ../Geo/ExtrudeParams.h Metric.h 2D_Mesh.h -2D_Cylindrical.o: 2D_Cylindrical.cpp ../Common/Gmsh.h \ - ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \ - ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ - ../Common/Numeric.h Mesh.h Vertex.h Simplex.h Edge.h \ - ../Geo/ExtrudeParams.h Metric.h ../Common/Context.h -2D_Parametric.o: 2D_Parametric.cpp ../Common/Gmsh.h \ - ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \ - ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ - ../Common/Numeric.h ../Geo/Geo.h ../Geo/CAD.h ../Mesh/Mesh.h \ - ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h Interpolation.h Mesh.h \ - 2D_Mesh.h Create.h ../Common/Context.h -2D_Mesh_Aniso.o: 2D_Mesh_Aniso.cpp ../Common/Gmsh.h \ - ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \ - ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ - ../Common/Numeric.h ../Geo/Geo.h ../Geo/CAD.h ../Mesh/Mesh.h \ - ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h Mesh.h Interpolation.h \ - Create.h ../Common/Context.h -3D_Mesh.o: 3D_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h Mesh.h \ - Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h 3D_Mesh.h \ - Create.h ../Common/Context.h -3D_SMesh.o: 3D_SMesh.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h Mesh.h Vertex.h Simplex.h Edge.h \ - ../Geo/ExtrudeParams.h Metric.h Interpolation.h Create.h -3D_BGMesh.o: 3D_BGMesh.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h Mesh.h Vertex.h Simplex.h Edge.h \ - ../Geo/ExtrudeParams.h Metric.h 2D_Mesh.h 3D_Mesh.h ../Adapt/Adapt.h \ - ../Common/Views.h ../Common/ColorTable.h ../Common/Numeric.h \ - ../Common/Context.h -3D_Extrude.o: 3D_Extrude.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h ../Geo/Geo.h \ - ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h Mesh.h \ - ../Common/Context.h Create.h -3D_Extrude_Old.o: 3D_Extrude_Old.cpp ../Common/Gmsh.h \ - ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \ - ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ - ../Common/Numeric.h ../Geo/Geo.h ../Geo/CAD.h ../Mesh/Mesh.h \ - ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h Mesh.h ../Common/Context.h \ - Create.h -3D_Coherence.o: 3D_Coherence.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h ../Geo/Geo.h \ - Mesh.h Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h \ - 3D_Mesh.h Create.h -3D_Divide.o: 3D_Divide.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h Mesh.h \ - Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h -3D_Bricks.o: 3D_Bricks.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h Mesh.h \ - Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h -MeshQuality.o: MeshQuality.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h Mesh.h \ - Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h -Create.o: Create.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h ../Geo/Geo.h \ - ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h Mesh.h Utils.h \ - ../Common/Context.h Create.h -Generator.o: Generator.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h Mesh.h \ - Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h Create.h \ - ../Common/Context.h ../Parser/OpenFile.h -Print_Mesh.o: Print_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h ../Geo/Geo.h \ - ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h Mesh.h \ - Create.h ../Common/Context.h -Read_Mesh.o: Read_Mesh.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Geo/Geo.h Mesh.h Vertex.h \ - Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h 3D_Mesh.h Create.h \ - ../Geo/MinMax.h ../Common/Context.h -STL.o: STL.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h Mesh.h Vertex.h Simplex.h Edge.h \ - ../Geo/ExtrudeParams.h Metric.h STL.h -SMS.o: SMS.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Geo/Geo.h Mesh.h Vertex.h \ - Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h Create.h \ - ../Geo/MinMax.h ../Geo/CAD.h ../Mesh/Mesh.h ../Common/Context.h -SwapEdge.o: SwapEdge.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h Mesh.h \ - Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h \ - SwapPatterns.h -Utils.o: Utils.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h ../Geo/Geo.h \ - ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h Mesh.h \ - Interpolation.h ../Adapt/nrutil.h ../Common/Context.h -Metric.o: Metric.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h ../Geo/Geo.h \ - ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h Mesh.h \ - Matrix.h Interpolation.h -Nurbs.o: Nurbs.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h Mesh.h Vertex.h Simplex.h Edge.h \ - ../Geo/ExtrudeParams.h Metric.h -Interpolation.o: Interpolation.cpp ../Common/Gmsh.h \ - ../Common/Message.h ../DataStr/Malloc.h ../DataStr/List.h \ - ../DataStr/Tree.h ../DataStr/avl.h ../DataStr/Tools.h \ - ../Common/Numeric.h ../Geo/Geo.h ../Geo/CAD.h ../Mesh/Mesh.h \ - ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h Mesh.h Utils.h \ - Interpolation.h -SecondOrder.o: SecondOrder.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Geo/Geo.h Mesh.h Vertex.h \ - Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h Utils.h \ - Interpolation.h ../Common/Numeric.h -Smoothing.o: Smoothing.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h Mesh.h \ - Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h -CrossData.o: CrossData.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h Mesh.h Vertex.h Simplex.h Edge.h \ - ../Geo/ExtrudeParams.h Metric.h -Vertex.o: Vertex.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h Vertex.h ../Common/Context.h -Edge.o: Edge.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h Mesh.h \ - Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h -Simplex.o: Simplex.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h ../Geo/Geo.h \ - Mesh.h Vertex.h Simplex.h Edge.h ../Geo/ExtrudeParams.h Metric.h \ - ../Common/Context.h diff --git a/Mesh/Matrix.h b/Mesh/Matrix.h deleted file mode 100644 index f4d546221883d9391e885af48770493fe4681e7a..0000000000000000000000000000000000000000 --- a/Mesh/Matrix.h +++ /dev/null @@ -1,195 +0,0 @@ -#ifndef _MATRIX_H_ -#define _MATRIX_H_ - -#define _TAILLE_ 2 - -template <class T> class Matrix2x2{ - T mat[_TAILLE_][_TAILLE_]; - T zero; - -public: - - Matrix2x2 (const T& init){ - zero = init; - for(int i=0;i<_TAILLE_;i++) - for(int j=0;j<_TAILLE_;j++) - mat[i][j] = zero; - } - - Matrix2x2 (const T& init, T z[3][3]){ - zero = init; - for(int i=0;i<_TAILLE_;i++) - for(int j=0;j<_TAILLE_;j++) - mat[i][j] = z[i][j]; - } - - Matrix2x2<T>& operator = (const Matrix2x2<T> &autre){ - for(int i=0;i<_TAILLE_;i++) - for(int j=0;j<_TAILLE_;j++) - mat[i][j] = autre.mat[i][j]; - return *this; - } - - Matrix2x2<T> operator + (const Matrix2x2<T> &autre){ - Matrix2x2<T> m(0.); - for(int i=0;i<_TAILLE_;i++) - for(int j=0;j<_TAILLE_;j++) - m.mat[i][j] = mat[i][j] + autre.mat[i][j]; - return m; - } - - Matrix2x2<T> operator - (const Matrix2x2<T> &autre){ - Matrix2x2<T> m(0.); - for(int i=0;i<_TAILLE_;i++) - for(int j=0;j<_TAILLE_;j++) - m.mat[i][j] = mat[i][j] - autre.mat[i][j]; - return m; - } - - T* operator [] (int i){ - return mat[i]; - } - - Matrix2x2 Identity(T id){ - for(int i=0;i<_TAILLE_;i++) - mat[i][i] = id; - } - - Matrix2x2 copy(T m[3][3]){ - for(int i=0;i<_TAILLE_;i++) - for(int j=0;j<_TAILLE_;j++) - m[i][j] = mat[i][j]; - } - - Matrix2x2 operator * (const Matrix2x2<T> &autre){ - Matrix2x2 m(0.); - for(int i=0;i<_TAILLE_;i++) - for(int j=0;j<_TAILLE_;j++){ - m.mat[i][j] = zero; - for(int k=0;k<_TAILLE_;k++) - m.mat[i][j] += mat[i][k] * autre.mat[k][j]; - } - return m; - } - - bool invert (){ - T det = mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0]; - if(det == zero)return false; - mat[0][0] = mat[1][1] / det; - mat[1][1] = mat[0][0] / det; - mat[1][0] = -mat[1][0] / det; - mat[0][1] = -mat[0][1] / det; - } - - void transpose(){ - T temp; - for(int i=0;i<_TAILLE_;i++) - for(int j=0;j<_TAILLE_;j++){ - if(i!=j){ - temp = mat[i][j]; - mat[i][j] = mat[j][i]; - mat[j][i] = temp; - } - } - } -}; - -#undef _TAILLE_ -#define _TAILLE_ 3 - -template <class T> class Matrix3x3{ - T mat[_TAILLE_][_TAILLE_]; - T zero; - -public: - - Matrix3x3 (const T& init){ - zero = init; - for(int i=0;i<_TAILLE_;i++) - for(int j=0;j<_TAILLE_;j++) - mat[i][j] = zero; - } - - Matrix3x3 (const T& init, T z[3][3]){ - zero = init; - for(int i=0;i<_TAILLE_;i++) - for(int j=0;j<_TAILLE_;j++) - mat[i][j] = z[i][j]; - } - - Matrix3x3<T>& operator = (const Matrix3x3<T> &autre){ - for(int i=0;i<_TAILLE_;i++) - for(int j=0;j<_TAILLE_;j++) - mat[i][j] = autre.mat[i][j]; - return *this; - } - - Matrix3x3<T> operator + (const Matrix3x3<T> &autre){ - Matrix3x3<T> m(0.); - for(int i=0;i<_TAILLE_;i++) - for(int j=0;j<_TAILLE_;j++) - m.mat[i][j] = mat[i][j] + autre.mat[i][j]; - return m; - } - - Matrix3x3<T> operator - (const Matrix3x3<T> &autre){ - Matrix2x2<T> m(0.); - for(int i=0;i<_TAILLE_;i++) - for(int j=0;j<_TAILLE_;j++) - m.mat[i][j] = mat[i][j] - autre.mat[i][j]; - return m; - } - - T* operator [] (int i){ - return mat[i]; - } - - void Identity(T id){ - for(int i=0;i<_TAILLE_;i++) - mat[i][i] = id; - } - - void copy(T m[3][3]){ - for(int i=0;i<_TAILLE_;i++) - for(int j=0;j<_TAILLE_;j++) - m[i][j] = mat[i][j]; - } - - Matrix3x3 operator * (const Matrix3x3<T> &autre){ - Matrix3x3 m(0.); - for(int i=0;i<_TAILLE_;i++) - for(int j=0;j<_TAILLE_;j++){ - m.mat[i][j] = zero; - for(int k=0;k<_TAILLE_;k++) - m.mat[i][j] += mat[i][k] * autre.mat[k][j]; - } - return m; - } - - /* - bool invert (){ - T det = mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0]; - if(det == zero)return false; - mat[0][0] = mat[1][1] / det; - mat[1][1] = mat[0][0] / det; - mat[1][0] = -mat[1][0] / det; - mat[0][1] = -mat[0][1] / det; - } - */ - - void transpose(){ - T temp; - for(int i=0;i<_TAILLE_;i++) - for(int j=0;j<i;j++){ - if(i!=j){ - temp = mat[i][j]; - mat[i][j] = mat[j][i]; - mat[j][i] = temp; - } - } - } -}; - -#undef _TAILLE_ - -#endif diff --git a/Mesh/Mesh.h b/Mesh/Mesh.h deleted file mode 100644 index 064c0af77882095c1a34e8b4212e60c8893b07c2..0000000000000000000000000000000000000000 --- a/Mesh/Mesh.h +++ /dev/null @@ -1,457 +0,0 @@ -#ifndef _MESH_H_ -#define _MESH_H_ - -#include "Vertex.h" -#include "Simplex.h" -#include "Edge.h" -#include "ExtrudeParams.h" - -#define FORMAT_MSH 1 -#define FORMAT_UNV 2 -#define FORMAT_GREF 3 -#define FORMAT_XPM 4 -#define FORMAT_EPS 5 -#define FORMAT_BMP 6 -#define FORMAT_GIF 7 -#define FORMAT_GEO 8 -#define FORMAT_JPEG 9 -#define FORMAT_AUTO 10 -#define FORMAT_PPM 11 -#define FORMAT_YUV 12 -#define FORMAT_SMS 14 - -#define CONV_VALUE 0.8 - -#define NOTTOLINK 1 -#define TOLINK 2 - -#define BOF 1 -#define A_TOUT_PRIX 2 - -#define CENTER_CIRCCIRC 1 -#define VORONOI_INSERT 2 -#define BARYCENTER 3 -#define SQUARE_TRI 4 - -#define EXTERN 1 -#define INTERN 2 -#define ACTIF 3 -#define WAITING 4 -#define ACCEPTED 5 -#define NONACCEPTED 6 - -#define CONSTANT 1 -#define ONFILE 2 -#define WITHPOINTS 3 -#define FUNCTION 4 - -#define TRANSFINI 1 -#define LIBRE 2 -#define ELLIPTIC 3 - -#define BOULE 1 -#define BOITE 2 - -#define NB_HISTOGRAM 100 - -typedef struct _POINT PointRecord, *PointPeek; -typedef struct _CONTOUR ContourRecord, *ContourPeek; -typedef struct _DOC DocRecord, *DocPeek; -typedef struct _CDLIST DListRecord, *DListPeek; -typedef struct _MAILLAGE maillage, *maipeek; -typedef struct _DELAUNAY Delaunay, *delpeek; -typedef int PointNumero; -class STL_Data; - -struct _DOC{ - PointRecord *points; /* points a trianguler */ - List_T *hotpoints; /* hotpoints */ - int numPoints; /* nombre de points */ - int numTriangles; /* nombre de triangles */ - Delaunay *delaunay; /* resultats 2D */ -}; - -typedef struct{ - double v; - double h; -}MPoint; - -struct _POINT{ - MPoint where; - DListPeek adjacent; - int initial, permu, info, info2, numcontour; - double quality, qualityy, angle; -}; - -typedef struct{ - int Num; - double t, lc, p; -}IntPoint; - -struct _CDLIST{ - PointNumero point_num; /* numero du point */ - DListPeek next, prev; -}; - -typedef struct{ - PointNumero search; - PointNumero already; -}demi_triangle; - -typedef struct{ - demi_triangle *info; - PointNumero *t; - int t_length, info_length; -}Striangle; - -typedef struct { - PointNumero from; - PointNumero to; - int num; - int seg; -}edge; - -typedef struct{ - PointNumero begin; - PointNumero end; -}DT; - -typedef struct{ - PointNumero from; - PointNumero to; -}Segment; - -typedef struct{ - PointNumero a, b, c; - double xc, yc; - double quality_value; - int position, info, info2; -}Triangle; - -typedef struct { - Delaunay *voisin1, *voisin2, *voisin3; -}Voronoi; - -struct _DELAUNAY{ - Triangle t; - Voronoi v; -}; - -struct _CONTOUR{ - PointRecord *oriented_points; - MPoint *perturbations; - int numpoints, numerocontour, numerozon, info; -}; - -struct _MAILLAGE{ - PointRecord *points; - delpeek *listdel; - edge *listedges; - int numedges, numtriangles, numpoints; - int IncrAllocPoints, IncrAllocTri, IncrAllocEdges; - int NumAllocPoints, NumAllocTri, NumAllocEdges; - int zone; -}; - -class NXE{ - public : - Vertex *v; - List_T *Liste; - ~NXE(); - NXE(); -}; - -typedef struct{ - int Num; /* Numero */ - int iEnt; /* Entite geometrique */ - Vertex *V[8]; /* 8 noeuds */ - Vertex **VSUP; /* noeuds supplem pour les elts de degre eleves */ -}Hexahedron; - -typedef struct{ - int Num; /* Numero */ - int iEnt; /* Entite geometrique */ - Vertex *V[6]; /* 6 noeuds */ - Vertex **VSUP; /* noeuds supplem pour les elts de degre eleves */ -}Prism; - -typedef struct{ - int N; - List_T *pT; -}Brick; - -typedef struct{ - int init; - List_T *Bricks; - Coord min, max; - int Nx, Ny, Nz; -}Grid_T; - -typedef struct{ - double zaxis[3]; - double radius1; - double radius2; - double xaxis[3]; - double center[3]; -}CylParam; - - -struct _Surf{ - int Num; - int Typ; - int Mat; - int Method; - int Recombine; - double RecombineAngle; - int ipar[4]; - int Nu, Nv; - List_T *Generatrices; /* Surface reglee */ - List_T *Control_Points; /* Patchs bicubiques */ - double plan[3][3]; - double invplan[3][3]; - double a, b, c, d; - List_T *Orientations; - List_T *Contours; - Tree_T *Simplexes; - List_T *TrsfSimplexes; - Tree_T *Vertices; - List_T *TrsfVertices; - Tree_T *Edges; - int OrderU, OrderV; - float *ku, *kv, *cp; - struct _Surf *Support; - CylParam Cyl; - Grid_T Grid; /* Grille de recherches rapides */ - ExtrudeParams *Extrude; - STL_Data *STL; - int Dirty; //flag to prevent any meshing -}; -typedef struct _Surf Surface; - -typedef struct{ - int Num; - List_T *Curves; -}EdgeLoop; - -typedef struct{ - int Num; - List_T *Surfaces; -}SurfaceLoop; - -typedef struct{ - int Num; - int Typ; - List_T *Entities; -}PhysicalGroup; - -typedef struct{ - Face F; - Face Sorted; - Simplex *S[2]; - int N; -}FxE; - -typedef struct { - int Num; - int Mat; - int Typ; - int Method; - int ipar[8]; - ExtrudeParams *Extrude; - List_T *Surfaces; - Tree_T *Vertices; - Tree_T *Edges; - Tree_T *Faces; - Tree_T *Simplexes; - Tree_T *Simp_Surf;//for old extrusion mesh generator - Tree_T *Hexahedra; - Tree_T *Prisms; - int Dirty; //flag to prevent any meshing -}Volume; - -typedef struct { - Edge e1, e2; - int iFac; -}exf_T; - -/* Structure intersection arete - Simplexe */ - -typedef struct{ - int NbIntersect; /* nombre total d'intersections */ - Edge *e; /* arete */ - Simplex *s; /* simplexe */ - Face *f; /* face */ - int NbVertex; /* nombre de noeuds du simplexe que coupe l'arete */ - Vertex *V[12]; /* noeuds du simplexe que coupe l'arete */ - int iV[12]; /* noeuds du simplexe que coupe l'arete */ - int NbEdge; /* nombre d'intersections arete-arete */ - int E[12]; /* aretes */ - Vertex *VE[12]; /* noeuds d'intersection */ - int NbFace; /* nombre d'intersections face-arete */ - Face *F[12]; /* faces */ - int iF[12]; /* faces */ - Vertex *VF[12]; /* position des points d'intersections face-arete */ -}Intersection; - -typedef struct _Mesh Mesh; - -typedef struct{ - int Typ; - double lc; - struct _Mesh *m; - List_T *bgm; -}LcField; - -typedef struct{ - int done; - double t1, t2, f1, f2, incl; - Vertex *v[4]; - double invmat[3][3]; - double n[3]; -}CircParam; - -typedef struct{ - int Num; - int Typ; - int Method; - int ipar[4]; - double dpar[4]; - double l; - double mat[4][4]; - Vertex *beg, *end; - double ubeg, uend; - List_T *Control_Points; - List_T *Vertices; - Tree_T *Simplexes; - List_T *TrsfSimplexes; - ExtrudeParams *Extrude; - float *k, *cp; - int degre; - CircParam Circle; - char functu[256], functv[256], functw[256]; - int Dirty; //flag to prevent any meshing -}Curve; - -typedef struct{ - int Num; - int Typ; - Vertex *v; - Curve *c; - Surface *s; - double lc1, lc2; - double Radius; -}Attractor; - -#include "Metric.h" - -#define QUALITY_EDGES_BASED 1 -#define QUALITY_SIMPLEX_BASED 2 -#define INSERTION_CENTROID 1 -#define INSERTION_EDGE 2 -#define DELAUNAY_OLDALGO 1 -#define DELAUNAY_NEWALGO 2 -#define DELAUNAY_KERISO 1 -#define DELAUNAY_KERANISO 2 - -class MeshParameters{ - public: - int NbSmoothing; - int DelaunayAlgorithm; - int DelaunayInsertionMethod; - int DelaunayQuality; - int DelaunayKernel; - bool InteractiveDelaunay; - MeshParameters (); -}; - -struct _Mesh{ - char name[256]; /* Nom du probleme */ - int status; /* Etat actuel du maillage */ - Tree_T *Points; /* Points de controle */ - Tree_T *Vertices; /* Noeuds du maillage */ - Tree_T *Simplexes; /* Simplexes */ - Tree_T *Curves; /* Courbes */ - Tree_T *Surfaces; /* Surfaces */ - Tree_T *Volumes; /* Volumes */ - Tree_T *SurfaceLoops; /* Surface Loops */ - Tree_T *EdgeLoops; /* Edge Loops */ - List_T *PhysicalGroups; /* Physical Groups */ - Tree_T *VertexEdges; /* 2nd order Vertices on edges */ - Grid_T Grid; /* Grille de recherches rapides */ - LcField BGM; /* Background mesh */ - double Statistics[50]; /* Mesh statistics */ - int Histogram[3][NB_HISTOGRAM]; /* Quality histograms */ - GMSHMetric *Metric; /* Metric */ - MeshParameters MeshParams; -}; - -typedef struct { - Simplex *S; - Face F; - int NumFaceSimpl; -}SxF; - -struct Map{ - int Num; - List_T *List; -}; - - -/* public functions */ - -void mai3d (Mesh * M, int Asked); - -void Init_Mesh (Mesh * M, int all); -void Create_BgMesh (int i, double d, Mesh * m); -void Print_Geo (Mesh * M, char *c); -void Print_Mesh (Mesh * M, char *c, int Type); -void Read_Mesh (Mesh * M, FILE * File_GEO, int Type); -void GetStatistics (double s[50]); - -void Maillage_Dimension_0 (Mesh * M); -void Maillage_Dimension_1 (Mesh * M); -void Maillage_Dimension_2 (Mesh * M); -void Maillage_Dimension_3 (Mesh * M); - -void Maillage_Curve (void *data, void *dummy); -void Maillage_Surface (void *data, void *dum); -void Maillage_Volume (void *data, void *dum); - -int Extrude_Mesh (Curve * c); -int Extrude_Mesh (Surface * s); -int Extrude_Mesh (Volume * v); -void ExitExtrude(); - -int MeshTransfiniteSurface (Surface *sur); -int MeshTransfiniteVolume (Volume *vol); -int MeshCylindricalSurface (Surface * s); -int MeshParametricSurface (Surface * s); -int MeshEllipticSurface (Surface * sur); - -int AlgorithmeMaillage2DAnisotropeModeJF (Surface * s); -void Maillage_Automatique_VieuxCode (Surface * pS, Mesh * m, int ori); - -int Calcule_Contours (Surface * s); -void Link_Simplexes (List_T * Sim, Tree_T * Tim); -void Calcule_Z (void *data, void *dum); -void Calcule_Z_Plan (void *data, void *dum); -void Projette_Plan_Moyen (void *a, void *b); -void Projette_Inverse (void *a, void *b); -void Freeze_Vertex (void *a, void *b); -void deFreeze_Vertex (void *a, void *b); -void crEdges (Tree_T * TreeElem, Tree_T * treeedges); - -double Lc_XYZ (double X, double Y, double Z, Mesh * m); -void Degre2 (Tree_T * AllNodes, Tree_T * TreeNodes, Tree_T * TreeElm, - Curve * c, Surface * s); -void ActionLiss (void *data, void *dummy); -void ActionLissSurf (void *data, void *dummy); -int Recombine (Tree_T *TreeAllVert, Tree_T *TreeAllElg, double a); -void ApplyLcFactor(Mesh *M); - -void Gamma_Maillage (Mesh * m, double *gamma, double *gammamax, double *gammamin); -void Eta_Maillage (Mesh * m, double *gamma, double *gammamax, double *gammamin); -void R_Maillage (Mesh * m, double *gamma, double *gammamax, double *gammamin); -void Print_Histogram(int *h); - -#endif diff --git a/Mesh/MeshQuality.cpp b/Mesh/MeshQuality.cpp deleted file mode 100644 index 570bf05a963a6a09f5c343b67b9dc2c917de40a2..0000000000000000000000000000000000000000 --- a/Mesh/MeshQuality.cpp +++ /dev/null @@ -1,122 +0,0 @@ -// $Id: MeshQuality.cpp,v 1.5 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Mesh.h" - -/* Fonctions calculant differents parametres donnant la qualite - d'un maillage (surtout 3-D) */ - -/* Fonction calculant le facteur gamma pour un element tetraedrique : - 12 rho(in) - gamma = -------- --------- - sqrt(6) max(lij) - */ - -static double GAMMAMAX, GAMMAMIN, GAMMA; -static int NbCalcGamma, *Histogram; - -void CalculateGamma (void *a, void *b){ - Simplex *s = *(Simplex **) a; - double gamma = s->GammaShapeMeasure (); - NbCalcGamma++; - GAMMAMAX = DMAX (GAMMAMAX, gamma); - GAMMA += gamma; - GAMMAMIN = DMIN (GAMMAMIN, gamma); - for(int i=0; i<NB_HISTOGRAM; i++) - if(gamma > i/(double)NB_HISTOGRAM && gamma < (i+1)/(double)NB_HISTOGRAM) - Histogram[i]++; -} - -void CalculateEta (void *a, void *b){ - Simplex *s = *(Simplex **) a; - double gamma = s->EtaShapeMeasure (); - NbCalcGamma++; - GAMMAMAX = DMAX (GAMMAMAX, gamma); - GAMMA += gamma; - GAMMAMIN = DMIN (GAMMAMIN, gamma); - for(int i=0; i<NB_HISTOGRAM; i++) - if(gamma > i/(double)NB_HISTOGRAM && gamma < (i+1)/(double)NB_HISTOGRAM) - Histogram[i]++; -} - -void CalculateR (void *a, void *b){ - Simplex *s = *(Simplex **) a; - double gamma = s->RhoShapeMeasure (); - NbCalcGamma++; - GAMMAMAX = DMAX (GAMMAMAX, gamma); - GAMMA += gamma; - GAMMAMIN = DMIN (GAMMAMIN, gamma); - for(int i=0; i<NB_HISTOGRAM; i++) - if(gamma > i/(double)NB_HISTOGRAM && gamma < (i+1)/(double)NB_HISTOGRAM) - Histogram[i]++; -} - - - -static void g(void *a, void *b){ - Volume *v = *(Volume**)a; - Tree_Action (v->Simplexes, CalculateGamma); - Msg(DEBUG, "Gamma computed in volume %d (%d values)", v->Num, NbCalcGamma); -} - -void Gamma_Maillage (Mesh * m, double *gamma, double *gammamax, double *gammamin){ - GAMMA = 0.0; - GAMMAMAX = 0.0; - GAMMAMIN = 1.0; - NbCalcGamma = 0; - Histogram = m->Histogram[0]; - for(int i=0; i<NB_HISTOGRAM; i++) Histogram[i] = 0; - Tree_Action (m->Volumes, g); - if(!NbCalcGamma) NbCalcGamma = 1; - *gamma = GAMMA / (double) NbCalcGamma; - *gammamax = GAMMAMAX; - *gammamin = GAMMAMIN; -} - -static void e(void *a, void *b){ - Volume *v = *(Volume**)a; - Tree_Action (v->Simplexes, CalculateEta); - Msg(DEBUG, "Eta computed in volume %d (%d values)", v->Num, NbCalcGamma); -} - -void Eta_Maillage (Mesh * m, double *gamma, double *gammamax, double *gammamin){ - GAMMA = 0.0; - GAMMAMAX = 0.0; - GAMMAMIN = 1.0; - NbCalcGamma = 0; - Histogram = m->Histogram[1]; - for(int i=0; i<NB_HISTOGRAM; i++) Histogram[i] = 0; - Tree_Action (m->Volumes, e); - if(!NbCalcGamma) NbCalcGamma = 1; - *gamma = GAMMA / (double) NbCalcGamma; - *gammamax = GAMMAMAX; - *gammamin = GAMMAMIN; -} - -static void r(void *a, void *b){ - Volume *v = *(Volume**)a; - Tree_Action (v->Simplexes, CalculateR); - Msg(DEBUG, "Rho computed in volume %d (%d values)", v->Num, NbCalcGamma); -} - -void R_Maillage (Mesh * m, double *gamma, double *gammamax, double *gammamin){ - GAMMA = 0.0; - GAMMAMAX = 0.0; - GAMMAMIN = 1.0; - NbCalcGamma = 0; - Histogram = m->Histogram[2]; - for(int i=0; i<NB_HISTOGRAM; i++) Histogram[i] = 0; - Tree_Action (m->Volumes, r); - if(!NbCalcGamma) NbCalcGamma = 1; - *gamma = GAMMA / (double) NbCalcGamma; - *gammamax = GAMMAMAX; - *gammamin = GAMMAMIN; -} - - -void Print_Histogram(int *h){ - for(int i=0;i<NB_HISTOGRAM;i++) - Msg(DIRECT, "%g %d", (i+1)/(double)NB_HISTOGRAM, h[i]); -} - diff --git a/Mesh/Metric.cpp b/Mesh/Metric.cpp deleted file mode 100644 index 2b179b759c7d0ae522f1e67de3c1755d2b493771..0000000000000000000000000000000000000000 --- a/Mesh/Metric.cpp +++ /dev/null @@ -1,350 +0,0 @@ -// $Id: Metric.cpp,v 1.6 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "CAD.h" -#include "Mesh.h" -#include "Matrix.h" -#include "Interpolation.h" - -GMSHMetric::GMSHMetric (){ - Identity (); - Attractors = List_Create (2, 2, sizeof (Attractor *)); - apply_costest = true; - apply_disttest = true; - min_cos = 0.0095; - max_dist = 1.e-3; - limite_aniso = 3000.; - quality_measure = QUALITY_SIMPLEX_BASED; -} - -double GMSHMetric:: Local_Metric_Of_Attractors (double X, double Y, double Z, - double metric[3][3]){ - int i; - Attractor *a, *amin; - double u, x1, x2, d, dmin; - Vertex v1 (X, Y, Z), v2, der, metr; - - dmin = 1.e25; - amin = NULL; - - for (i = 0; i < List_Nbr (Attractors); i++){ - List_Read (Attractors, i, &a); - if (a->v){ - d = sqrt ((X - a->v->Pos.X) * (X - a->v->Pos.X) + - (Y - a->v->Pos.Y) * (Y - a->v->Pos.Y) + - (Z - a->v->Pos.Z) * (Z - a->v->Pos.Z)); - } - if (a->c){ - ProjectPointOnCurve (a->c, &v1, &v2, &der); - d = sqrt ((X - v2.Pos.X) * (X - v2.Pos.X) + - (Y - v2.Pos.Y) * (Y - v2.Pos.Y) + - (Z - v2.Pos.Z) * (Z - v2.Pos.Z)); - - } - /* - if(a->s){ - ProjectPointOnSurface (a->c, &v1, &v2,&der); - d = sqrt((X-v2.Pos.X)*(X-v2.Pos.X)+ - (Y-v2.Pos.Y)*(Y-v2.Pos.Y)+ - (Z-v2.Pos.Z)*(Z-v2.Pos.Z)); - - } - */ - if (d < dmin){ - dmin = d; - amin = a; - metr = der; - } - } - if (amin){ - double d1 = dmin * amin->Radius; - u = exp (-(d1 * d1)); - x1 = (1. - u) + u * amin->lc1; - x2 = (1. - u) + u * amin->lc2; - } - if (amin && amin->v){ - double q11 = 1. / (x1 * x1); - double q22 = 1. / (x2 * x2); - double q12 = 1. / (x1 * x2); - m[0][0] *= q11; - m[0][1] *= q12; - m[1][0] *= q12; - m[1][1] *= q22; - m[2][1] *= q11; - m[1][2] *= q12; - m[0][2] *= q12; - m[2][0] *= q12; - m[2][2] *= q11; - } - else if (amin && amin->c){ - Matrix3x3 < double >NewMetric (0.), Rot (0.), RotTranspose (0.), Id (0.); - double xx = 0.0, yy = 0.0, zz = 0.0; - - if (metr.Pos.Z == 0.0) - zz = 1.0; - else if (metr.Pos.Y == 0.0) - yy = 1.0; - else - xx = 1.0; - - Vertex z (xx, yy, zz); - Vertex d2 = metr % z; - metr.norme (); - d2.norme (); - Vertex d3 = metr % d2; - d3.norme (); - - Id.Identity (1.0); - Rot.Identity (1.0); - - Id[0][0] = 1. / (x1 * x1); - Id[1][1] = 1. / (x2 * x2); - Id[2][2] = 1. / (x2 * x2); - - Rot[0][0] = metr.Pos.X; - Rot[0][1] = metr.Pos.Y; - Rot[0][2] = metr.Pos.Z; - Rot[1][0] = d2.Pos.X; - Rot[1][1] = d2.Pos.Y; - Rot[1][2] = d2.Pos.Z; - Rot[2][0] = d3.Pos.X; - Rot[2][1] = d3.Pos.Y; - Rot[2][2] = d3.Pos.Z; - - RotTranspose = Rot; - RotTranspose.transpose (); - NewMetric = RotTranspose * (Id * Rot); - NewMetric.copy (m); - } - else - u = 0.0; - return u; -} - - -void GMSHMetric:: setMetric (double u,double v, Surface * s){ - double a, b, c; // ellipsis axx+byy+cxy=1 - double l1, l2; // 2 eigenvalues - - Identity (); - Vertex p = InterpolateSurface (s, u, v, 0, 0); - if (s->Typ != MSH_SURF_PLAN && s->Typ != MSH_SURF_REGL && s->Typ != MSH_SURF_TRIC){ - Vertex du = InterpolateSurface (s, u, v, 1, 1); - Vertex dv = InterpolateSurface (s, u, v, 1, 2); - - a = du * du; - b = dv * dv; - c = du * dv; - - m[0][0] = a; - m[1][1] = b; - m[0][1] = c; - m[1][0] = c; - - l1 = 0.5 * ((a + b) + sqrt ((a - b) * (a - b) + 4. * c * c)); - l2 = 0.5 * ((a + b) - sqrt ((a - b) * (a - b) + 4. * c * c)); - - if (l1 == 0.0 && l2 == 0.0) - Identity (); - - else if (sqrt (l1 / l2) > limite_aniso){ - // on limite les rapports de metrique a limite_ansio - double r = limite_aniso * limite_aniso * (l2 / l1); - m[0][0] = a / r; - m[1][1] = b * r; - m[0][1] = c; - m[1][0] = c; - } - } - Local_Metric_Of_Attractors (p.Pos.X, p.Pos.Y, p.Pos.Z, NULL); - -} - -void GMSHMetric:: setMetric (double x, double y, double z){ - Identity (); - Local_Metric_Of_Attractors (x, y, z, NULL); - return; -} - -void GMSHMetric:: setMetricMin (double u, double v, Surface * s){ - - Identity (); - if (s->Typ != MSH_SURF_PLAN && s->Typ != MSH_SURF_REGL && s->Typ != MSH_SURF_TRIC){ - Vertex du = InterpolateSurface (s, u, v, 1, 1); - Vertex dv = InterpolateSurface (s, u, v, 1, 2); - double d = (du * du > dv * dv) ? du * du : dv * dv; - m[0][0] = d; - m[1][1] = d; - } - -} - -double GMSHMetric:: getWorstEdge (Simplex * s, Surface * surf, Vertex * v[2]){ - double l1, l2, l3, q1, q2, q3; - v[0] = s->V[0]; - v[1] = s->V[1]; - l1 = EdgeLengthOnSurface (surf, v, 1); - v[0] = s->V[0]; - v[1] = s->V[2]; - l2 = EdgeLengthOnSurface (surf, v, 1); - v[0] = s->V[1]; - v[1] = s->V[2]; - l3 = EdgeLengthOnSurface (surf, v, 1); - - q1 = 2. * l1 / (s->V[0]->lc + s->V[1]->lc); - q2 = 2. * l2 / (s->V[0]->lc + s->V[2]->lc); - q3 = 2. * l3 / (s->V[1]->lc + s->V[2]->lc); - - if (q1 >= q2 && q1 >= q3){ - v[0] = s->V[0]; - v[1] = s->V[1]; - return l1; - } - else if (q2 >= q3){ - v[0] = s->V[0]; - v[1] = s->V[2]; - return l2; - } - return l3; -} - -void GMSHMetric:: setSimplexQuality (Simplex * s, Surface * surf){ - if (quality_measure == QUALITY_EDGES_BASED){ - Vertex *v[2], vv; - double l1, l2, l3, q1, q2, q3; - v[0] = s->V[0]; - v[1] = s->V[1]; - vv = (*v[1]) - (*v[0]); - l1 = LengthVector (&vv); - v[0] = s->V[0]; - v[1] = s->V[2]; - vv = (*v[1]) - (*v[0]); - l2 = LengthVector (&vv); - v[0] = s->V[1]; - v[1] = s->V[2]; - vv = (*v[1]) - (*v[0]); - l3 = LengthVector (&vv); - - q1 = 2. * l1 / (s->V[0]->lc + s->V[1]->lc); - q2 = 2. * l2 / (s->V[0]->lc + s->V[2]->lc); - q3 = 2. * l3 / (s->V[1]->lc + s->V[2]->lc); - - s->Quality = DMAX (DMAX (q1, q2), q3) / (RacineDeTrois); - } - else{ - s->Center_Ellipsum_2D (m); - s->Quality = 3. * s->Radius / (s->V[0]->lc + s->V[1]->lc + s->V[2]->lc); - } -} - -void GMSHMetric::setSimplexQuality (Simplex * s){ - if (quality_measure == QUALITY_EDGES_BASED){ - Vertex *v[2], vv; - double l1, l2, l3, l4, l5, l6, q1, q2, q3, q4, q5, q6; - v[0] = s->V[0]; - v[1] = s->V[1]; - vv = (*v[1]) - (*v[0]); - l1 = LengthVector (&vv); - v[0] = s->V[0]; - v[1] = s->V[2]; - vv = (*v[1]) - (*v[0]); - l2 = LengthVector (&vv); - v[0] = s->V[1]; - v[1] = s->V[2]; - vv = (*v[1]) - (*v[0]); - l3 = LengthVector (&vv); - v[0] = s->V[0]; - v[1] = s->V[3]; - vv = (*v[1]) - (*v[0]); - l4 = LengthVector (&vv); - v[0] = s->V[1]; - v[1] = s->V[3]; - vv = (*v[1]) - (*v[0]); - l5 = LengthVector (&vv); - v[0] = s->V[2]; - v[1] = s->V[3]; - vv = (*v[1]) - (*v[0]); - l6 = LengthVector (&vv); - - q1 = 2. * l1 / (s->V[0]->lc + s->V[1]->lc); - q2 = 2. * l2 / (s->V[0]->lc + s->V[2]->lc); - q3 = 2. * l3 / (s->V[1]->lc + s->V[2]->lc); - q4 = 2. * l4 / (s->V[0]->lc + s->V[3]->lc); - q5 = 2. * l5 / (s->V[1]->lc + s->V[3]->lc); - q6 = 2. * l6 / (s->V[2]->lc + s->V[3]->lc); - - //s->Quality = (0.5/6.)*(q1+q2+q3+q4+q5+q6); - - //double qmax = (DMAX (q1, DMAX (q2, DMAX (q3, DMAX (q4, DMAX (q5, q6)))))); - - s->Quality = (q1 + q2 + q3 + q4 + q5 + q6) / (6. * RacineDeDeux); - } - else{ - s->Center_Ellipsum_3D (m); - s->Quality = 4. * s->Radius / (s->V[0]->lc + s->V[1]->lc + s->V[2]->lc + s->V[3]->lc); - } -} - -double GMSHMetric::operator () (int i, int j){ - return m[i][j]; -} - -double *GMSHMetric::operator[] (int i){ - if (i < 0 || i > 3) - return m[0]; - return m[i]; -} - -void GMSHMetric::Identity (){ - m[0][0] = m[1][1] = m[2][2] = 1.0; - m[1][0] = m[1][2] = m[0][1] = 0.0; - m[2][0] = m[2][1] = m[0][2] = 0.0; -} - -void GMSHMetric::setMetric (double u, Curve * c){ - -} - -double GMSHMetric::getLc (double u, Curve * c){ - double l; - Identity (); - Vertex v = InterpolateCurve (c, u, 0); - Vertex du = InterpolateCurve (c, u, 1); - Local_Metric_Of_Attractors (v.Pos.X, v.Pos.Y, v.Pos.Z, NULL); - l = LengthVector (&du); - - //printf("GetLC : u = %g l=%g lc=%g return=%g ", u, l, v.lc, l/v.lc); - - return l / v.lc; -} - -double GMSHMetric::LengthVector (Vertex * v){ - Vertex mult (v->Pos.X * m[0][0] + v->Pos.Y * m[0][1] + v->Pos.Z * m[0][2], - v->Pos.X * m[1][0] + v->Pos.Y * m[1][1] + v->Pos.Z * m[1][2], - v->Pos.X * m[2][0] + v->Pos.Y * m[2][1] + v->Pos.Z * m[2][2]); - return sqrt (mult * (*v)); -} - -double GMSHMetric::EdgeLengthOnSurface (Surface * s, Vertex * v[2], int cuts){ - Vertex dv; - - if (!s){ - dv = (*v[1]) - (*v[0]); - return LengthVector (&dv); - } - - dv.Pos.X = (v[1]->Pos.X - v[0]->Pos.X) / (double) cuts; - dv.Pos.Y = (v[1]->Pos.Y - v[0]->Pos.Y) / (double) cuts; - - double l = 0.0, posu, posv; - - for (int i = 0; i < cuts; i++){ - posu = v[0]->Pos.X + dv.Pos.X * ((double) (i) + 0.5); - posv = v[0]->Pos.Y + dv.Pos.Y * ((double) (i) + 0.5); - setMetric (posu, posv, s); - l += LengthVector (&dv); - } - return l; -} diff --git a/Mesh/Metric.h b/Mesh/Metric.h deleted file mode 100644 index af7c8f212862c191536483f95d0de5571b346196..0000000000000000000000000000000000000000 --- a/Mesh/Metric.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef _METRIC_H_ -#define _METRIC_H_ - -class GMSHMetric{ - -public: - double m[3][3]; - double min_cos; - double max_dist; - bool apply_costest; - bool apply_disttest; - double limite_aniso; - int quality_measure; - List_T *Attractors; - GMSHMetric(); - void Identity (); - double EdgeLengthOnSurface (Surface *s , Vertex *v[2], int cuts); - double LengthVector (Vertex *v); - void setMetric (double u,double v ,Surface *s); - void setMetric (double x,double y ,double z); - void setMetricMin (double u,double v ,Surface *s); - void setSimplexQuality (Simplex *s, Surface *surf); - void setSimplexQuality (Simplex *s); - void setMetric (double u,Curve *c); - double getLc ( double u , Curve *c ); - double operator () (int i,int j); - double * operator [] (int i); - double Local_Metric_Of_Attractors (double X, double Y, double Z, - double metric[3][3]); - double getWorstEdge (Simplex *s, Surface *surf, Vertex *v[2]); - -} ; - -#endif - diff --git a/Mesh/Nurbs.cpp b/Mesh/Nurbs.cpp deleted file mode 100644 index 196a1d08bf92f28e9822a2e3fec1f9d44b32ca9c..0000000000000000000000000000000000000000 --- a/Mesh/Nurbs.cpp +++ /dev/null @@ -1,204 +0,0 @@ -// $Id: Nurbs.cpp,v 1.5 2001-01-08 08:05:46 geuzaine Exp $ - -#include "Gmsh.h" -#include "Mesh.h" - -Vertex InterpolateCubicSpline (Vertex * v[4], double t, double mat[4][4], - int derivee, double t1, double t2){ - Vertex V; - int i, j; - double vec[4], T[4]; - - V.Pos.X = V.Pos.Y = V.Pos.Z = 0.0; - V.lc = t * v[1]->lc + (1. - t) * v[2]->lc; - - if (derivee){ - T[3] = 0.; - T[2] = 1.; - T[1] = 2. * t; - T[0] = 3. * t * t; - } - else{ - T[3] = 1.; - T[2] = t; - T[1] = t * t; - T[0] = t * t * t; - } - - for (i = 0; i < 4; i++){ - vec[i] = 0.0; - } - - /* X */ - for (i = 0; i < 4; i++){ - for (j = 0; j < 4; j++){ - vec[i] += mat[i][j] * v[j]->Pos.X; - } - } - - for (j = 0; j < 4; j++){ - V.Pos.X += T[j] * vec[j]; - vec[j] = 0.0; - } - - /* Y */ - for (i = 0; i < 4; i++){ - for (j = 0; j < 4; j++){ - vec[i] += mat[i][j] * v[j]->Pos.Y; - } - } - - for (j = 0; j < 4; j++){ - V.Pos.Y += T[j] * vec[j]; - vec[j] = 0.0; - } - - /* Z */ - for (i = 0; i < 4; i++){ - for (j = 0; j < 4; j++){ - vec[i] += mat[i][j] * v[j]->Pos.Z; - } - } - for (j = 0; j < 4; j++){ - V.Pos.Z += T[j] * vec[j]; - vec[j] = 0.0; - } - - if (derivee){ - V.Pos.X /= ((t2 - t1)); - V.Pos.Y /= ((t2 - t1)); - V.Pos.Z /= ((t2 - t1)); - } - - return V; -} - -/* ------------------------------------------------------------------------ */ -/* I n t e r p o l a t e N u r b s */ -/* ------------------------------------------------------------------------ */ - -/* B S p l i n e s U n i f o r m e s */ - -Vertex InterpolateUBS (Curve * Curve, double u, int derivee){ - - int NbControlPoints, NbCurves, iCurve; - double t, t1, t2; - Vertex *v[4]; - - NbControlPoints = List_Nbr (Curve->Control_Points); - NbCurves = NbControlPoints - 3; - - iCurve = (int) (u * (double) NbCurves) + 1; - - if (iCurve > NbCurves) - iCurve = NbCurves; - - t1 = (double) (iCurve - 1) / (double) (NbCurves); - t2 = (double) (iCurve) / (double) (NbCurves); - - t = (u - t1) / (t2 - t1); - - List_Read (Curve->Control_Points, iCurve - 1, &v[0]); - List_Read (Curve->Control_Points, iCurve, &v[1]); - List_Read (Curve->Control_Points, iCurve + 1, &v[2]); - List_Read (Curve->Control_Points, iCurve + 2, &v[3]); - - return InterpolateCubicSpline (v, t, Curve->mat, derivee, t1, t2); -} - -/* B S p l i n e s N o n U n i f o r m e s */ - -int findSpan (double u, int deg, int n, float *U){ - if (u >= U[n]) - return n - 1; - if (u <= U[0]) - return deg; - - int low = deg; - int high = n + 1; - int mid = (low + high) / 2; - - while (u < U[mid] || u >= U[mid + 1]){ - if (u < U[mid]) - high = mid; - else - low = mid; - mid = (low + high) / 2; - } - return mid; -} - -void basisFuns (double u, int i, int deg, float *U, double *N){ - - double left[1000]; - double *right = &left[deg + 1]; - - double temp, saved; - - //N.resize(deg+1) ; - - N[0] = 1.0; - for (int j = 1; j <= deg; j++){ - left[j] = u - U[i + 1 - j]; - right[j] = U[i + j] - u; - saved = 0.0; - for (int r = 0; r < j; r++){ - temp = N[r] / (right[r + 1] + left[j - r]); - N[r] = saved + right[r + 1] * temp; - saved = left[j - r] * temp; - } - N[j] = saved; - } -} - -Vertex InterpolateNurbs (Curve * Curve, double u, int derivee){ - static double Nb[1000]; - int span = findSpan (u, Curve->degre, List_Nbr (Curve->Control_Points), Curve->k); - Vertex p, *v; - - basisFuns (u, span, Curve->degre, Curve->k, Nb); - p.Pos.X = p.Pos.Y = p.Pos.Z = p.w = p.lc = 0.0; - for (int i = Curve->degre; i >= 0; --i){ - List_Read (Curve->Control_Points, span - Curve->degre + i, &v); - p.Pos.X += Nb[i] * v->Pos.X; - p.Pos.Y += Nb[i] * v->Pos.Y; - p.Pos.Z += Nb[i] * v->Pos.Z; - p.w += Nb[i] * v->w; - p.lc += Nb[i] * v->lc; - } - return p; -} - -Vertex InterpolateNurbsSurface (Surface * s, double u, double v){ - int uspan = findSpan (u, s->OrderU, s->Nu, s->ku); - int vspan = findSpan (v, s->OrderV, s->Nv, s->kv); - double Nu[1000], Nv[1000]; - Vertex sp, temp[1000], *pv; - - basisFuns (u, uspan, s->OrderU, s->ku, Nu); - basisFuns (v, vspan, s->OrderV, s->kv, Nv); - - int l, ll, kk; - for (l = 0; l <= s->OrderV; l++){ - temp[l].Pos.X = temp[l].Pos.Y = temp[l].Pos.Z = temp[l].w = temp[l].lc = 0.0; - for (int k = 0; k <= s->OrderU; k++){ - kk = uspan - s->OrderU + k; - ll = vspan - s->OrderV + l; - List_Read (s->Control_Points, kk + s->Nu * ll, &pv); - temp[l].Pos.X += Nu[k] * pv->Pos.X; - temp[l].Pos.Y += Nu[k] * pv->Pos.Y; - temp[l].Pos.Z += Nu[k] * pv->Pos.Z; - temp[l].w += Nu[k] * pv->w; - temp[l].lc += Nu[k] * pv->lc; - } - } - sp.Pos.X = sp.Pos.Y = sp.Pos.Z = sp.w = sp.lc = 0.0; - for (l = 0; l <= s->OrderV; l++){ - sp.Pos.X += Nv[l] * temp[l].Pos.X; - sp.Pos.Y += Nv[l] * temp[l].Pos.Y; - sp.Pos.Z += Nv[l] * temp[l].Pos.Z; - sp.w += Nv[l] * temp[l].w; - sp.lc += Nv[l] * temp[l].lc; - } - return sp; -} diff --git a/Mesh/Print_Mesh.cpp b/Mesh/Print_Mesh.cpp deleted file mode 100644 index d81d43457e8bf9b44cc23b0d0e4f76512a92dc28..0000000000000000000000000000000000000000 --- a/Mesh/Print_Mesh.cpp +++ /dev/null @@ -1,1144 +0,0 @@ -// $Id: Print_Mesh.cpp,v 1.25 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "CAD.h" -#include "Mesh.h" -#include "Create.h" -#include "Context.h" - -extern Context_T CTX ; - -/* ------------------------------------------------------------------------ */ -/* M S H F O R M A T */ -/* ------------------------------------------------------------------------ */ - -#define LINE 1 -#define TRIANGLE 2 -#define QUADRANGLE 3 -#define TETRAHEDRON 4 -#define HEXAHEDRON 5 -#define PRISM 6 -#define PYRAMID 7 -#define LINE_2 8 -#define TRIANGLE_2 9 -#define QUADRANGLE_2 10 -#define TETRAHEDRON_2 11 -#define HEXAHEDRON_2 12 -#define PRISM_2 13 -#define PYRAMID_2 14 -#define POINT 15 - -static FILE *mshfile; -static int MSH_NODE_NUM; -static int MSH_VOL_NUM, MSH_SUR_NUM, MSH_LIN_NUM; -static int MSH_ELEMENT_NUM, MSH_ADD; -static int MSH_PHYSICAL_NUM, MSH_PHYSICAL_ORI; - -void print_msh_node (void *a, void *b){ - Vertex **V; - - V = (Vertex **) a; - - fprintf (mshfile, "%d %.16g %.16g %.16g\n", - (*V)->Num, - (*V)->Pos.X * CTX.mesh.scaling_factor, - (*V)->Pos.Y * CTX.mesh.scaling_factor, - (*V)->Pos.Z * CTX.mesh.scaling_factor); -} - -void process_msh_nodes (Mesh * M){ - int i, j, Num; - PhysicalGroup *p; - Vertex *pv, *ppv, v; - - for (i = 0; i < List_Nbr (M->PhysicalGroups); i++){ - List_Read (M->PhysicalGroups, i, &p); - if(p->Typ == MSH_PHYSICAL_POINT){ - for (j = 0; j < List_Nbr (p->Entities); j++){ - List_Read (p->Entities, j, &Num); - pv = &v; - pv->Num = abs(Num); - if(!Tree_Search(M->Vertices, &pv)){ - if((ppv = *(Vertex**)Tree_PQuery(M->Points, &pv))) - Tree_Add(M->Vertices, &ppv); - } - } - } - } - - MSH_NODE_NUM = Tree_Nbr (M->Vertices) + Tree_Nbr (M->VertexEdges); - - fprintf (mshfile, "$NOD\n"); - fprintf (mshfile, "%d\n", MSH_NODE_NUM); - Tree_Action (M->Vertices, print_msh_node); - Tree_Action (M->VertexEdges, print_msh_node); - fprintf (mshfile, "$ENDNOD\n"); -} - -void add_msh_simplex (void *a, void *b){ - Simplex **S; - int i, type, nbn, nbs = 0; - - S = (Simplex **) a; - - if (MSH_VOL_NUM && (MSH_VOL_NUM != (*S)->iEnt)) - return; - - if (MSH_SUR_NUM && (MSH_SUR_NUM != (*S)->iEnt)) - return; - - if (MSH_LIN_NUM && (MSH_LIN_NUM != (*S)->iEnt)) - return; - - if (!MSH_ADD){ - MSH_ELEMENT_NUM++; - return; - } - - if (!(*S)->V[2]){ - nbn = 2; - if ((*S)->VSUP){ - type = LINE_2; - nbs = 1; - } - else - type = LINE; - } - else if (!(*S)->V[3]){ - nbn = 3; - if ((*S)->VSUP){ - type = TRIANGLE_2; - nbs = 3; - } - else - type = TRIANGLE; - } - else{ - nbn = 4; - if (!MSH_VOL_NUM){ - if ((*S)->VSUP){ - type = QUADRANGLE_2; - nbs = 5; - } - else - type = QUADRANGLE; - } - else if ((*S)->VSUP){ - type = TETRAHEDRON_2; - nbs = 1; - } - else - type = TETRAHEDRON; - } - - if(type == TETRAHEDRON){ - if ((*S)->Volume_Simplexe () < 0){ - Vertex *temp; - temp = (*S)->V[0]; - (*S)->V[0] = (*S)->V[1]; - (*S)->V[1] = temp; - } - } - - fprintf (mshfile, "%d %d %d %d %d", - MSH_ELEMENT_NUM++, type,MSH_PHYSICAL_NUM,(*S)->iEnt, nbn + nbs); - - if (MSH_PHYSICAL_ORI > 0){ - for (i = 0; i < nbn; i++) - fprintf (mshfile, " %d", (*S)->V[i]->Num); - for (i = 0; i < nbs; i++) - fprintf (mshfile, " %d", (*S)->VSUP[i]->Num); - } - else{ - for (i = 0; i < nbn; i++) - fprintf (mshfile, " %d", (*S)->V[nbn - i - 1]->Num); - for (i = 0; i < nbs; i++) - fprintf (mshfile, " %d", (*S)->VSUP[nbs - i - 1]->Num); - } - - fprintf (mshfile, "\n"); -} - -void add_msh_hexahedron (void *a, void *b){ - Hexahedron **H; - int i, type, nbn, nbs = 0; - - H = (Hexahedron **) a; - - if (MSH_VOL_NUM && (MSH_VOL_NUM != (*H)->iEnt)) - return; - - if (!MSH_ADD){ - MSH_ELEMENT_NUM++; - return; - } - - nbn = 8; - if ((*H)->VSUP){ - type = HEXAHEDRON_2; - nbs = 19; - } - else - type = HEXAHEDRON; - - fprintf (mshfile, "%d %d %d %d %d", - MSH_ELEMENT_NUM++, type, MSH_PHYSICAL_NUM, (*H)->iEnt, nbn + nbs); - - for (i = 0; i < nbn; i++) - fprintf (mshfile, " %d", (*H)->V[i]->Num); - for (i = 0; i < nbs; i++) - fprintf (mshfile, " %d", (*H)->VSUP[i]->Num); - - fprintf (mshfile, "\n"); -} - -void add_msh_prism (void *a, void *b){ - Prism **P; - int i, type, nbn, nbs = 0; - - P = (Prism **) a; - - if (MSH_VOL_NUM && (MSH_VOL_NUM != (*P)->iEnt)) - return; - - if (!MSH_ADD){ - MSH_ELEMENT_NUM++; - return; - } - - nbn = 6; - if ((*P)->VSUP){ - type = PRISM_2; - nbs = 12; - } - else{ - type = PRISM; - } - - fprintf (mshfile, "%d %d %d %d %d", - MSH_ELEMENT_NUM++, type, MSH_PHYSICAL_NUM, (*P)->iEnt, nbn + nbs); - - for (i = 0; i < nbn; i++) - fprintf (mshfile, " %d", (*P)->V[i]->Num); - for (i = 0; i < nbs; i++) - fprintf (mshfile, " %d", (*P)->VSUP[i]->Num); - - fprintf (mshfile, "\n"); -} - -void add_msh_point (Vertex * V){ - - if (!MSH_ADD){ - MSH_ELEMENT_NUM++; - return; - } - - fprintf (mshfile, "%d %d %d %d 1 %d\n", - MSH_ELEMENT_NUM++, POINT, MSH_PHYSICAL_NUM, V->Num, V->Num); -} - -void add_msh_elements (Mesh * M){ - int i, j, k, Num; - - PhysicalGroup *p; - Volume *pV; - Surface *ps, s; - Curve *pc, c; - Vertex *pv, v; - - List_T *ListVolumes = Tree2List (M->Volumes); - - for (i = 0; i < List_Nbr (M->PhysicalGroups); i++){ - List_Read (M->PhysicalGroups, i, &p); - MSH_PHYSICAL_NUM = p->Num; - MSH_VOL_NUM = MSH_SUR_NUM = MSH_LIN_NUM = 0; - - switch (p->Typ){ - - case MSH_PHYSICAL_POINT: - for (j = 0; j < List_Nbr (p->Entities); j++){ - pv = &v; - List_Read (p->Entities, j, &Num); - pv->Num = abs (Num); - MSH_PHYSICAL_ORI = sign (Num); - if (Tree_Query (M->Vertices, &pv)) - add_msh_point (pv); - } - break; - - case MSH_PHYSICAL_LINE: - if(CTX.mesh.oldxtrude){//for old extrusion mesh generator - for (k = 0; k < List_Nbr (ListVolumes); k++){ - List_Read (ListVolumes, k, &pV); - for (j = 0; j < List_Nbr (p->Entities); j++){ - List_Read (p->Entities, j, &Num); - MSH_LIN_NUM = abs (Num); - MSH_PHYSICAL_ORI = sign (Num); - Tree_Action (pV->Simp_Surf, add_msh_simplex); - } - } - break;//done - } - - for (j = 0; j < List_Nbr (p->Entities); j++){ - pc = &c; - List_Read (p->Entities, j, &Num); - pc->Num = abs (Num); - MSH_PHYSICAL_ORI = sign (Num); - if (Tree_Query (M->Curves, &pc)) - Tree_Action (pc->Simplexes, add_msh_simplex); - } - break; - - case MSH_PHYSICAL_SURFACE: - if(CTX.mesh.oldxtrude){//for old extrusion mesh generator - for (k = 0; k < List_Nbr (ListVolumes); k++){ - List_Read (ListVolumes, k, &pV); - for (j = 0; j < List_Nbr (p->Entities); j++){ - List_Read (p->Entities, j, &Num); - MSH_SUR_NUM = abs (Num); - MSH_PHYSICAL_ORI = sign (Num); - Tree_Action (pV->Simp_Surf, add_msh_simplex); - } - } - break;//done - } - - for (j = 0; j < List_Nbr (p->Entities); j++){ - ps = &s; - List_Read (p->Entities, j, &Num); - ps->Num = abs (Num); - MSH_PHYSICAL_ORI = sign (Num); - if (Tree_Query (M->Surfaces, &ps)) - Tree_Action (ps->Simplexes, add_msh_simplex); - } - break; - - case MSH_PHYSICAL_VOLUME: - for (k = 0; k < List_Nbr (ListVolumes); k++){ - List_Read (ListVolumes, k, &pV); - for (j = 0; j < List_Nbr (p->Entities); j++){ - List_Read (p->Entities, j, &Num); - MSH_VOL_NUM = abs (Num); - MSH_PHYSICAL_ORI = sign (Num); - Tree_Action (pV->Simplexes, add_msh_simplex); - Tree_Action (pV->Hexahedra, add_msh_hexahedron); - Tree_Action (pV->Prisms, add_msh_prism); - } - } - break; - - default : - Msg(GERROR, "Unknown type of Physical group"); - break; - } - - } - -} - -void process_msh_elements (Mesh * M){ - MSH_ADD = 0; - MSH_ELEMENT_NUM = 1; - add_msh_elements (M); - fprintf (mshfile, "$ELM\n"); - fprintf (mshfile, "%d\n", MSH_ELEMENT_NUM - 1); - - if (MSH_ELEMENT_NUM == 1) - Msg (WARNING, "No elements (did you forget to define physical entities?)"); - - MSH_ADD = 1; - MSH_ELEMENT_NUM = 1; - add_msh_elements (M); - fprintf (mshfile, "$ENDELM\n"); -} - - -/* ------------------------------------------------------------------------ */ -/* U N V F O R M A T */ -/* ------------------------------------------------------------------------ */ - -/* Numeros des enregistrements IDEAS */ -#define HEADER 151 -#define UNITS 164 -#define NODES 2411 -#define ELEMENTS 2412 -#define RESNODE 55 -#define RESELEM 56 -#define RESVECT 57 -#define GROUPOFNODES 790 - -/* Numeros des elements IDEAS */ -#define BEAM 21 -#define BEAM2 24 -#define THINSHLL 91 -#define THINSHLL2 92 -#define QUAD 94 -#define QUAD2 95 /* Ca c'est une impro !!! */ -#define SOLIDFEM 111 -#define WEDGE 112 -#define BRICK 115 -#define SOLIDFEM2 118 - -void process_nodes (FILE * funv, Mesh * M){ - int nbnod; - double x, y, z; - int i, idnod; - Vertex *v; - - List_T *Nodes = Tree2List (M->Vertices); - - fprintf (funv, "%6d\n", -1); - fprintf (funv, "%6d\n", NODES); - nbnod = List_Nbr (Nodes); - - for (i = 0; i < nbnod; i++){ - List_Read (Nodes, i, &v); - idnod = v->Num; - x = v->Pos.X * CTX.mesh.scaling_factor; - y = v->Pos.Y * CTX.mesh.scaling_factor; - z = v->Pos.Z * CTX.mesh.scaling_factor; - fprintf (funv, "%10d%10d%10d%10d\n", idnod, 1, 1, 11); - fprintf (funv, "%21.16fD+00 %21.16fD+00 %21.16fD+00\n", x, y, z); - } - - List_Delete (Nodes); - Nodes = Tree2List (M->VertexEdges); - nbnod = List_Nbr (Nodes); - - for (i = 0; i < nbnod; i++){ - List_Read (Nodes, i, &v); - idnod = v->Num; - x = v->Pos.X * CTX.mesh.scaling_factor; - y = v->Pos.Y * CTX.mesh.scaling_factor; - z = v->Pos.Z * CTX.mesh.scaling_factor; - fprintf (funv, "%10d%10d%10d%10d\n", idnod, 1, 1, 11); - fprintf (funv, "%21.16fD+00 %21.16fD+00 %21.16fD+00\n", x, y, z); - } - - fprintf (funv, "%6d\n", -1); -} - -static int ELEMENT_ID; - -int process_2D_elements (FILE * funv, Mesh * m){ - List_T *ListSurfaces = Tree2List (m->Surfaces); - List_T *ListVolumes = Tree2List (m->Volumes); - List_T *Elements; - Volume *vol; - List_T *AllSurfaces = List_Create (2, 2, sizeof (Surface *)); - Simplex *sx; - Surface *s; - int nbtri = 0, i, j, nsup, n, ntot, k, geo, fetyp; - - for (i = 0; i < List_Nbr (ListVolumes); i++){ - List_Read (ListVolumes, i, &vol); - for (j = 0; j < List_Nbr (vol->Surfaces); j++){ - List_Read (vol->Surfaces, j, &s); - if (Tree_Nbr (s->Simplexes)) - List_Add (AllSurfaces, &s); - } - } - - for (i = 0; i < List_Nbr (ListSurfaces); i++){ - List_Read (ListSurfaces, i, &s); - if (!List_Search (AllSurfaces, &s, compareSurface)){ - Elements = Tree2List (s->Simplexes); - for (j = 0; j < List_Nbr (Elements); j++){ - List_Read (Elements, j, &sx); - if (sx->V[3]){ - if (sx->VSUP){ - fetyp = QUAD; - n = 4; - nsup = 4; - } - else{ - fetyp = QUAD; - n = 4; - nsup = 0; - } - } - else{ - if (sx->VSUP){ - fetyp = THINSHLL; - n = 3; - nsup = 3; - } - else{ - fetyp = THINSHLL; - nsup = 0; - n = 3; - } - } - geo = s->Num; - fprintf (funv, "%10d%10d%10d%10d%10d%10d\n", - /*ELEMENT_ID++ */ abs(sx->Num), fetyp, geo, geo, 7, n + nsup); - //'abs' since extrusion can tag triangles - // with a negative number - ntot = 0; - for (k = 0; k < n; k++){ - fprintf (funv, "%10d", sx->V[k]->Num); - if (ntot % 8 == 7) - fprintf (funv, "\n"); - ntot++; - } - for (k = 0; k < nsup; k++){ - fprintf (funv, "%10d", sx->VSUP[k]->Num); - if (ntot % 8 == 7) - fprintf (funv, "\n"); - ntot++; - } - if (ntot - 1 % 8 != 7) - fprintf (funv, "\n"); - } - List_Delete (Elements); - nbtri += Tree_Nbr (s->Simplexes); - } - } - List_Delete (ListSurfaces); - List_Delete (ListVolumes); - List_Delete (AllSurfaces); - return 0; -} - -int process_1D_elements (FILE * funv, Mesh * m){ - List_T *ListCurves = Tree2List (m->Curves); - List_T *AllCurves = List_Create (2, 2, sizeof (Surface *)); - List_T *ListSurfaces = Tree2List (m->Surfaces); - List_T *Elements; - Simplex *sx; - Curve *c; - Surface *surf; - int nblig = 0, k, ntot, i, j, geo, fetyp, n, nsup; - - for (i = 0; i < List_Nbr (ListSurfaces); i++){ - List_Read (ListSurfaces, i, &surf); - for (j = 0; j < List_Nbr (surf->Generatrices); j++){ - List_Read (surf->Generatrices, j, &c); - if (Tree_Nbr (c->Simplexes)) - List_Add (AllCurves, &c); - c = FindCurve (-c->Num, m); - if (Tree_Nbr (c->Simplexes)) - List_Add (AllCurves, &c); - } - } - - for (i = 0; i < List_Nbr (ListCurves); i++){ - List_Read (ListCurves, i, &c); - if (!List_Search (AllCurves, &c, compareCurve)){ - Elements = Tree2List (c->Simplexes); - for (j = 0; j < List_Nbr (Elements); j++){ - nblig++; - List_Read (Elements, j, &sx); - if (sx->VSUP){ - fetyp = BEAM2; - n = 2; - nsup = 2; - } - else{ - fetyp = BEAM; - n = 2; - nsup = 0; - } - geo = c->Num; - fprintf (funv, "%10d%10d%10d%10d%10d%10d\n", - /*ELEMENT_ID++ */ sx->Num, fetyp, geo, geo, 7, n + nsup); - ntot = 0; - fprintf (funv, "%10d%10d%10d\n", 0, 0, 0); - for (k = 0; k < n; k++){ - fprintf (funv, "%10d", sx->V[k]->Num); - if (ntot % 8 == 7) - fprintf (funv, "\n"); - ntot++; - } - for (k = 0; k < nsup; k++){ - fprintf (funv, "%10d", sx->VSUP[k]->Num); - if (ntot % 8 == 7) - fprintf (funv, "\n"); - ntot++; - } - if (ntot - 1 % 8 != 7) - fprintf (funv, "\n"); - } - - List_Delete (Elements); - } - } - List_Delete (AllCurves); - List_Delete (ListSurfaces); - List_Delete (ListCurves); - return 0; -} - -int process_3D_elements (FILE * funv, Mesh * m){ - List_T *ListVolumes = Tree2List (m->Volumes); - List_T *Elements; - Simplex *sx; - Hexahedron *hx; - Prism *px; - Volume *v; - int nb = 0, i, j, nsup, n, ntot, k, geo, fetyp; - - for (i = 0; i < List_Nbr (ListVolumes); i++){ - List_Read (ListVolumes, i, &v); - // TETRAEDRON - Elements = Tree2List (v->Simplexes); - for (j = 0; j < List_Nbr (Elements); j++){ - List_Read (Elements, j, &sx); - if (sx->VSUP){ - fetyp = SOLIDFEM; - n = 4; - nsup = 6; - } - else{ - fetyp = SOLIDFEM; - nsup = 0; - n = 4; - } - if (sx->Volume_Simplexe () < 0){ - Vertex *temp; - temp = sx->V[0]; - sx->V[0] = sx->V[1]; - sx->V[1] = temp; - if (sx->Volume_Simplexe () < 0) - Msg(WARNING, "Negative volume for simplex %d", sx->Num); - } - geo = v->Num; - fprintf (funv, "%10d%10d%10d%10d%10d%10d\n", - ELEMENT_ID++, fetyp, geo, geo, 7, n + nsup); - ntot = 0; - for (k = 0; k < n; k++){ - fprintf (funv, "%10d", sx->V[k]->Num); - if (ntot % 8 == 7) - fprintf (funv, "\n"); - ntot++; - } - for (k = 0; k < nsup; k++){ - fprintf (funv, "%10d", sx->VSUP[k]->Num); - if (ntot % 8 == 7) - fprintf (funv, "\n"); - ntot++; - } - if (ntot - 1 % 8 != 7) - fprintf (funv, "\n"); - } - List_Delete (Elements); - nb += Tree_Nbr (v->Simplexes); - - // PRISMS - Elements = Tree2List (v->Prisms); - for (j = 0; j < List_Nbr (Elements); j++){ - List_Read (Elements, j, &px); - if (px->VSUP){ - fetyp = WEDGE; - n = 6; - nsup = 9; - } - else{ - fetyp = WEDGE; - nsup = 0; - n = 6; - } - - geo = v->Num; - fprintf (funv, "%10d%10d%10d%10d%10d%10d\n", - ELEMENT_ID++, fetyp, geo, geo, 7, n + nsup); - ntot = 0; - for (k = 0; k < n; k++){ - fprintf (funv, "%10d", px->V[k]->Num); - if (ntot % 8 == 7) - fprintf (funv, "\n"); - ntot++; - } - for (k = 0; k < nsup; k++){ - fprintf (funv, "%10d", px->VSUP[k]->Num); - if (ntot % 8 == 7) - fprintf (funv, "\n"); - ntot++; - } - if (ntot - 1 % 8 != 7) - fprintf (funv, "\n"); - } - List_Delete (Elements); - nb += Tree_Nbr (v->Prisms); - - // HEXAHEDRONS - Elements = Tree2List (v->Hexahedra); - for (j = 0; j < List_Nbr (Elements); j++){ - List_Read (Elements, j, &hx); - if (hx->VSUP){ - fetyp = BRICK; - n = 8; - nsup = 12; - } - else{ - fetyp = BRICK; - nsup = 0; - n = 8; - } - - geo = v->Num; - fprintf (funv, "%10d%10d%10d%10d%10d%10d\n", - ELEMENT_ID++, fetyp, geo, geo, 7, n + nsup); - ntot = 0; - for (k = 0; k < n; k++){ - fprintf (funv, "%10d", hx->V[k]->Num); - if (ntot % 8 == 7) - fprintf (funv, "\n"); - ntot++; - } - for (k = 0; k < nsup; k++){ - fprintf (funv, "%10d", hx->VSUP[k]->Num); - if (ntot % 8 == 7) - fprintf (funv, "\n"); - ntot++; - } - if (ntot - 1 % 8 != 7) - fprintf (funv, "\n"); - } - List_Delete (Elements); - nb += Tree_Nbr (v->Hexahedra); - } - List_Delete (ListVolumes); - return nb; -} - -FILE *unvfile; -Tree_T *tree; - -void AddVertex (void *a, void *b){ - Vertex *v; - v = *(Vertex **) a; - if (Tree_Search (tree, &v->Num)) - return; - Tree_Add (tree, &v->Num); - fprintf (unvfile, "%10d%10d%2d%2d%2d%2d%2d%2d\n", v->Num, 1, 0, 1, 0, 0, 0, 0); - fprintf (unvfile, "%21.16fD+00 %21.16fD+00 %21.16fD+00\n", 0., 1., 0.); - fprintf (unvfile, "%21.16fD+00 %21.16fD+00 %21.16fD+00\n", 0., 0., 0.); - fprintf (unvfile, "%10d%10d%10d%10d%10d%10d\n", 0, 0, 0, 0, 0, 0); -} - -void PrintGroups (Mesh * m){ - int nb, j, i, k; - Surface *ps, s; - Curve *pc, c; - Vertex *pv, v; - PhysicalGroup *p; - - for (i = 0; i < List_Nbr (m->PhysicalGroups); i++){ - - List_Read (m->PhysicalGroups, i, &p); - if (p->Typ == MSH_PHYSICAL_SURFACE){ - tree = Tree_Create (sizeof (int), fcmp_absint); - fprintf (unvfile, "%6d\n", -1); - fprintf (unvfile, "%6d\n", GROUPOFNODES); - fprintf (unvfile, "%10d%10d\n", p->Num, 1); - fprintf (unvfile, "LOAD SET %2d\n", 1); - nb = List_Nbr (p->Entities); - for (j = 0; j < nb; j++){ - ps = &s; - List_Read (p->Entities, j, &ps->Num); - if (Tree_Query (m->Surfaces, &ps)) - Tree_Action (ps->Vertices, AddVertex); - } - fprintf (unvfile, "%6d\n", -1); - //Tree_Delete(tree); - //free(tree); - } - if (p->Typ == MSH_PHYSICAL_LINE){ - tree = Tree_Create (sizeof (int), fcmp_absint); - fprintf (unvfile, "%6d\n", -1); - fprintf (unvfile, "%6d\n", GROUPOFNODES); - fprintf (unvfile, "%10d%10d\n", p->Num, 1); - fprintf (unvfile, "LOAD SET %2d\n", 1); - nb = List_Nbr (p->Entities); - for (j = 0; j < nb; j++){ - pc = &c; - List_Read (p->Entities, j, &pc->Num); - if (Tree_Query (m->Curves, &pc)) - for (k = 0; k < List_Nbr (pc->Vertices); k++) - AddVertex (List_Pointer (pc->Vertices, k), NULL); - } - fprintf (unvfile, "%6d\n", -1); - //Tree_Delete(tree); - } - if (p->Typ == MSH_PHYSICAL_POINT){ - tree = Tree_Create (sizeof (int), fcmp_absint); - fprintf (unvfile, "%6d\n", -1); - fprintf (unvfile, "%6d\n", GROUPOFNODES); - fprintf (unvfile, "%10d%10d\n", p->Num, 1); - fprintf (unvfile, "LOAD SET %2d\n", 1); - nb = List_Nbr (p->Entities); - for (j = 0; j < nb; j++){ - pv = &v; - List_Read (p->Entities, j, &pv->Num); - if (Tree_Query (m->Vertices, &pv)) - AddVertex (&pv, NULL); - } - fprintf (unvfile, "%6d\n", -1); - //Tree_Delete(tree); - } - } -} - -/* ------------------------------------------------------------------------ */ -/* G R E F F O R M A T */ -/* ------------------------------------------------------------------------ */ - -void ConsecutiveNodes (Mesh * M, Tree_T * ConstecutiveNTree, Tree_T * ConsecutiveETree); - -static int compareFrozen (const void *a, const void *b){ - Vertex *q, *w; - q = *(Vertex **) a; - w = *(Vertex **) b; - return w->Frozen - q->Frozen; -} - -int process_Gref_nodes (FILE * fGref, Mesh * M, - Tree_T * ConsecutiveNTree, Tree_T * ConsecutiveETree){ - int i, nbtri; - Vertex *v; - Surface *s; - Curve *c; - List_T *ListSurfaces, *ListCurves, *Nodes; - - ListCurves = Tree2List (M->Curves); - for (i = 0; i < List_Nbr (ListCurves); i++){ - List_Read (ListCurves, i, &c); - Degre2 (M->Vertices, M->VertexEdges, c->Simplexes, c, NULL); - } - List_Delete (ListCurves); - - ListSurfaces = Tree2List (M->Surfaces); - nbtri = 0; - for (i = 0; i < List_Nbr (ListSurfaces); i++){ - List_Read (ListSurfaces, i, &s); - Degre2 (M->Vertices, M->VertexEdges, s->Simplexes, NULL, s); - nbtri += Tree_Nbr (s->Simplexes); - } - List_Delete (ListSurfaces); - - ConsecutiveNodes (M, ConsecutiveNTree, ConsecutiveETree); - - fprintf (fGref, "%d %d %d\n", nbtri, Tree_Nbr (ConsecutiveNTree), - Tree_Nbr (ConsecutiveNTree) + Tree_Nbr (ConsecutiveETree)); - - Nodes = Tree2List (ConsecutiveNTree); - for (i = 0; i < List_Nbr (Nodes); i++){ - List_Read (Nodes, i, &v); - fprintf (fGref, "%21.16e ", v->Pos.X * CTX.mesh.scaling_factor); - if (i % 3 == 2) - fprintf (fGref, "\n"); - } - if ((List_Nbr (Nodes) - 1) % 3 != 2) - fprintf (fGref, "\n"); - for (i = 0; i < List_Nbr (Nodes); i++){ - List_Read (Nodes, i, &v); - fprintf (fGref, "%21.16e ", v->Pos.Y * CTX.mesh.scaling_factor); - if (i % 3 == 2) - fprintf (fGref, "\n"); - } - if ((List_Nbr (Nodes) - 1) % 3 != 2) - fprintf (fGref, "\n"); - i = Tree_Nbr (ConsecutiveNTree); - List_Delete (Nodes); - return i; -} - -int find_physicalentity (Vertex * v, Mesh * m){ - PhysicalGroup *p; - Curve *c; - int i, j; - for (i = 0; i < List_Nbr (m->PhysicalGroups); i++){ - List_Read (m->PhysicalGroups, i, &p); - if (p->Typ == MSH_PHYSICAL_POINT){ - if (List_Search (p->Entities, &v->Num, fcmp_absint)){ - return p->Num; - } - } - } - - if (v->ListCurves){ - for (i = 0; i < List_Nbr (m->PhysicalGroups); i++){ - List_Read (m->PhysicalGroups, i, &p); - if (p->Typ == MSH_PHYSICAL_LINE){ - for (j = 0; j < List_Nbr (v->ListCurves); j++){ - List_Read (v->ListCurves, j, &c); - if (List_Search (p->Entities, &c->Num, fcmp_absint)){ - return p->Num; - } - } - } - } - } - return 0; -} - -void process_Gref_poundarybonditions (FILE * fGref, Mesh * M, - Tree_T * TRN, Tree_T * TRE){ - int i, ent; - Vertex *v; - - List_T *Nodes = Tree2List (TRN); - for (i = 0; i < List_Nbr (Nodes); i++){ - List_Read (Nodes, i, &v); - ent = find_physicalentity (v, M); - fprintf (fGref, "%d %d ", ent, ent); - if (i % 3 == 2) - fprintf (fGref, "\n"); - } - if ((List_Nbr (Nodes) - 1) % 3 != 2) - fprintf (fGref, "\n"); - List_Delete (Nodes); - - Nodes = Tree2List (TRE); - for (i = 0; i < List_Nbr (Nodes); i++){ - List_Read (Nodes, i, &v); - ent = find_physicalentity (v, M); - fprintf (fGref, "%d %d ", ent, ent); - if (i % 3 == 2) - fprintf (fGref, "\n"); - } - if ((List_Nbr (Nodes) - 1) % 3 != 2) - fprintf (fGref, "\n"); - List_Delete (Nodes); -} - -void process_Gref_elements (FILE * fGref, Mesh * M, int nn){ - int i, j; - Simplex *sx; - Surface *s; - List_T *Triangles; - List_T *ListSurfaces; - - ListSurfaces = Tree2List (M->Surfaces); - for (i = 0; i < List_Nbr (ListSurfaces); i++){ - List_Read (ListSurfaces, i, &s); - Triangles = Tree2List (s->Simplexes); - for (j = 0; j < List_Nbr (Triangles); j++){ - List_Read (Triangles, j, &sx); - if (!sx->V[3]) - fprintf (fGref, "%d %d %d\n", -sx->V[0]->Frozen, - -sx->V[1]->Frozen, -sx->V[2]->Frozen); - else - fprintf (fGref, "%d %d %d %d\n", -sx->V[0]->Frozen, - -sx->V[1]->Frozen, - -sx->V[2]->Frozen, - -sx->V[3]->Frozen); - - } - List_Delete (Triangles); - } - - for (i = 0; i < List_Nbr (ListSurfaces); i++){ - List_Read (ListSurfaces, i, &s); - Triangles = Tree2List (s->Simplexes); - for (j = 0; j < List_Nbr (Triangles); j++){ - List_Read (Triangles, j, &sx); - if (!sx->V[3]) - fprintf (fGref, "%d %d %d\n", -sx->VSUP[0]->Frozen - nn, - -sx->VSUP[1]->Frozen - nn, - -sx->VSUP[2]->Frozen - nn); - else - fprintf (fGref, "%d %d %d %d\n", -sx->VSUP[0]->Frozen - nn, - -sx->VSUP[1]->Frozen - nn, - -sx->VSUP[2]->Frozen - nn, - -sx->VSUP[3]->Frozen - nn); - } - List_Delete (Triangles); - } - // Degres de Liberte - for (i = 0; i < List_Nbr (ListSurfaces); i++){ - List_Read (ListSurfaces, i, &s); - Triangles = Tree2List (s->Simplexes); - for (j = 0; j < List_Nbr (Triangles); j++){ - List_Read (Triangles, j, &sx); - if (!sx->V[3]) - fprintf (fGref, "%d %d %d %d %d %d %d %d %d %d %d %d\n", - -2 * sx->V[0]->Frozen - 1, - -2 * sx->V[0]->Frozen, - -2 * sx->VSUP[0]->Frozen - 1, - -2 * sx->VSUP[0]->Frozen, - -2 * sx->V[1]->Frozen - 1, - -2 * sx->V[1]->Frozen, - -2 * sx->VSUP[1]->Frozen - 1, - -2 * sx->VSUP[1]->Frozen, - -2 * sx->V[2]->Frozen - 1, - -2 * sx->V[2]->Frozen, - -2 * sx->VSUP[2]->Frozen - 1, - -2 * sx->VSUP[2]->Frozen); - else - fprintf (fGref, "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", - -2 * sx->V[0]->Frozen - 1, - -2 * sx->V[0]->Frozen, - -2 * sx->VSUP[0]->Frozen - 1, - -2 * sx->VSUP[0]->Frozen, - -2 * sx->V[1]->Frozen - 1, - -2 * sx->V[1]->Frozen, - -2 * sx->VSUP[1]->Frozen - 1, - -2 * sx->VSUP[1]->Frozen, - -2 * sx->V[2]->Frozen - 1, - -2 * sx->V[2]->Frozen, - -2 * sx->VSUP[2]->Frozen - 1, - -2 * sx->VSUP[2]->Frozen, - -2 * sx->V[3]->Frozen - 1, - -2 * sx->V[3]->Frozen, - -2 * sx->VSUP[3]->Frozen - 1, - -2 * sx->VSUP[3]->Frozen); - } - List_Delete (Triangles); - } - List_Delete (ListSurfaces); -} - -FILE *Greffile; - -void ConsecutiveNodes (Mesh * M, Tree_T * ConsecutiveNTree, Tree_T * ConsecutiveETree){ - int i, j, k; - Simplex *sx; - Surface *s; - List_T *Triangles; - int nbnod, nbedges, nbdof; - List_T *ListSurfaces; - - int newnum = 0, N; - - ListSurfaces = Tree2List (M->Surfaces); - for (i = 0; i < List_Nbr (ListSurfaces); i++){ - List_Read (ListSurfaces, i, &s); - Triangles = Tree2List (s->Simplexes); - for (j = 0; j < List_Nbr (Triangles); j++){ - List_Read (Triangles, j, &sx); - if (!sx->V[3]) - N = 3; - else - N = 4; - for (k = 0; k < N; k++){ - if (sx->V[k]->Frozen >= 0){ - sx->V[k]->Frozen = --newnum; - Tree_Insert (ConsecutiveNTree, &(sx->V[k])); - } - } - } - List_Delete (Triangles); - } - nbnod = -newnum; - ListSurfaces = Tree2List (M->Surfaces); - for (i = 0; i < List_Nbr (ListSurfaces); i++){ - List_Read (ListSurfaces, i, &s); - Triangles = Tree2List (s->Simplexes); - for (j = 0; j < List_Nbr (Triangles); j++){ - List_Read (Triangles, j, &sx); - if (!sx->V[3]) - N = 3; - else - N = 4; - for (k = 0; k < N; k++){ - if (sx->VSUP[k]->Frozen >= 0){ - sx->VSUP[k]->Frozen = --newnum; - Tree_Insert (ConsecutiveETree, &(sx->VSUP[k])); - } - } - } - List_Delete (Triangles); - } - nbedges = -newnum - nbnod; - nbdof = nbnod + nbedges; - Msg(INFO, "%d Dofs", nbdof); -} - -void EndConsecutiveNodes (Mesh * M){ - int i, j, k; - Simplex *sx; - Surface *s; - List_T *Triangles; - List_T *ListSurfaces; - int N; - - ListSurfaces = Tree2List (M->Surfaces); - for (i = 0; i < List_Nbr (ListSurfaces); i++){ - List_Read (ListSurfaces, i, &s); - Triangles = Tree2List (s->Simplexes); - for (j = 0; j < List_Nbr (Triangles); j++){ - List_Read (Triangles, j, &sx); - if (!sx->V[3]) - N = 3; - else - N = 4; - for (k = 0; k < N; k++) - sx->V[k]->Frozen = 0; - for (k = 0; k < N; k++) - sx->VSUP[k]->Frozen = 0; - } - List_Delete (Triangles); - } - List_Delete (ListSurfaces); -} - -/* ------------------------------------------------------------------------ */ -/* P r i n t _ M e s h */ -/* ------------------------------------------------------------------------ */ - -void Print_Mesh (Mesh * M, char *c, int Type){ - char name[256]; - strcpy (name, M->name); - - if (Type == FORMAT_MSH){ - c ? strcpy (name, c) : strcat (name, ".msh"); - mshfile = fopen (name, "w"); - if (!mshfile){ - Msg(WARNING, "Unable to open file '%s'", name); - return; - } - Msg(INFO, "Writing file '%s'", name); - process_msh_nodes (M); - process_msh_elements (M); - Msg(INFO, "Msh ouput complete '%s' (%d Nodes, %d Elements)", - name, MSH_NODE_NUM, MSH_ELEMENT_NUM - 1); - Msg(STATUS2, "Wrote '%s'", name); - fclose (mshfile); - } - else if (Type == FORMAT_UNV){ - c ? strcpy (name, c) : strcat (name, ".unv"); - unvfile = fopen (name, "w"); - if (!unvfile){ - Msg(WARNING, "Unable to open file '%s'", name); - return; - } - Msg(INFO, "Writing file '%s'", name); - process_nodes (unvfile, M); - fprintf (unvfile, "%6d\n", -1); - fprintf (unvfile, "%6d\n", ELEMENTS); - ELEMENT_ID = 1; - process_3D_elements (unvfile, M); - process_2D_elements (unvfile, M); - // process_1D_elements (unvfile, M); - fprintf (unvfile, "%6d\n", -1); - PrintGroups (M); - fclose (unvfile); - Msg(INFO, "Unv ouput complete '%s'", name); - Msg(STATUS2, "Wrote '%s'", name); - } - else if (Type == FORMAT_GREF){ - c ? strcpy (name, c) : strcat (name, ".Gref"); - Tree_T *TRN = Tree_Create (sizeof (Vertex *), compareFrozen); - Tree_T *TRE = Tree_Create (sizeof (Vertex *), compareFrozen); - Greffile = fopen (name, "w"); - if (!Greffile){ - Msg(WARNING, "Unable to open file '%s'", name); - return; - } - Msg(INFO, "Writing file '%s'", name); - process_Gref_nodes (Greffile, M, TRN, TRE); - process_Gref_elements (Greffile, M, Tree_Nbr (TRN)); - process_Gref_poundarybonditions (Greffile, M, TRN, TRE); - fclose (Greffile); - Tree_Delete (TRN); - Tree_Delete (TRE); - EndConsecutiveNodes (M); - Msg(INFO, "Gref ouput complete '%s'", name); - Msg(STATUS2, "Wrote '%s'", name); - } -} diff --git a/Mesh/Read_Mesh.cpp b/Mesh/Read_Mesh.cpp deleted file mode 100644 index b55b8e5c7159bcf306b2714f85c2f84e9c22d580..0000000000000000000000000000000000000000 --- a/Mesh/Read_Mesh.cpp +++ /dev/null @@ -1,294 +0,0 @@ -// $Id: Read_Mesh.cpp,v 1.23 2001-08-09 20:48:31 geuzaine Exp $ - -#include "Gmsh.h" -#include "Geo.h" -#include "Mesh.h" -#include "3D_Mesh.h" -#include "Create.h" -#include "MinMax.h" -#include "Context.h" - -extern Context_T CTX; - -/* ------------------------------------------------------------------------ */ -/* M S H F O R M A T */ -/* ------------------------------------------------------------------------ */ - -#define LGN1 1 -#define TRI1 2 -#define QUA1 3 -#define TET1 4 -#define HEX1 5 -#define PRI1 6 -#define PYR1 7 -#define LGN2 8 -#define TRI2 9 -#define QUA2 10 -#define TET2 11 -#define HEX2 12 -#define PRI2 13 -#define PYR2 14 -#define PNT 15 - -#define NB_NOD_MAX_ELM 20 - -/* relecture maillage au format MSH */ - -/* Note: the 'Dirty' flag only has an influence if one doesn't load - the geometry along with the mesh (since we make Tree_Insert for the - geometrical entities). And that's what we want. */ - -void Read_Mesh_MSH (Mesh *M, FILE *File_GEO){ - - char String[256]; - int Nbr_Nodes, Nbr_Elements, i_Node, i_Element; - int Num, Type, Physical, Elementary, i, j; - double x , y , z, lc1, lc2 ; - Vertex *vert , verts[NB_NOD_MAX_ELM] ,*vertsp[NB_NOD_MAX_ELM] , **vertspp; - Simplex *simp ; - Hexahedron *hex ; - Prism *pri ; - Curve C , *c , **cc; - Surface S , *s , **ss; - Volume V , *v , **vv; - Tree_T *Duplicates ; - - while (1) { - do { - fgets(String,sizeof(String), File_GEO) ; - if (feof(File_GEO)) break ; - } while (String[0] != '$') ; - - if (feof(File_GEO)) break ; - - /* P T S */ - - if (!strncmp(&String[1], "PTS", 3)) { - - fscanf(File_GEO, "%d", &Nbr_Nodes) ; - Msg(INFO, "%d Points", Nbr_Nodes); - - for (i_Node = 0 ; i_Node < Nbr_Nodes ; i_Node++) { - fscanf(File_GEO, "%d %lf %lf %lf %lf %lf", &Num, &x, &y, &z, &lc1, &lc2) ; - vert = Create_Vertex (Num, x, y, z, lc1 , lc2); - Tree_Replace(M->Points, &vert) ; - } - } - - /* N O E */ - - if (!strncmp(&String[1], "NO", 2)) { /* $NOE or $NOD */ - - fscanf(File_GEO, "%d", &Nbr_Nodes) ; - Msg(INFO, "%d Nodes", Nbr_Nodes); - - if(CTX.mesh.check_duplicates) - Duplicates = Tree_Create (sizeof (Vertex *), comparePosition); - for (i_Node = 0 ; i_Node < Nbr_Nodes ; i_Node++) { - fscanf(File_GEO, "%d %lf %lf %lf", &Num, &x, &y, &z) ; - vert = Create_Vertex (Num, x, y, z, 1.0 ,0.0); - Tree_Replace(M->Vertices, &vert); - if(CTX.mesh.check_duplicates){ - if((vertspp = (Vertex**)Tree_PQuery(Duplicates, &vert))) - Msg(WARNING, "Nodes %d and %d have identical coordinates (%g, %g, %g)", - Num, (*vertspp)->Num, x, y, z); - else - Tree_Add(Duplicates, &vert); - } - } - if(CTX.mesh.check_duplicates) - Tree_Delete(Duplicates); - } - - /* ELEMENTS */ - - else if (!strncmp(&String[1], "ELM", 3)) { - - fscanf(File_GEO, "%d", &Nbr_Elements) ; - Msg(INFO, "%d Elements", Nbr_Elements); - - if(CTX.mesh.check_duplicates) - Duplicates = Tree_Create (sizeof (Vertex *), comparePosition); - - for (i_Element = 0 ; i_Element < Nbr_Elements ; i_Element++) { - - // HACK FROM JF - // fscanf(File_GEO, "%d %d %d %d %d", - // &Num, &Type, &Physical, &Elementary, &Nbr_Nodes) ; - fscanf(File_GEO, "%d %d %d %d %d", - &Num, &Type, &Elementary, &Physical, &Nbr_Nodes) ; - - for (j = 0 ; j < Nbr_Nodes ; j++) - fscanf(File_GEO, "%d", &verts[j].Num) ; - - if(Elementary >= 0){ - - switch(Type){ - case LGN1: case LGN2: - c = &C; c->Num = Elementary; - if(!(cc = (Curve**)Tree_PQuery(M->Curves, &c))){ - c = Create_Curve(Elementary, MSH_SEGM_LINE, 0, NULL, - NULL, -1, -1, 0., 1.); - c->Dirty=1; - Tree_Add(M->Curves, &c); - } - else - c = *cc; - break; - case TRI1: case QUA1: case TRI2: case QUA2: - s = &S; s->Num = Elementary; - if(!(ss = (Surface**)Tree_PQuery(M->Surfaces, &s))){ - s = Create_Surface(Elementary, MSH_SURF_PLAN, Elementary); - s->Dirty=1; - Tree_Add(M->Surfaces, &s); - } - else - s = *ss; - break; - case TET1: case HEX1: case PRI1: case TET2: case HEX2: case PRI2: - v = &V; v->Num = Elementary; - if(!(vv = (Volume**)Tree_PQuery(M->Volumes, &v))){ - v = Create_Volume(Elementary, MSH_VOLUME, Elementary); - v->Dirty=1; - Tree_Add(M->Volumes, &v); - } - else - v = *vv; - break; - default : - break; - } - - for(i=0 ; i<Nbr_Nodes ; i++) { - vertsp[i] = &verts[i]; - if(!(vertspp = (Vertex**)Tree_PQuery(M->Vertices, &vertsp[i]))) - Msg(GERROR, "Unknown vertex %d in element %d", verts[i].Num, Num); - else - vertsp[i] = *vertspp; - } - - if(CTX.mesh.check_duplicates){ - vert = Create_Vertex (Num, 0., 0., 0., 1.0 ,0.0); - for(i=0 ; i<Nbr_Nodes ; i++){ - vert->Pos.X += vertsp[i]->Pos.X ; - vert->Pos.Y += vertsp[i]->Pos.Y ; - vert->Pos.Z += vertsp[i]->Pos.Z ; - } - vert->Pos.X /= (double) Nbr_Nodes; - vert->Pos.Y /= (double) Nbr_Nodes; - vert->Pos.Z /= (double) Nbr_Nodes; - if((vertspp = (Vertex**)Tree_PQuery(Duplicates, &vert))) - Msg(WARNING, "Elements %d and %d have identical barycenters", - Num, (*vertspp)->Num); - else - Tree_Add(Duplicates, &vert); - } - - switch(Type){ - case LGN1: - //simp = Create_Simplex(vertsp[0], vertsp[1], NULL , NULL); - //simp->Num = Num ; - //simp->iEnt = Elementary ; - //Tree_Insert(c->Simplexes, &simp) ; - //Tree_Insert(M->Simplexes, &simp) ; - break; - case TRI1: - simp = Create_Simplex(vertsp[0], vertsp[1], vertsp[2], NULL); - simp->Num = Num ; - simp->iEnt = Elementary ; - Tree_Insert(s->Simplexes, &simp) ; - Tree_Insert(M->Simplexes, &simp) ; - M->Statistics[7]++; - break; - case QUA1: - simp = Create_Quadrangle(vertsp[0], vertsp[1], vertsp[2], vertsp[3]); - simp->Num = Num ; - simp->iEnt = Elementary ; - Tree_Insert(s->Simplexes, &simp) ; - Tree_Insert(M->Simplexes, &simp) ; - M->Statistics[8]++; - break; - case TET1: - simp = Create_Simplex(vertsp[0], vertsp[1], vertsp[2], vertsp[3]); - simp->Num = Num ; - simp->iEnt = Elementary ; - Tree_Insert(v->Simplexes, &simp) ; - Tree_Insert(M->Simplexes, &simp) ; - M->Statistics[9]++; - break; - case HEX1: - hex = Create_Hexahedron(vertsp[0], vertsp[1], vertsp[2], vertsp[3], - vertsp[4], vertsp[5], vertsp[6], vertsp[7]); - hex->Num = Num ; - hex->iEnt = Elementary ; - Tree_Insert(v->Hexahedra, &hex) ; - M->Statistics[10]++; - break; - case PRI1: - pri = Create_Prism(vertsp[0], vertsp[1], vertsp[2], - vertsp[3], vertsp[4], vertsp[5]); - pri->Num = Num ; - pri->iEnt = Elementary ; - Tree_Insert(v->Prisms, &pri) ; - M->Statistics[11]++; - break; - case PNT: - break; - default : - Msg(WARNING, "Unknown type of element in Read_Mesh"); - break; - } - } - } - - if(CTX.mesh.check_duplicates){ - Tree_Action(Duplicates, Free_Vertex); - Tree_Delete(Duplicates); - } - - } - - do { - fgets(String, 256, File_GEO) ; - if (feof(File_GEO)) Msg(GERROR, "Prematured end of mesh file"); - } while (String[0] != '$') ; - - } - - if(Tree_Nbr(M->Volumes)){ - M->status = 3 ; - Gamma_Maillage(M, &M->Statistics[17], &M->Statistics[18], &M->Statistics[19]); - Eta_Maillage(M, &M->Statistics[20], &M->Statistics[21], &M->Statistics[22]); - R_Maillage(M, &M->Statistics[23], &M->Statistics[24], &M->Statistics[25]); - M->Statistics[6]=Tree_Nbr(M->Vertices); //incorrect, mais... - } - else if(Tree_Nbr(M->Surfaces)){ - M->status = 2 ; - M->Statistics[5]=Tree_Nbr(M->Vertices); //incorrect, mais... - } - else if(Tree_Nbr(M->Curves)){ - M->status = 1 ; - M->Statistics[4]=Tree_Nbr(M->Vertices); //incorrect, mais... - } - else if(Tree_Nbr(M->Points)) - M->status = 0 ; - else - M->status = -1 ; - -} - -/* ------------------------------------------------------------------------ */ -/* R e a d _ M e s h */ -/* ------------------------------------------------------------------------ */ -void Read_Mesh_SMS (Mesh *m, FILE *File_GEO); - -void Read_Mesh (Mesh *M, FILE *File_GEO, int type){ - - double s[50]; - switch(type){ - case FORMAT_MSH : Read_Mesh_MSH(M,File_GEO); break; - case FORMAT_SMS : Read_Mesh_SMS(M,File_GEO); break; - default : Msg(WARNING, "Unkown mesh file format to read"); break; - } - GetStatistics(s); -} diff --git a/Mesh/SMS.cpp b/Mesh/SMS.cpp deleted file mode 100644 index e2491d215a057b103488722e7025e3cde140624b..0000000000000000000000000000000000000000 --- a/Mesh/SMS.cpp +++ /dev/null @@ -1,668 +0,0 @@ -#include <iostream.h> -#include <assert.h> -#include "Gmsh.h" -#include "Geo.h" -#include "Mesh.h" -#include "Create.h" -#include "MinMax.h" -#include "Vertex.h" -#include "CAD.h" -#include "Context.h" -#include "Message.h" - -extern Context_T CTX; - -/* - Reads a SMS mesh file format. - Fills the Mesh structure and says - the interface that the state of the current - mesh is 3. - -*/ - -#define ENTITY_VERTEX 0 -#define ENTITY_EDGE 1 -#define ENTITY_FACE 2 -#define ENTITY_REGION 3 -#define ENTITY_NONE 4 -extern int FACE_DIMENSION; -void TRIE_MON_GARS2 (void *a, void *b) -{ - Simplex *s = *(Simplex **) a; - s->Fourre_Simplexe (s->V[0], s->V[1], s->V[2], s->V[3]); -} - -void Read_VTK_File (char *file, Mesh *m) -{ - - FILE *in = fopen (file,"r"); - if(!in)return; - char line[256],dumline1[256],dumline2[256]; - int i; - int NbFaces,NbVertices,Vertex1,Vertex2,Vertex3,NbVerticesOnFace; - double x,y,z; - Vertex *v1,*v2,*v3,*v4; - - fgets(line,255,in); - fgets(line,255,in); - fgets(line,255,in); - fgets(line,255,in); - fgets(line,255,in); - sscanf(line,"%s %d %s",dumline1,&NbVertices,dumline2); - - Surface *surf = Create_Surface(1,MSH_SURF_DISCRETE,1); - surf->Generatrices = List_Create(1,1,sizeof(Curve*)); - Tree_Add(m->Surfaces,&surf); - - for(i=0;i<NbVertices;i++) - { - fscanf(in,"%le %le %le",&x,&y,&z); - Vertex *v = Create_Vertex(i,x,y,z,1.0,1.0); - Tree_Add(m->Vertices,&v); - Tree_Add(surf->Vertices,&v); - v->ListSurf = List_Create(1,1,sizeof(Surface*)); - List_Add(v->ListSurf,&surf); - } - fscanf(in,"%s %d %d",dumline1,&NbFaces,&i); - for(int i=0;i<NbFaces;i++) - { - fscanf(in,"%d",&NbVerticesOnFace); - if(NbVerticesOnFace == 3) - { - fscanf(in,"%d %d %d", &Vertex1,&Vertex2,&Vertex3); - v1 = FindVertex(Vertex1,m); - v2 = FindVertex(Vertex2,m); - v3 = FindVertex(Vertex3,m); - v4 = NULL; - } - else - { - printf("no quads man !\n"); - exit(-1); - } - Simplex *s = Create_Simplex (v1,v2,v3,v4); - s->V[0] = v1; - s->V[1] = v2; - s->V[2] = v3; - s->Num = i; - s->iEnt = 1; - if((surf = FindSurface(1,m))) - { - } - else - { - surf = Create_Surface(1,MSH_SURF_DISCRETE,1); - surf->Generatrices = List_Create(1,1,sizeof(Curve*)); - Tree_Add(m->Surfaces,&surf); - } - Tree_Add(surf->Simplexes,&s); - } - FACE_DIMENSION = 2; - Tree_Action (surf->Simplexes, TRIE_MON_GARS2); - if(NbFaces)m->status = 2; - - Volume *vol = Create_Volume(1,MSH_VOLUME,1); - vol->Surfaces = List_Create(1,1,sizeof(Surface*)); - List_Add(vol->Surfaces,&surf); - Tree_Add(m->Volumes,&vol); - - fclose (in); -} - -void Read_Mesh_SMS (Mesh *m, FILE *in) -{ - char line[1023]; - int i,patch,nbPts; - int NbRegions,NbFaces,NbEdges,NbVertices,NbPoints, - GEntityType,GEntityId,EntityNbConnections,Dummy, - Edge1,Edge2,Edge3,Edge4,Face1,Face2,Face3,Face4; - int VertexId1,VertexId2,NbEdgesOnFace,NbFacesOnRegion; - double x,y,z,u,v; - List_T *AllEdges,*AllFaces; - Vertex *v1,*v2,*v3,*v4; - - - fscanf(in,"%s %d",line,&Dummy); - fscanf(in,"%d %d %d %d %d",&NbRegions,&NbFaces,&NbEdges,&NbVertices,&NbPoints); - - Msg(INFO,"reading a mesh in scorec format"); - Msg(INFO,"%d Vertices",NbVertices); - - for(i=0;i<NbVertices;i++) - { - fscanf(in,"%d",&GEntityId); - if(GEntityId) - { - fscanf(in,"%d %d %lf %lf %lf",&GEntityType,&EntityNbConnections,&x,&y,&z); - Vertex *vert = Create_Vertex(i,x,y,z,1.0,1.0); - Tree_Add(m->Vertices,&vert); - switch(GEntityType) - { - case 0: - Tree_Add(m->Points,&vert); - break; - case 1: - fscanf(in,"%le",&u); - break; - case 2: - fscanf(in,"%le %le %d",&u,&v,&patch); - break; - case 3: - break; - } - } - } - - Msg(INFO,"%d Edges",NbEdges); - AllEdges = List_Create(NbEdges,1,sizeof(Edge)); - Edge e; - - for(int i=0;i<NbEdges;i++) - { - fscanf(in,"%d",&GEntityId); - - if(GEntityId) - { - fscanf(in,"%d %d %d %d %d",&GEntityType, &VertexId1,&VertexId2,&EntityNbConnections,&nbPts); - for(int j=0;j<nbPts;j++) - { - switch(GEntityType) - { - case 0: - break; - case 1: - fscanf(in,"%le",&u); - break; - case 2: - fscanf(in,"%le %le %d",&u,&v,&patch); - break; - case 3: - break; - } - } - e.Points = NULL; - Vertex *v1 = FindVertex(VertexId1-1,m); - Vertex *v2 = FindVertex(VertexId2-1,m); - e.V[0] = v1; - e.V[1] = v2; - List_Add(AllEdges,&e); - switch(GEntityType) - { - case ENTITY_EDGE : - Simplex *s = Create_Simplex(v1,v2,NULL,NULL); - Curve *c; - if((c = FindCurve(GEntityId,m))) - { - } - else - { - c = Create_Curve(GEntityId,MSH_SEGM_DISCRETE,1,NULL,NULL,-1,-1,0,1); - c->beg = v1; - c->end = v2; - Tree_Add(m->Curves,&c); - } - s->iEnt = GEntityId; - // List_Add(v1->ListCurves,&c); - // List_Add(v2->ListCurves,&c); - Tree_Add(c->Simplexes,&s); - s->Num = i; - } - } - } - - AllFaces = List_Create(NbFaces,1,sizeof(Simplex*)); - - Volume *vol = Create_Volume(1,MSH_VOLUME,1); - vol->Surfaces = List_Create(1,1,sizeof(Surface*)); - Tree_Add(m->Volumes,&vol); - FACE_DIMENSION = 2; - - Msg(INFO,"%d Faces",NbFaces); - for(int i=0;i<NbFaces;i++) - { - fscanf(in,"%d",&GEntityId); - if(GEntityId) - { - fscanf(in,"%d %d",&GEntityType, &NbEdgesOnFace); - - - List_T *Lists[4] = {0,0,0,0}; - - if(NbEdgesOnFace == 3) - { - fscanf(in,"%d %d %d %d",&Edge1,&Edge2,&Edge3,&nbPts); - List_Read(AllEdges,abs(Edge1)-1,&e); - Lists[0] = e.Points; - if(Edge1 > 0)v1 = e.V[0]; - else v1 = e.V[1]; - List_Read(AllEdges,abs(Edge2)-1,&e); - Lists[1] = e.Points; - if(Edge2 > 0)v2 = e.V[0]; - else v2 = e.V[1]; - List_Read(AllEdges,abs(Edge3)-1,&e); - Lists[2] = e.Points; - if(Edge3 > 0)v3 = e.V[0]; - else v3 = e.V[1]; - v4 = NULL; - } - else if(NbEdgesOnFace == 4) - { - fscanf(in,"%d %d %d %d %d",&Edge1,&Edge2,&Edge3,&Edge4,&nbPts); - List_Read(AllEdges,abs(Edge1)-1,&e); - if(Edge1 > 0)v1 = e.V[0]; - else v1 = e.V[1]; - List_Read(AllEdges,abs(Edge2)-1,&e); - if(Edge2 > 0)v2 = e.V[0]; - else v2 = e.V[1]; - List_Read(AllEdges,abs(Edge3)-1,&e); - if(Edge3 > 0)v3 = e.V[0]; - else v3 = e.V[1]; - List_Read(AllEdges,abs(Edge4)-1,&e); - if(Edge4 > 0)v4 = e.V[0]; - else v4 = e.V[1]; - } - else - { - cout << "exiting" << endl; - exit(-1); - } - for(int j=0;j<nbPts;j++) - { - switch(GEntityType) - { - case 0: - break; - case 1: - fscanf(in,"%le",&u); - break; - case 2: - fscanf(in,"%le %le %d",&u,&v,&patch); - break; - case 3: - break; - } - } - - Simplex *s = Create_Simplex (v1,v2,v3,v4); - // s->curvedBounds(Edge1,Edge2,Edge3,Edge4,Lists,m->VertexEdges); - s->Num = i+1; - s->iEnt = GEntityId+10000; - Surface *surf; - List_Add(AllFaces,&s); - - switch(GEntityType) - { - case ENTITY_REGION : - break; - case ENTITY_FACE : - if((surf = FindSurface(GEntityId+10000,m))) - { - } - else - { - surf = Create_Surface(GEntityId+10000,MSH_SURF_DISCRETE,1); - if(!NbRegions)List_Add(vol->Surfaces,&surf); - surf->Generatrices = List_Create(1,1,sizeof(Curve*)); - Tree_Add(m->Surfaces,&surf); - } - Tree_Add(surf->Vertices,&s->V[0]); - Tree_Add(surf->Vertices,&s->V[1]); - Tree_Add(surf->Vertices,&s->V[2]); - Tree_Add(surf->Simplexes,&s); - } - } - } - - - Msg(INFO,"%d Region",NbRegions); - - for(int i=0;i<NbRegions;i++) - { - fscanf(in,"%d",&GEntityId); - if(GEntityId) - { - fscanf(in,"%d",&NbFacesOnRegion); - Simplex *myS1,*myS2; - if(NbFacesOnRegion == 4) - { - fscanf(in,"%d %d %d %d %d",&Face1,&Face2,&Face3,&Face4,&Dummy); - List_Read(AllFaces,abs(Face1)-1,&myS1); - List_Read(AllFaces,abs(Face2)-1,&myS2); - v1 = myS1->V[0]; - v2 = myS1->V[1]; - v3 = myS1->V[2]; - for(int hh =0;hh<3;hh++)if(compareVertex(&v1,&myS2->V[hh]) && - compareVertex(&v2,&myS2->V[hh]) && - compareVertex(&v3,&myS2->V[hh]))v4=myS2->V[hh]; - } - if(!v1 || !v2 || !v3 || !v4) - { - printf("%d\n",NbFacesOnRegion); - printf("%p %p %p %p\n",v1,v2,v3,v4); - printf("%p %p %p \n",myS1->V[0],myS1->V[1],myS1->V[2]); - printf("%p %p %p \n",myS2->V[0],myS2->V[1],myS2->V[2]); - assert(1==0); - } - Simplex *s = Create_Simplex (v1,v2,v3,v4); - - if((vol = FindVolume(GEntityId,m))) - { - } - else - { - vol = Create_Volume(GEntityId,MSH_VOLUME,GEntityId); - Tree_Add(m->Volumes,&vol); - } - s->iEnt = GEntityId; - Tree_Insert(vol->Simplexes,&s); - Tree_Insert(m->Simplexes,&s); - } - } - - List_Delete(AllFaces); - - - if(NbRegions)m->status = 3; - else if(NbFaces)m->status = 2; - else if(NbEdges)m->status = 1; - Msg(INFO,"Done."); -} -/* -void Write_SMS_FILE (Mesh *m, char *filename) -{ - FILE *f = fopen (filename,"w"); - // write first the global infos - int i,j; -// Edge e; - - List_T *l; - List_T *AllFaces = List_Create(100,100,sizeof(Simplex*)); - Surface *surf; - Simplex *s; - Vertex *v; - Curve *c; - - - l = Tree2List(m->Surfaces); - EdgesContainer AllEdges(l); - - - for(i=0;i<List_Nbr(l);i++) - { - List_Read(l,i,&surf); - List_T *all = Tree2List(surf->Simplexes); - for(j=0;j<List_Nbr(all);j++)List_Add(AllFaces,List_Pointer(all,j)); - List_Delete(all); - } - List_Delete(l); - - fprintf(f,"gmsh 2\n"); - fprintf(f,"0 %d %d %d %d\n" - ,List_Nbr(AllFaces) - ,Tree_Nbr(AllEdges.AllEdges) - ,Tree_Nbr(m->Vertices) - ,Tree_Nbr(m->Vertices)); - - - - l = Tree2List(m->Vertices); - int MaxFrozen; - for(i = 0;i<List_Nbr(l);i++) - { - List_Read(l,i,&v); - MaxFrozen = (MaxFrozen>=v->Frozen)?MaxFrozen:v->Frozen; - } - - for(i = 0;i<List_Nbr(l);i++) - { - List_Read(l,i,&v); - int mtype = ((v->ListCurves)?((List_Nbr(v->ListCurves)== 1)?ENTITY_EDGE:ENTITY_VERTEX):ENTITY_FACE); - int gent; - switch(mtype) - { - case ENTITY_VERTEX : gent = i+1;break; - case ENTITY_EDGE : List_Read(v->ListCurves,0,&c);gent = c->ipar[3]+1;break; - case ENTITY_FACE : List_Read(v->ListSurf,0,&surf);gent = surf->ipar[3]+1;break; - } - v->Frozen = i+1; - int nn = 7; // arbitrary - fprintf(f,"%d %d %d\n",gent,mtype,nn); - switch(mtype) - { - case ENTITY_VERTEX : fprintf(f,"%12.5E %12.5E %12.5E\n",v->Pos.X,v->Pos.Y,v->Pos.Z) ;break; - case ENTITY_EDGE : fprintf(f,"%12.5E %12.5E %12.5E 0 \n",v->Pos.X,v->Pos.Y,v->Pos.Z) ;break; - case ENTITY_FACE : fprintf(f,"%12.5E %12.5E %12.5E 0 0 1\n",v->Pos.X,v->Pos.Y,v->Pos.Z) ;break; - } - } - - // extern int DEGRE2; - - printf("%d edges\n",Tree_Nbr(AllEdges.AllEdges)); - l = Tree2List(m->Curves); - for(i=0;i<List_Nbr(l);i++) - { - List_Read(l,i,&c); - AllEdges.AddTree(c->Simplexes,false); - // if(c->Num > 0 && c->Typ != MSH_SEGM_LINE)AllEdges.AddPoints(c,DEGRE2-1); - } - List_Delete(l); - printf("%d edges\n",Tree_Nbr(AllEdges.AllEdges)); - - - l = Tree2List(AllEdges.AllEdges); - int compareEdgeNum (const void *a, const void *b); - - List_Sort(l,compareEdgeNum); - - for(i = 0;i<List_Nbr(l);i++) - { - int mtype = ENTITY_FACE; - Edge *pe = (Edge*)List_Pointer(l,i); - int nn = 0,gent; - for(j=0;j<List_Nbr(pe->Simplexes);j++) - { - List_Read(pe->Simplexes,j,&s); - if(!s->V[2]){ - mtype = ENTITY_EDGE; - gent = s->iEnt; - } - if(mtype == ENTITY_FACE) - { - nn ++; - gent = s->iEnt; - } - } - if(!pe->Points) - fprintf(f,"%d %d %d %d %d 0\n",gent,mtype,pe->V[0]->Frozen,pe->V[1]->Frozen,nn); - else - { - fprintf(f,"%d %d %d %d %d %d\n",gent,mtype,pe->V[0]->Frozen,pe->V[1]->Frozen,nn, - List_Nbr(pe->Points)); - for(int k=0;k<List_Nbr(pe->Points);k++) - { - Coord cr; - List_Read(pe->Points,k,&cr); - fprintf(f,"%12.5E %12.5E %12.5E %12.5E ",cr.X,cr.Y,cr.Z,0.0); - } - fprintf(f,"\n"); - } - } - - Edge *ed[4]; - int ori[4]; - int *edids = new int[List_Nbr(l)+1]; - for(i=0;i<List_Nbr(l)+1;i++)edids[i] = 0; - List_Delete(l); - for(i = 0;i<List_Nbr(AllFaces);i++) - { - List_Read(AllFaces,i,&s); - AllEdges.GetEdges(s,false,ed,ori); - if(!ed[3]) - { - for(int k=0;k<3;k++) - { - if(edids[ed[k]->Num] == ori[k]) - { - Simplex *s1,*s2; - List_Read(ed[k]->Simplexes,0,&s1); - List_Read(ed[k]->Simplexes,1,&s2); - printf("Edge %d %d\n",ed[k]->V[0]->Num,ed[k]->V[1]->Num); - printf("s1 = %d %d %d\n",s1->V[0]->Num,s1->V[1]->Num,s1->V[2]->Num); - printf("s2 = %d %d %d\n",s2->V[0]->Num,s2->V[1]->Num,s2->V[2]->Num); - } - else - { - edids[ed[k]->Num] = ori[k]; - } - } - - fprintf(f,"%d %d 3 %d %d %d 0\n",s->iEnt,ENTITY_FACE,ori[0] * ed[0]->Num, - ori[1]*ed[1]->Num,ori[2]*ed[2]->Num); - } - else fprintf(f,"%d %d 4 %d %d %d %d 0\n",s->iEnt,ENTITY_FACE,ori[0]*ed[0]->Num, - ori[1]*ed[1]->Num,ori[2]*ed[2]->Num,ori[3]*ed[3]->Num); - } - delete edids; - List_Delete(AllFaces); - fclose (f); - -} -*/ -int isTopologic (Vertex *v, List_T *curves) -{ - Curve *c; - for(int i=0;i<List_Nbr(curves);i++) - { - List_Read(curves,i,&c); - if(!compareVertex(&v,&c->beg))return 1; - } - return 0; -} - -void Write_DMG_FILE (Mesh *m, char *filename) -{ - FILE *f = fopen (filename,"w"); - int i,j; - List_T *ll,*l; - Vertex *v; - Curve *c; - Surface *s; - //Volume *vol; - int k; - - l = Tree2List(m->Points); - ll = Tree2List(m->Curves); - - k = 0; - for(i = 0;i<List_Nbr(l);i++) - { - List_Read(l,i,&v); - if(isTopologic(v,ll)) - { - k++; - } - } - - // write first the global infos - - fprintf(f,"%d %d %d %d \n" - ,Tree_Nbr(m->Volumes) - ,Tree_Nbr(m->Surfaces) - ,Tree_Nbr(m->Curves)/2 // the 2 is for the reverse curves - ,k); - - // then write the bounding box - - m->Grid.min.X = CTX.min[0]; - m->Grid.min.Y = CTX.min[1]; - m->Grid.min.Z = CTX.min[2]; - m->Grid.max.X = CTX.max[0]; - m->Grid.max.Y = CTX.max[1]; - m->Grid.max.Z = CTX.max[2]; - - fprintf(f,"%12.5E %12.5E %12.5E \n",m->Grid.min.X,m->Grid.min.Y,m->Grid.min.Z); - fprintf(f,"%12.5E %12.5E %12.5E \n",m->Grid.max.X,m->Grid.max.Y,m->Grid.max.Z); - - // write the points - k = 0; - for(i = 0;i<List_Nbr(l);i++) - { - List_Read(l,i,&v); - if(isTopologic(v,ll)) - { - v->Frozen = k++; - fprintf(f,"%d %12.5E %12.5E %12.5E \n",v->Frozen,v->Pos.X,v->Pos.Y,v->Pos.Z); - } - } - List_Delete(l); - // write the curves - l = ll; - k = 0; - for(i = 0;i<List_Nbr(l);i++) - { - List_Read(l,i,&c); - if(c->Num > 0){ - c->ipar[3] = k; - Curve *cinv = FindCurve(-c->Num,m); - cinv->ipar[3] = k++; - fprintf(f,"%d %d %d \n",c->ipar[3],c->beg->Frozen,c->end->Frozen); - } - } - - List_Delete(l); - - // write the surfaces - l = Tree2List(m->Surfaces); - - for(i = 0;i<List_Nbr(l);i++) - { - List_Read(l,i,&s); - - int numEdgeLoop[2000],iLoop=0; - Vertex *beg = NULL; - numEdgeLoop[iLoop] = 0; - int deb = 1; - for(j=0;j<List_Nbr(s->Generatrices);j++) - { - List_Read(s->Generatrices,j,&c); - if(deb) - { - beg = c->beg; - deb = 0; - } - cout << "beg-> " << c->beg->Num << " end-> " << c->end->Num << endl; - (numEdgeLoop[iLoop]) ++ ; - if(c->end == beg) - { - iLoop++; - numEdgeLoop[iLoop] = 0; - deb = 1; - } - } - s->ipar[3] = i; - fprintf(f,"%d %d\n",i,iLoop); - fprintf(stdout,"%d %d\n",i,iLoop); - int iEdge = 0; - for(k=0;k<iLoop;k++) - { - fprintf(f,"%d ",numEdgeLoop[k]); - fprintf(stdout,"%d ",numEdgeLoop[k]); - for(j=0;j<numEdgeLoop[k];j++) - { - List_Read(s->Generatrices,iEdge++,&c); - fprintf(f,"%d %d ",abs(c->ipar[3]),(c->Num>0)?1:-1); - fprintf(stdout,"%d %d ",abs(c->ipar[3]),(c->Num>0)?1:-1); - } - fprintf(f,"\n"); - fprintf(stdout,"\n"); - } - } - List_Delete(l); - - // write the volumes (2 b continued) - - // close the file - - fclose(f); - -} diff --git a/Mesh/STL.cpp b/Mesh/STL.cpp deleted file mode 100644 index 80870de30b89531adab194b4c231d255e594a36a..0000000000000000000000000000000000000000 --- a/Mesh/STL.cpp +++ /dev/null @@ -1,75 +0,0 @@ -// $Id: STL.cpp,v 1.5 2001-04-26 17:58:00 remacle Exp $ - -#include "Gmsh.h" -#include "Mesh.h" -#include "STL.h" - -extern Mesh *THEM; - -STL_Data::STL_Data (){ - Vertices = Tree_Create (sizeof (Vertex *), comparePosition); - Simplexes = Tree_Create (sizeof (Simplex *), compareSimplex); - LSimplexes = NULL; - LVertices = NULL; -} - -STL_Data::~STL_Data (){ -} - -void STL_Data::Add_Facet (double x1, double y1, double z1, - double x2, double y2, double z2, - double x3, double y3, double z3){ - Vertex **ppv; - Vertex *v1 = Create_Vertex (Tree_Nbr (Vertices) + 1, x1, y1, z1, 1, 0); - - if ((ppv = (Vertex **) Tree_PQuery (Vertices, &v1))){ - delete v1; - v1 = *ppv; - } - else{ - Tree_Add (Vertices, &v1); - Tree_Add (THEM->Points, &v1); - } - - Vertex *v2 = Create_Vertex (Tree_Nbr (Vertices) + 1, x2, y2, z2, 1, 0); - if ((ppv = (Vertex **) Tree_PQuery (Vertices, &v2))){ - delete v2; - v2 = *ppv; - } - else{ - Tree_Add (Vertices, &v2); - Tree_Add (THEM->Points, &v2); - } - - Vertex *v3 = Create_Vertex (Tree_Nbr (Vertices) + 1, x3, y3, z3, 1, 0); - if ((ppv = (Vertex **) Tree_PQuery (Vertices, &v3))){ - delete v3; - v3 = *ppv; - } - else{ - Tree_Add (Vertices, &v3); - Tree_Add (THEM->Points, &v3); - } - Simplex *s = Create_Simplex (v1, v2, v3, NULL); - Tree_Add (Simplexes, &s); -} - -void STL_Data::GetFacet (int ifac, int &v1, int &v2, int &v3){ - Simplex *s; - if (!LSimplexes) - LSimplexes = Tree2List (Simplexes); - List_Read (LSimplexes, ifac - 1, &s); - v1 = s->V[0]->Num; - v2 = s->V[1]->Num; - v3 = s->V[2]->Num; -} - -void STL_Data::GetVertex (int i, double &x, double &y, double &z){ - Vertex *v; - if (!LVertices) - LVertices = Tree2List (Vertices); - List_Read (LVertices, i - 1, &v); - x = v->Pos.X; - y = v->Pos.Y; - z = v->Pos.Z; -} diff --git a/Mesh/STL.h b/Mesh/STL.h deleted file mode 100644 index a4b394f3366fe5611b0d37d4f8aca6c932af3302..0000000000000000000000000000000000000000 --- a/Mesh/STL.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef _STL_H_ -#define _STL_H_ - -class STL_Data -{ - public: - Tree_T * Vertices; - Tree_T *Simplexes; - List_T *LVertices; - List_T *LSimplexes; - void Add_Facet (double x1, double y1, double z1, - double x2, double y2, double z2, - double x3, double y3, double z3); - int GetNbFacets (){ - return Tree_Nbr (Simplexes); - } - int GetNbVertices (){ - return Tree_Nbr (Vertices); - } - void GetFacet (int iFac, int &v1, int &v2, int &v3); - void GetVertex (int iVertex, double &x, double &y, double &z); - STL_Data (); - ~STL_Data (); -}; - -#endif diff --git a/Mesh/SecondOrder.cpp b/Mesh/SecondOrder.cpp deleted file mode 100644 index b893ed481a42988f831bbb7c4d58ad80e6c9710a..0000000000000000000000000000000000000000 --- a/Mesh/SecondOrder.cpp +++ /dev/null @@ -1,148 +0,0 @@ -// $Id: SecondOrder.cpp,v 1.6 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Geo.h" -#include "Mesh.h" -#include "Utils.h" -#include "Interpolation.h" -#include "Numeric.h" - -extern int CurrentNodeNumber; - -static Surface *THES; -static Curve *THEC; - -Vertex *middlecurve (Vertex * v1, Vertex * v2){ - Vertex v, *pv; - - if (!THEC) - return NULL; - - if ((v1->ListCurves && List_Nbr (v1->ListCurves) != 1) || - (v2->ListCurves && List_Nbr (v2->ListCurves) != 1)){ - v.Pos.X = (v1->Pos.X + v2->Pos.X) * 0.5; - v.Pos.Y = (v1->Pos.Y + v2->Pos.Y) * 0.5; - v.Pos.Z = (v1->Pos.Z + v2->Pos.Z) * 0.5; - } - else - v = InterpolateCurve (THEC, 0.5 * (v1->u + v2->u), 0); - - pv = Create_Vertex (++CurrentNodeNumber, v.Pos.X, v.Pos.Y, v.Pos.Z, v.lc, v.u); - - if (!pv->ListCurves){ - pv->ListCurves = List_Create (1, 1, sizeof (Curve *)); - } - List_Add (pv->ListCurves, &THEC); - return pv; -} - -Vertex *middleface (Vertex * v1, Vertex * v2){ - Vertex v, *pv; - double U, V, U1, U2, V1, V2; - - if (!THES) - return NULL; - if (THES->Typ == MSH_SURF_PLAN) - return NULL; - - XYZtoUV ( THES , v1->Pos.X , v1->Pos.Y , v1->Pos.Z, &U1 , &V1 ); - XYZtoUV ( THES , v2->Pos.X , v2->Pos.Y , v2->Pos.Z, &U2 , &V2 ); - - U = 0.5 *(U1+U2); - V = 0.5 *(V1+V2); - v = InterpolateSurface(THES,U,V,0,0); - pv = Create_Vertex(++CurrentNodeNumber,v.Pos.X,v.Pos.Y,v.Pos.Z,v.lc,v.u); - return pv; -} - -extern int edges_tetra[6][2]; -extern int edges_quad[4][2]; -static Tree_T *THET; -extern int EdgesInVolume; - -void PutMiddlePoint (void *a, void *b){ - Edge *ed; - Simplex *s; - Vertex *v; - int i, j, k, N; - int edges[6][2]; - - ed = (Edge *) a; - - if (ed->newv) - v = ed->newv; - else if ((v = middlecurve (ed->V[0], ed->V[1]))); - else if ((v = middleface (ed->V[0], ed->V[1]))); - else - v = Create_Vertex (++CurrentNodeNumber, - 0.5 * (ed->V[0]->Pos.X + ed->V[1]->Pos.X), - 0.5 * (ed->V[0]->Pos.Y + ed->V[1]->Pos.Y), - 0.5 * (ed->V[0]->Pos.Z + ed->V[1]->Pos.Z), - 0.5 * (ed->V[0]->lc + ed->V[1]->lc), - 0.5 * (ed->V[0]->u + ed->V[1]->u)); - ed->newv = v; - Tree_Insert (THET, &v); - for (i = 0; i < List_Nbr (ed->Simplexes); i++){ - List_Read (ed->Simplexes, i, &s); - if (s->V[3] && EdgesInVolume){ - if (!s->VSUP) - s->VSUP = (Vertex **) Malloc (6 * sizeof (Vertex *)); - N = 6; - for (k = 0; k < N; k++) - for (j = 0; j < 2; j++) - edges[k][j] = edges_tetra[k][j]; - } - else if (s->V[3]){ - if (!s->VSUP) - s->VSUP = (Vertex **) Malloc (4 * sizeof (Vertex *)); - N = 4; - for (k = 0; k < N; k++) - for (j = 0; j < 2; j++) - edges[k][j] = edges_quad[k][j]; - } - else if (s->V[2]){ - if (!s->VSUP) - s->VSUP = (Vertex **) Malloc (3 * sizeof (Vertex *)); - N = 3; - for (k = 0; k < N; k++) - for (j = 0; j < 2; j++) - edges[k][j] = edges_tetra[k][j]; - } - else{ - if (!s->VSUP) - s->VSUP = (Vertex **) Malloc (sizeof (Vertex *)); - N = 1; - for (k = 0; k < N; k++) - for (j = 0; j < 2; j++) - edges[k][j] = edges_tetra[k][j]; - } - - for (j = 0; j < N; j++){ - if ((!compareVertex (&s->V[edges[j][0]], &ed->V[0]) && - !compareVertex (&s->V[edges[j][1]], &ed->V[1])) || - (!compareVertex (&s->V[edges[j][0]], &ed->V[1]) && - !compareVertex (&s->V[edges[j][1]], &ed->V[0]))){ - s->VSUP[j] = v; - } - } - } -} - -void Degre2 (Tree_T * AllNodes, Tree_T * TreeNodes, Tree_T * TreeElm, - Curve * c, Surface * s){ - static Tree_T *TreeEdges = NULL; - - THES = s; - THEC = c; - THET = TreeNodes; - - if (!TreeEdges) - TreeEdges = Tree_Create (sizeof (Edge), compareedge); - - if (THES || THEC) - EdgesInVolume = 0; - - crEdges (TreeElm, TreeEdges); - Tree_Action (TreeEdges, PutMiddlePoint); - EdgesInVolume = 1; -} diff --git a/Mesh/Simplex.cpp b/Mesh/Simplex.cpp deleted file mode 100644 index 5bb46fd95cd8cbe9be491a21c1cff2c3dc5e3495..0000000000000000000000000000000000000000 --- a/Mesh/Simplex.cpp +++ /dev/null @@ -1,778 +0,0 @@ -// $Id: Simplex.cpp,v 1.16 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "Mesh.h" -#include "Simplex.h" -#include "Context.h" - -extern Context_T CTX; - -int Simplex::TotalAllocated = 0; -int Simplex::TotalNumber = 0; - -extern Simplex MyNewBoundary; - -int FACE_DIMENSION = 2; - -Simplex::Simplex (){ - TotalAllocated++; - TotalNumber++; - VSUP = NULL; - V[0] = V[1] = V[2] = V[3] = NULL; - S[0] = S[1] = S[2] = S[3] = NULL; - iEnt = -1; - Quality = 0. ; - Num = TotalNumber; -} - -Simplex::Simplex (Vertex * v1, Vertex * v2, Vertex * v3, Vertex * v4){ - TotalAllocated++; - TotalNumber++; - VSUP = NULL; - S[0] = S[1] = S[2] = S[3] = NULL; - Quality = 0. ; - Fourre_Simplexe (v1, v2, v3, v4); - Num = TotalNumber; - iEnt = -1; -} - -Simplex::~Simplex (){ - TotalAllocated--; -} - -int Simplex:: CircumCircle (double x1, double y1, - double x2, double y2, - double x3, double y3, - double *xc, double *yc){ - double d, a1, a2, a3; - - d = 2. * (double) (y1 * (x2 - x3) + y2 * (x3 - x1) + y3 * (x1 - x2)); - if (d == 0.0){ - *xc = *yc = -99999.; - Msg(WARNING, "Degenerated simplex"); - return 0; - } - - a1 = x1 * x1 + y1 * y1; - a2 = x2 * x2 + y2 * y2; - a3 = x3 * x3 + y3 * y3; - *xc = (double) ((a1 * (y3 - y2) + a2 * (y1 - y3) + a3 * (y2 - y1)) / d); - *yc = (double) ((a1 * (x2 - x3) + a2 * (x3 - x1) + a3 * (x1 - x2)) / d); - - return 1; -} - -void Simplex::Center_Circum (){ - /* Calcul du centre de la boule circonscrite */ - int i, N; - double X[4], Y[4], Z[4]; - double res[3]; - - if (!V[3]) - N = 3; - else - N = 4; - - for (i = 0; i < N; i++){ - X[i] = V[i]->Pos.X; - Y[i] = V[i]->Pos.Y; - Z[i] = V[i]->Pos.Z; - } - - if (N == 3){ - CircumCircle (V[0]->Pos.X, V[0]->Pos.Y, - V[1]->Pos.X, V[1]->Pos.Y, - V[2]->Pos.X, V[2]->Pos.Y, - &Center.X, &Center.Y); - Center.Z = 0.0; - if (fabs (Center.X) > 1.e10) - Center.X = 1.e10; - if (fabs (Center.Y) > 1.e10) - Center.Y = 1.e10; - Radius = sqrt ((X[0] - Center.X) * (X[0] - Center.X) + - (Y[0] - Center.Y) * (Y[0] - Center.Y)); - } - else{ - center_tet (X, Y, Z, res); - - Center.X = res[0]; - Center.Y = res[1]; - Center.Z = res[2]; - Radius = sqrt ((X[0] - Center.X) * (X[0] - Center.X) + - (Y[0] - Center.Y) * (Y[0] - Center.Y) + - (Z[0] - Center.Z) * (Z[0] - Center.Z)); - } -} - -int Simplex::Pt_In_Ellipsis (Vertex * v, double Metric[3][3]){ - double eps, d1, d2, x[2]; - - Center_Ellipsum_2D (Metric); - - x[0] = Center.X - v->Pos.X; - x[1] = Center.Y - v->Pos.Y; - - d1 = Radius; - d2 = sqrt (x[0] * x[0] * Metric[0][0] - + x[1] * x[1] * Metric[1][1] - + 2. * x[0] * x[1] * Metric[0][1]); - - eps = fabs (d1 - d2) / (d1 + d2); - if (eps < 1.e-12) - { - return (1); // Ou Zero ??? - } - if (d2 < d1) - return 1; - return 0; - -} - -double Simplex::Volume_Simplexe2D (){ - return ((V[1]->Pos.X - V[0]->Pos.X) * - (V[2]->Pos.Y - V[1]->Pos.Y) - - (V[2]->Pos.X - V[1]->Pos.X) * - (V[1]->Pos.Y - V[0]->Pos.Y)); -} - -void Simplex::center_tet (double X[4], double Y[4], double Z[4], double res[3]){ - double mat[3][3], b[3], dum; - int i; - b[0] = X[1] * X[1] - X[0] * X[0] + - Y[1] * Y[1] - Y[0] * Y[0] + - Z[1] * Z[1] - Z[0] * Z[0]; - b[1] = X[2] * X[2] - X[1] * X[1] + - Y[2] * Y[2] - Y[1] * Y[1] + - Z[2] * Z[2] - Z[1] * Z[1]; - b[2] = X[3] * X[3] - X[2] * X[2] + - Y[3] * Y[3] - Y[2] * Y[2] + - Z[3] * Z[3] - Z[2] * Z[2]; - - for (i = 0; i < 3; i++) - b[i] *= 0.5; - - mat[0][0] = X[1] - X[0]; - mat[0][1] = Y[1] - Y[0]; - mat[0][2] = Z[1] - Z[0]; - mat[1][0] = X[2] - X[1]; - mat[1][1] = Y[2] - Y[1]; - mat[1][2] = Z[2] - Z[1]; - mat[2][0] = X[3] - X[2]; - mat[2][1] = Y[3] - Y[2]; - mat[2][2] = Z[3] - Z[2]; - - if (!sys3x3 (mat, b, res, &dum)){ - Msg(WARNING, "Coplanar points in circum sphere computation"); - Msg(WARNING, "(%g,%g,%g) (%g,%g,%g) (%g,%g,%g) (%g,%g,%g)", - X[0],Y[0],Z[0], X[1],Y[1],Z[1], X[2],Y[2],Z[2], X[3],Y[3],Z[3] ); - res[0] = res[1] = res[2] = 10.0e10; - } - -} - -double Simplex::matsimpl (double mat[3][3]){ - mat[0][0] = V[1]->Pos.X - V[0]->Pos.X; - mat[0][1] = V[2]->Pos.X - V[0]->Pos.X; - mat[0][2] = V[3]->Pos.X - V[0]->Pos.X; - mat[1][0] = V[1]->Pos.Y - V[0]->Pos.Y; - mat[1][1] = V[2]->Pos.Y - V[0]->Pos.Y; - mat[1][2] = V[3]->Pos.Y - V[0]->Pos.Y; - mat[2][0] = V[1]->Pos.Z - V[0]->Pos.Z; - mat[2][1] = V[2]->Pos.Z - V[0]->Pos.Z; - mat[2][2] = V[3]->Pos.Z - V[0]->Pos.Z; - return (mat[0][0] * (mat[1][1] * mat[2][2] - mat[1][2] * mat[2][1]) - - mat[1][0] * (mat[0][1] * mat[2][2] - mat[2][1] * mat[0][2]) + - mat[2][0] * (mat[0][1] * mat[1][2] - mat[1][1] * mat[0][2])); -} - -double Simplex::rhoin (){ - double s1, s2, s3, s4; - if (V[3]){ - s1 = fabs (AireFace (F[0].V)); - s2 = fabs (AireFace (F[1].V)); - s3 = fabs (AireFace (F[2].V)); - s4 = fabs (AireFace (F[3].V)); - return 3. * fabs (Volume_Simplexe ()) / (s1 + s2 + s3 + s4); - } - else{ - return 1.0; - } -} - -double Simplex::lij (int i, int j){ - return sqrt (DSQR (V[i]->Pos.X - V[j]->Pos.X) + - DSQR (V[i]->Pos.Y - V[j]->Pos.Y) + - DSQR (V[i]->Pos.Z - V[j]->Pos.Z)); -} - -double Simplex::Volume_Simplexe (){ - double mat[3][3]; - - if (V[3]) - return (matsimpl (mat) / 6.); - else - return (surfsimpl ()); -} - -double Simplex::EtaShapeMeasure (){ - int i, j; - double lij2 = 0.0; - for (i = 0; i <= 3; i++){ - for (j = i + 1; j <= 3; j++){ - lij2 += DSQR (lij (i, j)); - } - } - return 12. * pow (9./10. * DSQR (fabs (Volume_Simplexe ())), 1./3.) / (lij2); -} - -double Simplex::RhoShapeMeasure (){ - int i, j; - double minlij = 1.e25, maxlij = 0.0; - for (i = 0; i <= 3; i++){ - for (j = i + 1; j <= 3; j++){ - if (i != j){ - minlij = DMIN (minlij, fabs (lij (i, j))); - maxlij = DMAX (maxlij, fabs (lij (i, j))); - } - } - } - return minlij / maxlij; -} - -double Simplex::GammaShapeMeasure (){ - int i, j, N; - double maxlij = 0.0; - - if (V[3]) - N = 4; - else - N = 3; - - for (i = 0; i <= N - 1; i++){ - for (j = i + 1; j <= N - 1; j++){ - if (i != j) - maxlij = DMAX (maxlij, lij (i, j)); - } - } - return 12. * rhoin () / (sqrt (6.) * maxlij); -} - - -void Simplex::Fourre_Simplexe (Vertex * v1, Vertex * v2, Vertex * v3, Vertex * v4){ - int i, N; - V[0] = v1; - V[1] = v2; - V[2] = v3; - V[3] = v4; - VSUP = NULL; - - if (!v3) { - F[0].V[0] = (v1->Num > v2->Num) ? v2 : v1; - F[0].V[1] = (v1->Num > v2->Num) ? v1 : v2; - F[0].V[2] = NULL; - return; - } - - F[0].V[0] = v1; - F[0].V[1] = v2; - F[0].V[2] = v3; - - F[1].V[0] = v1; - F[1].V[1] = v3; - F[1].V[2] = v4; - if (FACE_DIMENSION == 1){ - F[2].V[0] = v2; - F[2].V[1] = v3; - F[2].V[2] = v4; - - F[3].V[0] = v1; - F[3].V[1] = v2; - F[3].V[2] = v4; - } - else{ - F[2].V[0] = v1; - F[2].V[1] = v2; - F[2].V[2] = v4; - - F[3].V[0] = v2; - F[3].V[1] = v3; - F[3].V[2] = v4; - } - if (!v4){ - N = 3; - if (Volume_Simplexe2D () < 0.0){ - V[0] = v1; - V[1] = v3; - V[2] = v2; - } - if (FACE_DIMENSION == 1){ - //qsort(F[0].V,3,sizeof(Vertex*),compareVertex); - Center_Circum (); - Quality = (double) N *Radius / (V[0]->lc + V[1]->lc + V[2]->lc - + ((V[3]) ? V[3]->lc : 0.0)); - } - else{ - qsort (F[0].V, 3, sizeof (Vertex *), compareVertex); - return; - } - } - else{ - N = 4; - } - - Center_Circum (); - - /* - extern Mesh *THEM, *LOCAL; - if (LOCAL && N == 4 && CTX.mesh.algo == DELAUNAY_OLDALGO && THEM->BGM.Typ == ONFILE){ - Quality = fabs(Radius) / Lc_XYZ(Center.X, Center.Y, Center.Z, LOCAL); - if(Quality < 0.){ - Msg(WARNING, "Negative simplex quality !?"); - Quality = 4 * Radius / (V[0]->lc + V[1]->lc + V[2]->lc + V[3]->lc); - } - } - */ - - Quality = (double) N * Radius / (V[0]->lc + V[1]->lc + V[2]->lc - + ((V[3]) ? V[3]->lc : 0.0)); - - for (i = 0; i < N; i++) - qsort (F[i].V, N - 1, sizeof (Vertex *), compareVertex); - - //qsort(F,N,sizeof(Face),compareFace); -} - -Simplex *Create_Simplex (Vertex * v1, Vertex * v2, Vertex * v3, Vertex * v4){ - Simplex *s; - - s = new Simplex (v1, v2, v3, v4); - return s; -} - -void Free_Simplex (void *a, void *b){ - Simplex *s = *(Simplex**)a; - if(s){ - delete s; - s = NULL; - } -} - -Simplex *Create_Quadrangle (Vertex * v1, Vertex * v2, Vertex * v3, Vertex * v4){ - Simplex *s; - /* pour eviter le reordonnement des noeuds */ - s = new Simplex (); - s->V[0] = v1 ; - s->V[1] = v2 ; - s->V[2] = v3 ; - s->V[3] = v4 ; - return s; -} - -int compareSimplex (const void *a, const void *b){ - Simplex **q, **w; - - /* Les simplexes sont definis une seule fois : - 1 pointeur par entite -> on compare les pointeurs */ - - q = (Simplex **) a; - w = (Simplex **) b; - //if((*q)->iEnt != (*w)->iEnt) return (*q)->iEnt - (*w)->iEnt; - return ((*q)->Num - (*w)->Num); -} - -int Simplex::Pt_In_Simplexe (Vertex * v, double uvw[3], double tol){ - double mat[3][3]; - double b[3], dum; - - matsimpl (mat); - b[0] = v->Pos.X - V[0]->Pos.X; - b[1] = v->Pos.Y - V[0]->Pos.Y; - b[2] = v->Pos.Z - V[0]->Pos.Z; - - sys3x3 (mat, b, uvw, &dum); - if (uvw[0] >= -tol && uvw[1] >= -tol && uvw[2] >= -tol && - uvw[0] <= 1. + tol && uvw[1] <= 1. + tol && uvw[2] <= 1. + tol && - 1. - uvw[0] - uvw[1] - uvw[2] > -tol) - { - return (1); - } - return (0); -} - -void Simplex::Center_Ellipsum_2D (double m[3][3]){ - double sys[2][2], x[2]; - double rhs[2], a, b, d; - double x1, y1, x2, y2, x3, y3; - - x1 = V[0]->Pos.X; - y1 = V[0]->Pos.Y; - x2 = V[1]->Pos.X; - y2 = V[1]->Pos.Y; - x3 = V[2]->Pos.X; - y3 = V[2]->Pos.Y; - - a = m[0][0]; - b = 0.5 * (m[0][1] + m[1][0]); - d = m[1][1]; - - sys[0][0] = 2. * a * (x1 - x2) + 2. * b * (y1 - y2); - sys[0][1] = 2. * d * (y1 - y2) + 2. * b * (x1 - x2); - sys[1][0] = 2. * a * (x1 - x3) + 2. * b * (y1 - y3); - sys[1][1] = 2. * d * (y1 - y3) + 2. * b * (x1 - x3); - - rhs[0] = a * (x1 * x1 - x2 * x2) + d * (y1 * y1 - y2 * y2) + 2. * b * (x1 * y1 - x2 * y2); - rhs[1] = a * (x1 * x1 - x3 * x3) + d * (y1 * y1 - y3 * y3) + 2. * b * (x1 * y1 - x3 * y3); - - sys2x2 (sys, rhs, x); - - Center.X = x[0]; - Center.Y = x[1]; - - Radius = sqrt ((x[0] - x1) * (x[0] - x1) * a - + (x[1] - y1) * (x[1] - y1) * d - + 2. * (x[0] - x1) * (x[1] - y1) * b); -} - -void Simplex::Center_Ellipsum_3D (double m[3][3]){ - double sys[3][3], x[3]; - double rhs[3], det; - double x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4; - - x1 = V[0]->Pos.X; - y1 = V[0]->Pos.Y; - z1 = V[0]->Pos.Z; - x2 = V[1]->Pos.X; - y2 = V[1]->Pos.Y; - z2 = V[1]->Pos.Z; - x3 = V[2]->Pos.X; - y3 = V[2]->Pos.Y; - z3 = V[2]->Pos.Z; - x4 = V[3]->Pos.X; - y4 = V[3]->Pos.Y; - z4 = V[3]->Pos.Z; - - sys[0][0] = 2. * m[0][0] * (x1 - x2) + 2. * m[1][0] * (y1 - y2) + 2. * m[2][0] * (z1 - z2); - sys[0][1] = 2. * m[0][1] * (x1 - x2) + 2. * m[1][1] * (y1 - y2) + 2. * m[2][1] * (z1 - z2); - sys[0][2] = 2. * m[0][2] * (x1 - x2) + 2. * m[1][2] * (y1 - y2) + 2. * m[2][2] * (z1 - z2); - - sys[1][0] = 2. * m[0][0] * (x1 - x3) + 2. * m[1][0] * (y1 - y3) + 2. * m[2][0] * (z1 - z3); - sys[1][1] = 2. * m[0][1] * (x1 - x3) + 2. * m[1][1] * (y1 - y3) + 2. * m[2][1] * (z1 - z3); - sys[1][2] = 2. * m[0][2] * (x1 - x3) + 2. * m[1][2] * (y1 - y3) + 2. * m[2][2] * (z1 - z3); - - sys[2][0] = 2. * m[0][0] * (x1 - x4) + 2. * m[1][0] * (y1 - y4) + 2. * m[2][0] * (z1 - z4); - sys[2][1] = 2. * m[0][1] * (x1 - x4) + 2. * m[1][1] * (y1 - y4) + 2. * m[2][1] * (z1 - z4); - sys[2][2] = 2. * m[0][2] * (x1 - x4) + 2. * m[1][2] * (y1 - y4) + 2. * m[2][2] * (z1 - z4); - - rhs[0] = m[0][0] * (x1 * x1 - x2 * x2) - + m[1][1] * (y1 * y1 - y2 * y2) - + m[2][2] * (z1 * z1 - z2 * z2) - + 2. * m[1][0] * (x1 * y1 - x2 * y2) - + 2. * m[2][0] * (x1 * z1 - x2 * z2) - + 2. * m[2][1] * (z1 * y1 - z2 * y2); - rhs[1] = m[0][0] * (x1 * x1 - x3 * x3) - + m[1][1] * (y1 * y1 - y3 * y3) - + m[2][2] * (z1 * z1 - z3 * z3) - + 2. * m[1][0] * (x1 * y1 - x3 * y3) - + 2. * m[2][0] * (x1 * z1 - x3 * z3) - + 2. * m[2][1] * (z1 * y1 - z3 * y3); - rhs[2] = m[0][0] * (x1 * x1 - x4 * x4) - + m[1][1] * (y1 * y1 - y4 * y4) - + m[2][2] * (z1 * z1 - z4 * z4) - + 2. * m[1][0] * (x1 * y1 - x4 * y4) - + 2. * m[2][0] * (x1 * z1 - x4 * z4) - + 2. * m[2][1] * (z1 * y1 - z4 * y4); - - sys3x3 (sys, rhs, x, &det); - - Center.X = x[0]; - Center.Y = x[1]; - Center.Z = x[2]; - - Radius = sqrt ((x[0] - x1) * (x[0] - x1) * m[0][0] - + (x[1] - y1) * (x[1] - y1) * m[1][1] - + (x[2] - z1) * (x[2] - z1) * m[2][2] - + 2. * (x[0] - x1) * (x[1] - y1) * m[0][1] - + 2. * (x[0] - x1) * (x[2] - z1) * m[0][2] - + 2. * (x[1] - y1) * (x[2] - z1) * m[1][2] - ); -} - - -int Simplex::Pt_In_Simplex_2D (Vertex * v){ - double Xmin, Xmax, Ymin, Ymax, Xtr[4], Ytr[4], A[2], B[2], X, Y, Signus[3]; - int i; - - X = v->Pos.X; - Y = v->Pos.Y; - Xtr[0] = Xmax = Xmin = V[0]->Pos.X; - Xtr[3] = V[0]->Pos.X; - Xtr[1] = V[1]->Pos.X; - Xtr[2] = V[2]->Pos.X; - Ytr[0] = Ymax = Ymin = V[0]->Pos.Y; - Ytr[3] = V[0]->Pos.Y; - Ytr[1] = V[1]->Pos.Y; - Ytr[2] = V[2]->Pos.Y; - - for (i = 1; i < 3; i++){ - Xmin = (Xtr[i] < Xmin) ? Xtr[i] : Xmin; - Xmax = (Xtr[i] > Xmax) ? Xtr[i] : Xmax; - Ymin = (Ytr[i] < Ymin) ? Ytr[i] : Ymin; - Ymax = (Ytr[i] > Ymax) ? Ytr[i] : Ymax; - } - - if (X > Xmax || X < Xmin || Y > Ymax || Y < Ymin) - return (0); - - for (i = 0; i < 3; i++){ - A[0] = Xtr[i + 1] - Xtr[i]; - A[1] = Ytr[i + 1] - Ytr[i]; - B[0] = X - Xtr[i]; - B[1] = Y - Ytr[i]; - Signus[i] = A[0] * B[1] - A[1] * B[0]; - } - for (i = 0; i < 2; i++){ - if ((Signus[i] * Signus[i + 1]) < 0) - return 0; - } - return 1; -} - -void Simplex::ExportLcField (FILE * f){ - if (!V[3]){ - fprintf (f, "ST(%f,%f,%f,%f,%f,%f,%f,%f,%f){%12.5E,%12.5E,%12.5E};\n" - ,V[0]->Pos.X, V[0]->Pos.Y, V[0]->Pos.Z - ,V[1]->Pos.X, V[1]->Pos.Y, V[1]->Pos.Z - ,V[2]->Pos.X, V[2]->Pos.Y, V[2]->Pos.Z - ,V[0]->lc, V[1]->lc, V[2]->lc); - } - else{ - fprintf (f, "SS(%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f){%12.5E,%12.5E,%12.5E,%12.5E};\n" - ,V[0]->Pos.X, V[0]->Pos.Y, V[0]->Pos.Z - ,V[1]->Pos.X, V[1]->Pos.Y, V[1]->Pos.Z - ,V[2]->Pos.X, V[2]->Pos.Y, V[2]->Pos.Z - ,V[3]->Pos.X, V[3]->Pos.Y, V[3]->Pos.Z - ,V[0]->lc, V[1]->lc, V[2]->lc, V[3]->lc); - } - -} - -double Simplex::AireFace (Vertex * V[3]){ - double a[3], b[3], c[3]; - - a[0] = V[2]->Pos.X - V[1]->Pos.X; - a[1] = V[2]->Pos.Y - V[1]->Pos.Y; - a[2] = V[2]->Pos.Z - V[1]->Pos.Z; - - b[0] = V[0]->Pos.X - V[1]->Pos.X; - b[1] = V[0]->Pos.Y - V[1]->Pos.Y; - b[2] = V[0]->Pos.Z - V[1]->Pos.Z; - - prodve (a, b, c); - return (0.5 * sqrt (c[0] * c[0] + c[1] * c[1] + c[2] * c[2])); -} - -double Simplex::surfsimpl (){ - return AireFace (V); -} - -bool Simplex::VertexIn (Vertex * v){ - if (!this || this == &MyNewBoundary) - return false; - int N = 4; - if (!V[3]) - N = 3; - for (int i = 0; i < N; i++) - if (!compareVertex (&V[i], &v)) - return true; - return false; -} - -bool Simplex::EdgeIn (Vertex * v1, Vertex * v2, Vertex * v[2]){ - if (!this || this == &MyNewBoundary) - return false; - int N = 4; - if (!V[3]) - N = 3; - int n = 0; - for (int i = 0; i < N; i++){ - if (compareVertex (&V[i], &v1) && compareVertex (&V[i], &v2)){ - v[n++] = V[i]; - if (n > 2) - return false; - } - } - return true; -} - -bool Simplex::ExtractOppositeEdges (int iFac, Vertex * p[2], Vertex * q[2]){ - Simplex *s1 = this; - if (!s1 || s1 == &MyNewBoundary || !s1->iEnt) - return false; - Simplex *s2 = s1->S[iFac]; - if (!s2 || s2 == &MyNewBoundary || !s2->iEnt) - return false; - int i, ip = 0, iq = 0; - - for (i = 0; i < 3; i++) - if (s1->VertexIn (s2->V[i])) - p[ip++] = s2->V[i]; - else - q[iq++] = s2->V[i]; - - for (i = 0; i < 3; i++) - if (!s2->VertexIn (s1->V[i])) - q[iq++] = s1->V[i]; - - if (ip != 2 || iq != 2){ - return false; - } - return true; -} - -bool Simplex::SwapEdge (int iFac){ - Simplex *s1 = NULL, *s2 = NULL, *s11 = NULL, *s21 = NULL; - Vertex *p[4] = {NULL, NULL, NULL, NULL}; - Vertex *q[4] = {NULL, NULL, NULL, NULL}; - int i, ip, iq; - - s1 = this; - if (!s1 || s1 == &MyNewBoundary || !s1->iEnt) - return false; - s2 = s1->S[iFac]; - if (!s2 || s2 == &MyNewBoundary || !s2->iEnt) - return false; - ip = iq = 0; - - for (i = 0; i < 3; i++) - if (s1->VertexIn (s2->V[i])) - p[ip++] = s2->V[i]; - else - q[iq++] = s2->V[i]; - - for (i = 0; i < 3; i++) - if (!s2->VertexIn (s1->V[i])) - q[iq++] = s1->V[i]; - - if (ip != 2 || iq != 2){ - return false; - } - - for (i = 0; i < 3; i++) - if (s1->S[i]->VertexIn (p[1]) && s1->S[i]->VertexIn (q[1])) - s11 = s1->S[i]; - - for (i = 0; i < 3; i++) - if (s2->S[i]->VertexIn (p[0]) && s2->S[i]->VertexIn (q[0])) - s21 = s2->S[i]; - - if (!s11 || !s21) - return false; - - double vol1 = s1->Volume_Simplexe () + s2->Volume_Simplexe (); - - s1->V[0] = p[0]; - s1->V[1] = q[0]; - s1->V[2] = q[1]; - s2->V[0] = p[1]; - s2->V[1] = q[0]; - s2->V[2] = q[1]; - - double vol2 = s1->Volume_Simplexe () + s2->Volume_Simplexe (); - - if (s1->Volume_Simplexe () == 0.0 || s2->Volume_Simplexe () == 0.0 || - fabs (fabs (vol1) - fabs (vol2)) > 1.e-5 * (fabs (vol1) + fabs (vol2))){ - s1->V[0] = p[0]; - s1->V[1] = p[1]; - s1->V[2] = q[1]; - s2->V[0] = p[0]; - s2->V[1] = p[1]; - s2->V[2] = q[0]; - return false; - } - - for (i = 0; i < 3; i++) - if (s1->S[i] == s11) - s1->S[i] = s21; - for (i = 0; i < 3; i++) - if (s2->S[i] == s21) - s2->S[i] = s11; - - if (s21 != &MyNewBoundary && s21 && s21->iEnt) - for (i = 0; i < 3; i++) - if (s21->S[i] == s2) - s21->S[i] = s1; - if (s11 != &MyNewBoundary && s11 && s11->iEnt) - for (i = 0; i < 3; i++) - if (s11->S[i] == s1) - s11->S[i] = s2; - return true; -} - - -bool Simplex::SwapFace (int iFac, List_T * newsimp, List_T * delsimp){ - Simplex *s = S[iFac], *s1, *s2, *s3; - Vertex *o[2]; - int i; - - if (!s || s == &MyNewBoundary || !s->iEnt) - return false; - if (!this || this == &MyNewBoundary || !this->iEnt) - return false; - - for (i = 0; i < 4; i++) - if (!VertexIn (s->V[i])) - o[0] = s->V[i]; - for (i = 0; i < 4; i++) - if (!s->VertexIn (V[i])) - o[1] = V[i]; - - s1 = Create_Simplex (s->F[iFac].V[0], s->F[iFac].V[1], o[0], o[1]); - s2 = Create_Simplex (s->F[iFac].V[1], s->F[iFac].V[2], o[0], o[1]); - s3 = Create_Simplex (s->F[iFac].V[2], s->F[iFac].V[0], o[0], o[1]); - - double vol1 = s->Volume_Simplexe () + Volume_Simplexe (); - double vol2 = s1->Volume_Simplexe () + s2->Volume_Simplexe () + s3->Volume_Simplexe (); - - if (fabs (fabs (vol1) - fabs (vol2)) > 1.e-5 * (fabs (vol1) + fabs (vol2))){ - delete s1; - delete s2; - delete s3; - return false; - } - - double gamma1 = GammaShapeMeasure (); - - if (s1->GammaShapeMeasure () < gamma1 || - s2->GammaShapeMeasure () < gamma1 || - s3->GammaShapeMeasure () < gamma1) - return false; - - return true; -} - -int compareFace (const void *a, const void *b){ - Face *q, *w; - - q = (Face *) a; - w = (Face *) b; - if (q->V[0]->Num > w->V[0]->Num) - return (1); - if (q->V[0]->Num < w->V[0]->Num) - return (-1); - - if (q->V[1]->Num > w->V[1]->Num) - return (1); - if (q->V[1]->Num < w->V[1]->Num) - return (-1); - - if (FACE_DIMENSION == 1 || !q->V[2] || !w->V[2]) - return 0; - - if (q->V[2]->Num > w->V[2]->Num) - return (1); - if (q->V[2]->Num < w->V[2]->Num) - return (-1); - return (0); -} diff --git a/Mesh/Simplex.h b/Mesh/Simplex.h deleted file mode 100644 index f3a5a39c868a09a14825642bef1dab4c54a57784..0000000000000000000000000000000000000000 --- a/Mesh/Simplex.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef _SIMPLEX_H_ -#define _SIMPLEX_H_ - -#include "Vertex.h" - -typedef struct { - Vertex *V[3]; -}Face; - -class Simplex{ - -public: - int Num; /* Numero */ - int iEnt; /* Entite geometrique */ - Face F[4]; /* 4 faces */ - Vertex **VSUP; /* noeuds supplem pour les elts de degre eleves */ - Vertex *V[4]; /* 4 noeuds */ - double Quality; /* Qualite du simplexe */ - Coord Center; /* centre du CC */ - double Radius; /* Rayon du CC */ - Simplex *S[4]; /* 4 Voisins */ - static int TotalNumber; - static int TotalAllocated; - Simplex(); - ~Simplex(); - Simplex(Vertex *v1, Vertex *v2, Vertex *v3, Vertex *v4); - void Fourre_Simplexe(Vertex *v1, Vertex *v2, Vertex *v3, Vertex *v4); - int Pt_In_Simplexe (Vertex *v, double uvw[3], double tol); - int Pt_In_Simplex_2D(Vertex *v); - void Center_Circum(); - double Volume_Simplexe (); - double matsimpl(double mat[3][3]); - void center_tet(double X[4],double Y[4], double Z[4], double res[3]); - double AireFace (Vertex *V[3]); - double surfsimpl(); - int CircumCircle(double x1,double y1,double x2,double y2,double x3,double y3, - double *xc,double *yc); - double Volume_Simplexe2D(); - void Center_Ellipsum_2D (double m[3][3]); - int Pt_In_Ellipsis (Vertex *v,double m[3][3]); - bool VertexIn(Vertex *v); - bool EdgeIn(Vertex *v1, Vertex *v2, Vertex *v[2]); - bool SwapEdge (int iFac); - bool SwapFace (int iFac, List_T *newsimp, List_T *delsimp); - bool ExtractOppositeEdges ( int iFac, Vertex *p[2], Vertex *q[2]); - void ExportLcField (FILE *f); - void Center_Ellipsum_3D (double m[3][3]); - double GammaShapeMeasure (); - double RhoShapeMeasure (); - double EtaShapeMeasure (); - double lij (int i, int j); - double rhoin (); -}; - -int compareSimplex(const void *a, const void *b); -int compareFace (const void *a, const void *b); - -Simplex *Create_Simplex (Vertex *v1, Vertex *v2, Vertex *v3, Vertex *v4); -void Free_Simplex (void *a, void *b); -Simplex *Create_Quadrangle (Vertex *v1, Vertex *v2, Vertex *v3, Vertex *v4); - - -#endif diff --git a/Mesh/Smoothing.cpp b/Mesh/Smoothing.cpp deleted file mode 100644 index 003331721e64cb836d155f3b27f6d5f9f4aa8b76..0000000000000000000000000000000000000000 --- a/Mesh/Smoothing.cpp +++ /dev/null @@ -1,165 +0,0 @@ -// $Id: Smoothing.cpp,v 1.6 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Mesh.h" - - -void AmelioreSurface_EliminationTripet (Surface * surf, Mesh * m, Tree_T * tnxe){ - int i, j, k; - List_T *lnxe = Tree2List (tnxe); - Vertex *v1, *v2, *v3; - List_T *ListNoeuds = List_Create (2, 1, sizeof (Vertex *)); - Simplex *s[3], *news; - NXE nxe; - bool ok; - - for (i = 0; i < List_Nbr (lnxe); i++){ - List_Read (lnxe, i, &nxe); - if (List_Nbr (nxe.Liste) == 3){ - ok = true; - if (nxe.v->ListCurves) - ok = false; - else{ - for (j = 0; j < 3; j++){ - List_Read (nxe.Liste, j, &s[j]); - if (!Tree_Search (surf->Simplexes, &s[j])) - ok = false; - for (k = 0; k < 3; k++) - if (compareVertex (&nxe.v, &s[j]->V[k])) - List_Insert (ListNoeuds, &s[j]->V[k], compareVertex); - } - } - if (ok){ - List_Read (ListNoeuds, 0, &v1); - List_Read (ListNoeuds, 1, &v2); - List_Read (ListNoeuds, 2, &v3); - news = Create_Simplex (v1, v2, v3, 0); - Tree_Suppress (surf->Simplexes, &s[0]); - Tree_Suppress (surf->Simplexes, &s[1]); - Tree_Suppress (surf->Simplexes, &s[2]); - Tree_Suppress (m->Vertices, &nxe.v); - Tree_Add (surf->Simplexes, &news); - } - List_Reset (ListNoeuds); - } - } - List_Delete (ListNoeuds); - List_Delete (lnxe); -} - - -void ActionLiss (void *data, void *dummy){ - List_T *nodes; - - NXE *pnxe; - Simplex *s; - double X, Y, Z, Sum; - int i, j; - - - pnxe = (NXE *) data; - - /* On Ne Lisse Point Les Points sur les courbes (quelle horreur) */ - if (pnxe->v->ListCurves) - return; - nodes = List_Create (2, 2, sizeof (Vertex *)); - - X = Y = Z = Sum = 0.0; - double volume_before = 0.0; - double min_quality_old = 1.0; - for (i = 0; i < List_Nbr (pnxe->Liste); i++){ - List_Read (pnxe->Liste, i, &s); - min_quality_old = DMIN (min_quality_old, s->GammaShapeMeasure ()); - volume_before += s->Volume_Simplexe (); - /* On Ne Lisse Point Les Points sur les surfaces quand les volumes sont mailles */ - if (s->V[3] && pnxe->v->ListSurf) - return; - for (j = 0; j < 4; j++){ - if (s->V[j] && compareVertex (&pnxe->v, &s->V[j])){ - Sum += 0.5; - X += s->V[j]->Pos.X * 0.5; - Y += s->V[j]->Pos.Y * 0.5; - Z += s->V[j]->Pos.Z * 0.5; - } - } - } - - double xold = pnxe->v->Pos.X; - double yold = pnxe->v->Pos.Y; - double zold = pnxe->v->Pos.Z; - double a = 0.5; - - if (Sum != 0.0){ - pnxe->v->Pos.X = a * (X / Sum) + (1. - a) * pnxe->v->Pos.X; - pnxe->v->Pos.Y = a * (Y / Sum) + (1. - a) * pnxe->v->Pos.Y; - pnxe->v->Pos.Z = a * (Z / Sum) + (1. - a) * pnxe->v->Pos.Z; - } - - double min_quality_new = 1.0; - for (i = 0; i < List_Nbr (pnxe->Liste); i++){ - List_Read (pnxe->Liste, i, &s); - min_quality_new = DMIN (min_quality_new, s->GammaShapeMeasure ()); - } - - double volume_after = 0.0; - for (i = 0; i < List_Nbr (pnxe->Liste); i++){ - List_Read (pnxe->Liste, i, &s); - volume_after += s->Volume_Simplexe (); - } - if (fabs (volume_after - volume_before) > 1.e-8 * fabs (volume_after + volume_before) - || min_quality_old > min_quality_new){ - pnxe->v->Pos.X = xold; - pnxe->v->Pos.Y = yold; - pnxe->v->Pos.Z = zold; - } - List_Delete(nodes); -} - - -void ActionLissSurf (void *data, void *dummy){ - NXE *pnxe; - Simplex *s; - double X, Y, Z, Sum; - int i, j; - - pnxe = (NXE *) data; - - /* - On Ne Lisse Point Les Points sur les courbes - */ - if (pnxe->v->ListCurves) - return; - - X = Y = Z = Sum = 0.0; - for (i = 0; i < List_Nbr (pnxe->Liste); i++){ - List_Read (pnxe->Liste, i, &s); - /* - On Ne Lisse Point Les Points sur les surfaces quand les - volumes sont mailles - */ - for (j = 0; j < 4; j++){ - if (s->V[j] && compareVertex (&pnxe->v, &s->V[j])){ - Sum += 0.5; - X += s->V[j]->Pos.X * 0.5; - Y += s->V[j]->Pos.Y * 0.5; - Z += s->V[j]->Pos.Z * 0.5; - } - } - } - if (Sum != 0.0){ - pnxe->v->Pos.X = X / Sum; - pnxe->v->Pos.Y = Y / Sum; - pnxe->v->Pos.Z = Z / Sum; - } -} - -void RandomSwapEdges (Surface * s){ - int i; - List_T *AllTrg = Tree2List (s->Simplexes); - Simplex *t; - for (i = 0; i < List_Nbr (AllTrg); i++){ - List_Read (AllTrg, i, &t); - t->SwapEdge (1); - } -} diff --git a/Mesh/SwapEdge.cpp b/Mesh/SwapEdge.cpp deleted file mode 100644 index 74b695638f71ab7dbfc84d4f336248d7e2283a50..0000000000000000000000000000000000000000 --- a/Mesh/SwapEdge.cpp +++ /dev/null @@ -1,304 +0,0 @@ -// $Id: SwapEdge.cpp,v 1.7 2001-08-11 23:28:32 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Mesh.h" -#include "SwapPatterns.h" - -extern Simplex MyNewBoundary; -extern int edges_tetra[6][2]; - - -int TrouveCoquille (Simplex * s, Vertex * Ed[2], - List_T * Coquille, Tree_T * TreeSimpl, - Vertex * Contour[100]){ - Simplex *stack[256], *actual; - Vertex *other[2]; - int K, i, N = 0; - List_T *Edges = List_Create (12, 2, sizeof (Edge)); - Edge E; - - stack[N++] = s; - - while (N > 0){ - actual = stack[--N]; - if (!Tree_Search (TreeSimpl, &actual)){ - Tree_Add (TreeSimpl, &actual); - if (actual->EdgeIn (Ed[0], Ed[1], other)){ - List_Add (Coquille, &actual); - if (actual != s) - actual->Radius = -1.; - E.V[0] = other[0]; - E.V[1] = other[1]; - List_Add (Edges, &E); - for (i = 0; i < 4; i++){ - if (actual->S[i] && actual->S[i] != &MyNewBoundary) - stack[N++] = actual->S[i]; - else - return 0; - } - } - } - } - - List_Read (Edges, 0, &E); - N = 0; - Contour[N++] = E.V[0]; - Contour[N++] = E.V[1]; - List_Suppress (Edges, &E, compareedge); - K = 0; - - while (List_Nbr (Edges)){ - if (K++ > Tree_Nbr (TreeSimpl)) - return 0; - for (i = 0; i < List_Nbr (Edges); i++){ - List_Read (Edges, i, &E); - if (!compareVertex (&Contour[N - 1], &E.V[0]) && - compareVertex (&Contour[N - 2], &E.V[1])){ - Contour[N++] = E.V[1]; - List_Suppress (Edges, &E, compareedge); - break; - } - if (!compareVertex (&Contour[N - 1], &E.V[1]) && - compareVertex (&Contour[N - 2], &E.V[0])){ - Contour[N++] = E.V[0]; - List_Suppress (Edges, &E, compareedge); - break; - } - } - - } - if (!compareVertex (&Contour[0], &Contour[N - 1])) - return N - 1; - return 0; -} - -bool FindBestPattern (int N, Vertex * Contour[100], Vertex * Ed[2], - List_T * Coquille, List_T * Pattern){ - int i, j, k, kk, tri[3]; - Simplex *s, *Pat[100]; - double old_volume, new_volume; - double worst_tet_old, worst_tet_new; - bool stop = false; - SwapPattern *sp = NULL; - SwapPattern3 *x3; - SwapPattern4 *x4; - SwapPattern5 *x5; - SwapPattern6 *x6; - SwapPattern7 *x7; - SwapPatternN *xN; - switch (N){ - case 3: - x3 = new SwapPattern3; - sp = x3; - break; - case 4: - x4 = new SwapPattern4; - sp = x4; - break; - case 5: - if (stop) - return false; - x5 = new SwapPattern5; - sp = x5; - break; - case 6: - if (stop) - return false; - x6 = new SwapPattern6; - sp = x6; - break; - case 7: - if (stop) - return false; - x7 = new SwapPattern7; - sp = x7; - break; - default: - if (stop) - return false; - xN = new SwapPatternN (N); - sp = xN; - break; - } - - old_volume = 0.0; - worst_tet_old = 1.; - int IENT; - for (k = 0; k < List_Nbr (Coquille); k++){ - List_Read (Coquille, k, &s); - IENT = s->iEnt; - old_volume += fabs (s->Volume_Simplexe ()); - worst_tet_old = DMIN (worst_tet_old, s->GammaShapeMeasure ()); - } - - for (i = 0; i < sp->GetNbPatterns (); i++){ - for (j = 0; j < sp->GetNbRotations (i); j++){ - new_volume = 0.; - worst_tet_new = 1.; - kk = 0; - for (k = 0; k < sp->GetNbTriangles (); k++){ - sp->GetTriangle (i, k, tri); - s = Create_Simplex (Contour[tri[0]], - Contour[tri[1]], - Contour[tri[2]], - Ed[0]); - s->iEnt = IENT; - Pat[kk++] = s; - new_volume += fabs (s->Volume_Simplexe ()); - worst_tet_new = DMIN (worst_tet_new, s->GammaShapeMeasure ()); - s = Create_Simplex (Contour[tri[0]], - Contour[tri[1]], - Contour[tri[2]], - Ed[1]); - s->iEnt = IENT; - Pat[kk++] = s; - new_volume += fabs (s->Volume_Simplexe ()); - worst_tet_new = DMIN (worst_tet_new, s->GammaShapeMeasure ()); - } - if (fabs (new_volume - old_volume) > 1.e-5 * fabs (new_volume + old_volume)) - Msg(WARNING, "Edge swapping failed"); - if (fabs (new_volume - old_volume) > 1.e-5 * fabs (new_volume + old_volume) - || worst_tet_new < worst_tet_old){ - for (k = 0; k < 2 * sp->GetNbTriangles (); k++){ - delete Pat[k]; - } - } - else{ - for (k = 0; k < List_Nbr (Pattern); k++){ - List_Read (Pattern, k, &s); - delete s; - } - List_Reset (Pattern); - for (k = 0; k < 2 * sp->GetNbTriangles (); k++){ - List_Add (Pattern, &Pat[k]); - } - worst_tet_old = worst_tet_new; - } - } - } - - delete sp; - return true ; -} - - -bool SwapEdge (Mesh * M, Volume * v, Simplex * s, int iEdge){ - int i; - Vertex *Contour[100]; - Vertex *Ed[2]; - Simplex *simp; - Tree_T *TreeSimpl = Tree_Create (sizeof (Simplex *), compareSimplex); - List_T *Coquille = List_Create (10, 10, sizeof (Simplex *)); - Ed[0] = s->V[edges_tetra[iEdge][0]]; - Ed[1] = s->V[edges_tetra[iEdge][1]]; - int N = TrouveCoquille (s, Ed, Coquille, TreeSimpl, Contour); - - List_T *Pattern = List_Create (2 * N - 4, 1, sizeof (Simplex *)); - - FindBestPattern (N, Contour, Ed, Coquille, Pattern); - - if (List_Nbr (Pattern)){ - for (i = 0; i < List_Nbr (Coquille); i++){ - List_Read (Coquille, i, &simp); - Tree_Suppress (v->Simplexes, &simp); - Tree_Suppress (TreeSimpl, &simp); - } - for (i = 0; i < List_Nbr (Pattern); i++){ - List_Read (Pattern, i, &simp); - Tree_Add (v->Simplexes, &simp); - Tree_Add (TreeSimpl, &simp); - } - Link_Simplexes (NULL, TreeSimpl /*v->Simplexes */ ); - } - Tree_Delete (TreeSimpl); - List_Delete (Coquille); - List_Delete (Pattern); - return true ; -} - -int GetWorstEdge (Simplex * s, EdgesContainer & ec, bool order){ - Vertex *v11, *v12; - Vertex *v21, *v22; - v11 = s->V[edges_tetra[0][0]]; - v12 = s->V[edges_tetra[0][1]]; - v21 = s->V[edges_tetra[4][0]]; - v22 = s->V[edges_tetra[4][1]]; - Vertex d11 = *(v12) - *(v11); - Vertex d12 = *(v22) - *(v21); - d12.norme (); - d11.norme (); - double prosc1 = fabs (d11 * d12); - - v11 = s->V[edges_tetra[1][0]]; - v12 = s->V[edges_tetra[1][1]]; - v21 = s->V[edges_tetra[3][0]]; - v22 = s->V[edges_tetra[3][1]]; - Vertex d21 = *(v12) - *(v11); - Vertex d22 = *(v22) - *(v21); - d22.norme (); - d21.norme (); - double prosc2 = fabs (d21 * d22); - - v11 = s->V[edges_tetra[2][0]]; - v12 = s->V[edges_tetra[2][1]]; - v21 = s->V[edges_tetra[5][0]]; - v22 = s->V[edges_tetra[5][1]]; - Vertex d31 = *(v12) - *(v11); - Vertex d32 = *(v22) - *(v21); - d32.norme (); - d31.norme (); - double prosc3 = fabs (d31 * d32); - - if (prosc1 < prosc2 && prosc1 < prosc3){ - if (!order && !ec.Search (s->V[edges_tetra[0][0]], s->V[edges_tetra[0][1]])) - return 0; - if (!ec.Search (s->V[edges_tetra[4][0]], s->V[edges_tetra[4][1]])) - return 4; - if (!ec.Search (s->V[edges_tetra[0][0]], s->V[edges_tetra[0][1]])) - return 0; - return -1; - } - if (prosc2 < prosc1 && prosc2 < prosc3){ - if (!order && !ec.Search (s->V[edges_tetra[1][0]], s->V[edges_tetra[1][1]])) - return 1; - if (!ec.Search (s->V[edges_tetra[3][0]], s->V[edges_tetra[3][1]])) - return 3; - if (!ec.Search (s->V[edges_tetra[1][0]], s->V[edges_tetra[1][1]])) - return 1; - return -1; - } - if (prosc3 < prosc2 && prosc3 < prosc1){ - if (!order && !ec.Search (s->V[edges_tetra[2][0]], s->V[edges_tetra[2][1]])) - return 2; - if (!ec.Search (s->V[edges_tetra[5][0]], s->V[edges_tetra[5][1]])) - return 5; - if (!ec.Search (s->V[edges_tetra[2][0]], s->V[edges_tetra[2][1]])) - return 2; - return -1; - } - return -1; -} - -void SwapEdges3D (Mesh * M, Volume * v, double GammaPrescribed, bool order){ - List_T *list = Tree2List (v->Simplexes); - List_T *srfs = Tree2List (M->Surfaces); - if (!List_Nbr (srfs)) - return; - EdgesContainer ec (srfs); - Simplex *s; - Progress (102); - for (int i = 0; i < List_Nbr (list); i++){ - if (i % 100 == 1) - Progress ((100 * i) / List_Nbr (list)); - List_Read (list, i, &s); - if (s->GammaShapeMeasure () < GammaPrescribed){ - int iEdge = GetWorstEdge (s, ec, order); - if (iEdge >= 0) - SwapEdge (M, v, s, iEdge); - } - } - Progress (-1); - List_Delete (srfs); - List_Delete (list); -} diff --git a/Mesh/SwapPatterns.h b/Mesh/SwapPatterns.h deleted file mode 100644 index db379bdf2b670add6bc229b8cc3342952d7f83b5..0000000000000000000000000000000000000000 --- a/Mesh/SwapPatterns.h +++ /dev/null @@ -1,203 +0,0 @@ -#ifndef _SWAP_PATTERNS_H_ -#define _SWAP_PATTERNS_H_ - -int swap_patterns_3 [1][1][3] = { - { - {0,1,2} - } -}; - -int swap_patterns_4 [1][2][3] = { - { - {0,1,3}, - {1,2,3} - } -}; - -int swap_patterns_5 [1][3][3] = { - { - {0,1,2}, - {0,2,4}, - {2,3,4} - } -}; - -int swap_patterns_6 [4][4][3] = { - { - {0,1,2}, - {0,2,5}, - {5,2,4}, - {4,2,3} - }, - { - {0,1,2}, - {0,2,3}, - {5,2,3}, - {5,3,4} - }, - { - {0,1,5}, - {5,1,2}, - {5,2,4}, - {4,2,3} - }, - { - {0,1,2}, - {4,0,2}, - {4,2,3}, - {0,4,5} - } -}; - -int swap_patterns_7 [6][5][3] = { - { - {0,1,3}, - {1,2,3}, - {0,3,6}, - {6,3,5}, - {5,3,4} - }, - { - {0,1,3}, - {1,2,3}, - {0,3,4}, - {0,4,6}, - {6,4,5} - }, - { - {0,1,3}, - {1,2,3}, - {0,3,6}, - {6,3,4}, - {6,4,5} - }, - { - {0,1,2}, - {0,2,3}, - {0,3,6}, - {6,3,5}, - {5,3,4} - }, - { - {0,1,6}, - {1,2,3}, - {6,1,3}, - {6,3,5}, - {5,3,4} - }, - { - {0,1,3}, - {1,2,3}, - {0,3,5}, - {5,3,4}, - {0,5,6} - } -}; - - -class SwapPattern{ -protected : - int NbPatterns; - int NbNod; - int Rot; - virtual void GetTriangleWithoutRot(int iPattern, int iTriangle,int tri[3])=0; -public : - SwapPattern(){Rot = 0;} - int GetNbPatterns() {return NbPatterns;} - virtual int GetNbRotations(int iPattern) = 0; - int GetNbTriangles(){return NbNod-2;} - void GetTriangle(int iPattern, int iTriangle,int tri[3]){ - GetTriangleWithoutRot(iPattern,iTriangle,tri); - for(int i=0;i<3;i++){ - tri[i] = (tri[i]+Rot)%NbNod; - } - } - void Rotate (){Rot++;}; -}; - -class SwapPattern3 : public SwapPattern{ - void GetTriangleWithoutRot(int iPattern, int iTriangle,int tri[3]){ - tri[0] = swap_patterns_3[iPattern][iTriangle][0]; - tri[1] = swap_patterns_3[iPattern][iTriangle][1]; - tri[2] = swap_patterns_3[iPattern][iTriangle][2]; - } -public : - SwapPattern3(){NbPatterns = 1;NbNod = 3;} - int GetNbRotations (int iPattern){ - return 1; - }; -}; - -class SwapPattern4 : public SwapPattern{ - void GetTriangleWithoutRot(int iPattern, int iTriangle,int tri[3]){ - tri[0] = swap_patterns_4[iPattern][iTriangle][0]; - tri[1] = swap_patterns_4[iPattern][iTriangle][1]; - tri[2] = swap_patterns_4[iPattern][iTriangle][2]; - } -public : - SwapPattern4(){NbPatterns = 1;NbNod = 4;} - int GetNbRotations (int iPattern){ - return 2; - }; -}; - -class SwapPattern5 : public SwapPattern{ - void GetTriangleWithoutRot(int iPattern, int iTriangle,int tri[3]){ - tri[0] = swap_patterns_5[iPattern][iTriangle][0]; - tri[1] = swap_patterns_5[iPattern][iTriangle][1]; - tri[2] = swap_patterns_5[iPattern][iTriangle][2]; - } -public : - SwapPattern5(){NbPatterns = 1;NbNod = 5;} - int GetNbRotations (int iPattern){ - return 5; - }; -}; - -class SwapPattern6 : public SwapPattern{ - void GetTriangleWithoutRot(int iPattern, int iTriangle,int tri[3]){ - tri[0] = swap_patterns_6[iPattern][iTriangle][0]; - tri[1] = swap_patterns_6[iPattern][iTriangle][1]; - tri[2] = swap_patterns_6[iPattern][iTriangle][2]; - } -public : - SwapPattern6(){NbPatterns = 4;NbNod = 6;} - int GetNbRotations (int iPattern){ - switch(iPattern){ - case 0:return 6; - case 1:return 3; - case 2:return 3; - case 3:return 2; - default: return 0; - } - } -}; - -class SwapPattern7 : public SwapPattern{ - void GetTriangleWithoutRot(int iPattern, int iTriangle,int tri[3]){ - tri[0] = swap_patterns_7[iPattern][iTriangle][0]; - tri[1] = swap_patterns_7[iPattern][iTriangle][1]; - tri[2] = swap_patterns_7[iPattern][iTriangle][2]; - } -public : - SwapPattern7(){NbPatterns = 6;NbNod = 7;} - int GetNbRotations (int iPattern){ - return 7; - } -}; - -class SwapPatternN : public SwapPattern{ - void GetTriangleWithoutRot(int iPattern, int iTriangle,int tri[3]){ - tri[0] = 0; - tri[1] = iTriangle+1; - tri[2] = iTriangle+2; - } -public : - SwapPatternN(int N){NbPatterns = 1;NbNod = N;} - int GetNbRotations (int iPattern){ - return 8; - } -}; - - -#endif diff --git a/Mesh/Utils.cpp b/Mesh/Utils.cpp deleted file mode 100644 index 7c0deec3f3dad83feaafa8f64f82be2558d218f7..0000000000000000000000000000000000000000 --- a/Mesh/Utils.cpp +++ /dev/null @@ -1,606 +0,0 @@ -// $Id: Utils.cpp,v 1.2 2001-08-12 20:45:58 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "CAD.h" -#include "Mesh.h" -#include "Interpolation.h" -#include "nrutil.h" -#include "Context.h" - -extern Context_T CTX; - -void direction (Vertex * v1, Vertex * v2, double d[3]){ - d[0] = v2->Pos.X - v1->Pos.X; - d[1] = v2->Pos.Y - v1->Pos.Y; - d[2] = v2->Pos.Z - v1->Pos.Z; -} - -void Projette (Vertex * v, double mat[3][3]){ - double X, Y, Z; - - X = v->Pos.X * mat[0][0] + v->Pos.Y * mat[0][1] + v->Pos.Z * mat[0][2]; - Y = v->Pos.X * mat[1][0] + v->Pos.Y * mat[1][1] + v->Pos.Z * mat[1][2]; - Z = v->Pos.X * mat[2][0] + v->Pos.Y * mat[2][1] + v->Pos.Z * mat[2][2]; - v->Pos.X = X; - v->Pos.Y = Y; - v->Pos.Z = Z; -} - -void MeanPlane(List_T *points, Surface *s){ - int i, j, ix, iy, iz, N; - double det,sys[3][3],b[3],res[3],mod,t1[3],t2[3],ex[3],s2s[2][2],r2[2],X,Y,Z; - Vertex *v; - - N = List_Nbr (points); - - for (i = 0; i < 3; i++){ - b[i] = 0.0; - for (j = 0; j < 3; j++){ - sys[i][j] = 0.0; - } - } - - /* ax + by + cz = 1 */ - - ix = iy = iz = 0; - - // TOLERANCE ! WARNING WARNING - double eps = 1.e-6 * CTX.lc; - - for (i = 0; i < N; i++){ - List_Read (points, i, &v); - - if (!i){ - X = v->Pos.X; - Y = v->Pos.Y; - Z = v->Pos.Z; - } - else{ - if(fabs(X-v->Pos.X) > eps) ix = 1; - if(fabs(Y-v->Pos.Y) > eps) iy = 1; - if(fabs(Z-v->Pos.Z) > eps) iz = 1; - } - - sys[0][0] += v->Pos.X * v->Pos.X; - sys[1][1] += v->Pos.Y * v->Pos.Y; - sys[2][2] += v->Pos.Z * v->Pos.Z; - sys[0][1] += v->Pos.X * v->Pos.Y; - sys[0][2] += v->Pos.X * v->Pos.Z; - sys[1][2] += v->Pos.Y * v->Pos.Z; - sys[2][1] = sys[1][2]; - sys[1][0] = sys[0][1]; - sys[2][0] = sys[0][2]; - b[0] += v->Pos.X; - b[1] += v->Pos.Y; - b[2] += v->Pos.Z; - } - - s->d = 1.0; - - /* x = X */ - - if (!ix){ - s->d = X; - res[0] = 1.; - res[1] = res[2] = 0.0; - Msg(DEBUG, "Mean plane of type 'x = c'"); - } - - /* y = Y */ - - else if (!iy){ - s->d = Y; - res[1] = 1.; - res[0] = res[2] = 0.0; - Msg(DEBUG, "Mean plane of type 'y = c'"); - } - - /* z = Z */ - - else if (!iz){ - s->d = Z; - res[2] = 1.; - res[1] = res[0] = 0.0; - Msg(DEBUG, "Mean plane of type 'z = c'"); - } - - /* by + cz = -x */ - - else if (!sys3x3_with_tol (sys, b, res, &det)){ - s->d = 0.0; - s2s[0][0] = sys[1][1]; - s2s[0][1] = sys[1][2]; - s2s[1][0] = sys[1][2]; - s2s[1][1] = sys[2][2]; - b[0] = -sys[0][1]; - b[1] = -sys[0][2]; - if (sys2x2 (s2s, b, r2)){ - res[0] = 1.; - res[1] = r2[0]; - res[2] = r2[1]; - Msg(DEBUG, "Mean plane of type 'by + cz = -x'"); - } - - /* ax + cz = -y */ - - else{ - s->d = 0.0; - s2s[0][0] = sys[0][0]; - s2s[0][1] = sys[0][2]; - s2s[1][0] = sys[0][2]; - s2s[1][1] = sys[2][2]; - b[0] = -sys[0][1]; - b[1] = -sys[1][2]; - if (sys2x2 (s2s, b, r2)){ - res[0] = r2[0]; - res[1] = 1.; - res[2] = r2[1]; - Msg(DEBUG, "Mean plane of type 'ax + cz = -y'"); - } - - /* ax + by = -z */ - - else{ - s->d = 1.0; - s2s[0][0] = sys[0][0]; - s2s[0][1] = sys[0][1]; - s2s[1][0] = sys[0][1]; - s2s[1][1] = sys[1][1]; - b[0] = -sys[0][2]; - b[1] = -sys[1][2]; - if (sys2x2 (s2s, b, r2)){ - res[0] = r2[0]; - res[1] = r2[1]; - res[2] = 1.; - Msg(DEBUG, "Mean plane of type 'ax + by = -z'"); - } - else{ - Msg(GERROR, "Problem in mean plane computation"); - } - } - } - } - - s->a = res[0]; - s->b = res[1]; - s->c = res[2]; - mod = sqrt (res[0] * res[0] + res[1] * res[1] + res[2] * res[2]); - for (i = 0; i < 3; i++) - res[i] /= mod; - - /* L'axe n'est pas l'axe des x */ - - ex[0] = ex[1] = ex[2] = 0.0; - if(res[0] == 0.0) - ex[0] = 1.0; - else if(res[1] == 0.0) - ex[1] = 1.0; - else - ex[2] = 1.0; - - prodve (res, ex, t1); - - mod = sqrt (t1[0] * t1[0] + t1[1] * t1[1] + t1[2] * t1[2]); - for (i = 0; i < 3; i++) - t1[i] /= mod; - - prodve (t1, res, t2); - - mod = sqrt (t2[0] * t2[0] + t2[1] * t2[1] + t2[2] * t2[2]); - for (i = 0; i < 3; i++) - t2[i] /= mod; - - for (i = 0; i < 3; i++) - s->plan[0][i] = t1[i]; - for (i = 0; i < 3; i++) - s->plan[1][i] = t2[i]; - for (i = 0; i < 3; i++) - s->plan[2][i] = res[i]; - - Msg(DEBUG1, "Plane : (%g x + %g y + %g z = %g)", s->a, s->b, s->c, s->d); - Msg(DEBUG2, "Normal : (%g , %g , %g )", res[0], res[1], res[2]); - Msg(DEBUG2, "t1 : (%g , %g , %g )", t1[0], t1[1], t1[2]); - Msg(DEBUG3, "t2 : (%g , %g , %g )", t2[0], t2[1], t2[2]); - - /* Matrice orthogonale */ - - if (!iz){ - for (i = 0; i < 3; i++){ - for (j = 0; j < 3; j++){ - s->invplan[i][j] = (i == j) ? 1. : 0.; - s->plan[i][j] = (i == j) ? 1. : 0.; - } - } - } - else{ - for (i = 0; i < 3; i++){ - for (j = 0; j < 3; j++){ - s->invplan[i][j] = s->plan[j][i]; - } - } - } - - -// this is the end of the algo as it was used for surface drawing: - -#if 0 - /* L'axe n'est pas l'axe des x */ - if(res[0] > res[1]){ - ex[0] = 0.; - ex[1] = 1.; - ex[2] = 0.; - } - else{ - ex[0] = 1.; - ex[1] = 0.; - ex[2] = 0.; - } - - prodve(res,ex,t1); - - mod = sqrt (t1[0] * t1[0] + t1[1] * t1[1] + t1[2] * t1[2] ) ; - for(i=0;i<3;i++) t1[i]/=mod; - - prodve(t1,res,t2); - - mod = sqrt (t2[0] * t2[0] + t2[1] * t2[1] + t2[2] * t2[2] ) ; - for(i=0;i<3;i++) t2[i]/=mod; - - for(i=0;i<3;i++)s->plan[0][i] = t1[i]; - for(i=0;i<3;i++)s->plan[1][i] = t2[i]; - for(i=0;i<3;i++)s->plan[2][i] = res[i]; - - /* Matrice orthogonale */ - - for(i=0;i<3;i++){ - for(j=0;j<3;j++){ - s->invplan[i][j] = s->plan[j][i]; - } - } -#endif -} - - - -#define Precision 1.e-10 -#define MaxIter 20 - -void find_bestuv (Surface * s, double X, double Y, - double *U, double *V, double *Z, int N){ - double d, mina, min, minu, minv, Unew, Vnew; - static int i, j; - Vertex P; - - d = 1. / (double) N; - - for (i = 0; i <= N; i++){ - for (j = 0; j <= N; j++){ - Unew = ((double) i) * d; - Vnew = ((double) j) * d; - P = InterpolateSurface (s, Unew, Vnew, 0, 0); - if (!i && !j){ - min = myhypot (X - P.Pos.X, Y - P.Pos.Y); - minu = Unew; - minv = Vnew; - *Z = P.Pos.Z; - } - else{ - if ((mina = myhypot (X - P.Pos.X, Y - P.Pos.Y)) < min){ - min = mina; - minu = Unew; - minv = Vnew; - *Z = P.Pos.Z; - } - } - } - } - *U = minu; - *V = minv; -} - -void invert_singular_matrix(double **M, int n, double **I); - -void XYZtoUV (Surface *s, double X, double Y, double Z, double *U, double *V) { - double Unew,Vnew,err; - int iter; - Vertex D_u,D_v,P; - double **mat, **jac ; - - mat = dmatrix(1,3,1,3); - jac = dmatrix(1,3,1,3); - - *U = *V = 0.487; - err = 1.0; - iter = 1; - - while ( err > Precision && iter < MaxIter ){ - P = InterpolateSurface(s, *U, *V, 0, 0); - D_u = InterpolateSurface(s, *U, *V, 1, 1); - D_v = InterpolateSurface(s, *U, *V, 1, 2); - - mat[1][1] = D_u.Pos.X; - mat[1][2] = D_u.Pos.Y; - mat[1][3] = D_u.Pos.Z; - mat[2][1] = D_v.Pos.X; - mat[2][2] = D_v.Pos.Y; - mat[2][3] = D_v.Pos.Z; - mat[3][1] = 0.; - mat[3][2] = 0.; - mat[3][3] = 0.; - invert_singular_matrix(mat,3,jac); - - Unew = *U + jac[1][1] * (X-P.Pos.X) + jac[2][1] * (Y-P.Pos.Y) + jac[3][1] * (Z-P.Pos.Z) ; - Vnew = *V + jac[1][2] * (X-P.Pos.X) + jac[2][2] * (Y-P.Pos.Y) + jac[3][2] * (Z-P.Pos.Z) ; - - err = DSQR(Unew - *U) + DSQR(Vnew - *V) ; - - iter++; - *U = Unew; - *V = Vnew; - } - - if(iter > 10){ - if(iter == MaxIter) Msg(WARNING, "Could not converge in XYZtoUV"); - else Msg(WARNING, "Many (%d) iterations in XYZtoUV", iter); - } - - free_dmatrix(mat,1,3,1,3); - free_dmatrix(jac,1,3,1,3); - -} - -void XYtoUV (Surface * s, double *X, double *Y, - double *U, double *V, double *Z){ - - double det, Unew, Vnew, err, mat[2][2], jac[2][2]; - int iter; - Vertex D_u, D_v, P; - double umin, umax, vmin, vmax; - - if (s->Typ == MSH_SURF_NURBS){ - umin = s->ku[0]; - umax = s->ku[s->OrderU + s->Nu]; - vmin = s->kv[0]; - vmax = s->kv[s->OrderV + s->Nv]; - } - else{ - umin = vmin = 0.0; - umax = vmax = 1.0; - } - - *U = *V = 0.487; - err = 1.0; - iter = 1; - - while (err > Precision && iter < MaxIter){ - P = InterpolateSurface (s, *U, *V, 0, 0); - D_u = InterpolateSurface (s, *U, *V, 1, 1); - D_v = InterpolateSurface (s, *U, *V, 1, 2); - mat[0][0] = D_u.Pos.X; - mat[0][1] = D_u.Pos.Y; - mat[1][0] = D_v.Pos.X; - mat[1][1] = D_v.Pos.Y; - det = mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0]; - - if (det == 0.0){ - iter = MaxIter; - break; - } - - jac[0][0] = mat[1][1] / det; - jac[0][1] = -mat[0][1] / det; - jac[1][0] = -mat[1][0] / det; - jac[1][1] = mat[0][0] / det; - - Unew = *U + 1.0 * (jac[0][0] * (*X - P.Pos.X) + jac[1][0] * (*Y - P.Pos.Y)); - Vnew = *V + 1.0 * (jac[0][1] * (*X - P.Pos.X) + jac[1][1] * (*Y - P.Pos.Y)); - - err = DSQR (Unew - *U) + DSQR (Vnew - *V); - - iter++; - *U = Unew; - *V = Vnew; - } - - *Z = P.Pos.Z; - - if(iter > 10){ - if(iter == MaxIter) Msg(WARNING, "Could not converge in XYtoUV"); - else Msg(WARNING, "Many (%d) iterations in XYtoUV...", iter); - } - - if (Unew > umax || Vnew > vmax || Unew < umin || Vnew < vmin){ - Msg(WARNING, "(U,V) thresholded in XYtoUV (surface mesh may be wrong)"); - if(Unew > umax) *U = umax; - if(Vnew > vmax) *V = vmax; - if(Unew < umin) *U = umin; - if(Vnew < vmin) *V = vmin; - } - -#if 0 - if (iter == MaxIter || Unew > umax || Vnew > vmax || Unew < umin || Vnew < vmin){ - static int first_try=1; - if(first_try){ - Msg(WARNING, "Entering rescue mode in XYtoUV..."); - first_try=0; - } - find_bestuv (s, *X, *Y, U, V, Z, 30); - P = InterpolateSurface (s, *U, *V, 0, 0); - - *X = P.Pos.X; - *Y = P.Pos.Y; - *Z = P.Pos.Z; - } -#endif -} - -int Oriente (List_T * cu, double n[3]){ - int N, i, a, b, c; - double cosa, sina, sum, v[3], w[3], u[3]; - Vertex *ver[3]; - - N = List_Nbr (cu); - - sum = 0.0; - for (i = 0; i < N; i++){ - if (i == N - 1){ - a = N - 1; - b = 1; - c = 2; - } - else if (i == N - 2){ - a = N - 2; - b = N - 1; - c = 1; - } - else{ - a = i; - b = i + 1; - c = i + 2; - } - List_Read (cu, a, &ver[0]); - List_Read (cu, b, &ver[1]); - List_Read (cu, c, &ver[2]); - - u[0] = ver[1]->Pos.X - ver[0]->Pos.X; - u[1] = ver[1]->Pos.Y - ver[0]->Pos.Y; - u[2] = ver[1]->Pos.Z - ver[0]->Pos.Z; - - v[0] = ver[2]->Pos.X - ver[1]->Pos.X; - v[1] = ver[2]->Pos.Y - ver[1]->Pos.Y; - v[2] = ver[2]->Pos.Z - ver[1]->Pos.Z; - norme (u); - norme (v); - prodve (u, v, w); - prosca (w, n, &sina); - prosca (u, v, &cosa); - sum += myatan2 (sina, cosa); - } - - if (sum < 0) - return (1); - else - return (0); -} - -double angle_3p (Vertex * V, Vertex * P1, Vertex * P2){ - double PA[3], PB[3], angplan; - double cosc, sinc, c[3]; - - PA[0] = P1->Pos.X - V->Pos.X; - PA[1] = P1->Pos.Y - V->Pos.Y; - PA[2] = P1->Pos.Z - V->Pos.Z; - - PB[0] = P2->Pos.X - V->Pos.X; - PB[1] = P2->Pos.Y - V->Pos.Y; - PB[2] = P2->Pos.Z - V->Pos.Z; - - norme (PA); - norme (PB); - - prodve (PA, PB, c); - - prosca (PA, PB, &cosc); - sinc = sqrt (c[0] * c[0] + c[1] * c[1] + c[2] * c[2]); - - angplan = myatan2 (sinc, cosc); - - return angplan; -} - -double angle_plan (Vertex * V, Vertex * P1, Vertex * P2, double n[3]){ - double PA[3], PB[3], angplan; - double cosc, sinc, c[3]; - - PA[0] = P1->Pos.X - V->Pos.X; - PA[1] = P1->Pos.Y - V->Pos.Y; - PA[2] = P1->Pos.Z - V->Pos.Z; - - PB[0] = P2->Pos.X - V->Pos.X; - PB[1] = P2->Pos.Y - V->Pos.Y; - PB[2] = P2->Pos.Z - V->Pos.Z; - - norme (PA); - norme (PB); - - prodve (PA, PB, c); - - prosca (PA, PB, &cosc); - prosca (c, n, &sinc); - - angplan = myatan2 (sinc, cosc); - - return angplan; -} - -double angle_3pts (Vertex * a, Vertex * b, Vertex * c){ - double L, prosca, angle; - - L = myhypot ((a->Pos.X - b->Pos.X), (a->Pos.Y - b->Pos.Y)) * - myhypot ((b->Pos.X - c->Pos.X), (b->Pos.Y - c->Pos.Y)); - - prosca = ((a->Pos.X - b->Pos.X) * (c->Pos.X - b->Pos.X) + - (a->Pos.Y - b->Pos.Y) * (c->Pos.Y - b->Pos.Y)) / L; - - angle = acos (prosca) * 180. / Pi ; - return (angle); -} - -double trapeze (IntPoint * P1, IntPoint * P2){ - return (0.5 * (P1->lc + P2->lc) * (P2->t - P1->t)); -} - - -void RecursiveIntegration (IntPoint * from, IntPoint * to, double (*f) (double X), - List_T * pPoints, double Prec, int *depth){ - IntPoint P, p1; - double err, val1, val2, val3; - - (*depth)++; - - P.t = 0.5 * (from->t + to->t); - P.lc = f (P.t); - - val1 = trapeze (from, to); - val2 = trapeze (from, &P); - val3 = trapeze (&P, to); - - err = fabs (val1 - val2 - val3); - - if ((err < Prec) && (*depth > 1)){ - List_Read (pPoints, List_Nbr (pPoints) - 1, &p1); - P.p = p1.p + val2; - List_Add (pPoints, &P); - - List_Read (pPoints, List_Nbr (pPoints) - 1, &p1); - to->p = p1.p + val3; - List_Add (pPoints, to); - } - else{ - RecursiveIntegration (from, &P, f, pPoints, Prec, depth); - RecursiveIntegration (&P, to, f, pPoints, Prec, depth); - } - (*depth)--; -} - -double Integration (double t1, double t2, double (*f) (double X), - List_T * pPoints, double Prec){ - int depth; - IntPoint from, to; - - depth = 0; - - from.t = t1; - from.lc = f(from.t); - from.p = 0.0; - List_Add (pPoints, &from); - - to.t = t2; - to.lc = f(to.t); - RecursiveIntegration (&from, &to, f, pPoints, Prec, &depth); - - List_Read (pPoints, List_Nbr (pPoints) - 1, &to); - return (to.p); -} diff --git a/Mesh/Utils.h b/Mesh/Utils.h deleted file mode 100644 index 12c5a589c0b7dd4a2245427f1b6d2c647e0907af..0000000000000000000000000000000000000000 --- a/Mesh/Utils.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef _UTILS_H_ -#define _UTILS_H_ - -void direction (Vertex * v1, Vertex * v2, double d[3]); -void Projette (Vertex * v, double mat[3][3]); -void MeanPlane(List_T *point, Surface *s); -void find_bestuv (Surface * s, double X, double Y, - double *U, double *V, double *Z, int N); -void XYtoUV (Surface * s, double *X, double *Y, - double *U, double *V, double *Z); -void XYZtoUV (Surface *s, double X, double Y, double Z, double *U, double *V); -int Oriente (List_T * cu, double n[3]); -double angle_3p (Vertex * V, Vertex * P1, Vertex * P2); -double angle_plan (Vertex * V, Vertex * P1, Vertex * P2, double n[3]); -double angle_3pts (Vertex * a, Vertex * b, Vertex * c); -double trapeze (IntPoint * P1, IntPoint * P2); -void RecursiveIntegration (IntPoint * from, IntPoint * to, double (*f) (double X), - List_T * pPoints, double Prec, int *depth); -double Integration (double t1, double t2, double (*f) (double X), - List_T * pPoints, double Prec); - -#endif diff --git a/Mesh/Vertex.cpp b/Mesh/Vertex.cpp deleted file mode 100644 index d3397144de00be9eee0fd1572880dedc3d1c041d..0000000000000000000000000000000000000000 --- a/Mesh/Vertex.cpp +++ /dev/null @@ -1,139 +0,0 @@ -// $Id: Vertex.cpp,v 1.8 2001-06-06 15:30:18 remacle Exp $ - -#include "Gmsh.h" -#include "Vertex.h" -#include "Context.h" - -extern Context_T CTX ; - -Vertex::Vertex (){ - Frozen = 0; - Pos.X = 0.0; - Pos.Y = 0.0; - Pos.Z = 0.0; - lc = 1.0; - Mov = NULL; - ListSurf = ListCurves = Extruded_Points = NULL; -} - -Vertex::Vertex (double X, double Y, double Z, double l, double W){ - Frozen = 0; - Pos.X = X; - Pos.Y = Y; - Pos.Z = Z; - w = W; - lc = l; - Mov = NULL; - ListSurf = ListCurves = Extruded_Points = NULL; -} - -void Vertex::norme (){ - double d = sqrt (Pos.X * Pos.X + Pos.Y * Pos.Y + Pos.Z * Pos.Z); - if (d == 0.0) - return; - Pos.X /= d; - Pos.Y /= d; - Pos.Z /= d; -} - - -Vertex Vertex::operator + (const Vertex & other){ - return Vertex (Pos.X + other.Pos.X, Pos.Y + - other.Pos.Y, Pos.Z + other.Pos.Z, lc, w); -} - -Vertex Vertex::operator - (const Vertex & other){ - return Vertex (Pos.X - other.Pos.X, Pos.Y - - other.Pos.Y, Pos.Z - other.Pos.Z, lc, w); -} - -Vertex Vertex::operator / (double d){ - return Vertex (Pos.X / d, Pos.Y / d, Pos.Z / d, lc, w); -} -Vertex Vertex::operator * (double d){ - return Vertex (Pos.X * d, Pos.Y * d, Pos.Z * d, lc, w); -} - -Vertex Vertex::operator % (Vertex & autre){ // cross product - return Vertex (Pos.Y * autre.Pos.Z - Pos.Z * autre.Pos.Y, - -(Pos.X * autre.Pos.Z - Pos.Z * autre.Pos.X), - Pos.X * autre.Pos.Y - Pos.Y * autre.Pos.X, lc, w); -} - -double Vertex::operator * (const Vertex & other){ - return Pos.X * other.Pos.X + Pos.Y * other.Pos.Y + Pos.Z * other.Pos.Z; -} - -Vertex *Create_Vertex (int Num, double X, double Y, double Z, double lc, double u){ - Vertex *pV; - - pV = new Vertex (X, Y, Z, lc); - pV->w = 1.0; - pV->Num = Num; - pV->u = u; - return pV; -} - -void Delete_Vertex ( Vertex *pV ) -{ - if(pV) - { - List_Delete(pV->ListSurf); - List_Delete(pV->ListCurves); - List_Delete(pV->Extruded_Points); - delete pV; - } -} - -void Free_Vertex (void *a, void *b) -{ - Delete_Vertex ( *(Vertex**)a ); -} - -int compareVertex (const void *a, const void *b){ - int i, j; - Vertex **q, **w; - - q = (Vertex **) a; - w = (Vertex **) b; - i = abs ((*q)->Num); - j = abs ((*w)->Num); - - return (i - j); -} - -int comparePosition (const void *a, const void *b){ - int i, j; - Vertex **q, **w; - // TOLERANCE ! WARNING WARNING - double eps = 1.e-6 * CTX.lc; - - q = (Vertex **) a; - w = (Vertex **) b; - i = ((*q)->Num); - j = ((*w)->Num); - - if ((*q)->Pos.X - (*w)->Pos.X > eps) - return (1); - if ((*q)->Pos.X - (*w)->Pos.X < -eps) - return (-1); - if ((*q)->Pos.Y - (*w)->Pos.Y > eps) - return (1); - if ((*q)->Pos.Y - (*w)->Pos.Y < -eps) - return (-1); - if ((*q)->Pos.Z - (*w)->Pos.Z > eps) - return (1); - if ((*q)->Pos.Z - (*w)->Pos.Z < -eps) - return (-1); - - if (i != j){ - /* - *w = *q; - printf("Les points %d et %d sont a la meme position\n",i,j); - printf("%12.5E %12.5E %12.5E\n",(*w)->Pos.X,(*w)->Pos.Y,(*w)->Pos.Z); - printf("%12.5E %12.5E %12.5E\n",(*q)->Pos.X,(*q)->Pos.Y,(*q)->Pos.Z); - */ - } - return 0; - -} diff --git a/Mesh/Vertex.h b/Mesh/Vertex.h deleted file mode 100644 index 5ea12b41461887a1ae2ce909babc755a48a1af7a..0000000000000000000000000000000000000000 --- a/Mesh/Vertex.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef _VERTEX_H_ -#define _VERTEX_H_ - -#include "List.h" - -typedef struct { - double X,Y,Z; -}Coord; - -class Vertex { - public : - int Num; - int Frozen; - double lc,u,us[3],w; - Coord Pos; - Coord *Mov; - Coord Freeze; - List_T *ListSurf; - List_T *ListCurves; - List_T *Extruded_Points; - Vertex (); - Vertex (double x,double y,double z =0.0, double lc = 1.0, double w = 1.0); - Vertex operator + ( const Vertex &other); - Vertex operator - ( const Vertex &other); - double operator * ( const Vertex &other); - Vertex operator * ( double d ); - Vertex operator / ( double d ); - Vertex operator % (Vertex &autre); // cross product - void norme(); -}; - -int compareVertex (const void *a, const void *b); -int comparePosition (const void *a, const void *b); - -Vertex *Create_Vertex (int Num, double X, double Y, double Z, double lc, double u); -void Delete_Vertex ( Vertex *pV ); -void Free_Vertex (void *a, void *b); - -#endif diff --git a/Motif/CbColorbar.cpp b/Motif/CbColorbar.cpp deleted file mode 100644 index 3e2490deb9c875cde640645cc77d71358cbb5720..0000000000000000000000000000000000000000 --- a/Motif/CbColorbar.cpp +++ /dev/null @@ -1,643 +0,0 @@ -// $Id: CbColorbar.cpp,v 1.3 2001-08-12 14:24:50 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Numeric.h" -#include "XColors.h" -#include "Widgets.h" -#include "Register.h" -#include "Context.h" -#include "XContext.h" -#include "ColorTable.h" - -#include "CbColorbar.h" - -extern Context_T CTX ; -extern XContext_T XCTX ; -extern Widgets_T WID; - -/* RGB/HSV transformation */ - -#define RETURN_HSV(h,s,v) {*H=h; *S=s; *V=v; return;} -#define RETURN_RGB(r,g,b) {*R=r; *G=g; *B=b; return;} -#define UNDEFINED 0 -#define EPS 1.e-10 - -/* rgb on [0, 1], sv returned on [0, 1] and h on [0, 6]. - Exception: h is returned UNDEFINED if S==0. */ - -void RGB_to_HSV(double R, double G, double B, - double *H, double *S, double *V) { - double v, x, f; - int i; - - x = DMIN(DMIN(R, G), B); - v = DMAX(DMAX(R, G), B); - if(v == x) RETURN_HSV(UNDEFINED, 0, v); - f = (R == x) ? G - B : ((G == x) ? B - R : R - G); - i = (R == x) ? 3 : ((G == x) ? 5 : 1); - RETURN_HSV(i - f /(v - x), (v - x)/v, v); -} - -/* h given on [0, 6] or UNDEFINED. s and v given on [0, 1]. - rgb each returned on [0, 1]. */ - -void HSV_to_RGB(double H, double S, double V, - double *R, double *G, double *B) { - double m, n, f; - int i; - - if (H == UNDEFINED) RETURN_RGB(V, V, V); - i = (int)floor(H); - f = H - i; - if ( !(i&1) ) f = 1 - f; /* if i is even */ - m = V * (1 - S); - n = V * (1 - S * f); - - switch (i) { - case 6: - case 0: RETURN_RGB(V, n, m); - case 1: RETURN_RGB(n, V, m); - case 2: RETURN_RGB(m, V, n); - case 3: RETURN_RGB(m, n, V); - case 4: RETURN_RGB(n, m, V); - case 5: RETURN_RGB(V, m, n); - } -} - - -/* Convert window X coordinate to color table index */ - -static int x_to_index(ColorBar *cb, int x){ - int index; - index = (int) (x * (float) cb->ct->size / (float) cb->width ); - if (index<0) - index = 0; - else if (index>=cb->ct->size) - index = cb->ct->size-1; - return index; -} - -/* Convert color table index to window X coordinate */ - -static int index_to_x(ColorBar *cb, int index){ - int x; - x = (int) (index * (float) cb->width / (float)(cb->ct->size-1) ); - if (x>=cb->width) - x = cb->width - 1; - return x; -} - -/* Convert a color intensity to a window Y coordinate */ - -static int intensity_to_y(ColorBar *cb, int intensity){ - int y; - y = (int) (cb->wedge_y - intensity * (float) cb->wedge_y / 255.0 ); - if (y<0) - y = 0; - else if (y>=cb->wedge_y) - y = cb->wedge_y - 1; - return y; -} - -/* Convert a window Y coordinate to a color intensity */ - -static int y_to_intensity(ColorBar *cb, int y){ - int intensity; - intensity = (int) ((cb->wedge_y - y ) * 255.0 / (float) cb->wedge_y ); - if (intensity<0) - intensity = 0; - else if (intensity>255) - intensity = 255; - return intensity; -} - - -/* Redraw part of a Color Widget (between a and b) */ - -#define HELP_LINES 9 - -static void redraw_range(ColorBar *cb, int a, int b){ - Window win; - int i; - int x,y, px,py; - int x1, y1, x2, y2; - int intensity; - double H,S,V; - char rgb_str[] = "RGB", hsv_str[] = "HSV" ; - char help_str[HELP_LINES][100] = { - "h show this message", - "1 -> 6 choose predefined colormap", - "m switch color mode", - "c/p/r copy/paste/reset", - "mouse draw color or alpha", - "left/right move or rotate", - "up/down color or alpha curvature", - "i invert x or y range", - "b increase or decrease gamma" - }; - - win = cb->window; - - if (a<0) a = 0; - if (b>=cb->ct->size) b = cb->ct->size-1; - - /* calc region to update */ - x1 = index_to_x( cb, a ); - x2 = index_to_x( cb, b); - - y1 = intensity_to_y( cb, 255 ); - y2 = intensity_to_y( cb, 0 ); - - /* erase region */ - XFillRectangle( XCTX.display, win, XCTX.xgc.black, - x1,y1, x2-x1+1, y2-y1+1 ); - - /* redraw region of entries in interval [a,b] */ - if (a>0) a--; - if (b<cb->ct->size-1) b++; - - /* draw red or hue levels */ - for (i=a;i<=b;i++) { - x = index_to_x( cb, i ); - - if(cb->ct->ipar[COLORTABLE_MODE]==COLORTABLE_RGB){ - intensity = UNPACK_RED(cb->ct->table[i]); - } - else if(cb->ct->ipar[COLORTABLE_MODE]==COLORTABLE_HSV){ - RGB_to_HSV(UNPACK_RED (cb->ct->table[i])/255., - UNPACK_GREEN(cb->ct->table[i])/255., - UNPACK_BLUE (cb->ct->table[i])/255., - &H,&S,&V); - intensity = (int) (H/6.*255.+EPS); - } - - y = intensity_to_y( cb, intensity ); - if (i!=a) - XDrawLine( XCTX.display, win, XCTX.xgc.red, px, py, x, y ); - px = x; py = y; - } - - /* draw green or saturation levels */ - for (i=a;i<=b;i++) { - x = index_to_x( cb, i ); - - if(cb->ct->ipar[COLORTABLE_MODE]==COLORTABLE_RGB){ - intensity = UNPACK_GREEN(cb->ct->table[i]); - } - else if(cb->ct->ipar[COLORTABLE_MODE]==COLORTABLE_HSV){ - RGB_to_HSV(UNPACK_RED (cb->ct->table[i])/255., - UNPACK_GREEN(cb->ct->table[i])/255., - UNPACK_BLUE (cb->ct->table[i])/255., - &H,&S,&V); - intensity = (int) (S*255.); - } - - y = intensity_to_y( cb, intensity); - if (i!=a) - XDrawLine( XCTX.display, win, XCTX.xgc.green, px,py, x,y ); - px = x; py = y; - } - - /* draw blue or value levels */ - for (i=a;i<=b;i++) { - x = index_to_x( cb, i ); - - if(cb->ct->ipar[COLORTABLE_MODE]==COLORTABLE_RGB){ - intensity = UNPACK_BLUE(cb->ct->table[i]); - } - else if(cb->ct->ipar[COLORTABLE_MODE]==COLORTABLE_HSV){ - RGB_to_HSV(UNPACK_RED (cb->ct->table[i])/255., - UNPACK_GREEN(cb->ct->table[i])/255., - UNPACK_BLUE (cb->ct->table[i])/255., - &H,&S,&V); - intensity = (int) (V*255.); - } - - y = intensity_to_y( cb, intensity ); - if (i!=a) - XDrawLine( XCTX.display, win, XCTX.xgc.blue, px,py, x,y ); - px = x; py = y; - } - - /* draw alpha levels */ - for (i=a;i<=b;i++) { - x = index_to_x( cb, i ); - y = intensity_to_y( cb, UNPACK_ALPHA(cb->ct->table[i]) ); - if (i!=a) - XDrawLine( XCTX.display, win, XCTX.xgc.white, px,py, x,y ); - px = x; py = y; - } - - /* draw the color bar */ - for (x=x1;x<=x2;x++) { - int r, g, b; - unsigned int color; - i = x_to_index( cb, x ); - color = cb->ct->table[i]; - r = UNPACK_RED( color ); - g = UNPACK_GREEN( color ); - b = UNPACK_BLUE( color ); - XSetForeground( XCTX.display, XCTX.xgc.xgc, AllocateColorInt(r,g,b) ); - XDrawLine( XCTX.display, win, XCTX.xgc.xgc, x, cb->wedge_y, - x, cb->wedge_y + WEDGE_HEIGHT-1 ); - } - - /* print colortable mode and help */ - - if (cb->helpflag) { - for (i=0;i<HELP_LINES;i++) { - XDrawString( XCTX.display, win, XCTX.xgc.white, - 10,10+(i+1)*XCTX.xfont.fixed_h, - help_str[i], strlen(help_str[i]) ); - } - } - else{ - if(cb->ct->ipar[COLORTABLE_MODE]==COLORTABLE_RGB) - XDrawString( XCTX.display, win, XCTX.xgc.white, - 10, 10+XCTX.xfont.fixed_h, - rgb_str, strlen(rgb_str) ); - else if(cb->ct->ipar[COLORTABLE_MODE]==COLORTABLE_HSV) - XDrawString( XCTX.display, win, XCTX.xgc.white, - 10, 10+XCTX.xfont.fixed_h, - hsv_str, strlen(hsv_str) ); - } -} - - -/* Redraw the marker and the text */ - -static void redraw_marker(ColorBar *cb){ - Window win; - int x, y0, y1; - char str[50]; - int dir,ascent, descent; - XCharStruct overall; - int xpos; - float val; - - win = cb->window; - - y0 = cb->marker_y; - y1 = cb->height - 1; - XFillRectangle( XCTX.display, win, XCTX.xgc.black, - 0, y0, cb->width, y1-y0+1 ); - - /* draw marker below color wedge */ - x = index_to_x( cb, cb->markerpos ); - XDrawLine( XCTX.display, win, XCTX.xgc.white, - x, cb->marker_y, x, cb->marker_y+MARKER_HEIGHT ); - XDrawLine( XCTX.display, win, XCTX.xgc.white, - x, cb->marker_y, x-3, cb->marker_y+6 ); - XDrawLine( XCTX.display, win, XCTX.xgc.white, - x, cb->marker_y, x+3, cb->marker_y+6 ); - - /* draw min value */ - sprintf( str, "%.2g", cb->minval ); - XDrawString( XCTX.display, win, XCTX.xgc.white, - 2, cb->label_y, str, strlen(str) ); - - /* draw marker value */ - val = cb->minval + (cb->maxval-cb->minval) - * ( (float) cb->markerpos / (float) (cb->ct->size-1)); - sprintf(str,"(%.2g)", val ); - XTextExtents(XCTX.xfont.fixed, str, strlen(str), &dir,&ascent,&descent,&overall ); - xpos = (cb->width - overall.width) / 2; - XDrawString( XCTX.display, win, XCTX.xgc.white, - xpos, cb->label_y, str, strlen(str) ); - - /* draw max value */ - sprintf( str, "%.2g", cb->maxval ); - XTextExtents( XCTX.xfont.fixed, str, strlen(str), &dir,&ascent,&descent,&overall ); - xpos = cb->width - overall.width - 2; - XDrawString( XCTX.display, win, XCTX.xgc.white, - xpos, cb->label_y, str, strlen(str) ); - -} - - -static void set_size(ColorBar *cb, int width, int height){ - cb->width = width; - cb->height = height; - cb->label_y = cb->height - 5; - cb->marker_y = cb->label_y + 1 - MARKER_HEIGHT - XCTX.xfont.fixed_h; - cb->wedge_y = cb->marker_y - WEDGE_HEIGHT; -} - - - - -/* creation, manipulation and callbacks functions */ - -static ColorBar *TheCB=NULL ; - -void ColorBarCreate(Window win, int width, int height){ - static int first=1 ; - - if(!TheCB) TheCB = (ColorBar *) calloc(1, sizeof(ColorBar)); - TheCB->window = win; - set_size(TheCB, width, height); - - if(first){ - TheCB->helpflag = 1; - first=0; - } -} - -void ColorBarShow(void){ - XMapWindow(XCTX.display, TheCB->window); -} - -void ColorBarHide(void){ - XUnmapWindow(XCTX.display, TheCB->window); -} - -void ColorBarRedraw(void){ - if(!TheCB) return; - redraw_range(TheCB, 0, TheCB->ct->size-1); - redraw_marker(TheCB); -} - -void ColorBarChange(char *label, float min, float max, ColorTable *ct, int rgb){ - strncpy(TheCB->label, label, 31); - TheCB->ct = ct; - TheCB->minval = min; - TheCB->maxval = max; - if (rgb) redraw_range(TheCB, 0, TheCB->ct->size-1); - redraw_marker(TheCB); -} - -void ColorBarResizeCb(Widget w, XtPointer client_data, - XmDrawingAreaCallbackStruct *call_data){ - Dimension w1,h1; - - if(!TheCB) return; - - XtVaGetValues(WID.PD.colorDrawingArea, - XmNwidth, &w1, - XmNheight, &h1, - NULL); - - set_size(TheCB, (int)w1, (int)h1); - XResizeWindow(XCTX.display, TheCB->window, (int)w1, (int)h1); - ColorBarRedraw(); -} - -void ColorBarExposeCb(Widget w,XtPointer client_data, - XmDrawingAreaCallbackStruct *call_data){ - ColorBarRedraw(); -} - -#define ANY_MODIFIER (ShiftMask|ControlMask|Mod1Mask) - -void ColorBarInputCb (Widget w, XtPointer client_data, - XmDrawingAreaCallbackStruct *call_data){ - - XEvent *event; - static int p1=0, p2=0, p3=0, p4=0; /* red, green, blue, alpha */ - static int pentry, move_marker; - int i, modify, entry, compute; - char keybuf[50]; - KeySym key; - XComposeStatus compose; - - event = call_data->event; - modify = 0; - compute = 0; - - /* touche */ - - if (event->type==KeyPress) { - XLookupString(&event->xkey, keybuf, 50, &key, &compose); - - switch(key){ - case XK_1 : ColorTable_InitParam(1, TheCB->ct, 1, 1); compute=1; break; - case XK_2 : ColorTable_InitParam(2, TheCB->ct, 1, 1); compute=1; break; - case XK_3 : ColorTable_InitParam(3, TheCB->ct, 1, 1); compute=1; break; - case XK_4 : ColorTable_InitParam(4, TheCB->ct, 1, 1); compute=1; break; - case XK_5 : ColorTable_InitParam(5, TheCB->ct, 1, 1); compute=1; break; - case XK_6 : ColorTable_InitParam(6, TheCB->ct, 1, 1); compute=1; break; - case XK_7 : ColorTable_InitParam(7, TheCB->ct, 1, 1); compute=1; break; - case XK_8 : ColorTable_InitParam(8, TheCB->ct, 1, 1); compute=1; break; - case XK_9 : ColorTable_InitParam(9, TheCB->ct, 1, 1); compute=1; break; - case XK_0 : ColorTable_InitParam(0, TheCB->ct, 1, 1); compute=1; break; - - case XK_c : case XK_C : ColorTable_Copy(TheCB->ct); break; - case XK_p : case XK_P : ColorTable_Paste(TheCB->ct); ColorBarRedraw(); break; - case XK_h : case XK_H : TheCB->helpflag = !TheCB->helpflag; ColorBarRedraw(); break; - - case XK_r : - case XK_R : - ColorTable_InitParam(TheCB->ct->ipar[COLORTABLE_NUMBER], - TheCB->ct, 1, 1); - compute=1; - break; - - case XK_m : - case XK_M : - if(TheCB->ct->ipar[COLORTABLE_MODE]==COLORTABLE_RGB) - TheCB->ct->ipar[COLORTABLE_MODE] = COLORTABLE_HSV; - else - TheCB->ct->ipar[COLORTABLE_MODE] = COLORTABLE_RGB; - ColorBarRedraw(); - break; - - case XK_i : - case XK_I : - if (event->xkey.state&ANY_MODIFIER) - TheCB->ct->ipar[COLORTABLE_INVERT] = !TheCB->ct->ipar[COLORTABLE_INVERT]; - else - TheCB->ct->ipar[COLORTABLE_SWAP] = !TheCB->ct->ipar[COLORTABLE_SWAP]; - compute=1; - break; - - case XK_b : - case XK_B : - if (event->xkey.state&ANY_MODIFIER) { - TheCB->ct->fpar[COLORTABLE_BETA] -= 0.05; - if(TheCB->ct->fpar[COLORTABLE_BETA]<-1.0) - TheCB->ct->fpar[COLORTABLE_BETA] = -1.0; - } - else{ - TheCB->ct->fpar[COLORTABLE_BETA] += 0.05; - if(TheCB->ct->fpar[COLORTABLE_BETA]>1.0) - TheCB->ct->fpar[COLORTABLE_BETA] = 1.0; - } - compute = 1; - break; - - case XK_Left : - if (event->xkey.state&ANY_MODIFIER) { - TheCB->ct->ipar[COLORTABLE_ROTATE] += 5; - if(TheCB->ct->ipar[COLORTABLE_ROTATE] > TheCB->ct->size-1) - TheCB->ct->ipar[COLORTABLE_ROTATE] -= TheCB->ct->size-1; - } - else - TheCB->ct->fpar[COLORTABLE_BIAS] -= 0.05; - compute = 1; - break; - - case XK_Right : - if (event->xkey.state&ANY_MODIFIER) { - TheCB->ct->ipar[COLORTABLE_ROTATE] -= 5; - if(TheCB->ct->ipar[COLORTABLE_ROTATE]<-(TheCB->ct->size-1)) - TheCB->ct->ipar[COLORTABLE_ROTATE] += TheCB->ct->size-1; - } - else{ - TheCB->ct->fpar[COLORTABLE_BIAS] += 0.05; - } - compute = 1; - break; - - case XK_Up : - if (event->xkey.state&ANY_MODIFIER) { - TheCB->ct->fpar[COLORTABLE_ALPHAPOW] -= 0.05; - if (TheCB->ct->fpar[COLORTABLE_ALPHAPOW]<0.0) - TheCB->ct->fpar[COLORTABLE_ALPHAPOW] = 0.0; - } - else - TheCB->ct->fpar[COLORTABLE_CURVE] -= 0.05; - compute = 1; - break; - - case XK_Down : - if (event->xkey.state&ANY_MODIFIER) - TheCB->ct->fpar[COLORTABLE_ALPHAPOW] += 0.05; - else - TheCB->ct->fpar[COLORTABLE_CURVE] += 0.05; - compute = 1; - break; - - } - - if(compute){ - ColorTable_Recompute(TheCB->ct, 1, 1); - ColorBarRedraw(); - } - - } - - /* souris enfoncee */ - - else if (event->type==ButtonPress) { - - if(TheCB->helpflag){ - TheCB->helpflag = 0; - ColorBarRedraw(); - } - - if (event->xbutton.y<TheCB->wedge_y) { - /* change color function */ - move_marker = 0; - } - else { - /* change marker position */ - move_marker = 1; - } - /* determine which curve to modify */ - if (event->xbutton.state&ANY_MODIFIER) { - p4 = 1; - } - else { - if (event->xbutton.button==Button1) p1 = 1; - if (event->xbutton.button==Button2) p2 = 1; - if (event->xbutton.button==Button3) p3 = 1; - } - pentry = x_to_index(TheCB, event->xbutton.x); - modify = 1; - } - - /* souris relachee */ - - else if (event->type==ButtonRelease) { - if (event->xbutton.button==Button1) p1 = 0; - if (event->xbutton.button==Button2) p2 = 0; - if (event->xbutton.button==Button3) p3 = 0; - p4 = 0; - } - - /* bouger */ - - else if (event->type==MotionNotify) { - /* Flush extra MotionNotify events */ - while (QLength(XCTX.display)>0) { - XEvent next; - XPeekEvent(XCTX.display, &next); - if (next.type!=MotionNotify) - break; - XNextEvent(XCTX.display, event); - } - modify = 1; - } - - /* Modify one or more of the color curves */ - - if (modify && (p1 || p2 || p3 || p4)) { - /* calculate which entry in color table to change */ - entry = x_to_index(TheCB, event->xbutton.x); - /* update */ - if (move_marker) { - /* changing marker position */ - TheCB->markerpos = entry; - redraw_marker(TheCB); - } - else { - /* changing color graph */ - int a, b, value; - - value = y_to_intensity(TheCB, event->xbutton.y); - - if (pentry<=entry) { - a = pentry; - b = entry; - } - else { - a = entry; - b = pentry; - } - - /* update entries from 'pentry' to 'entry' */ - for (i=a; i<=b; i++) { - int red, green, blue, alpha; - double R,G,B,H,S,V; - - red = UNPACK_RED (TheCB->ct->table[i]); - green = UNPACK_GREEN(TheCB->ct->table[i]); - blue = UNPACK_BLUE (TheCB->ct->table[i]); - alpha = UNPACK_ALPHA(TheCB->ct->table[i]); - - if(TheCB->ct->ipar[COLORTABLE_MODE]==COLORTABLE_RGB){ - if (p1) { red = value; } - if (p2) { green = value; } - if (p3) { blue = value; } - if (p4) { alpha = value; } - } - else if(TheCB->ct->ipar[COLORTABLE_MODE]==COLORTABLE_HSV){ - RGB_to_HSV((double)red/255.,(double)green/255.,(double)blue/255., - &H,&S,&V); - if (p1) { H = 6.*(double)value/255.+EPS ; } - if (p2) { S = (double)value/255.; } - if (p3) { V = (double)value/255.; } - if (p4) { alpha = value; } - HSV_to_RGB(H, S, V, &R,&G,&B); - red = (int)(255 * R); - green = (int)(255 * G); - blue = (int)(255 * B); - } - - TheCB->ct->table[i] = PACK_COLOR(red,green,blue,alpha); - } - - /* redraw the color curves */ - if (pentry<entry) - redraw_range(TheCB, pentry-1, entry+1); - else - redraw_range(TheCB, entry-1, pentry+1); - - pentry = entry; - - } - } - -} - diff --git a/Motif/CbColorbar.h b/Motif/CbColorbar.h deleted file mode 100644 index bd2d8ab71bf48f8f714eaf84cb72462bddce0ac6..0000000000000000000000000000000000000000 --- a/Motif/CbColorbar.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef _CB_COLORBAR_H -#define _CB_COLORBAR_H - -typedef struct _colorbar { - Window window; - int width, height; /* size */ - int wedge_y; /* top coord of color wedge */ - int marker_y; /* top coord of marker arrow */ - int label_y; /* y coord of text labels */ - char label[32]; /* text label at bottom */ - float minval, maxval; /* min and max data values */ - int markerpos; /* position of marker as index into table */ - int helpflag; /* if nonzero, print help messages */ - ColorTable *ct; /* pointer to color table (allocated in Post_View) */ -} ColorBar; - -#define WEDGE_HEIGHT 12 /* epaisseur de la colorbar */ -#define MARKER_HEIGHT 10 /* hauteur de la fleche */ - -void ColorBarCreate(Window win, int width, int height); -void ColorBarShow(void); -void ColorBarChange(char *label, float min, float max, ColorTable *ct, int rgb); -void ColorBarCopy(ColorTable *ct); -void ColorBarPaste(ColorTable *ct); -void ColorBarResizeCb(Widget w, XtPointer client_data, - XmDrawingAreaCallbackStruct *call_data); -void ColorBarRedraw(void); - -#endif diff --git a/Motif/CbContext.cpp b/Motif/CbContext.cpp deleted file mode 100644 index 510f1ff020515d93d1cc0307195d6b895fe6a7e9..0000000000000000000000000000000000000000 --- a/Motif/CbContext.cpp +++ /dev/null @@ -1,653 +0,0 @@ -// $Id: CbContext.cpp,v 1.6 2001-08-11 23:28:33 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Geo.h" -#include "Mesh.h" -#include "Draw.h" -#include "Views.h" -#include "Widgets.h" -#include "Context.h" -#include "XContext.h" -#include "CbContext.h" -#include "CbGeom.h" -#include "CbMesh.h" - -extern Context_T CTX; -extern XContext_T XCTX; -extern Widgets_T WID; -extern Mesh M; - -static char *txt_new [] = - { "Parameter", "Point", "Line", "Spline", "Bezier", "BSpline", "Circle", "Ellipsis", - "Plane Surface", "Ruled Surface", "Nurbs Surface", "Volume", NULL }; - -static char *txt_translate_rotate_dilate_symmetry_delete [] = - { "Point", "Line", "Surface", NULL }; - -static char *txt_add [] = - { "Create", "Translate", "Rotate", "Dilate", "Symmetry", NULL }; - -static char *txt_move [] = - { "Translate", "Rotate", "Dilate", "Symmetry", NULL }; - -static char *txt_elem [] = - { "Add", "Move", "Extrude", "Delete", NULL }; - -static char *txt_phys [] = - { "Add", "Delete", NULL }; - -static char *txt_phys_add [] = - { "Point", "Line", "Surface", "Volume", NULL }; - -static char *txt_geom [] = - { "Elementary", "Physical", "Reload", NULL }; - -static char *txt_mesh [] = - { "Define", "1D", "2D", "3D", NULL }; - -static char *txt_mesh_define [] = - { "Length", "Recombine", "Transfinite Line", "Transfinite Surface", - "Transfinite Volume", NULL }; - -static char *txt_post[NB_BUTT_MAX] = - {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; - -static long int actual_context, actual_global_context; - -void UpdatePostButtons(void){ - Post_View *v; - int i; - - for(i = 0 ; i < NB_BUTT_MAX ; i++) { - - if(txt_post[i]){ - - v = (Post_View*)List_Pointer(Post_ViewList,i); - - /* defaultButt[i] */ - if(i==0 && XtIsManaged(WID.M.defaultButt)) XtUnmanageChild(WID.M.defaultButt); - - /* pushButt[i] */ - if(XtIsManaged(WID.M.pushButt[i])) XtUnmanageChild(WID.M.pushButt[i]); - - /* toggleButt[i] */ - XtVaSetValues(WID.M.toggleButt[i], - XmNlabelString, XmStringCreateSimple(txt_post[i]), - XmNset, v->Visible?True:False, - NULL); - XtManageChild(WID.M.toggleButt[i]); - - /* timeStepButt[i] */ - XtSetSensitive(WID.M.timeStepButt[i], (v->NbTimeStep>1)?1:0); - XtManageChild(WID.M.timeStepButt[i]); - - /* vectorButt[i] */ - XtSetSensitive(WID.M.vectorButt[i], v->ScalarOnly?0:1); - XtManageChild(WID.M.vectorButt[i]); - - /* exportBGMButt[i] */ - XtSetSensitive(WID.M.exportBGMButt[i], v->ScalarOnly?1:0); - XtManageChild(WID.M.exportBGMButt[i]); - - /* applyBGMButtXXX */ - XtSetSensitive(WID.M.applyBGMButt[i], v->ScalarOnly?1:0); - XtManageChild(WID.M.applyBGMButt[i]); - } - else{ - if(XtIsManaged(WID.M.pushButt[i])) XtUnmanageChild(WID.M.pushButt[i]); - if(XtIsManaged(WID.M.toggleButt[i])) XtUnmanageChild(WID.M.toggleButt[i]); - if(i==0) XtManageChild(WID.M.defaultButt); - } - } - -} - - -#define NB_HISTORY_MAX 100 - -void ActualizeContextCb (Widget w, XtPointer client_data, XtPointer call_data){ - char **ButtonText; - int i, last; - static int last_context[NB_HISTORY_MAX], numc = 0, numf = 0; - - if((long int)client_data == CONTEXT_BACKWARD){ - if(numc > 1){ - numc--; - numf++; - actual_context = last_context[numc-1]; - } - else return; - } - else if((long int)client_data == CONTEXT_FORWARD){ - if(numf > 0){ - numc++; - numf--; - actual_context = last_context[numc-1]; - } - else return; - } - else{ - actual_context = (long int)client_data; - if(last_context[numc-1] != actual_context){ - last_context[numc] = actual_context; - numc++; - } - numf = 0; - } - - if(numc > NB_HISTORY_MAX-1) numc = 1; /* Il faudrait faire un truc circulaire */ - - switch (actual_context){ - - case CONTEXT_GEOM : - actual_global_context = CONTEXT_GEOM; - XtVaSetValues(WID.M.modButt, XmNlabelString, XmStringCreateSimple("Geometry"), NULL); - CTX.geom.level = ELEMENTARY; - //if(M.status>0) mesh_event_handler(MESH_DELETE); - Msg(STATUS2, ""); - ButtonText = txt_geom; - break; - - case CONTEXT_GEOM_ELEM : - actual_global_context = CONTEXT_GEOM; - CTX.geom.level = ELEMENTARY; - Msg(STATUS2, "Elementary"); - ButtonText = txt_elem; - break; - - case CONTEXT_GEOM_ELEM_ADD : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Elementary Add"); - ButtonText = txt_add; - break; - - case CONTEXT_GEOM_ELEM_ADD_NEW : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Elementary Add Create"); - ButtonText = txt_new; - break; - - case CONTEXT_GEOM_ELEM_ADD_TRANSLATE : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Elementary Add Translate"); - ButtonText = txt_translate_rotate_dilate_symmetry_delete; - break; - - case CONTEXT_GEOM_ELEM_ADD_ROTATE : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Elementary Add Rotate"); - ButtonText = txt_translate_rotate_dilate_symmetry_delete; - break; - - case CONTEXT_GEOM_ELEM_ADD_DILATE : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Elementary Add Dilate"); - ButtonText = txt_translate_rotate_dilate_symmetry_delete; - break; - - case CONTEXT_GEOM_ELEM_ADD_SYMMETRY : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Elementary Add Symmetry"); - ButtonText = txt_translate_rotate_dilate_symmetry_delete; - break; - - case CONTEXT_GEOM_ELEM_MOVE : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Elementary Move"); - ButtonText = txt_move; - break; - - case CONTEXT_GEOM_ELEM_MOVE_TRANSLATE : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Elementary Move Translate"); - ButtonText = txt_translate_rotate_dilate_symmetry_delete; - break; - - case CONTEXT_GEOM_ELEM_MOVE_ROTATE : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Elementary Move Rotate"); - ButtonText = txt_translate_rotate_dilate_symmetry_delete; - break; - - case CONTEXT_GEOM_ELEM_MOVE_DILATE : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Elementary Move Dilate"); - ButtonText = txt_translate_rotate_dilate_symmetry_delete; - break; - - case CONTEXT_GEOM_ELEM_MOVE_SYMMETRY : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Elementary Move Symmetry"); - ButtonText = txt_translate_rotate_dilate_symmetry_delete; - break; - - case CONTEXT_GEOM_ELEM_EXTRUDE : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Elementary Extrude"); - ButtonText = txt_move; - break; - - case CONTEXT_GEOM_ELEM_EXTRUDE_TRANSLATE : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Elementary Extrude Translate"); - ButtonText = txt_translate_rotate_dilate_symmetry_delete; - break; - - case CONTEXT_GEOM_ELEM_EXTRUDE_ROTATE : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Elementary Extrude Rotate"); - ButtonText = txt_translate_rotate_dilate_symmetry_delete; - break; - - case CONTEXT_GEOM_ELEM_EXTRUDE_DILATE : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Elementary Extrude Dilate"); - ButtonText = txt_translate_rotate_dilate_symmetry_delete; - break; - - case CONTEXT_GEOM_ELEM_EXTRUDE_SYMMETRY : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Elementary Extrude Symmetry"); - ButtonText = txt_translate_rotate_dilate_symmetry_delete; - break; - - case CONTEXT_GEOM_ELEM_DELETE : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Elementary Delete"); - ButtonText = txt_translate_rotate_dilate_symmetry_delete; - break; - - case CONTEXT_GEOM_PHYS : - actual_global_context = CONTEXT_GEOM; - CTX.geom.level = PHYSICAL; - Msg(STATUS2, "Physical"); - ButtonText = txt_phys; - break; - - case CONTEXT_GEOM_PHYS_ADD : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Physical Add"); - ButtonText = txt_phys_add; - break; - - case CONTEXT_GEOM_PHYS_DELETE : - actual_global_context = CONTEXT_GEOM; - Msg(STATUS2, "Physical Delete"); - ButtonText = txt_translate_rotate_dilate_symmetry_delete; - break; - - case CONTEXT_MESH : - actual_global_context = CONTEXT_MESH; - XtVaSetValues(WID.M.modButt, XmNlabelString, - XmStringCreateSimple("Mesh"), NULL); - Msg(STATUS2,""); - ButtonText = txt_mesh; - break; - - case CONTEXT_MESH_DEFINE : - actual_global_context = CONTEXT_MESH; - Msg(STATUS2,"Define"); - ButtonText = txt_mesh_define; - break; - - case CONTEXT_POST : - actual_global_context = CONTEXT_POST; - XtVaSetValues(WID.M.modButt, XmNlabelString, - XmStringCreateSimple("Post Processing"), NULL); - Msg(STATUS2,""); - UpdatePostButtons(); - return; - - default : - Msg(WARNING, "Unknown Event in ActualizeContextCb (%d)", actual_context); - return; - - } - - last = 0; - - if(XtIsManaged(WID.M.defaultButt)) XtUnmanageChild(WID.M.defaultButt); - - for(i=0 ; i < NB_BUTT_MAX ; i++){ - - if(!last && ButtonText[i] != NULL){ - if(XtIsManaged(WID.M.toggleButt[i])) XtUnmanageChild(WID.M.toggleButt[i]); - XtVaSetValues(WID.M.pushButt[i], - XmNlabelString,XmStringCreateSimple(ButtonText[i]), - NULL); - XtManageChild(WID.M.pushButt[i]); - } - else { - last = 1 ; - if(XtIsManaged(WID.M.pushButt[i])) XtUnmanageChild(WID.M.pushButt[i]); - if(XtIsManaged(WID.M.toggleButt[i])) XtUnmanageChild(WID.M.toggleButt[i]); - } - } -} - -#undef NB_HISTORY_MAX - - -void PreviousContextCb (Widget w, XtPointer client_data, XtPointer call_data){ - ActualizeContextCb(w,client_data,call_data); -} - -void NextContextCb (Widget w, XtPointer client_data, XtPointer call_data){ - - switch(actual_context){ - - case CONTEXT_GEOM : - switch((long int)client_data){ - case 1: ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM,call_data); break; - case 2: ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_PHYS,call_data); break; - case 3: geom_event_handler(GEOM_PARSE); break; - } - break; - - case CONTEXT_GEOM_ELEM : - switch((long int)client_data){ - case 1: ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_ADD,call_data); break; - case 2: ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_MOVE,call_data); break; - case 3: ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_EXTRUDE,call_data); break; - case 4: ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_DELETE,call_data); break; - //case 5: geom_event_handler(GEOM_ELEM_SKETCH); break; - } - break; - - case CONTEXT_GEOM_ELEM_ADD : - switch((long int)client_data){ - case 1: ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_ADD_NEW,call_data); break; - case 2: - XtManageChild(WID.GD.tranDialog); - ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_ADD_TRANSLATE,call_data); - break; - case 3: - XtManageChild(WID.GD.rotDialog); - ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_ADD_ROTATE,call_data); - break; - case 4: - XtManageChild(WID.GD.dilatDialog); - ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_ADD_DILATE,call_data); - break; - case 5: - XtManageChild(WID.GD.symmDialog); - ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_ADD_SYMMETRY,call_data); - break; - } - break; - - case CONTEXT_GEOM_ELEM_ADD_NEW : - switch((long int)client_data){ - case 1: XtManageChild(WID.GD.paramDialog); break ; - case 2: XtManageChild(WID.GD.pointDialog); break ; - case 3: geom_event_handler(GEOM_ELEM_ADD_NEW_LINE); break; - case 4: geom_event_handler(GEOM_ELEM_ADD_NEW_SPLINE); break; - case 5: geom_event_handler(GEOM_ELEM_ADD_NEW_BEZIER); break; - case 6: geom_event_handler(GEOM_ELEM_ADD_NEW_BSPLINE); break; - case 7: geom_event_handler(GEOM_ELEM_ADD_NEW_CIRCLE); break; - case 8: geom_event_handler(GEOM_ELEM_ADD_NEW_ELLIPSIS); break; - case 9: geom_event_handler(GEOM_ELEM_ADD_NEW_PLANE_SURF); break; - case 10:geom_event_handler(GEOM_ELEM_ADD_NEW_RULED_SURF); break; - case 11:geom_event_handler(GEOM_ELEM_ADD_NEW_NURBS_SURF); break; - case 12:geom_event_handler(GEOM_ELEM_ADD_NEW_VOLUME); break; - } - break; - - case CONTEXT_GEOM_ELEM_ADD_TRANSLATE : - switch((long int)client_data){ - case 1: geom_event_handler(GEOM_ELEM_ADD_TRANSLATE_POINT); break ; - case 2: geom_event_handler(GEOM_ELEM_ADD_TRANSLATE_LINE); break ; - case 3: geom_event_handler(GEOM_ELEM_ADD_TRANSLATE_SURF); break ; - } - break; - - case CONTEXT_GEOM_ELEM_ADD_ROTATE : - switch((long int)client_data){ - case 1: geom_event_handler(GEOM_ELEM_ADD_ROTATE_POINT); break ; - case 2: geom_event_handler(GEOM_ELEM_ADD_ROTATE_LINE); break ; - case 3: geom_event_handler(GEOM_ELEM_ADD_ROTATE_SURF); break ; - } - break; - - case CONTEXT_GEOM_ELEM_ADD_DILATE : - switch((long int)client_data){ - case 1: geom_event_handler(GEOM_ELEM_ADD_DILATE_POINT); break ; - case 2: geom_event_handler(GEOM_ELEM_ADD_DILATE_LINE); break ; - case 3: geom_event_handler(GEOM_ELEM_ADD_DILATE_SURF); break ; - } - break; - - case CONTEXT_GEOM_ELEM_ADD_SYMMETRY : - switch((long int)client_data){ - case 1: geom_event_handler(GEOM_ELEM_ADD_SYMMETRY_POINT); break ; - case 2: geom_event_handler(GEOM_ELEM_ADD_SYMMETRY_LINE); break ; - case 3: geom_event_handler(GEOM_ELEM_ADD_SYMMETRY_SURF); break ; - } - break; - - case CONTEXT_GEOM_ELEM_MOVE : - switch((long int)client_data){ - case 1: - XtManageChild(WID.GD.tranDialog); - ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_MOVE_TRANSLATE,call_data); - break; - case 2: - XtManageChild(WID.GD.rotDialog); - ActualizeContextCb(w,(XtPointer) CONTEXT_GEOM_ELEM_MOVE_ROTATE,call_data); - break; - case 3: - XtManageChild(WID.GD.dilatDialog); - ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_MOVE_DILATE,call_data); - break; - case 4: - XtManageChild(WID.GD.symmDialog); - ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_MOVE_SYMMETRY,call_data); - break; - } - break; - - case CONTEXT_GEOM_ELEM_MOVE_TRANSLATE : - switch((long int)client_data){ - case 1: geom_event_handler(GEOM_ELEM_MOVE_TRANSLATE_POINT); break ; - case 2: geom_event_handler(GEOM_ELEM_MOVE_TRANSLATE_LINE); break ; - case 3: geom_event_handler(GEOM_ELEM_MOVE_TRANSLATE_SURF); break ; - } - break; - - case CONTEXT_GEOM_ELEM_MOVE_ROTATE : - switch((long int)client_data){ - case 1: geom_event_handler(GEOM_ELEM_MOVE_ROTATE_POINT); break ; - case 2: geom_event_handler(GEOM_ELEM_MOVE_ROTATE_LINE); break ; - case 3: geom_event_handler(GEOM_ELEM_MOVE_ROTATE_SURF); break ; - } - break; - - case CONTEXT_GEOM_ELEM_MOVE_DILATE : - switch((long int)client_data){ - case 1: geom_event_handler(GEOM_ELEM_MOVE_DILATE_POINT); break ; - case 2: geom_event_handler(GEOM_ELEM_MOVE_DILATE_LINE); break ; - case 3: geom_event_handler(GEOM_ELEM_MOVE_DILATE_SURF); break ; - } - break; - - case CONTEXT_GEOM_ELEM_MOVE_SYMMETRY : - switch((long int)client_data){ - case 1: geom_event_handler(GEOM_ELEM_MOVE_SYMMETRY_POINT); break ; - case 2: geom_event_handler(GEOM_ELEM_MOVE_SYMMETRY_LINE); break ; - case 3: geom_event_handler(GEOM_ELEM_MOVE_SYMMETRY_SURF); break ; - } - break; - - case CONTEXT_GEOM_ELEM_EXTRUDE : - switch((long int)client_data){ - case 1: - XtManageChild(WID.GD.tranDialog); - ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_EXTRUDE_TRANSLATE,call_data); - break; - case 2: - XtManageChild(WID.GD.rotDialog); - ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_EXTRUDE_ROTATE,call_data); - break; - case 3: - XtManageChild(WID.GD.dilatDialog); - ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_EXTRUDE_DILATE,call_data); - break; - case 4: - XtManageChild(WID.GD.symmDialog); - ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_ELEM_EXTRUDE_SYMMETRY,call_data); - break; - } - break; - - case CONTEXT_GEOM_ELEM_EXTRUDE_TRANSLATE : - switch((long int)client_data){ - case 1: geom_event_handler(GEOM_ELEM_EXTRUDE_TRANSLATE_POINT); break ; - case 2: geom_event_handler(GEOM_ELEM_EXTRUDE_TRANSLATE_LINE); break ; - case 3: geom_event_handler(GEOM_ELEM_EXTRUDE_TRANSLATE_SURF); break ; - } - break; - - case CONTEXT_GEOM_ELEM_EXTRUDE_ROTATE : - switch((long int)client_data){ - case 1: geom_event_handler(GEOM_ELEM_EXTRUDE_ROTATE_POINT); break ; - case 2: geom_event_handler(GEOM_ELEM_EXTRUDE_ROTATE_LINE); break ; - case 3: geom_event_handler(GEOM_ELEM_EXTRUDE_ROTATE_SURF); break ; - } - break; - - case CONTEXT_GEOM_ELEM_EXTRUDE_DILATE : - Msg(WARNING, "Extrude Dilate is not implemented"); - break; - - case CONTEXT_GEOM_ELEM_EXTRUDE_SYMMETRY : - Msg(WARNING, "Extrude Symmetry is not implemented"); - break; - - case CONTEXT_GEOM_ELEM_DELETE : - switch((long int)client_data){ - case 1: geom_event_handler(GEOM_ELEM_DELETE_POINT); break ; - case 2: geom_event_handler(GEOM_ELEM_DELETE_LINE); break ; - case 3: geom_event_handler(GEOM_ELEM_DELETE_SURF); break ; - } - break; - - case CONTEXT_GEOM_PHYS : - switch((long int)client_data){ - case 1: ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_PHYS_ADD,call_data); break; - case 2: ActualizeContextCb(w,(XtPointer)CONTEXT_GEOM_PHYS_DELETE,call_data); break; - } - break; - - case CONTEXT_GEOM_PHYS_ADD : - switch((long int)client_data){ - case 1: geom_event_handler(GEOM_PHYS_ADD_POINT); break ; - case 2: geom_event_handler(GEOM_PHYS_ADD_LINE); break ; - case 3: geom_event_handler(GEOM_PHYS_ADD_SURF); break ; - case 4: geom_event_handler(GEOM_PHYS_ADD_VOLUME); break ; - } - break; - - case CONTEXT_GEOM_PHYS_DELETE : - switch((long int)client_data){ - case 1: geom_event_handler(GEOM_PHYS_DELETE_POINT); break ; - case 2: geom_event_handler(GEOM_PHYS_DELETE_LINE); break ; - case 3: geom_event_handler(GEOM_PHYS_DELETE_SURF); break ; - case 4: geom_event_handler(GEOM_PHYS_DELETE_VOLUME); break ; - } - break; - - case CONTEXT_MESH : - - switch((long int)client_data){ - case 1: ActualizeContextCb(w,(XtPointer)CONTEXT_MESH_DEFINE,call_data); break; - case 2: mesh_event_handler(MESH_1D); break; - case 3: mesh_event_handler(MESH_2D); break; - case 4: mesh_event_handler(MESH_3D); break; - } - break; - - case CONTEXT_MESH_DEFINE : - switch((long int)client_data){ - case 1: - XtManageChild(WID.MD.charLengthDialog); - mesh_event_handler(MESH_DEFINE_CHAR_LENGTH); break; - case 2: - mesh_event_handler(MESH_DEFINE_RECOMBINE); break; - case 3: - XtManageChild(WID.MD.trsfLineDialog); - mesh_event_handler(MESH_DEFINE_TRSF_LINE); break; - case 4: - mesh_event_handler(MESH_DEFINE_TRSF_SURFACE); break; - case 5: - XtManageChild(WID.MD.trsfVolumeDialog); - mesh_event_handler(MESH_DEFINE_TRSF_VOLUME); break; - } - break; - - default : - Msg(WARNING, "Unknown Context in NextContextCb (%d)", actual_global_context); - break; - - } -} - - -int AddViewInUI(int i, char *Name, int Num){ - - if(i > NB_BUTT_MAX -1) return 1; - - txt_post[i-1] = (char*)Malloc(256*sizeof(char)); - strncpy(txt_post[i-1],Name,255); - - if(actual_global_context == CONTEXT_POST) - ActualizeContextCb(NULL,(XtPointer)actual_global_context,NULL); - - return 0; -} - -static int All = 0 ; - -void RemoveViewCb(Widget w, XtPointer client_data, XtPointer call_data){ - Post_View *v; - int i; - - i = (long int)client_data ; - - v = (Post_View*)List_Pointer(Post_ViewList,(long int)i-1); - - while(txt_post[i]){ - strncpy(txt_post[i-1], txt_post[i], 255); - i++; - } - Free(txt_post[i-1]); - txt_post[i-1] = NULL; - - FreeView(v); - - if(!List_Suppress(Post_ViewList, v, fcmpPostViewNum)) - Msg(GERROR, "Could Not Suppress View from List"); - - CTX.post.nb_views = List_Nbr(Post_ViewList); - - if(actual_global_context == CONTEXT_POST) - ActualizeContextCb(NULL,(XtPointer)actual_global_context,NULL); - - if(!All) Draw(); - -} - -void RemoveAllViewsCb(Widget w, XtPointer client_data, XtPointer call_data){ - int i=1; - if(!Post_ViewList) return; - All = 1; - while(List_Nbr(Post_ViewList)) - RemoveViewCb(NULL, (XtPointer)i, NULL); - All = 0; - Draw(); -} - diff --git a/Motif/CbContext.h b/Motif/CbContext.h deleted file mode 100644 index 7a888f7c709ed32d4082324b784b74268dfa3f57..0000000000000000000000000000000000000000 --- a/Motif/CbContext.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef _CB_CONTEXT_H_ -#define _CB_CONTEXT_H_ - -#define CONTEXT_GEOM 101 -#define CONTEXT_GEOM_ELEM 102 -#define CONTEXT_GEOM_ELEM_ADD 103 -#define CONTEXT_GEOM_ELEM_ADD_NEW 104 -#define CONTEXT_GEOM_ELEM_ADD_TRANSLATE 105 -#define CONTEXT_GEOM_ELEM_ADD_ROTATE 106 -#define CONTEXT_GEOM_ELEM_ADD_DILATE 107 -#define CONTEXT_GEOM_ELEM_ADD_SYMMETRY 108 -#define CONTEXT_GEOM_ELEM_MOVE 109 -#define CONTEXT_GEOM_ELEM_MOVE_TRANSLATE 110 -#define CONTEXT_GEOM_ELEM_MOVE_ROTATE 111 -#define CONTEXT_GEOM_ELEM_MOVE_DILATE 112 -#define CONTEXT_GEOM_ELEM_MOVE_SYMMETRY 113 -#define CONTEXT_GEOM_ELEM_EXTRUDE 114 -#define CONTEXT_GEOM_ELEM_EXTRUDE_TRANSLATE 115 -#define CONTEXT_GEOM_ELEM_EXTRUDE_ROTATE 116 -#define CONTEXT_GEOM_ELEM_EXTRUDE_DILATE 117 -#define CONTEXT_GEOM_ELEM_EXTRUDE_SYMMETRY 118 -#define CONTEXT_GEOM_ELEM_DELETE 119 -#define CONTEXT_GEOM_PHYS 120 -#define CONTEXT_GEOM_PHYS_ADD 121 -#define CONTEXT_GEOM_PHYS_DELETE 122 -#define CONTEXT_MESH 123 -#define CONTEXT_MESH_DEFINE 124 -#define CONTEXT_POST 125 -#define CONTEXT_BACKWARD 126 -#define CONTEXT_FORWARD 127 - -#endif diff --git a/Motif/CbFile.cpp b/Motif/CbFile.cpp deleted file mode 100644 index 0a2b3de02755975853443471a2440858d5d3c77d..0000000000000000000000000000000000000000 --- a/Motif/CbFile.cpp +++ /dev/null @@ -1,73 +0,0 @@ -// $Id: CbFile.cpp,v 1.7 2001-02-20 18:32:58 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "OpenFile.h" -#include "Mesh.h" -#include "Draw.h" -#include "Widgets.h" -#include "Context.h" -#include "Options.h" -#include "CreateFile.h" - -#include "CbFile.h" -#include "CbColorbar.h" - -extern Context_T CTX; -extern Widgets_T WID; -extern Mesh M; - -void SaveToDisk (char *FileName, Widget warning, - void (*function)(char *filename, int format)){ - FILE *fp ; - static char KeepFileName[256]; - - if(FileName){ - fp = fopen(FileName,"r"); - if(fp) { - XtManageChild(warning); - strcpy(KeepFileName,FileName); - fclose(fp); - return; - } - else{ - strcpy(KeepFileName,FileName); - } - } - - function(KeepFileName, CTX.print.format); -} - -/* ------------------------------------------------------------------------ - F i l e C b - ------------------------------------------------------------------------ */ - -void FileCb(Widget w, XtPointer client_data, XtPointer call_data){ - char *c; - XmString xms; - - switch ((long int)client_data) { - case FILE_SAVE_MESH : - Print_Mesh(&M, NULL, CTX.mesh.format); - return; - case FILE_SAVE_AS_OVERWRITE : - SaveToDisk(NULL, WID.ED.saveAsDialog, CreateOutputFile); - return; - } - - XtVaGetValues(w, XmNtextString, &xms, NULL); - XmStringGetLtoR(xms, XmSTRING_DEFAULT_CHARSET, &c); - XmStringFree(xms); - - switch ((long int)client_data) { - case FILE_LOAD_GEOM : OpenProblem(c); Draw(); break; - case FILE_LOAD_POST : MergeProblem(c); ColorBarRedraw(); Draw(); break; - case FILE_SAVE_AS : SaveToDisk(c, WID.ED.saveAsDialog, CreateOutputFile); break; - case FILE_SAVE_OPTIONS_AS : Print_Options(0,GMSH_FULLRC,c); break; - default : - Msg(WARNING, "Unknown event in FileCb : %d", (long int)client_data); - break; - } - -} - diff --git a/Motif/CbFile.h b/Motif/CbFile.h deleted file mode 100644 index d2405785e718148ea8b066339e487d0968f9972b..0000000000000000000000000000000000000000 --- a/Motif/CbFile.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef _CB_FILE_H_ -#define _CB_FILE_H_ - -#define FILE_LOAD_GEOM 301 -#define FILE_LOAD_POST 302 -#define FILE_SAVE_MESH 303 -#define FILE_SAVE_AS 304 -#define FILE_SAVE_AS_OVERWRITE 305 -#define FILE_SAVE_OPTIONS_AS 306 - -#endif diff --git a/Motif/CbGeneral.cpp b/Motif/CbGeneral.cpp deleted file mode 100644 index e57b74b98d83cc90cdc358688f1fd1f16ecffc4f..0000000000000000000000000000000000000000 --- a/Motif/CbGeneral.cpp +++ /dev/null @@ -1,199 +0,0 @@ -// $Id: CbGeneral.cpp,v 1.2 2001-01-09 14:24:11 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Mesh.h" -#include "Draw.h" -#include "Views.h" -#include "Context.h" -#include "XContext.h" -#include "Widgets.h" - -extern Context_T CTX; -extern XContext_T XCTX; -extern Widgets_T WID; - -extern void GetStatistics(double s[50]); - -static char label[32]; - -/* ------------------------------------------------------------------------ - E x i t C b - ------------------------------------------------------------------------ */ - -void ExitCb(Widget w, XtPointer cd, XtPointer cb){ - exit(0); -} - -/* ------------------------------------------------------------------------ - M a n a g e C b - ------------------------------------------------------------------------ */ - -void ManageCb (Widget w, XtPointer client_data, XtPointer call_data){ - XtIsManaged((Widget)client_data) ? - XtUnmanageChild((Widget)client_data) : - XtManageChild((Widget)client_data) ; -} - - -/* ------------------------------------------------------------------------ - P o p u p H a n d l e r - ------------------------------------------------------------------------ */ - -void PopupHandler (Widget w, Widget pw, XEvent *event, Boolean *ctd ){ - if(((XButtonEvent *)event)->button != Button3) return; - - /* force the pointer to be slightly over the first button */ - ((XButtonEvent *)event)->x_root -= 7 ; - ((XButtonEvent *)event)->y_root -= 7 ; - - XmMenuPosition(pw, (XButtonEvent *)event); - XtManageChild(pw); -} - - - -/* ------------------------------------------------------------------------ - CurrentInfoCb - ------------------------------------------------------------------------ */ - -void CurrentInfoCb (Widget w, XtPointer client_data, XtPointer call_data){ - double s[50]; - int i; - Post_View *v ; - - if((long int)client_data && XtIsManaged(WID.OD.infoDialog)){ - XtUnmanageChild(WID.OD.infoDialog); - } - else{ - GetStatistics(s); - -#define VLAB(caca) WID.OD.infoValueLabel[(caca)], XmNlabelString, \ - XmStringCreateSimple(label), NULL - - /* info geom */ - sprintf(label, "%g", s[0]); XtVaSetValues(VLAB(0)); - sprintf(label, "%g", s[1]); XtVaSetValues(VLAB(1)); - sprintf(label, "%g", s[2]); XtVaSetValues(VLAB(2)); - sprintf(label, "%g", s[3]); XtVaSetValues(VLAB(3)); - - /* info mesh */ - sprintf(label, "%g", s[4]); XtVaSetValues(VLAB(4)); - sprintf(label, "%g", s[5]); XtVaSetValues(VLAB(5)); - sprintf(label, "%g", s[6]); XtVaSetValues(VLAB(6)); - - sprintf(label, "%g", s[7]-s[8]); XtVaSetValues(VLAB(7)); - sprintf(label, "%g", s[8]); XtVaSetValues(VLAB(8)); - sprintf(label, "%g", s[9]); XtVaSetValues(VLAB(9)); - sprintf(label, "%g", s[10]); XtVaSetValues(VLAB(10)); - sprintf(label, "%g", s[11]); XtVaSetValues(VLAB(11)); - - sprintf(label, "%g", s[12]); XtVaSetValues(VLAB(12)); - sprintf(label, "%g", s[13]); XtVaSetValues(VLAB(13)); - sprintf(label, "%g", s[14]); XtVaSetValues(VLAB(14)); - - sprintf(label, "%.4g (%.4g->%.4g)", s[17], s[19], s[18]); XtVaSetValues(VLAB(15)); - sprintf(label, "%.4g (%.4g->%.4g)", s[20], s[22], s[21]); XtVaSetValues(VLAB(16)); - sprintf(label, "%.4g (%.4g->%.4g)", s[23], s[25], s[24]); XtVaSetValues(VLAB(17)); - - /* info post */ - - s[15] = List_Nbr(Post_ViewList) ; - sprintf(label, "%g", s[15]); XtVaSetValues(VLAB(18)); - - s[16] = s[17] = s[18] = s[19] = 0 ; - for(i=0 ; i<List_Nbr(Post_ViewList) ; i++){ - v = (Post_View*)List_Pointer(Post_ViewList, i); - if(v->Visible){ - s[16] += v->NbSP + v->NbVP + v->NbTP; - s[17] += v->NbSL + v->NbVL + v->NbTL; - s[18] += v->NbST + v->NbVT + v->NbTT; - s[19] += v->NbSS + v->NbVS + v->NbTS; - } - } - sprintf(label, "%g", s[16]); XtVaSetValues(VLAB(19)); - sprintf(label, "%g", s[17]); XtVaSetValues(VLAB(20)); - sprintf(label, "%g", s[18]); XtVaSetValues(VLAB(21)); - sprintf(label, "%g", s[19]); XtVaSetValues(VLAB(22)); - -#undef VLAB - - if((long int)client_data) - XtManageChild(WID.OD.infoDialog) ; - else - XmUpdateDisplay(WID.OD.infoDialog); - } - -} - -/* ------------------------------------------------------------------------ - set_XXX - ------------------------------------------------------------------------ */ - -void set_r(int i, double val){ - if(CTX.useTrackball){ - if(XtIsManaged(WID.OD.viewportDialog)){ - sprintf(label, "---"); - XtVaSetValues(WID.OD.viewportText[0][i], XmNvalue, label, NULL); - XmUpdateDisplay(WID.OD.viewportText[0][i]); - } - } - else{ - if(!CTX.rlock[i]){ - CTX.r[i] = val; - if(XtIsManaged(WID.OD.viewportDialog)){ - sprintf(label, "%.5g", CTX.r[i]); - XtVaSetValues(WID.OD.viewportText[0][i], XmNvalue, label, NULL); - XmUpdateDisplay(WID.OD.viewportText[0][i]); - } - } - } -} - -void set_t(int i, double val){ - if(!CTX.tlock[i]){ - CTX.t[i] = val; - if(XtIsManaged(WID.OD.viewportDialog)){ - sprintf(label, "%.5g", CTX.t[i]); - XtVaSetValues(WID.OD.viewportText[1][i], XmNvalue, label, NULL); - XmUpdateDisplay(WID.OD.viewportText[1][i]); - } - } -} - -void set_s(int i, double val){ - if(!CTX.slock[i]){ - CTX.s[i] = val; - if(XtIsManaged(WID.OD.viewportDialog)){ - sprintf(label, "%.5g", CTX.s[i]); - XtVaSetValues(WID.OD.viewportText[2][i], XmNvalue, label, NULL); - XmUpdateDisplay(WID.OD.viewportText[2][i]); - } - } -} - - -/* ------------------------------------------------------------------------ - CurrentViewportCb - ------------------------------------------------------------------------ */ - -void CurrentViewportCb (Widget w, XtPointer client_data, XtPointer call_data){ - int i; - - if(XtIsManaged(WID.OD.viewportDialog)){ - XtUnmanageChild(WID.OD.viewportDialog); - } - else{ - for(i=0 ; i<3 ; i++){ - sprintf(label, "%.5g", CTX.r[i]); - XtVaSetValues(WID.OD.viewportText[0][i], XmNvalue, label, NULL); - sprintf(label, "%.5g", CTX.t[i]); - XtVaSetValues(WID.OD.viewportText[1][i], XmNvalue, label, NULL); - sprintf(label, "%.5g", CTX.s[i]); - XtVaSetValues(WID.OD.viewportText[2][i], XmNvalue, label, NULL); - } - XtManageChild(WID.OD.viewportDialog) ; - } - -} - diff --git a/Motif/CbGeom.cpp b/Motif/CbGeom.cpp deleted file mode 100644 index 5e6928b49c8d4dcad819398a73d7219511a0ccb4..0000000000000000000000000000000000000000 --- a/Motif/CbGeom.cpp +++ /dev/null @@ -1,621 +0,0 @@ -// $Id: CbGeom.cpp,v 1.5 2001-01-29 08:43:44 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Geo.h" -#include "Mesh.h" -#include "Draw.h" -#include "Widgets.h" -#include "Context.h" -#include "Verif.h" -#include "OpenFile.h" - -#include "CbGeom.h" - -extern Context_T CTX; -extern Widgets_T WID; -extern Mesh M; - -static char name_text[100], value_text[100]; - -int SelectContour (int type, int num, List_T *Liste1){ - int k,ip,i; - List_T *Liste2; - - Liste2 = List_Create(1,1,sizeof(int)); - - if(!List_Nbr(Liste1)){ - switch(type){ - case ENT_LINE : k = alledgeslinked (num, Liste1, (List_T*)NULL); break; - case ENT_SURFACE : k = allfaceslinked (num, Liste1, (List_T*)NULL); break; - } - } - else{ - List_Reset(Liste2); - for(i=0;i<List_Nbr(Liste1);i++) - List_Add(Liste2,List_Pointer(Liste1,i)); - List_Reset(Liste1); - switch(type){ - case ENT_LINE : k = alledgeslinked (num, Liste1, Liste2); break; - case ENT_SURFACE : k = allfaceslinked (num, Liste1, Liste2); break; - } - } - - for(i=0;i<List_Nbr(Liste1);i++){ - List_Read(Liste1,i,&ip); - switch(type){ - case ENT_LINE : HighlightEntityNum(0,abs(ip),0,1); break ; - case ENT_SURFACE : HighlightEntityNum(0,0,abs(ip),1); break ; - } - } - - List_Delete(Liste2); - return k; -} - - -/* ------------------------------------------------------------------------ */ -/* g e o m _ e v e n t _ h a n d l e r */ -/* ------------------------------------------------------------------------ */ - -void geom_event_handler (int event) { - Vertex *v; - Curve *c; - Surface *s; - static int n=0, p[100]; - - int ib,zone,type; - List_T *Liste1, *Liste2; - - if(CTX.threads_lock) return ; - - switch (event) { - - case GEOM_PARSE : - OpenProblem(CTX.filename); - Draw(); - break; - - case GEOM_ELEM_ADD_NEW_POINT : - add_point(CTX.filename); - ZeroHighlight(&M); - Replot(); - break; - - case GEOM_ELEM_ADD_NEW_LINE : - case GEOM_ELEM_ADD_NEW_SPLINE : - case GEOM_ELEM_ADD_NEW_BEZIER : - case GEOM_ELEM_ADD_NEW_BSPLINE : - n=0; - while(1){ - Msg(STATUS3,"Select Point ('e'=end, 'q'=quit)"); - ib = SelectEntity(ENT_POINT, &v,&c,&s); - if(ib == 1){ /* left mouse butt */ - p[n++] = v->Num; - } - if (ib == -1){ /* 'e' */ - if(n >= 2) { - switch(event){ - case GEOM_ELEM_ADD_NEW_LINE : add_multline(n,p,CTX.filename); break; - case GEOM_ELEM_ADD_NEW_SPLINE : add_spline (n,p,CTX.filename); break; - case GEOM_ELEM_ADD_NEW_BEZIER : add_bezier (n,p,CTX.filename); break; - case GEOM_ELEM_ADD_NEW_BSPLINE: add_bspline (n,p,CTX.filename); break; - } - } - n=0; - ZeroHighlight(&M); - Replot(); - } - if(ib == 0){ /* 'q' */ - n=0 ; - ZeroHighlight(&M); - Replot(); - break; - } - } - break; - - case GEOM_ELEM_ADD_NEW_CIRCLE : - n=0; - while(1){ - if(n == 0) Msg(STATUS3,"Select Center ('q'=quit)"); - if(n == 1) Msg(STATUS3,"Select Starting Point ('q'=quit)"); - if(n == 2) Msg(STATUS3,"Select Ending Point ('q'=quit)"); - ib = SelectEntity(ENT_POINT, &v,&c,&s); - if(ib == 1) { /* left mouse butt */ - p[n++] = v->Num; - } - if(ib == 0) { /* 'q' */ - n=0 ; - ZeroHighlight(&M); - Replot(); - break; - } - if(n == 3){ - add_circ(p[1],p[0],p[2],CTX.filename); /* begin, center, end */ - ZeroHighlight(&M); - Replot(); - n=0; - } - } - break; - - case GEOM_ELEM_ADD_NEW_ELLIPSIS : - n = 0; - while(1){ - if(n == 0) Msg(STATUS3,"Select Center ('q'=quit)"); - if(n == 1) Msg(STATUS3,"Select an Axis Point ('q'=quit)"); - if(n == 2) Msg(STATUS3,"Select Starting Point ('q'=quit)"); - if(n == 3) Msg(STATUS3,"Select Ending Point ('q'=quit)"); - ib = SelectEntity(ENT_POINT, &v,&c,&s); - if(ib == 1) { /* left mouse butt */ - p[n++] = v->Num; - } - if(ib == 0){ /* 'q' */ - n=0 ; - ZeroHighlight(&M); - Replot(); - break; - } - if(n == 4){ - add_ell(p[3],p[2],p[0],p[1],CTX.filename); - ZeroHighlight(&M); - Replot(); - n=0; - } - } - break; - - case GEOM_ELEM_ADD_NEW_PLANE_SURF : - case GEOM_ELEM_ADD_NEW_RULED_SURF : - case GEOM_ELEM_ADD_NEW_VOLUME : - Liste1 = List_Create(10,10,sizeof(int)); - Liste2 = List_Create(10,10,sizeof(int)); - - if(event == GEOM_ELEM_ADD_NEW_VOLUME) - type = ENT_SURFACE; - else - type = ENT_LINE; - - while(1){ - List_Reset(Liste1); - List_Reset(Liste2); - - while(1) { - Msg(STATUS3,"Select Boundary ('q'=quit)"); - ib = SelectEntity(type, &v,&c,&s); - if(ib <= 0){ - ZeroHighlight(&M); - Replot(); - goto stopall; - } - if(SelectContour (type, (type==ENT_LINE)?c->Num:s->Num, Liste1)){ - if(type==ENT_LINE) - add_loop(Liste1,CTX.filename,&zone); - else - add_vol(Liste1,CTX.filename,&zone); - List_Reset(Liste1); - List_Add(Liste2,&zone); - while(1){ - Msg(STATUS3,"Select Holes ('q'=quit)"); - ib = SelectEntity(type, &v,&c,&s); - if(ib <= 0){ - ZeroHighlight(&M); - Replot(); - break; - } - if(SelectContour (type, (type==ENT_LINE)?c->Num:s->Num, Liste1)){ - if(type==ENT_LINE) - add_loop(Liste1,CTX.filename,&zone); - else - add_vol(Liste1,CTX.filename,&zone); - List_Reset(Liste1); - List_Add(Liste2,&zone); - } - } - if(List_Nbr(Liste2)){ - switch(event){ - case GEOM_ELEM_ADD_NEW_RULED_SURF : add_surf(Liste2,CTX.filename,0,1); break; - case GEOM_ELEM_ADD_NEW_PLANE_SURF : add_surf(Liste2,CTX.filename,0,2); break; - case GEOM_ELEM_ADD_NEW_VOLUME : add_multvol(Liste2,CTX.filename); break; - } - ZeroHighlight(&M); - Replot(); - break; - } - } - } - } - stopall : ; - List_Delete(Liste1); - List_Delete(Liste2); - break; - - - case GEOM_ELEM_ADD_TRANSLATE_POINT : - case GEOM_ELEM_MOVE_TRANSLATE_POINT : - while(1){ - Msg(STATUS3,"Select Point ('q'=quit)"); - if(!SelectEntity(ENT_POINT, &v,&c,&s)){ - ZeroHighlight(&M); - Replot(); - break; - } - translate(event==GEOM_ELEM_ADD_TRANSLATE_POINT?1:0,v->Num,CTX.filename, "Point"); - ZeroHighlight(&M); - Replot(); - } - break; - case GEOM_ELEM_ADD_TRANSLATE_LINE : - case GEOM_ELEM_MOVE_TRANSLATE_LINE : - while(1){ - Msg(STATUS3,"Select Line ('q'=quit)"); - if(!SelectEntity(ENT_LINE, &v,&c,&s)){ - ZeroHighlight(&M); - Replot(); - break; - } - translate(event==GEOM_ELEM_ADD_TRANSLATE_LINE?1:0,c->Num,CTX.filename, "Line"); - ZeroHighlight(&M); - Replot(); - } - break; - case GEOM_ELEM_ADD_TRANSLATE_SURF : - case GEOM_ELEM_MOVE_TRANSLATE_SURF : - while(1){ - Msg(STATUS3,"Select Surface ('q'=quit)"); - if(!SelectEntity(ENT_SURFACE, &v,&c,&s)){ - ZeroHighlight(&M); - Replot(); - break; - } - translate(event==GEOM_ELEM_ADD_TRANSLATE_SURF?1:0,s->Num,CTX.filename, "Surface"); - ZeroHighlight(&M); - Replot(); - } - break; - - - case GEOM_ELEM_ADD_ROTATE_POINT : - case GEOM_ELEM_MOVE_ROTATE_POINT : - while(1){ - Msg(STATUS3,"Select Point ('q'=quit)"); - if(!SelectEntity(ENT_POINT, &v,&c,&s)){ - ZeroHighlight(&M); - Replot(); - break; - } - rotate(event==GEOM_ELEM_ADD_ROTATE_POINT?1:0,v->Num,CTX.filename,"Point"); - ZeroHighlight(&M); - Replot(); - } - break; - case GEOM_ELEM_ADD_ROTATE_LINE : - case GEOM_ELEM_MOVE_ROTATE_LINE : - while(1){ - Msg(STATUS3,"Select Line ('q'=quit)"); - if(!SelectEntity(ENT_LINE, &v,&c,&s)){ - ZeroHighlight(&M); - Replot(); - break; - } - rotate(event==GEOM_ELEM_ADD_ROTATE_LINE?1:0,c->Num,CTX.filename,"Line"); - ZeroHighlight(&M); - Replot(); - } - break; - case GEOM_ELEM_ADD_ROTATE_SURF : - case GEOM_ELEM_MOVE_ROTATE_SURF : - while(1){ - Msg(STATUS3,"Select Surface ('q'=quit)"); - if(!SelectEntity(ENT_SURFACE, &v,&c,&s)){ - ZeroHighlight(&M); - Replot(); - break; - } - rotate(event==GEOM_ELEM_ADD_ROTATE_SURF?1:0,s->Num,CTX.filename,"Surface"); - ZeroHighlight(&M); - Replot(); - } - break; - - - - case GEOM_ELEM_EXTRUDE_TRANSLATE_POINT : - case GEOM_ELEM_EXTRUDE_ROTATE_POINT : - while(1){ - Msg(STATUS3,"Select Point ('q'=quit)"); - if(!SelectEntity(ENT_POINT, &v,&c,&s)){ - ZeroHighlight(&M); - Replot(); - break; - } - event==GEOM_ELEM_EXTRUDE_TRANSLATE_POINT ? - extrude(v->Num,CTX.filename, "Point") : - protude(v->Num,CTX.filename, "Point") ; - ZeroHighlight(&M); - Replot(); - } - break; - case GEOM_ELEM_EXTRUDE_TRANSLATE_LINE : - case GEOM_ELEM_EXTRUDE_ROTATE_LINE : - while(1){ - Msg(STATUS3,"Select Line ('q'=quit)"); - if(!SelectEntity(ENT_LINE, &v,&c,&s)){ - ZeroHighlight(&M); - Replot(); - break; - } - event==GEOM_ELEM_EXTRUDE_TRANSLATE_LINE ? - extrude(c->Num,CTX.filename, "Line") : - protude(c->Num,CTX.filename, "Line") ; - ZeroHighlight(&M); - Replot(); - } - break; - case GEOM_ELEM_EXTRUDE_TRANSLATE_SURF : - case GEOM_ELEM_EXTRUDE_ROTATE_SURF : - while(1){ - Msg(STATUS3,"Select Surface ('q'=quit)"); - if(!SelectEntity(ENT_SURFACE, &v,&c,&s)){ - ZeroHighlight(&M); - Replot(); - break; - } - event==GEOM_ELEM_EXTRUDE_TRANSLATE_SURF ? - extrude(s->Num,CTX.filename, "Surface") : - protude(s->Num,CTX.filename, "Surface") ; - ZeroHighlight(&M); - Replot(); - } - break; - - - case GEOM_ELEM_ADD_DILATE_POINT : - case GEOM_ELEM_MOVE_DILATE_POINT : - case GEOM_ELEM_ADD_SYMMETRY_POINT : - case GEOM_ELEM_MOVE_SYMMETRY_POINT : - while(1){ - Msg(STATUS3,"Select Point ('q'=quit)"); - if(!SelectEntity(ENT_POINT, &v,&c,&s)){ - ZeroHighlight(&M); - Replot(); - break; - } - switch(event){ - case GEOM_ELEM_ADD_DILATE_POINT : - dilate(1,v->Num,CTX.filename,"Point"); - break; - case GEOM_ELEM_MOVE_DILATE_POINT : - dilate(0,v->Num,CTX.filename,"Point"); - break; - case GEOM_ELEM_ADD_SYMMETRY_POINT : - symmetry(1,v->Num,CTX.filename,"Point"); - break; - case GEOM_ELEM_MOVE_SYMMETRY_POINT : - symmetry(0,v->Num,CTX.filename,"Point"); - break; - } - ZeroHighlight(&M); - Replot(); - } - break; - case GEOM_ELEM_ADD_DILATE_LINE : - case GEOM_ELEM_MOVE_DILATE_LINE : - case GEOM_ELEM_ADD_SYMMETRY_LINE : - case GEOM_ELEM_MOVE_SYMMETRY_LINE : - while(1){ - Msg(STATUS3,"Select Line ('q'=quit)"); - if(!SelectEntity(ENT_LINE, &v,&c,&s)){ - ZeroHighlight(&M); - Replot(); - break; - } - switch(event){ - case GEOM_ELEM_ADD_DILATE_LINE : - dilate(1,c->Num,CTX.filename,"Line"); - break; - case GEOM_ELEM_MOVE_DILATE_LINE : - dilate(0,c->Num,CTX.filename,"Line"); - break; - case GEOM_ELEM_ADD_SYMMETRY_LINE : - symmetry(1,c->Num,CTX.filename,"Line"); - break; - case GEOM_ELEM_MOVE_SYMMETRY_LINE : - symmetry(0,c->Num,CTX.filename,"Line"); - break; - } - ZeroHighlight(&M); - Replot(); - } - break; - case GEOM_ELEM_ADD_DILATE_SURF : - case GEOM_ELEM_MOVE_DILATE_SURF : - case GEOM_ELEM_ADD_SYMMETRY_SURF : - case GEOM_ELEM_MOVE_SYMMETRY_SURF : - while(1){ - Msg(STATUS3,"Select Surface ('q'=quit)"); - if(!SelectEntity(ENT_SURFACE, &v,&c,&s)){ - ZeroHighlight(&M); - Replot(); - break; - } - switch(event){ - case GEOM_ELEM_ADD_DILATE_SURF : - dilate(1,s->Num,CTX.filename,"Surface"); - break; - case GEOM_ELEM_MOVE_DILATE_SURF : - dilate(0,s->Num,CTX.filename,"Surface"); - break; - case GEOM_ELEM_ADD_SYMMETRY_SURF : - symmetry(1,s->Num,CTX.filename,"Surface"); - break; - case GEOM_ELEM_MOVE_SYMMETRY_SURF : - symmetry(0,s->Num,CTX.filename,"Surface"); - break; - } - ZeroHighlight(&M); - Replot(); - } - break; - - - - - case GEOM_ELEM_DELETE_POINT : - while(1){ - Msg(STATUS3,"Select Point ('q'=quit)"); - if(!SelectEntity(ENT_POINT, &v,&c,&s)){ - ZeroHighlight(&M); - Replot(); - break; - } - delet(v->Num,CTX.filename, "Point"); - ZeroHighlight(&M); - Replot(); - } - break; - case GEOM_ELEM_DELETE_LINE : - while(1){ - Msg(STATUS3,"Select Line ('q'=quit)"); - if(!SelectEntity(ENT_LINE, &v,&c,&s)){ - ZeroHighlight(&M); - Replot(); - break; - } - delet(c->Num,CTX.filename, "Line"); - ZeroHighlight(&M); - Replot(); - } - break; - case GEOM_ELEM_DELETE_SURF : - while(1){ - Msg(STATUS3,"Select Point ('q'=quit)"); - if(!SelectEntity(ENT_SURFACE, &v,&c,&s)){ - ZeroHighlight(&M); - Replot(); - break; - } - delet(s->Num,CTX.filename, "Surface"); - ZeroHighlight(&M); - Replot(); - } - break; - - - case GEOM_ELEM_SKETCH : - Msg(STATUS3,"Verifying Geometry"); - add_infile("Coherence;",CTX.filename); - ZeroHighlight(&M); - Replot(); - break; - - case GEOM_PHYS_ADD_POINT: - case GEOM_PHYS_ADD_LINE: - case GEOM_PHYS_ADD_SURF: - Liste1 = List_Create(5,5,sizeof(int)); - while(1){ - switch(event){ - case GEOM_PHYS_ADD_POINT: - Msg(STATUS3,"Select Point ('e'=end, 'q'=quit)"); - type = ENT_POINT; - break; - case GEOM_PHYS_ADD_LINE: - Msg(STATUS3,"Select Line ('e'=end, 'q'=quit)"); - type = ENT_LINE; - break; - case GEOM_PHYS_ADD_SURF: - Msg(STATUS3,"Select Surface ('e'=end, 'q'=quit)"); - type = ENT_SURFACE; - break; - } - ib = SelectEntity(type, &v,&c,&s); - if(ib == 1){ /* left mouse */ - switch(event){ - case GEOM_PHYS_ADD_POINT: List_Add(Liste1, &v->Num); break; - case GEOM_PHYS_ADD_LINE: List_Add(Liste1, &c->Num); break; - case GEOM_PHYS_ADD_SURF: List_Add(Liste1, &s->Num); break; - } - } - if(ib == -1){ /* end */ - if(List_Nbr(Liste1)){ - add_physical(Liste1,CTX.filename,type,&zone); - List_Reset(Liste1); - ZeroHighlight(&M); - Replot(); - } - } - if(ib == 0){ - ZeroHighlight(&M); - Replot(); - break; - } - } - break; - - case GEOM_PHYS_ADD_VOLUME : - Msg(WARNING, "Add Physical Volume not done Interactively (Please Edit File Manually)"); - break; - - case GEOM_PHYS_DELETE_POINT : - case GEOM_PHYS_DELETE_LINE : - case GEOM_PHYS_DELETE_SURF : - case GEOM_PHYS_DELETE_VOLUME : - Msg(WARNING, "Deletetion of Physical Entities not Done"); - break; - - case GEOM_ELEM_ADD_NEW_NURBS_SURF : - Msg(WARNING, "Add NURBS not not done Interactively (Please Edit File Manually)"); - break; - - default : - Msg(WARNING, "Unknown Event in geom_event_handler"); - break; - - } - - Msg(STATUS3,"Ready"); -} - - -/* ------------------------------------------------------------------------ - G e o m C b - ------------------------------------------------------------------------ */ - -void GeomCb (Widget w, XtPointer client_data, XtPointer call_data){ - - switch((long int)client_data){ - - case GEOM_PARAMETER_ADD : add_param(name_text,value_text,CTX.filename); break; - case GEOM_PARAMETER_NAME : strcpy(name_text,XmTextGetString(w)); break; - case GEOM_PARAMETER_VALUE : strcpy(value_text,XmTextGetString(w)); break; - case GEOM_POINT_ADD : geom_event_handler(GEOM_ELEM_ADD_NEW_POINT); Replot(); break; - case GEOM_POINT_X : strcpy(x_text,XmTextGetString(w)); break; - case GEOM_POINT_Y : strcpy(y_text,XmTextGetString(w)); break; - case GEOM_POINT_Z : strcpy(z_text,XmTextGetString(w)); break; - case GEOM_POINT_L : strcpy(l_text,XmTextGetString(w)); break; - case GEOM_TRAN_X : strcpy(tx_text,XmTextGetString(w)); break; - case GEOM_TRAN_Y : strcpy(ty_text,XmTextGetString(w)); break; - case GEOM_TRAN_Z : strcpy(tz_text,XmTextGetString(w)); break; - case GEOM_ROT_PX : strcpy(px_text,XmTextGetString(w)); break; - case GEOM_ROT_PY : strcpy(py_text,XmTextGetString(w)); break; - case GEOM_ROT_PZ : strcpy(pz_text,XmTextGetString(w)); break; - case GEOM_ROT_AX : strcpy(ax_text,XmTextGetString(w)); break; - case GEOM_ROT_AY : strcpy(ay_text,XmTextGetString(w)); break; - case GEOM_ROT_AZ : strcpy(az_text,XmTextGetString(w)); break; - case GEOM_ROT_ANGLE : strcpy(angle_text,XmTextGetString(w)); break; - case GEOM_DILAT_X : strcpy(dx_text,XmTextGetString(w)); break; - case GEOM_DILAT_Y : strcpy(dy_text,XmTextGetString(w)); break; - case GEOM_DILAT_Z : strcpy(dz_text,XmTextGetString(w)); break; - case GEOM_DILAT_F : strcpy(df_text,XmTextGetString(w)); break; - case GEOM_SYMMETRY_A : strcpy(sa_text,XmTextGetString(w)); break; - case GEOM_SYMMETRY_B : strcpy(sb_text,XmTextGetString(w)); break; - case GEOM_SYMMETRY_C : strcpy(sc_text,XmTextGetString(w)); break; - case GEOM_SYMMETRY_D : strcpy(sd_text,XmTextGetString(w)); break; - default : - Msg(WARNING, "Unknown Value in GeomCb (%d)", (long int)client_data); - break; - - } -} - diff --git a/Motif/CbGeom.h b/Motif/CbGeom.h deleted file mode 100644 index 08f85e139e6cdc7984268fd3eda05c50cf9f66f0..0000000000000000000000000000000000000000 --- a/Motif/CbGeom.h +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef _CB_GEOM_H_ -#define _CB_GEOM_H_ - -/* geom event handler */ - -#define GEOM_ELEM_ADD_NEW_PARAMETER 1 -#define GEOM_ELEM_ADD_NEW_POINT 2 -#define GEOM_ELEM_ADD_NEW_LINE 3 -#define GEOM_ELEM_ADD_NEW_SPLINE 4 -#define GEOM_ELEM_ADD_NEW_BEZIER 5 -#define GEOM_ELEM_ADD_NEW_BSPLINE 6 -#define GEOM_ELEM_ADD_NEW_CIRCLE 7 -#define GEOM_ELEM_ADD_NEW_ELLIPSIS 8 -#define GEOM_ELEM_ADD_NEW_PLANE_SURF 9 -#define GEOM_ELEM_ADD_NEW_RULED_SURF 10 -#define GEOM_ELEM_ADD_NEW_NURBS_SURF 11 -#define GEOM_ELEM_ADD_NEW_VOLUME 12 -#define GEOM_ELEM_ADD_TRANSLATE_POINT 13 -#define GEOM_ELEM_ADD_TRANSLATE_LINE 14 -#define GEOM_ELEM_ADD_TRANSLATE_SURF 15 -#define GEOM_ELEM_ADD_ROTATE_POINT 16 -#define GEOM_ELEM_ADD_ROTATE_LINE 17 -#define GEOM_ELEM_ADD_ROTATE_SURF 18 -#define GEOM_ELEM_ADD_DILATE_POINT 19 -#define GEOM_ELEM_ADD_DILATE_LINE 20 -#define GEOM_ELEM_ADD_DILATE_SURF 21 -#define GEOM_ELEM_ADD_SYMMETRY_POINT 22 -#define GEOM_ELEM_ADD_SYMMETRY_LINE 23 -#define GEOM_ELEM_ADD_SYMMETRY_SURF 24 -#define GEOM_ELEM_MOVE_TRANSLATE_POINT 25 -#define GEOM_ELEM_MOVE_TRANSLATE_LINE 26 -#define GEOM_ELEM_MOVE_TRANSLATE_SURF 27 -#define GEOM_ELEM_MOVE_ROTATE_POINT 28 -#define GEOM_ELEM_MOVE_ROTATE_LINE 29 -#define GEOM_ELEM_MOVE_ROTATE_SURF 30 -#define GEOM_ELEM_MOVE_DILATE_POINT 31 -#define GEOM_ELEM_MOVE_DILATE_LINE 32 -#define GEOM_ELEM_MOVE_DILATE_SURF 33 -#define GEOM_ELEM_MOVE_SYMMETRY_POINT 34 -#define GEOM_ELEM_MOVE_SYMMETRY_LINE 35 -#define GEOM_ELEM_MOVE_SYMMETRY_SURF 36 -#define GEOM_ELEM_EXTRUDE_TRANSLATE_POINT 37 -#define GEOM_ELEM_EXTRUDE_TRANSLATE_LINE 38 -#define GEOM_ELEM_EXTRUDE_TRANSLATE_SURF 39 -#define GEOM_ELEM_EXTRUDE_ROTATE_POINT 40 -#define GEOM_ELEM_EXTRUDE_ROTATE_LINE 41 -#define GEOM_ELEM_EXTRUDE_ROTATE_SURF 42 -#define GEOM_ELEM_DELETE_POINT 43 -#define GEOM_ELEM_DELETE_LINE 44 -#define GEOM_ELEM_DELETE_SURF 45 -#define GEOM_ELEM_SKETCH 46 -#define GEOM_PHYS_ADD_POINT 47 -#define GEOM_PHYS_ADD_LINE 48 -#define GEOM_PHYS_ADD_SURF 49 -#define GEOM_PHYS_ADD_VOLUME 50 -#define GEOM_PHYS_DELETE_POINT 51 -#define GEOM_PHYS_DELETE_LINE 52 -#define GEOM_PHYS_DELETE_SURF 53 -#define GEOM_PHYS_DELETE_VOLUME 54 -#define GEOM_PARSE 55 - -/* GeomCb */ - -#define GEOM_PARAMETER_ADD 1 -#define GEOM_PARAMETER_NAME 2 -#define GEOM_PARAMETER_VALUE 3 -#define GEOM_POINT_ADD 4 -#define GEOM_POINT_X 5 -#define GEOM_POINT_Y 6 -#define GEOM_POINT_Z 7 -#define GEOM_POINT_L 8 -#define GEOM_TRAN_X 9 -#define GEOM_TRAN_Y 10 -#define GEOM_TRAN_Z 11 -#define GEOM_ROT_PX 12 -#define GEOM_ROT_PY 13 -#define GEOM_ROT_PZ 14 -#define GEOM_ROT_AX 15 -#define GEOM_ROT_AY 16 -#define GEOM_ROT_AZ 17 -#define GEOM_ROT_ANGLE 18 -#define GEOM_DILAT_X 19 -#define GEOM_DILAT_Y 20 -#define GEOM_DILAT_Z 21 -#define GEOM_DILAT_F 22 -#define GEOM_SYMMETRY_A 23 -#define GEOM_SYMMETRY_B 24 -#define GEOM_SYMMETRY_C 25 -#define GEOM_SYMMETRY_D 26 - -void geom_event_handler (int event); - -#endif diff --git a/Motif/CbInput.cpp b/Motif/CbInput.cpp deleted file mode 100644 index 17a80f5206ef237d9caf3a9299ec94b43e4a56ff..0000000000000000000000000000000000000000 --- a/Motif/CbInput.cpp +++ /dev/null @@ -1,719 +0,0 @@ -// $Id: CbInput.cpp,v 1.7 2001-02-17 22:04:05 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Mesh.h" -#include "Draw.h" -#include "Widgets.h" -#include "Context.h" -#include "Options.h" -#include "XContext.h" -#include "Register.h" - -#include "CbContext.h" -#include "CbGeom.h" -#include "CbPost.h" -#include "CbMesh.h" - -extern Context_T CTX ; -extern XContext_T XCTX ; -extern Widgets_T WID ; -extern Mesh M; - -static int Modifier=0; - -void KeyboardAccel(XEvent *event){ - XComposeStatus stat; - KeySym keysym; - char buf[100]; - - XLookupString(&event->xkey, buf, sizeof(buf), &keysym, &stat); - - switch(Modifier){ - - /* ----------------------------------------------------- */ - /* No modifier or shift is pressed */ - /* ----------------------------------------------------- */ - - case 0 : - - /* modifier check and trash */ - switch (keysym) { - case XK_Control_L : case XK_Control_R : - Modifier = 1; - break; - case XK_Alt_L : case XK_Alt_R : - case XK_Meta_L : case XK_Meta_R : - Modifier = 2; - break; - - /* hacks */ - - /* - case XK_Up : - CTX.clip_plane0[2] = 1. ; - if(fabs(CTX.clip_plane0[3]-CTX.lc/20. <1.)) CTX.clip_plane0[3] -= CTX.lc/20. ; - Draw(); - break; - case XK_Down : - CTX.clip_plane0[2] = 1. ; - if(fabs(CTX.clip_plane0[3]+CTX.lc/20 <1.)) CTX.clip_plane0[3] += CTX.lc/20. ; - Draw(); - break; - */ - - /* mesh shortcuts */ - case XK_0 : case XK_KP_0 : - ActualizeContextCb (NULL,(XtPointer)CONTEXT_GEOM,NULL); - geom_event_handler(GEOM_PARSE); - break; - case XK_1 : case XK_KP_1 : - case XK_F1 : case XK_KP_F1 : - ActualizeContextCb (NULL,(XtPointer)CONTEXT_MESH,NULL); - mesh_event_handler(MESH_1D); - break; - case XK_2 : case XK_KP_2 : - case XK_F2 : case XK_KP_F2 : - ActualizeContextCb (NULL,(XtPointer)CONTEXT_MESH,NULL); - mesh_event_handler(MESH_2D); - break; - case XK_3 : case XK_KP_3 : - case XK_F3 : case XK_KP_F3 : - ActualizeContextCb (NULL,(XtPointer)CONTEXT_MESH,NULL); - mesh_event_handler(MESH_3D); - break; - - /* post shortcuts */ - case XK_s: - CTX.post.anim_delay += 0.01 ; - XtVaSetValues(WID.OD.postAnimScale, XmNvalue, (int)(CTX.post.anim_delay), NULL); - XmUpdateDisplay(WID.OD.postAnimScale); - break ; - case XK_S: - CTX.post.anim_delay -= 0.01 ; - if(CTX.post.anim_delay < 0.) CTX.post.anim_delay = 0. ; - XtVaSetValues(WID.OD.postAnimScale, XmNvalue, (int)(CTX.post.anim_delay), NULL); - XmUpdateDisplay(WID.OD.postAnimScale); - break ; - - /* module shortcuts */ - case XK_g : - ActualizeContextCb (NULL,(XtPointer)CONTEXT_GEOM,NULL); - break; - case XK_m : - ActualizeContextCb (NULL,(XtPointer)CONTEXT_MESH,NULL); - break; - case XK_p : - ActualizeContextCb (NULL,(XtPointer)CONTEXT_POST,NULL); - break; - - /* options menu shortcuts */ - case XK_G : - ManageCb(NULL,(XtPointer)WID.OD.geomDialog,NULL); - break; - case XK_M : - ManageCb(NULL,(XtPointer)WID.OD.meshDialog,NULL); - break; - case XK_P : - ManageCb(NULL,(XtPointer)WID.OD.postDialog,NULL); - break; - case XK_O : - ManageCb(NULL,(XtPointer)WID.OD.miscDialog,NULL); - break; - case XK_I : - Modifier = 0 ; - CurrentInfoCb(NULL, (XtPointer)1, NULL); - break; - case XK_V : - Modifier = 0 ; - CurrentViewportCb (NULL, NULL, NULL); - break; - } - break; - - - /* ----------------------------------------------------- */ - /* Control is pressed */ - /* ----------------------------------------------------- */ - - case 1 : - - switch (keysym) { - - /* file menu shortcuts */ - case XK_q : case XK_Q : - exit(1); - case XK_a : case XK_A : - case XK_c : case XK_C : - CancelMeshThread(); - break; - case XK_s : - Print_Mesh(&M,NULL, CTX.mesh.format); - break; - case XK_p : - case XK_S : - Modifier = 0 ; - ManageCb(NULL,(XtPointer)WID.FD.saveAsDialog,NULL); - break ; - case XK_o : case XK_O : - Modifier = 0 ; - ManageCb(NULL,(XtPointer)WID.FD.openDialog,NULL); - break; - case XK_m : case XK_M : - Modifier = 0 ; - ManageCb(NULL,(XtPointer)WID.FD.mergeDialog,NULL); - break; - case XK_l : case XK_L : - Modifier = 0 ; - ReloadAllViewsCb(NULL,NULL,NULL); - break; - case XK_r : case XK_R : - Modifier = 0 ; - RemoveAllViewsCb(NULL,NULL,NULL); - break; - } - break ; - - - /* ----------------------------------------------------- */ - /* Alt is pressed */ - /* ----------------------------------------------------- */ - - case 2 : - - /* everything that is not "cascade menu" */ - switch (keysym) { - case XK_f : case XK_F : - CTX.fast = !CTX.fast; - XtVaSetValues(WID.OD.miscMiscButt[2], XmNset, CTX.fast, NULL); - XmUpdateDisplay(WID.OD.miscMiscCheck); - break; - case XK_b : case XK_B : - CTX.post.scales = !CTX.post.scales; - Draw(); - break; - case XK_o : case XK_O : - CTX.ortho = !CTX.ortho; - XtVaSetValues(WID.OD.miscProjButt[0], XmNset, CTX.ortho, NULL); - XtVaSetValues(WID.OD.miscProjButt[1], XmNset, !CTX.ortho, NULL); - XmUpdateDisplay(WID.OD.miscProjCheck); - Draw(); - break; - case XK_h : case XK_H : - CTX.geom.highlight = !CTX.geom.highlight; - CTX.geom.highlight ? Msg(INFO, "Highlight Enabled") : - Msg(INFO, "Highlight Disabled"); - break; - case XK_c : case XK_C : - opt_general_color_scheme(0,GMSH_SET,opt_general_color_scheme(0,GMSH_GET,0)+1); - opt_geometry_color_scheme(0,GMSH_SET,opt_general_color_scheme(0,GMSH_GET,0)); - opt_mesh_color_scheme(0,GMSH_SET,opt_general_color_scheme(0,GMSH_GET,0)); - XtVaSetValues(WID.OD.miscColorSchemeScale,XmNvalue, CTX.color_scheme, NULL); - XmUpdateDisplay(WID.OD.miscColorSchemeScale); - Draw(); - break; - case XK_d : case XK_D : - if(!CTX.mesh.hidden && !CTX.mesh.shade) - CTX.mesh.hidden = 1; - else if(CTX.mesh.hidden && !CTX.mesh.shade) - CTX.mesh.shade = 1; - else{ - CTX.mesh.hidden = 0; CTX.mesh.shade = 0; - } - XtVaSetValues(WID.OD.meshAspectButt[2],XmNset,CTX.mesh.hidden&&CTX.mesh.shade, NULL); - XtVaSetValues(WID.OD.meshAspectButt[1],XmNset,CTX.mesh.hidden&&!CTX.mesh.shade, NULL); - XtVaSetValues(WID.OD.meshAspectButt[0],XmNset,!CTX.mesh.hidden&&!CTX.mesh.shade, NULL); - XmUpdateDisplay(WID.OD.meshAspectCheck); - Draw(); - break; - case XK_x : case XK_X : - if(CTX.useTrackball) - CTX.setQuaternion(0.,-1./sqrt(2.),0.,1./sqrt(2.)); - set_r(0,0.); set_r(1,90.);set_r(2,0.); Draw(); - break; - case XK_y : case XK_Y : - if(CTX.useTrackball) - CTX.setQuaternion(1./sqrt(2.),0.,0.,1./sqrt(2.)); - set_r(0,-90.);set_r(1,0.); set_r(2,0.); Draw(); - break; - case XK_z : case XK_Z : - if(CTX.useTrackball) - CTX.setQuaternion(0.,0.,0.,1.); - set_r(0,0.); set_r(1,0.); set_r(2,0.); Draw(); - break; - case XK_a : - CTX.small_axes = !CTX.small_axes; - XtVaSetValues(WID.OD.miscMiscButt[1], XmNset, CTX.small_axes, NULL); - XmUpdateDisplay(WID.OD.miscMiscCheck); - Draw(); - break; - case XK_A : - CTX.axes = !CTX.axes; - XtVaSetValues(WID.OD.miscMiscButt[0], XmNset, CTX.axes, NULL); - XmUpdateDisplay(WID.OD.miscMiscCheck); - Draw(); - break; - case XK_p : - CTX.geom.points = !CTX.geom.points; - if(!CTX.geom.vis_type){ - XtVaSetValues(WID.OD.geomVisibleButt[0], XmNset, CTX.geom.points, NULL); - XmUpdateDisplay(WID.OD.geomVisibleButt[0]); - } - Draw(); - break; - case XK_P : - CTX.mesh.points = !CTX.mesh.points; - if(!CTX.mesh.vis_type){ - XtVaSetValues(WID.OD.meshVisibleButt[0], XmNset, CTX.mesh.points, NULL); - XmUpdateDisplay(WID.OD.meshVisibleButt[0]); - } - Draw(); - break; - case XK_l : - CTX.geom.lines = !CTX.geom.lines; - if(!CTX.geom.vis_type){ - XtVaSetValues(WID.OD.geomVisibleButt[1], XmNset, CTX.geom.lines, NULL); - XmUpdateDisplay(WID.OD.geomVisibleButt[1]); - } - Draw(); - break; - case XK_L : - CTX.mesh.lines = !CTX.mesh.lines; - if(!CTX.mesh.vis_type){ - XtVaSetValues(WID.OD.meshVisibleButt[1], XmNset, CTX.mesh.lines, NULL); - XmUpdateDisplay(WID.OD.meshVisibleButt[1]); - } - Draw(); - break; - case XK_s : - CTX.geom.surfaces = !CTX.geom.surfaces; - if(!CTX.geom.vis_type){ - XtVaSetValues(WID.OD.geomVisibleButt[2], XmNset, CTX.geom.surfaces, NULL); - XmUpdateDisplay(WID.OD.geomVisibleButt[2]); - } - Draw(); - break; - case XK_S : - CTX.mesh.surfaces = !CTX.mesh.surfaces; - if(!CTX.mesh.vis_type){ - XtVaSetValues(WID.OD.meshVisibleButt[2], XmNset, CTX.mesh.surfaces, NULL); - XmUpdateDisplay(WID.OD.meshVisibleButt[2]); - } - Draw(); - break; - case XK_v : - CTX.geom.volumes = !CTX.geom.volumes; - if(!CTX.geom.vis_type){ - XtVaSetValues(WID.OD.geomVisibleButt[3], XmNset, CTX.geom.volumes, NULL); - XmUpdateDisplay(WID.OD.geomVisibleButt[3]); - } - Draw(); - break; - case XK_V : - CTX.mesh.volumes = !CTX.mesh.volumes; - if(!CTX.mesh.vis_type){ - XtVaSetValues(WID.OD.meshVisibleButt[3], XmNset, CTX.mesh.volumes, NULL); - XmUpdateDisplay(WID.OD.meshVisibleButt[3]); - } - Draw(); - break; - case XK_m : case XK_M : - CTX.mesh.points = !CTX.mesh.points; - CTX.mesh.lines = !CTX.mesh.lines; - CTX.mesh.surfaces = !CTX.mesh.surfaces; - CTX.mesh.volumes = !CTX.mesh.volumes; - XtVaSetValues(WID.OD.meshVisibleButt[0], XmNset, CTX.mesh.points, NULL); - XtVaSetValues(WID.OD.meshVisibleButt[1], XmNset, CTX.mesh.lines, NULL); - XtVaSetValues(WID.OD.meshVisibleButt[2], XmNset, CTX.mesh.surfaces, NULL); - XtVaSetValues(WID.OD.meshVisibleButt[3], XmNset, CTX.mesh.volumes, NULL); - XmUpdateDisplay(WID.OD.meshVisibleCheck); - Draw(); - break; - case XK_t : case XK_T : - MarkAllViewsChanged(1); - Draw(); - break; - } - break ; - - } - -} - - -/* ------------------------------------------------------------------------ */ -/* I n p u t */ -/* ------------------------------------------------------------------------ */ - -void Process_SelectionBuffer(int x, int y, int *n, GLuint *ii, GLuint *jj); -void Filter_SelectionBuffer(int n, GLuint *typ, GLuint *ient, Vertex **thev, - Curve **thec, Surface **thes, Mesh *m); -void myZoom(GLdouble X1, GLdouble X2, GLdouble Y1, GLdouble Y2, - GLdouble Xc1, GLdouble Xc2, GLdouble Yc1, GLdouble Yc2); - -void InputCb (Widget w, XtPointer client_data, GLwDrawingAreaCallbackStruct *cb){ - XEvent *event; - XComposeStatus stat; - KeySym keysym; - GLuint ii[SELECTION_BUFFER_SIZE], jj[SELECTION_BUFFER_SIZE]; - char buf[100]; - int previous_mesh_draw, previous_post_draw ; - int width, height ; - - static int ibut, hits; - static int ButtonPressed=0, ZoomClick=0, FirstClick=0; - static int x, y, movx, movy; - static GLdouble xc1, yc1, xc2, yc2, xt1, yt1, xscale1, yscale1; - static GLdouble xb, yb, xc, yc, xe, ye, xz, yz; - static GLdouble movzx, movzy; - static Vertex *v=NULL, *ov; - static Curve *c=NULL, *oc; - static Surface *s=NULL, *os; - - width = CTX.viewport[2]-CTX.viewport[0] ; - height = CTX.viewport[3]-CTX.viewport[1] ; - - event = cb->event; - - switch(event->type){ - - /* ------------------------------------------------------------- - K e y s - ------------------------------------------------------------- */ - - case KeyPress : - KeyboardAccel(event); - break; - - case KeyRelease : - XLookupString(&event->xkey, buf, sizeof(buf), &keysym, &stat); - if(keysym == XK_Control_L || - keysym == XK_Control_R || - keysym == XK_Alt_L || - keysym == XK_Alt_R || - keysym == XK_Meta_L || - keysym == XK_Meta_R) - Modifier = 0; - break; - - /* ------------------------------------------------------------- - B u t t o n P r e s s - ------------------------------------------------------------- */ - - case ButtonPress : - ButtonPressed++; - FirstClick=1; - ibut = event->xbutton.button; - x = event->xbutton.x; - y = event->xbutton.y; - - switch(ibut){ - case 1: - if(!ZoomClick && Modifier){ - xb = CTX.vxmin + ((GLdouble) x / width) * (CTX.vxmax - CTX.vxmin); - yb = CTX.vymax - ((GLdouble) y / height) * (CTX.vymax - CTX.vymin); - xc1 = xb/CTX.s[0] - CTX.t[0]; - yc1 = yb/CTX.s[1] - CTX.t[1]; - ZoomClick=1; - movzx = movzy = 0; - Modifier = 0; - } - else if(ZoomClick){ - xe = CTX.vxmin + ((GLdouble) x / width) * (CTX.vxmax - CTX.vxmin); - ye = CTX.vymax - ((GLdouble) y / height) * (CTX.vymax - CTX.vymin); - xc2 = xe/CTX.s[0] - CTX.t[0]; - yc2 = ye/CTX.s[1] - CTX.t[1]; - ZoomClick=0; - if(CTX.overlay){ - glXMakeCurrent(XtDisplay(WID.G.glo), XtWindow(WID.G.glo), XCTX.glo.context); - glClearIndex(0); - glClear(GL_COLOR_BUFFER_BIT); - glXMakeCurrent(XtDisplay(WID.G.glw), XtWindow(WID.G.glw), XCTX.glw.context); - } - if(xb!=xe && yb!=ye) - myZoom(xb,xe,yb,ye,xc1,xc2,yc1,yc2); - } - break; - case 2: - if(Modifier && !ZoomClick){ - Modifier = 0; - set_s(1, CTX.s[0]); - set_s(2, CTX.s[0]); - Draw(); - } - else{ - ZoomClick=0; - if(CTX.overlay){ - glXMakeCurrent(XtDisplay(WID.G.glo), XtWindow(WID.G.glo), XCTX.glo.context); - glClearIndex(0); - glClear(GL_COLOR_BUFFER_BIT); - glXMakeCurrent(XtDisplay(WID.G.glw), XtWindow(WID.G.glw), XCTX.glw.context); - } - } - break; - case 3: - if(Modifier && !ZoomClick){ - Modifier = 0; - if(CTX.useTrackball){ - CTX.setQuaternion(0.,0.,0.,1.); - } - else{ - set_r(0,0.); set_r(1,0.); set_r(2,0.); - } - set_t(0,0.); set_t(1,0.); set_t(2,0.); - set_s(0,1.); set_s(1,1.); set_s(2,1.); - Draw(); - } - else{ - ZoomClick=0; - if(CTX.overlay){ - glXMakeCurrent(XtDisplay(WID.G.glo), XtWindow(WID.G.glo), XCTX.glo.context); - glClearIndex(0); - glClear(GL_COLOR_BUFFER_BIT); - glXMakeCurrent(XtDisplay(WID.G.glw), XtWindow(WID.G.glw), XCTX.glw.context); - } - } - break; - } - break; - - /* ------------------------------------------------------------- - B u t t o n R e l e a s e - ------------------------------------------------------------- */ - - case ButtonRelease : - if(ButtonPressed>0){ - ButtonPressed--; - ibut = event->xbutton.button; - x = event->xbutton.x; - y = event->xbutton.y; - } - if(!ZoomClick){ - previous_mesh_draw = CTX.mesh.draw ; - previous_post_draw = CTX.post.draw ; - if(ButtonPressed>0){ - if(CTX.fast) CTX.mesh.draw = CTX.post.draw = 0; - } - Draw(); - CTX.mesh.draw = previous_mesh_draw ; - CTX.post.draw = previous_post_draw ; - } - break; - - /* ------------------------------------------------------------- - E n t e r / L e a v e N o t i f y - ------------------------------------------------------------- */ - - case EnterNotify : - case LeaveNotify : - ButtonPressed = 0; - Modifier = 0; - break; - - /* ------------------------------------------------------------- - M o t i o n N o t i f y - ------------------------------------------------------------- */ - - case MotionNotify : - movx = (event->xbutton.x-x); - movy = (event->xbutton.y-y); - - if(ZoomClick) { - - xz = CTX.vxmin + ((GLdouble) event->xbutton.x / width) * - (CTX.vxmax - CTX.vxmin); - yz = CTX.vymax - ((GLdouble) event->xbutton.y / height) * - (CTX.vymax - CTX.vymin) ; - if(CTX.overlay) { - movzx = xz - xb; movzy = yz - yb; - InitOverlay(); - glLineWidth(1.); - glClearIndex(0); - glClear(GL_COLOR_BUFFER_BIT); - glIndexi((CTX.color.bg<CTX.color.fg)?XCTX.xcolor.ovwhite:XCTX.xcolor.ovblack); - glBegin(GL_LINE_STRIP); - glVertex2d(xb,yb); - glVertex2d(xb+movzx,yb); - glVertex2d(xb+movzx,yb+movzy); - glVertex2d(xb,yb+movzy); - glVertex2d(xb,yb); - glEnd(); - - /* Dessine le plus gd rectangle possible si ortho */ - - /* - if(fabs((double)movzx/(double)movzy) > ((double)width/(double)height)){ - constry = movzy; - constrx = sign(movzx)*fabs(movzy)*((double)width/(double)height); - } - else{ - constrx = movzx; - constry = sign(movzy)*fabs(movzx)*((double)height/(double)width); - } - glIndexi(theRed); - glBegin(GL_LINE_STRIP); - glVertex2d(xb+constrx,yb); - glVertex2d(xb+constrx,yb+constry); - glVertex2d(xb,yb+constry); - glEnd(); - */ - - glXMakeCurrent(XtDisplay(WID.G.glw), XtWindow(WID.G.glw), XCTX.glw.context); - } - else { - glPopMatrix(); - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - gluOrtho2D(CTX.vxmin, CTX.vxmax, CTX.vymin, CTX.vymax); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - - if(CTX.db) glDrawBuffer(GL_BACK); - - glDisable(GL_DEPTH_TEST); - /* c'est une maniere de contourner l'absence de XOR, mais ca ne marche - evidemment qu'avec un background tout noir ou tout blanc !*/ - glColor3f(1.,1.,1.); - glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO); - glEnable(GL_BLEND); - - glBegin(GL_LINE_STRIP); - glVertex2d(xb,yb); - glVertex2d(xb+movzx,yb); - glVertex2d(xb+movzx,yb+movzy); - glVertex2d(xb,yb+movzy); - glVertex2d(xb,yb); - glEnd(); - movzx = xz - xb; movzy = yz - yb; - - glBegin(GL_LINE_STRIP); - glVertex2d(xb,yb); - glVertex2d(xb+movzx,yb); - glVertex2d(xb+movzx,yb+movzy); - glVertex2d(xb,yb+movzy); - glVertex2d(xb,yb); - glEnd(); - - glDisable(GL_BLEND); - glEnable(GL_DEPTH_TEST); - glPopMatrix(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - - if(CTX.db) - glXSwapBuffers(XCTX.display,XtWindow(WID.G.glw)); - else - glFlush(); - - } - } - else { - if(ButtonPressed){ - - if(CTX.overlay){ - glXMakeCurrent(XtDisplay(WID.G.glo), XtWindow(WID.G.glo), XCTX.glo.context); - glClearIndex(0); - glClear(GL_COLOR_BUFFER_BIT); - glXMakeCurrent(XtDisplay(WID.G.glw), XtWindow(WID.G.glw), XCTX.glw.context); - } - - if(FirstClick){ - xc1 = ( ((GLdouble) x / width) * (CTX.vxmax - CTX.vxmin) - + CTX.vxmin )/CTX.s[0] - CTX.t[0]; - yc1 = ( CTX.vymax - ((GLdouble) y / height) * - (CTX.vymax - CTX.vymin))/CTX.s[1] - CTX.t[1]; - xt1 = CTX.t[0]; - yt1 = CTX.t[1]; - xscale1 = CTX.s[0]; - yscale1 = CTX.s[1]; - FirstClick=0; - } - - switch(ibut){ - case 1: - - if(CTX.useTrackball) - { - CTX.addQuaternion ((2.0*x - width) / width, - (height - 2.0*y) / height, - (2.0*event->xbutton.x - width) / width, - (height - 2.0*event->xbutton.y) / height); - } - else - { - set_r(1, CTX.r[1] + ((abs(movx) > abs(movy))?180*(float)movx/(float)width:0)); - set_r(0, CTX.r[0] + ((abs(movx) > abs(movy))?0:180*(float)movy/(float)height)); - } - break; - case 2: - if(!CTX.useTrackball) - set_r(2, CTX.r[2] + ((abs(movy) > abs(movx))?0:-180*(float)movx/(float)width)); - - set_s(0, CTX.s[0] * ( (abs(movy) > abs(movx)) ? - ( (movy>0) ? (float)(1.04*(abs(movy)+height))/(float)height - : (float)(height)/(float)(1.04*(abs(movy)+height)) ) - : 1.) ); - set_s(1, CTX.s[0]); - set_s(2, CTX.s[0]); - - if(abs(movy) > abs(movx)){ - set_t(0, xt1*(xscale1/CTX.s[0])-xc1*(1.-(xscale1/CTX.s[0]))); - set_t(1, yt1*(yscale1/CTX.s[1])-yc1*(1.-(yscale1/CTX.s[1]))); - } - break; - case 3: - xc = ( ((GLdouble) x / width) * (CTX.vxmax - CTX.vxmin) + - CTX.vxmin ) / CTX.s[0]; - yc = ( CTX.vymax - ((GLdouble) y / height) * - (CTX.vymax - CTX.vymin)) / CTX.s[1]; - set_t(0, xc-xc1); - set_t(1, yc-yc1); - set_t(2, 0.); - break; - } - previous_mesh_draw = CTX.mesh.draw ; - previous_post_draw = CTX.post.draw ; - if(CTX.fast) CTX.mesh.draw = CTX.post.draw = 0; - Draw(); - CTX.mesh.draw = previous_mesh_draw ; - CTX.post.draw = previous_post_draw ; - } - else{ - Process_SelectionBuffer(event->xbutton.x, event->xbutton.y, &hits, ii, jj); - ov = v; oc = c; os = s; - v = NULL; c = NULL; s = NULL; - Filter_SelectionBuffer(hits,ii,jj,&v,&c,&s,&M); - - if(CTX.overlay){ - glXMakeCurrent(XtDisplay(WID.G.glo), XtWindow(WID.G.glo), XCTX.glo.context); - if(ov != v || oc != c || os != s) { - glClearIndex(0); - glClear(GL_COLOR_BUFFER_BIT); - glIndexi((CTX.color.bg<CTX.color.fg)?XCTX.xcolor.ovwhite:XCTX.xcolor.ovblack); - BeginHighlight(); - HighlightEntity(v,c,s,0); - EndHighlight(0); - } - glXMakeCurrent(XtDisplay(WID.G.glw), XtWindow(WID.G.glw), XCTX.glw.context); - } - else{ - if(ov != v || oc != c || os != s) { - if(CTX.geom.highlight) Draw(); - BeginHighlight(); - HighlightEntity(v,c,s,0); - EndHighlight(0); - } - } - } - x += movx; - y += movy; - } - break; - } -} - diff --git a/Motif/CbMesh.cpp b/Motif/CbMesh.cpp deleted file mode 100644 index 351be097a3cfd9c0b96b763ee3879319e2fa0dfc..0000000000000000000000000000000000000000 --- a/Motif/CbMesh.cpp +++ /dev/null @@ -1,291 +0,0 @@ -// $Id: CbMesh.cpp,v 1.4 2001-01-29 08:43:44 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Geo.h" -#include "Mesh.h" -#include "Draw.h" -#include "CbMesh.h" -#include "Context.h" -#include "Widgets.h" - -extern Widgets_T WID; -extern Context_T CTX; -extern Mesh M; - -/* ------------------------------------------------------------------------ */ -/* m e s h _ e v e n t _ h a n d l e r */ -/* ------------------------------------------------------------------------ */ - -#ifdef _USETHREADS - -#include <pthread.h> - -int MeshDim ; -pthread_t MeshThread ; -//pthread_mutex_t MeshMutex ; - -void* StartMeshThread(void * data){ - - pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); - // pthread_mutex_unlock(&MeshMutex); - - mai3d(&M,MeshDim); - Msg(STATUS3,"Ready"); - CTX.mesh.draw = 1; - CTX.threads_lock = 0; - XtSetSensitive(WID.G.Butt[6], 0); - Draw(); - pthread_exit(NULL); - return NULL ; -} - -void CancelMeshThread(void){ - if(CTX.threads){ - // pthread_mutex_lock(&MeshMutex); - // pthread_join(MeshThread,NULL); - // pthread_detach(MeshThread); - - pthread_cancel(MeshThread); - CTX.mesh.draw = 1; - CTX.threads_lock = 0; - XtSetSensitive(WID.G.Butt[6], 0); - Msg(STATUS2,"Mesh Aborted"); - mesh_event_handler(MESH_DELETE); - Msg(STATUS3,"Ready"); - Draw(); - } -} - -#else - -void CancelMeshThread(void){ - -} - -#endif - - - -void mesh_event_handler (int event) { - Vertex *v; - Curve *c; - Surface *s; - int ib; - static int n=0, p[100]; - - if(CTX.threads_lock) return ; - - switch (event) { - - case MESH_DELETE : - mai3d(&M, 0); - break; - - case MESH_1D : -#ifdef _USETHREADS - if(CTX.threads){ - XtSetSensitive(WID.G.Butt[6], 1); - CTX.mesh.draw = 0; CTX.threads_lock = 1 ; MeshDim = 1 ; - // pthread_mutex_init(&MeshMutex,NULL); - // pthread_mutex_lock(&MeshMutex); - pthread_create(&MeshThread, NULL, StartMeshThread, NULL); - } - else -#endif - mai3d(&M, 1); - break; - - case MESH_2D : -#ifdef _USETHREADS - if(CTX.threads){ - XtSetSensitive(WID.G.Butt[6], 1); - CTX.mesh.draw = 0; CTX.threads_lock = 1 ; MeshDim = 2 ; - // pthread_mutex_init(&MeshMutex,NULL); - // pthread_mutex_lock(&MeshMutex); - pthread_create(&MeshThread, NULL, StartMeshThread, NULL); - } - else -#endif - mai3d(&M, 2); - break; - - case MESH_3D : -#ifdef _USETHREADS - if(CTX.threads){ - XtSetSensitive(WID.G.Butt[6], 1); - CTX.mesh.draw = 0; CTX.threads_lock = 1 ; MeshDim = 3 ; - // pthread_mutex_init(&MeshMutex,NULL); - // pthread_mutex_lock(&MeshMutex); - pthread_create(&MeshThread, NULL, StartMeshThread, NULL); - } - else -#endif - mai3d(&M, 3); - break; - - - case MESH_DEFINE_CHAR_LENGTH : - n=0; - while(1){ - Msg(STATUS3,"Select Point ('e'=end, 'q'=quit)"); - ib = SelectEntity(ENT_POINT, &v,&c,&s); - if(ib == 1){ /* left mouse butt */ - p[n++] = v->Num; - } - if (ib == -1){ /* 'e' */ - if(n >= 1) { - add_charlength(n,p,CTX.filename); break; - } - n=0; - ZeroHighlight(&M); - Replot(); - } - if(ib == 0){ /* 'q' */ - n=0 ; - ZeroHighlight(&M); - Replot(); - break; - } - } - break ; - - case MESH_DEFINE_RECOMBINE : - n=0; - while(1){ - Msg(STATUS3,"Select Surface ('e'=end, 'q'=quit)"); - ib = SelectEntity(ENT_SURFACE, &v,&c,&s); - if(ib == 1){ /* left mouse butt */ - p[n++] = s->Num; - } - if (ib == -1){ /* 'e' */ - if(n >= 1) { - add_recosurf(n,p,CTX.filename); break; - } - n=0; - ZeroHighlight(&M); - Replot(); - } - if(ib == 0){ /* 'q' */ - n=0 ; - ZeroHighlight(&M); - Replot(); - break; - } - } - break ; - - case MESH_DEFINE_TRSF_LINE : - case MESH_DEFINE_TRSF_SURFACE : - case MESH_DEFINE_TRSF_VOLUME : - n=0; - while(1){ - switch (event) { - case MESH_DEFINE_TRSF_LINE : - Msg(STATUS3,"Select Line ('e'=end, 'q'=quit)"); - ib = SelectEntity(ENT_LINE, &v,&c,&s); - break ; - case MESH_DEFINE_TRSF_SURFACE : - Msg(STATUS3,"Select Surface ('e'=end, 'q'=quit)"); - ib = SelectEntity(ENT_SURFACE, &v,&c,&s); - break; - case MESH_DEFINE_TRSF_VOLUME : - ib = 1; - break; - } - if(ib == 1){ /* left mouse butt */ - switch (event) { - case MESH_DEFINE_TRSF_LINE : p[n++] = c->Num ; break ; - case MESH_DEFINE_TRSF_SURFACE : p[n++] = s->Num; - case MESH_DEFINE_TRSF_VOLUME : - while(1){ - Msg(STATUS3,"Select Point ('e'=end, 'q'=quit)"); - ib = SelectEntity(ENT_POINT, &v,&c,&s); - if(ib == 1){ /* left mouse butt */ - p[n++] = v->Num ; - } - if (ib == -1){ /* 'e' */ - switch (event) { - case MESH_DEFINE_TRSF_SURFACE : - if(n == 3+1 || n == 4+1) - add_trsfsurf(n,p,CTX.filename); - else - Msg(STATUS2, "Wrong Number of Points for Transfinite Surface"); - break; - case MESH_DEFINE_TRSF_VOLUME : - if(n == 6 || n == 8) - add_trsfvol(n,p,CTX.filename); - else - Msg(STATUS2, "Wrong Number of Points for Transfinite Volume"); - break; - } - n=0; - ZeroHighlight(&M); - Replot(); - break; - } - if(ib == 0){ /* 'q' */ - n=0 ; - ZeroHighlight(&M); - Replot(); - break; - } - } - break ; - } - } - if (ib == -1){ /* 'e' */ - if (event == MESH_DEFINE_TRSF_LINE){ - if(n >= 1) add_trsfline(n,p,CTX.filename); - } - n=0; - ZeroHighlight(&M); - Replot(); - } - if(ib == 0){ /* 'q' */ - n=0 ; - ZeroHighlight(&M); - Replot(); - break; - } - } - break ; - - case MESH_DEFINE_ATTRACTOR_POINT : - case MESH_DEFINE_ATTRACTOR_LINE : - case MESH_DEFINE_ATTRACTOR_SURFACE : - Msg(WARNING, "Interactive Attractor Definition not done yet"); - break ; - - default : - Msg(WARNING, "Unkown Event in mesh_event_handler"); - break; - } - - if(!CTX.threads){ - Msg(STATUS3,"Ready"); - Draw(); - } -} - -/* ------------------------------------------------------------------------ - M e s h C b - ------------------------------------------------------------------------ */ - -void MeshCb (Widget w, XtPointer client_data, XtPointer call_data){ - - switch((long int)client_data){ - - case MESH_TRSF_LINE_PTS : strcpy(trsf_pts_text,XmTextGetString(w)); break; - case MESH_TRSF_LINE_TYPE : strcpy(trsf_type_text,XmTextGetString(w)); break; - case MESH_TRSF_VOL_NUM : strcpy(trsf_vol_text,XmTextGetString(w)); break; - case MESH_CHAR_LENGTH : strcpy(char_length_text,XmTextGetString(w)); break; - case MESH_ATTRACTOR_X : strcpy(attrx_text,XmTextGetString(w)); break; - case MESH_ATTRACTOR_Y : strcpy(attry_text,XmTextGetString(w)); break; - case MESH_ATTRACTOR_Z : strcpy(attrz_text,XmTextGetString(w)); break; - default : - Msg(WARNING, "Unknown Event in MeshCb (%d)", (long int)client_data); - break; - - } -} diff --git a/Motif/CbMesh.h b/Motif/CbMesh.h deleted file mode 100644 index b5fe82fd27016d1d4fb80dd4a5b7befd29d5c4d1..0000000000000000000000000000000000000000 --- a/Motif/CbMesh.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef _CB_MESH_H_ -#define _CB_MESH_H_ - -/* mesh event handler */ - -#define MESH_DELETE 1 -#define MESH_1D 2 -#define MESH_2D 3 -#define MESH_3D 4 -#define MESH_DEFINE_CHAR_LENGTH 5 -#define MESH_DEFINE_TRSF_LINE 6 -#define MESH_DEFINE_TRSF_SURFACE 7 -#define MESH_DEFINE_TRSF_VOLUME 8 -#define MESH_DEFINE_RECOMBINE 9 -#define MESH_DEFINE_ATTRACTOR_POINT 10 -#define MESH_DEFINE_ATTRACTOR_LINE 11 -#define MESH_DEFINE_ATTRACTOR_SURFACE 12 - -/* MeshCb */ - -#define MESH_TRSF_LINE_PTS 100 -#define MESH_TRSF_LINE_TYPE 101 -#define MESH_TRSF_VOL_NUM 102 -#define MESH_CHAR_LENGTH 103 -#define MESH_ATTRACTOR_X 104 -#define MESH_ATTRACTOR_Y 105 -#define MESH_ATTRACTOR_Z 106 - -void CancelMeshThread(void); -void mesh_event_handler (int event); - -#endif diff --git a/Motif/CbOptions.cpp b/Motif/CbOptions.cpp deleted file mode 100644 index e6a4c655b7e3e69762a5f06e00b38d95ebc3e377..0000000000000000000000000000000000000000 --- a/Motif/CbOptions.cpp +++ /dev/null @@ -1,380 +0,0 @@ -// $Id: CbOptions.cpp,v 1.11 2001-08-12 13:08:20 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Numeric.h" -#include "Geo.h" -#include "Verif.h" -#include "Mesh.h" -#include "Draw.h" -#include "Widgets.h" -#include "Pixmaps.h" -#include "Context.h" -#include "Options.h" -#include "XContext.h" -#include "Register.h" -#include "Timer.h" -#include "Visibility.h" - -#include "CbOptions.h" -#include "CbGeom.h" -#include "CbMesh.h" -#include "CbPost.h" - -extern Context_T CTX; -extern XContext_T XCTX ; -extern Widgets_T WID; -extern Pixmaps_T PIX; -extern Mesh M; - -static int select_by_number=OPTIONS_MESH_SELECT_ENTITY ; -static int stop_anim ; -static long anim_time ; - -/* ------------------------------------------------------------------------ - O p t i o n s C b - ------------------------------------------------------------------------ */ - -void OptionsCb (Widget w, XtPointer client_data, XtPointer call_data){ - int i, e; - char *c, label[32]; - XWindowAttributes xattrib; - XEvent event; - - switch((long int)client_data){ - - /* globales */ - - case OPTIONS_REPLOT : Draw(); break; - case OPTIONS_AXES : CTX.axes = !CTX.axes; break; - case OPTIONS_LITTLE_AXES : CTX.small_axes = !CTX.small_axes; break; - case OPTIONS_FAST_REDRAW : CTX.fast = !CTX.fast ; break ; - case OPTIONS_DISPLAY_LISTS : CTX.display_lists = !CTX.display_lists ; break ; - case OPTIONS_ALPHA_BLENDING: CTX.alpha = !CTX.alpha; break; - case OPTIONS_TRACKBALL : CTX.useTrackball = !CTX.useTrackball; break; - case OPTIONS_COLOR_SCHEME_SCALE: - XmScaleGetValue(WID.OD.miscColorSchemeScale, &e); - opt_general_color_scheme(0,GMSH_SET,e); - opt_geometry_color_scheme(0,GMSH_SET,e); - opt_mesh_color_scheme(0,GMSH_SET,e); - Draw(); - break ; - case OPTIONS_ORTHOGRAPHIC : CTX.ortho = 1; break; - case OPTIONS_PERSPECTIVE : CTX.ortho = 0; break; - case OPTIONS_LIGHT_X_SCALE : - XmScaleGetValue(WID.OD.miscLightScale[0], &e); CTX.light_position[0][0] = 0.04*e ; - MarkAllViewsChanged (0); break ; - case OPTIONS_LIGHT_Y_SCALE : - XmScaleGetValue(WID.OD.miscLightScale[1], &e); CTX.light_position[0][1] = 0.04*e ; - MarkAllViewsChanged (0); break ; - case OPTIONS_LIGHT_Z_SCALE : - XmScaleGetValue(WID.OD.miscLightScale[2], &e); CTX.light_position[0][2] = 0.04*e ; - MarkAllViewsChanged (0);break ; - case OPTIONS_SHINE_SCALE : - XmScaleGetValue(WID.OD.miscShineScale, &e); CTX.shine = 0.04*e ; - MarkAllViewsChanged (0);break ; - case OPTIONS_SCALEX : CTX.s[0] = (GLdouble)atof(XmTextGetString(w)); break; - case OPTIONS_SCALEY : CTX.s[1] = (GLdouble)atof(XmTextGetString(w)); break; - case OPTIONS_SCALEZ : CTX.s[2] = (GLdouble)atof(XmTextGetString(w)); break; - case OPTIONS_TRANX : CTX.t[0] = (GLdouble)atof(XmTextGetString(w)); break; - case OPTIONS_TRANY : CTX.t[1] = (GLdouble)atof(XmTextGetString(w)); break; - case OPTIONS_TRANZ : CTX.t[2] = (GLdouble)atof(XmTextGetString(w)); break; - case OPTIONS_ROTX : CTX.r[0] = (GLdouble)atof(XmTextGetString(w)); break; - case OPTIONS_ROTY : CTX.r[1] = (GLdouble)atof(XmTextGetString(w)); break; - case OPTIONS_ROTZ : CTX.r[2] = (GLdouble)atof(XmTextGetString(w)); break; - case OPTIONS_ROTX_LOCKED : CTX.rlock[0] = !CTX.rlock[0]; break; - case OPTIONS_ROTY_LOCKED : CTX.rlock[1] = !CTX.rlock[1]; break; - case OPTIONS_ROTZ_LOCKED : CTX.rlock[2] = !CTX.rlock[2]; break; - case OPTIONS_TRANX_LOCKED : CTX.tlock[0] = !CTX.tlock[0]; break; - case OPTIONS_TRANY_LOCKED : CTX.tlock[1] = !CTX.tlock[1]; break; - case OPTIONS_TRANZ_LOCKED : CTX.tlock[2] = !CTX.tlock[2]; break; - case OPTIONS_SCALEX_LOCKED : CTX.slock[0] = !CTX.slock[0]; break; - case OPTIONS_SCALEY_LOCKED : CTX.slock[1] = !CTX.slock[1]; break; - case OPTIONS_SCALEZ_LOCKED : CTX.slock[2] = !CTX.slock[2]; break; - case OPTIONS_XVIEW : - if(CTX.useTrackball) - CTX.setQuaternion(0.,-1./sqrt(2.),0.,1./sqrt(2.)); - set_r(0,0.); set_r(1,90.);set_r(2,0.); - Draw(); - break; - case OPTIONS_YVIEW : - if(CTX.useTrackball) - CTX.setQuaternion(1./sqrt(2.),0.,0.,1./sqrt(2.)); - set_r(0,-90.);set_r(1,0.); set_r(2,0.); - Draw(); - break; - case OPTIONS_ZVIEW : - if(CTX.useTrackball) - CTX.setQuaternion(0.,0.,0.,1.); - set_r(0,0.); set_r(1,0.); set_r(2,0.); - Draw(); - break; - case OPTIONS_CVIEW : - set_t(0,0.); set_t(1,0.); set_t(2,0.); - set_s(0,1.); set_s(1,1.); set_s(2,1.); - Draw(); - break; - case OPTIONS_PVIEW : - XGetWindowAttributes(XtDisplay(WID.G.shell),XtWindow(WID.G.shell),&xattrib); - fprintf(stderr, "-geometry %dx%d -viewport %g %g %g %g %g %g %g %g %g\n", - xattrib.width, xattrib.height, - CTX.r[0],CTX.r[1],CTX.r[2], - CTX.t[0],CTX.t[1],CTX.t[2], - CTX.s[0],CTX.s[1],CTX.s[2]); - Print_Options(0, GMSH_FULLRC, NULL); - break ; - - /* save */ - - case OPTIONS_SAVE_MSH : - CTX.print.format = CTX.mesh.format = FORMAT_MSH; - break; - case OPTIONS_SAVE_UNV : - CTX.print.format = CTX.mesh.format = FORMAT_UNV; - break; - case OPTIONS_SAVE_GREF : - CTX.print.format = CTX.mesh.format = FORMAT_GREF; - break; - case OPTIONS_SAVE_GEO : - CTX.print.format = FORMAT_GEO; - break; - case OPTIONS_SAVE_AUTO : - CTX.print.format = FORMAT_AUTO; - break; - case OPTIONS_SAVE_XPM : - CTX.print.format = FORMAT_XPM; - break; - case OPTIONS_SAVE_GIF : - CTX.print.format = FORMAT_GIF; - CTX.print.gif_dither = 0; - CTX.print.gif_transparent = 0; - break; - case OPTIONS_SAVE_GIF_DITHERED : - CTX.print.format = FORMAT_GIF; - CTX.print.gif_dither = 1; - CTX.print.gif_transparent = 0; - break; - case OPTIONS_SAVE_GIF_TRANSPARENT : - CTX.print.format = FORMAT_GIF; - CTX.print.gif_dither = 0; - CTX.print.gif_transparent = 1; - break; - case OPTIONS_SAVE_JPEG : - CTX.print.format = FORMAT_JPEG; - break; - case OPTIONS_SAVE_PPM : - CTX.print.format = FORMAT_PPM; - break; - case OPTIONS_SAVE_YUV : - CTX.print.format = FORMAT_YUV; - break; - case OPTIONS_SAVE_EPS_IMAGE : - CTX.print.format = FORMAT_EPS; - CTX.print.eps_quality = 0; - break; - case OPTIONS_SAVE_EPS_SIMPLE : - CTX.print.format = FORMAT_EPS; - CTX.print.eps_quality = 1; - break; - case OPTIONS_SAVE_EPS_COMPLEX : - CTX.print.format = FORMAT_EPS; - CTX.print.eps_quality = 2; - break; - - /* geometrie */ - - case OPTIONS_GEOM_CHECK : /* Print_Geo(&M,filename); */ break; - case OPTIONS_GEOM_VISIBILITY_ENTITY : - CTX.geom.vis_type = 0; - XtVaSetValues(WID.OD.geomVisibleButt[0], XmNset, CTX.geom.points?True:False, NULL); - XtVaSetValues(WID.OD.geomVisibleButt[1], XmNset, CTX.geom.lines?True:False, NULL); - XtVaSetValues(WID.OD.geomVisibleButt[2], XmNset, CTX.geom.surfaces?True:False, NULL); - XtVaSetValues(WID.OD.geomVisibleButt[3], XmNset, CTX.geom.volumes?True:False, NULL); - for(i=0;i<4;i++)XmUpdateDisplay(WID.OD.geomVisibleButt[i]); - break; - case OPTIONS_GEOM_VISIBILITY_NUMBER : - CTX.geom.vis_type = 1; - XtVaSetValues(WID.OD.geomVisibleButt[0], XmNset, CTX.geom.points_num?True:False, NULL); - XtVaSetValues(WID.OD.geomVisibleButt[1], XmNset, CTX.geom.lines_num?True:False, NULL); - XtVaSetValues(WID.OD.geomVisibleButt[2], XmNset, CTX.geom.surfaces_num?True:False, NULL); - XtVaSetValues(WID.OD.geomVisibleButt[3], XmNset, CTX.geom.volumes_num?True:False, NULL); - for(i=0;i<4;i++)XmUpdateDisplay(WID.OD.geomVisibleButt[i]); - break; - case OPTIONS_GEOM_POINTS : - if(!CTX.geom.vis_type) CTX.geom.points = !CTX.geom.points; - else CTX.geom.points_num = !CTX.geom.points_num; break; - case OPTIONS_GEOM_LINES : - if(!CTX.geom.vis_type) CTX.geom.lines = !CTX.geom.lines; - else CTX.geom.lines_num = !CTX.geom.lines_num; break; - case OPTIONS_GEOM_SURFACES : - if(!CTX.geom.vis_type) CTX.geom.surfaces = !CTX.geom.surfaces; - else CTX.geom.surfaces_num = !CTX.geom.surfaces_num; break; - case OPTIONS_GEOM_VOLUMES : - if(!CTX.geom.vis_type) CTX.geom.volumes = !CTX.geom.volumes; - else CTX.geom.volumes_num = !CTX.geom.volumes_num; break; - case OPTIONS_GEOM_NORMALS_SCALE : - XmScaleGetValue(WID.OD.geomNormalsScale, &e); CTX.geom.normals = e ; - sprintf(label,"%g",CTX.geom.normals); - XtVaSetValues(WID.OD.geomNormalsText, XmNvalue, label, NULL); - XmUpdateDisplay(WID.OD.geomNormalsText); break; - case OPTIONS_GEOM_NORMALS_TEXT : - CTX.geom.normals = atof(XmTextGetString(w)); - XtVaSetValues(WID.OD.geomNormalsScale, XmNvalue, - THRESHOLD((int)CTX.geom.normals,0,100), NULL); - XmUpdateDisplay(WID.OD.geomNormalsScale); break; - case OPTIONS_GEOM_TANGENTS_SCALE : - XmScaleGetValue(WID.OD.geomTangentsScale, &e); CTX.geom.tangents = e ; - sprintf(label,"%g",CTX.geom.tangents); - XtVaSetValues(WID.OD.geomTangentsText, XmNvalue, label, NULL); - XmUpdateDisplay(WID.OD.geomTangentsText); break; - case OPTIONS_GEOM_TANGENTS_TEXT : - CTX.geom.tangents = atof(XmTextGetString(w)); - XtVaSetValues(WID.OD.geomTangentsScale, XmNvalue, - THRESHOLD((int)CTX.geom.tangents,0,100), NULL); - XmUpdateDisplay(WID.OD.geomTangentsScale); break; - - - /* mesh */ - - case OPTIONS_MESH_SHADING : CTX.mesh.hidden = 1; CTX.mesh.shade = 1; break; - case OPTIONS_MESH_HIDDEN_LINES : CTX.mesh.hidden = 1; CTX.mesh.shade = 0; break; - case OPTIONS_MESH_WIREFRAME : CTX.mesh.hidden = 0; CTX.mesh.shade = 0; break; - case OPTIONS_MESH_VISIBILITY_ENTITY : - CTX.mesh.vis_type = 0; - XtVaSetValues(WID.OD.meshVisibleButt[0], XmNset, CTX.mesh.points?True:False, NULL); - XtVaSetValues(WID.OD.meshVisibleButt[1], XmNset, CTX.mesh.lines?True:False, NULL); - XtVaSetValues(WID.OD.meshVisibleButt[2], XmNset, CTX.mesh.surfaces?True:False, NULL); - XtVaSetValues(WID.OD.meshVisibleButt[3], XmNset, CTX.mesh.volumes?True:False, NULL); - for(i=0;i<4;i++)XmUpdateDisplay(WID.OD.meshVisibleButt[i]); - break; - case OPTIONS_MESH_VISIBILITY_NUMBER : - CTX.mesh.vis_type = 1; - XtVaSetValues(WID.OD.meshVisibleButt[0], XmNset, CTX.mesh.points_num?True:False, NULL); - XtVaSetValues(WID.OD.meshVisibleButt[1], XmNset, CTX.mesh.lines_num?True:False, NULL); - XtVaSetValues(WID.OD.meshVisibleButt[2], XmNset, CTX.mesh.surfaces_num?True:False, NULL); - XtVaSetValues(WID.OD.meshVisibleButt[3], XmNset, CTX.mesh.volumes_num?True:False, NULL); - for(i=0;i<4;i++)XmUpdateDisplay(WID.OD.meshVisibleButt[i]); - break; - case OPTIONS_MESH_POINTS : - if(!CTX.mesh.vis_type) CTX.mesh.points = !CTX.mesh.points; - else CTX.mesh.points_num = !CTX.mesh.points_num; break; - case OPTIONS_MESH_LINES : - if(!CTX.mesh.vis_type) CTX.mesh.lines = !CTX.mesh.lines; - else CTX.mesh.lines_num = !CTX.mesh.lines_num; break; - case OPTIONS_MESH_SURFACES : - if(!CTX.mesh.vis_type) CTX.mesh.surfaces = !CTX.mesh.surfaces; - else CTX.mesh.surfaces_num = !CTX.mesh.surfaces_num; break; - case OPTIONS_MESH_VOLUMES : - if(!CTX.mesh.vis_type) CTX.mesh.volumes = !CTX.mesh.volumes; - else CTX.mesh.volumes_num = !CTX.mesh.volumes_num; break; - case OPTIONS_MESH_DEGRE2 : - (CTX.mesh.degree==2) ? CTX.mesh.degree=1 : CTX.mesh.degree=2; break ; - case OPTIONS_MESH_ANISOTROPIC : - (CTX.mesh.algo==DELAUNAY_OLDALGO) ? - CTX.mesh.algo=DELAUNAY_NEWALGO : - CTX.mesh.algo=DELAUNAY_OLDALGO; break ; - case OPTIONS_MESH_INTERACTIVE : - CTX.mesh.interactive = !CTX.mesh.interactive; break ; - case OPTIONS_MESH_SMOOTHING_SCALE : - XmScaleGetValue(WID.OD.meshSmoothingScale, &e); CTX.mesh.nb_smoothing = e ; - sprintf(label,"%d",CTX.mesh.nb_smoothing); - XtVaSetValues(WID.OD.meshSmoothingText, XmNvalue, label, NULL); - XmUpdateDisplay(WID.OD.meshSmoothingText); break; - case OPTIONS_MESH_SMOOTHING_TEXT : - CTX.mesh.nb_smoothing = atoi(XmTextGetString(w)); - XtVaSetValues(WID.OD.meshSmoothingScale, XmNvalue, - THRESHOLD(CTX.mesh.nb_smoothing,0,100), NULL); - XmUpdateDisplay(WID.OD.meshSmoothingScale); break; - case OPTIONS_MESH_EXPLODE_SCALE : - XmScaleGetValue(WID.OD.meshExplodeScale, &e); CTX.mesh.explode = 0.01*e ; - sprintf(label,"%g",CTX.mesh.explode); - XtVaSetValues(WID.OD.meshExplodeText, XmNvalue, label, NULL); - XmUpdateDisplay(WID.OD.meshExplodeText); break; - case OPTIONS_MESH_EXPLODE_TEXT : - CTX.mesh.explode = atof(XmTextGetString(w)); - XtVaSetValues(WID.OD.meshExplodeScale, XmNvalue, - THRESHOLD((int)(100*CTX.mesh.explode),0,100), NULL); - XmUpdateDisplay(WID.OD.meshExplodeScale); break; - case OPTIONS_MESH_NORMALS_SCALE : - XmScaleGetValue(WID.OD.meshNormalsScale, &e); CTX.mesh.normals = e ; - sprintf(label,"%g",CTX.mesh.normals); - XtVaSetValues(WID.OD.meshNormalsText, XmNvalue, label, NULL); - XmUpdateDisplay(WID.OD.meshNormalsText); break; - case OPTIONS_MESH_NORMALS_TEXT : - CTX.mesh.normals = atof(XmTextGetString(w)); - XtVaSetValues(WID.OD.meshNormalsScale, XmNvalue, - THRESHOLD((int)CTX.mesh.normals,0,100), NULL); - XmUpdateDisplay(WID.OD.meshNormalsScale); break; - case OPTIONS_MESH_ABORT : - CancelMeshThread(); - break; - case OPTIONS_MESH_SELECT_ENTITY : select_by_number = OPTIONS_MESH_SELECT_ENTITY; break; - case OPTIONS_MESH_SELECT_QUALITY : select_by_number = OPTIONS_MESH_SELECT_QUALITY; break; - - /* post */ - - case OPTIONS_POST_LINK_NONE : CTX.post.link = 0; break; - case OPTIONS_POST_LINK_VISIBLE : CTX.post.link = 1; break; - case OPTIONS_POST_LINK_ALL : CTX.post.link = 2; break; - case OPTIONS_POST_ANIM_START: - stop_anim = 0 ; - Set_AnimPixmap(&WID, &PIX, 0) ; - Set_AnimCallback(&WID, 0) ; - anim_time = GetTime(); - while(1){ - if(XtAppPending(XCTX.AppContext)){ - XtAppNextEvent(XCTX.AppContext,&event); - XtDispatchEvent(&event); - if(stop_anim) break ; - } - else{ - if(GetTime() - anim_time > 1.e6*CTX.post.anim_delay){ - anim_time = GetTime(); - MarkAllViewsChanged(2); - Draw(); - } - } - } - break ; - case OPTIONS_POST_ANIM_STOP: - stop_anim = 1; - Set_AnimPixmap(&WID, &PIX, 1) ; - Set_AnimCallback(&WID, 1) ; - break ; - case OPTIONS_POST_ANIM_DELAY: - XmScaleGetValue(WID.OD.postAnimScale, &e); - CTX.post.anim_delay = e ; - break ; - - /* mesh + geom : a changer...*/ - case OPTIONS_GEOM_HIDE_SHOW : - select_by_number=OPTIONS_MESH_SELECT_ENTITY; - /* Fal-through */ - case OPTIONS_MESH_HIDE_SHOW : - c = XmTextGetString(w); - if(select_by_number == OPTIONS_MESH_SELECT_ENTITY){ - if (!strcmp(c,"all") || !strcmp(c,"*")){ - if(SHOW_ALL_ENTITIES){ RemplirEntitesVisibles(0); SHOW_ALL_ENTITIES = 0; } - else { RemplirEntitesVisibles(1); SHOW_ALL_ENTITIES = 1; } - } - else{ - i = atoi(c); - if(EntiteEstElleVisible(i)) ToutesLesEntitesRelatives(i,EntitesVisibles,0); - else ToutesLesEntitesRelatives(i,EntitesVisibles,1); - } - } - else{ - if (!strcmp(c,"all") || !strcmp(c,"*")) - CTX.mesh.gamma_sup = 0.0 ; - else - CTX.mesh.gamma_sup = atof(c); - } - break; - - default : - Msg(WARNING, "Unknown value in OptionsCb : %d", (long int)client_data); - break; - } - -} - diff --git a/Motif/CbOptions.h b/Motif/CbOptions.h deleted file mode 100644 index 086c9dc4a409b5515e2629017e36b26905f09c95..0000000000000000000000000000000000000000 --- a/Motif/CbOptions.h +++ /dev/null @@ -1,115 +0,0 @@ -#ifndef _CB_OPTIONS_H_ -#define _CB_OPTIONS_H_ - -/* options globales */ - -#define OPTIONS_REPLOT 1 -#define OPTIONS_AXES 2 -#define OPTIONS_LITTLE_AXES 3 -#define OPTIONS_XVIEW 4 -#define OPTIONS_YVIEW 5 -#define OPTIONS_ZVIEW 6 -#define OPTIONS_CVIEW 7 -#define OPTIONS_PVIEW 8 -#define OPTIONS_SCALEX 9 -#define OPTIONS_SCALEY 10 -#define OPTIONS_SCALEZ 11 -#define OPTIONS_ROTX 12 -#define OPTIONS_ROTY 13 -#define OPTIONS_ROTZ 14 -#define OPTIONS_TRANX 15 -#define OPTIONS_TRANY 16 -#define OPTIONS_TRANZ 17 -#define OPTIONS_ROTX_LOCKED 18 -#define OPTIONS_ROTY_LOCKED 19 -#define OPTIONS_ROTZ_LOCKED 20 -#define OPTIONS_TRANX_LOCKED 21 -#define OPTIONS_TRANY_LOCKED 22 -#define OPTIONS_TRANZ_LOCKED 23 -#define OPTIONS_SCALEX_LOCKED 24 -#define OPTIONS_SCALEY_LOCKED 25 -#define OPTIONS_SCALEZ_LOCKED 26 -#define OPTIONS_ORTHOGRAPHIC 27 -#define OPTIONS_PERSPECTIVE 28 -#define OPTIONS_LIGHT_X_SCALE 29 -#define OPTIONS_LIGHT_Y_SCALE 30 -#define OPTIONS_LIGHT_Z_SCALE 31 -#define OPTIONS_SHINE_SCALE 32 -#define OPTIONS_ALPHA_BLENDING 33 -#define OPTIONS_DISPLAY_LISTS 34 -#define OPTIONS_FAST_REDRAW 35 -#define OPTIONS_COLOR_SCHEME_SCALE 36 -#define OPTIONS_TRACKBALL 37 - -/* options geometrie */ - -#define OPTIONS_GEOM_CHECK 100 -#define OPTIONS_GEOM_POINTS 101 -#define OPTIONS_GEOM_LINES 102 -#define OPTIONS_GEOM_SURFACES 103 -#define OPTIONS_GEOM_VOLUMES 104 -#define OPTIONS_GEOM_NORMALS_SCALE 105 -#define OPTIONS_GEOM_NORMALS_TEXT 106 -#define OPTIONS_GEOM_TANGENTS_SCALE 107 -#define OPTIONS_GEOM_TANGENTS_TEXT 108 -#define OPTIONS_GEOM_HIDE_SHOW 109 -#define OPTIONS_GEOM_VISIBILITY_ENTITY 110 -#define OPTIONS_GEOM_VISIBILITY_NUMBER 111 - -/* options mesh */ - -#define OPTIONS_MESH_POINTS 200 -#define OPTIONS_MESH_LINES 201 -#define OPTIONS_MESH_SURFACES 202 -#define OPTIONS_MESH_VOLUMES 203 -#define OPTIONS_MESH_HIDDEN_LINES 204 -#define OPTIONS_MESH_SHADING 205 -#define OPTIONS_MESH_WIREFRAME 206 -#define OPTIONS_MESH_NORMALS_SCALE 207 -#define OPTIONS_MESH_NORMALS_TEXT 208 -#define OPTIONS_MESH_TANGENTS_SCALE 209 -#define OPTIONS_MESH_TANGENTS_TEXT 210 -#define OPTIONS_MESH_EXPLODE_SCALE 211 -#define OPTIONS_MESH_EXPLODE_TEXT 212 -#define OPTIONS_MESH_HIDE_SHOW 216 -#define OPTIONS_MESH_ABORT 217 -#define OPTIONS_MESH_SMOOTHING_SCALE 218 -#define OPTIONS_MESH_SMOOTHING_TEXT 219 -#define OPTIONS_MESH_DEGRE2 220 -#define OPTIONS_MESH_ANISOTROPIC 221 -#define OPTIONS_MESH_INTERACTIVE 222 -#define OPTIONS_MESH_VISIBILITY_ENTITY 223 -#define OPTIONS_MESH_VISIBILITY_NUMBER 224 -#define OPTIONS_MESH_SELECT_ENTITY 225 -#define OPTIONS_MESH_SELECT_QUALITY 226 - -/* options post */ - -#define OPTIONS_POST_LINK_NONE 300 -#define OPTIONS_POST_LINK_VISIBLE 301 -#define OPTIONS_POST_LINK_ALL 302 -#define OPTIONS_POST_ANIM_START 303 -#define OPTIONS_POST_ANIM_STOP 304 -#define OPTIONS_POST_ANIM_DELAY 305 - -/* options save */ - -#define OPTIONS_SAVE_AUTO 400 -#define OPTIONS_SAVE_MSH 401 -#define OPTIONS_SAVE_UNV 402 -#define OPTIONS_SAVE_GREF 403 -#define OPTIONS_SAVE_XPM 404 -#define OPTIONS_SAVE_EPS_SIMPLE 405 -#define OPTIONS_SAVE_EPS_COMPLEX 406 -#define OPTIONS_SAVE_EPS_IMAGE 407 -#define OPTIONS_SAVE_GIF 408 -#define OPTIONS_SAVE_GIF_DITHERED 409 -#define OPTIONS_SAVE_GIF_TRANSPARENT 410 -#define OPTIONS_SAVE_GEO 411 -#define OPTIONS_SAVE_JPEG 412 -#define OPTIONS_SAVE_PPM 413 -#define OPTIONS_SAVE_YUV 414 - - - -#endif diff --git a/Motif/CbPost.cpp b/Motif/CbPost.cpp deleted file mode 100644 index e8940c13349d19cb91ff47e44a9bf95b5f4ab4f8..0000000000000000000000000000000000000000 --- a/Motif/CbPost.cpp +++ /dev/null @@ -1,713 +0,0 @@ -// $Id: CbPost.cpp,v 1.8 2001-08-12 13:08:21 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Numeric.h" -#include "Geo.h" -#include "Mesh.h" -#include "Draw.h" -#include "Views.h" -#include "ColorTable.h" -#include "Widgets.h" -#include "Context.h" -#include "XContext.h" -#include "OpenFile.h" - -#include "CbPost.h" -#include "CbGeom.h" -#include "CbMesh.h" -#include "CbColorbar.h" - -extern Widgets_T WID ; -extern Context_T CTX ; -extern XContext_T XCTX ; -extern Mesh *THEM; - -static double ADAPTATION_ERROR=10. ; -static int ADAPTATION_METHOD=3 ; -static int OFFSET_MODE = 0; -static Post_View *CurrentView = NULL; -static long int CurrentViewNumber = -1; -static Post_View *ViewForDialog[10]; - -void MarkAllViewsChanged (int action){ - int i; - char label[256]; - Post_View *v; - - for(i = 0 ; i< List_Nbr(Post_ViewList) ; i++){ - v = (Post_View*)List_Pointer(Post_ViewList, i); - switch(action){ - case 1: // toggle drawing mode - if(v->IntervalsType == DRAW_POST_ISO) - v->IntervalsType = DRAW_POST_DISCRETE ; - else if(v->IntervalsType == DRAW_POST_DISCRETE) - v->IntervalsType = DRAW_POST_CONTINUOUS ; - else - v->IntervalsType = DRAW_POST_ISO ; - break; - case 2: // time step++ - if(v->TimeStep < v->NbTimeStep-1) - v->TimeStep++ ; - else - v->TimeStep = 0 ; - sprintf(label, "%d", v->TimeStep); - XtVaSetValues(WID.PD.timeStepScale, XmNvalue, v->TimeStep, NULL); - XmUpdateDisplay(WID.PD.timeStepScale); - XtVaSetValues(WID.PD.timeStepText, XmNvalue, label, NULL); - XmUpdateDisplay(WID.PD.timeStepText); - break; - case 3: // time step-- - if(v->TimeStep > 0) - v->TimeStep-- ; - else - v->TimeStep = v->NbTimeStep-1 ; - sprintf(label, "%d", v->TimeStep); - XtVaSetValues(WID.PD.timeStepScale, XmNvalue, v->TimeStep, NULL); - XmUpdateDisplay(WID.PD.timeStepScale); - XtVaSetValues(WID.PD.timeStepText, XmNvalue, label, NULL); - XmUpdateDisplay(WID.PD.timeStepText); - break; - default : - break; - } - - v->Changed = 1 ; - } -} - -void SwapViewCb (Widget w, XtPointer client_data, XtPointer call_data){ - Post_View *v ; - - if(!Post_ViewList) return; - - v = (Post_View*)List_Pointer(Post_ViewList,(long int)client_data-1); - - Msg(DEBUG1, "View %d", v->Num); - Msg(DEBUG2, " -> Name '%s'", v->Name); - Msg(DEBUG2, " -> FileName '%s'", v->FileName); - Msg(DEBUG2, " -> DuplicateOf %d", v->DuplicateOf); - Msg(DEBUG3, " -> Links %d", v->Links); - - v->Visible = !v->Visible; - - Draw(); -} - - - -void DuplicateViewCb (Widget w, XtPointer client_data, XtPointer call_data){ - Post_View v, *v1, *v2, *v3 ; - extern void AddViewInUI(int , char *, int); - - if(!Post_ViewList) return; - - v1 = (Post_View*)List_Pointer(Post_ViewList,(long int)client_data-1); - - v2 = BeginView(0); - EndView(v2, 0, v1->FileName, v1->Name); - - if(!v1->DuplicateOf){ - v2->DuplicateOf = v1->Num ; - v1->Links++ ; - } - else{ - v.Num = v1->DuplicateOf ; - if(!(v3 = (Post_View*)List_PQuery(Post_ViewList, &v, fcmpPostViewNum))){ - v2->DuplicateOf = v1->Num ; - v1->Links++ ; - } - else{ - v2->DuplicateOf = v3->Num; - v3->Links++ ; - } - } - - v2->Time = v1->Time; - v2->NbSP = v1->NbSP; v2->SP = v1->SP; - v2->NbVP = v1->NbVP; v2->VP = v1->VP; - v2->NbTP = v1->NbTP; v2->TP = v1->TP; - v2->NbSL = v1->NbSL; v2->SL = v1->SL; - v2->NbVL = v1->NbVL; v2->VL = v1->VL; - v2->NbTL = v1->NbTL; v2->TL = v1->TL; - v2->NbST = v1->NbST; v2->ST = v1->ST; - v2->NbVT = v1->NbVT; v2->VT = v1->VT; - v2->NbTT = v1->NbTT; v2->TT = v1->TT; - v2->NbSS = v1->NbSS; v2->SS = v1->SS; - v2->NbVS = v1->NbVS; v2->VS = v1->VS; - v2->NbTS = v1->NbTS; v2->TS = v1->TS; - v2->ScalarOnly = v1->ScalarOnly; - v2->Min = v1->Min; - v2->Max = v1->Max; - v2->NbTimeStep = v1->NbTimeStep; - - CopyViewOptions(v1, v2); - - AddViewInUI(List_Nbr(Post_ViewList), v2->Name, v2->Num); - Draw(); -} - -static int All = 0; - -void ReloadViewCb (Widget w, XtPointer client_data, XtPointer call_data){ - Post_View *v, tmp ; - char filename[256]; - - if(!Post_ViewList) return; - - v = (Post_View*)List_Pointer(Post_ViewList,(long int)client_data-1); - strcpy(filename, v->FileName); - CopyViewOptions(v, &tmp); - - Post_ViewForceNumber = v->Num ; - FreeView(v); - MergeProblem(filename); - Post_ViewForceNumber = 0 ; - - v = (Post_View*)List_Pointer(Post_ViewList,(long int)client_data-1); - CopyViewOptions(&tmp, v); - - if(!All){ - Draw(); - } -} - -void ReloadAllViewsCb(Widget w, XtPointer client_data, XtPointer call_data){ - int i; - if(!Post_ViewList) return; - All = 1; - for(i = 1 ; i<=List_Nbr(Post_ViewList) ; i++) - ReloadViewCb(NULL, (XtPointer)i, NULL); - All = 0; - Draw(); -} - -/* ------------------------------------------------------------------------ - create a post dialog - ------------------------------------------------------------------------ */ - -void CurrentViewCb (Widget w, XtPointer client_data, XtPointer call_data){ - CurrentViewNumber = (long int)client_data; - CurrentView = (Post_View*)List_Pointer(Post_ViewList, CurrentViewNumber-1); -} - -void PostDialogCb (Widget w, XtPointer client_data, XtPointer call_data){ - double d, sfact; - char label[256]; - int nb, i; - Post_View *v; - - v = CurrentView ; - - /* le slider (gradue en interne de -100 a 100) va de -CTX.lc a +CTX.lc */ - sfact = pow(10.,2.-CTX.lc_order); - - sprintf(label, "\"%s\" (%ld)", v->Name, CurrentViewNumber); - - switch((long int)client_data){ - - /* Toggle Lightning */ - case POST_LIGHT: - v->Light = !v->Light; - v->Changed = 1; - Draw() ; - break; - - /* Toggle Show Elements */ - case POST_ELEMENT: - v->ShowElement = !v->ShowElement; - v->Changed = 1; - Draw() ; - break; - - /* Offset */ - case POST_OFFSET: - ViewForDialog[POST_OFFSET] = v; - XtVaSetValues(WID.PD.offsetDialog, XmNdialogTitle, XmStringCreateSimple(label), NULL); - XtVaSetValues(WID.PD.offsetModeButt[0], XmNset, (OFFSET_MODE==0)?True:False, NULL); - XtVaSetValues(WID.PD.offsetModeButt[1], XmNset, (OFFSET_MODE==1)?True:False, NULL); - for(i=0 ; i<3 ; i++){ - d = (OFFSET_MODE==1)?v->Raise[i]:v->Offset[i] ; - sprintf(label, "%g", d); - XtVaSetValues(WID.PD.offsetText[i], XmNvalue, label, NULL); - XtVaSetValues(WID.PD.offsetScale[i], XmNvalue, THRESHOLD((int)(sfact*d),-100,100), NULL); - } - XtManageChild(WID.PD.offsetDialog); - break; - - /* Time Step */ - case POST_TIME_STEP: - ViewForDialog[POST_TIME_STEP] = v; - XtVaSetValues(WID.PD.timeStepDialog, XmNdialogTitle, XmStringCreateSimple(label), NULL); - XtVaSetValues(WID.PD.timeStepScale, XmNmaximum, v->NbTimeStep-1, XmNvalue, v->TimeStep, NULL); - sprintf(label, "%d", v->TimeStep); - XtVaSetValues(WID.PD.timeStepText, XmNvalue, label, NULL); - XtManageChild(WID.PD.timeStepDialog); - break; - - /* Scale */ - case POST_SCALE: - ViewForDialog[POST_SCALE] = v; - XtVaSetValues(WID.PD.scaleDialog, XmNdialogTitle, XmStringCreateSimple(label), NULL); - - XtVaSetValues(WID.PD.scaleShowButt, XmNset, v->ShowScale?True:False, NULL); - XtVaSetValues(WID.PD.scaleTransButt, XmNset, v->TransparentScale?True:False, NULL); - XtVaSetValues(WID.PD.scaleTimeButt, XmNset, v->ShowTime?True:False, NULL); - - XtVaSetValues(WID.PD.scaleText[0], XmNvalue, v->Format, NULL); - XtSetSensitive(WID.PD.scaleText[0], v->ShowScale?1:0); - XtVaSetValues(WID.PD.scaleText[1], XmNvalue, v->Name, NULL); - XtSetSensitive(WID.PD.scaleText[1], v->ShowScale?1:0); - - XtVaSetValues(WID.PD.scaleRangeButt, XmNset, (v->RangeType==DRAW_POST_CUSTOM)?True:False, NULL); - sprintf(label, v->Format, v->CustomMin); - XtVaSetValues(WID.PD.scaleRangeText[0], XmNvalue, label, NULL); - sprintf(label, v->Format, v->CustomMax); - XtVaSetValues(WID.PD.scaleRangeText[1], XmNvalue, label, NULL); - XtSetSensitive(WID.PD.scaleRangeText[0], (v->RangeType==DRAW_POST_CUSTOM)?1:0); - XtSetSensitive(WID.PD.scaleRangeText[1], (v->RangeType==DRAW_POST_CUSTOM)?1:0); - - XtVaSetValues(WID.PD.scaleTypeButt[0], XmNset,(v->ScaleType==DRAW_POST_LINEAR)?True:False, NULL); - XtVaSetValues(WID.PD.scaleTypeButt[1], XmNset,(v->ScaleType==DRAW_POST_LOGARITHMIC)?True:False, NULL); - - XtVaSetValues(WID.PD.scaleIntervalsButt[0], XmNset, - (v->IntervalsType==DRAW_POST_ISO)?True:False, NULL); - XtVaSetValues(WID.PD.scaleIntervalsButt[1], XmNset, - (v->IntervalsType==DRAW_POST_DISCRETE)?True:False, NULL); - XtVaSetValues(WID.PD.scaleIntervalsButt[2], XmNset, - (v->IntervalsType==DRAW_POST_CONTINUOUS)?True:False, NULL); - XtVaSetValues(WID.PD.scaleIntervalsButt[3], XmNset, - (v->IntervalsType==DRAW_POST_NUMERIC)?True:False, NULL); - XtVaSetValues(WID.PD.scaleIntervalsScale, XmNvalue, THRESHOLD((int)v->NbIso,1,100), NULL); - - sprintf(label, "%d", v->NbIso); - XtVaSetValues(WID.PD.scaleIntervalsText, XmNvalue, label, NULL); - - XtManageChild(WID.PD.scaleDialog); - break; - - /* Color */ - case POST_COLOR: - ViewForDialog[POST_COLOR] = v; - XtVaSetValues(WID.PD.colorDialog, XmNdialogTitle, XmStringCreateSimple(label), NULL); - XtManageChild(WID.PD.colorDialog); - - XSelectInput(XCTX.display, XtWindow(WID.PD.colorDrawingArea), EV_MASK); - ColorBarCreate(XtWindow(WID.PD.colorDrawingArea),255,200); - ColorBarChange(v->Name, - (v->RangeType==DRAW_POST_CUSTOM)?v->CustomMin:v->Min, - (v->RangeType==DRAW_POST_CUSTOM)?v->CustomMax:v->Max, - &v->CT, 1); - ColorBarResizeCb((Widget)NULL, NULL, NULL); // Force resize - ColorBarShow(); - break; - - /* Vector */ - case POST_VECTOR: - ViewForDialog[POST_VECTOR] = v; - XtVaSetValues(WID.PD.vectorDialog, XmNdialogTitle, XmStringCreateSimple(label), NULL); - XtVaSetValues(WID.PD.vectorTypeButt[0], XmNset, (v->ArrowType == DRAW_POST_SEGMENT)?True:False, NULL); - XtVaSetValues(WID.PD.vectorTypeButt[1], XmNset, (v->ArrowType == DRAW_POST_ARROW)?True:False, NULL); - XtVaSetValues(WID.PD.vectorTypeButt[2], XmNset, (v->ArrowType == DRAW_POST_PYRAMID)?True:False, NULL); - XtVaSetValues(WID.PD.vectorTypeButt[3], XmNset, (v->ArrowType == DRAW_POST_CONE)?True:False, NULL); - XtVaSetValues(WID.PD.vectorTypeButt[4], XmNset, - (v->ArrowType == DRAW_POST_DISPLACEMENT)?True:False, NULL); - sprintf(label, "%g", v->ArrowScale); - XtVaSetValues(WID.PD.vectorScaleText, XmNvalue, label, NULL); - XtVaSetValues(WID.PD.vectorScaleScale, XmNvalue, THRESHOLD((int)v->ArrowScale,0,500), NULL); - XtVaSetValues(WID.PD.vectorLocationButt[0], XmNset, - (v->ArrowLocation == DRAW_POST_LOCATE_COG)?True:False, NULL); - XtVaSetValues(WID.PD.vectorLocationButt[1], XmNset, - (v->ArrowLocation == DRAW_POST_LOCATE_VERTEX)?True:False, NULL); - XtSetSensitive(WID.PD.vectorLocationCheck, v->ArrowType==DRAW_POST_DISPLACEMENT?False:True); - XtManageChild(WID.PD.vectorDialog); - break; - - /* Export BGM */ - case POST_EXPORT_BGM: - ViewForDialog[POST_EXPORT_BGM] = v; - strcat(label, " : Export as Background Mesh"); - XtVaSetValues(WID.PD.exportBGMDialog, XmNdialogTitle, XmStringCreateSimple(label), NULL); - d = ErrorInView(v,&nb) ; - sprintf(label, "Options (Current: %d elements, error=%g%%)", nb, d); - XtVaSetValues(WID.PD.exportBGMFrame[1], XmNlabelString, XmStringCreateSimple(label), NULL); - XtManageChild(WID.PD.exportBGMDialog); - break; - - - /* apply BGM */ - case POST_APPLY_BGM : - ViewForDialog[POST_APPLY_BGM] = v; - BGMWithView(v); - break; - - default: - Msg(WARNING, "Unknown Event in PostDialogCb (%d)", (long int)client_data); - break; - } -} - - -/* ------------------------------------------------------------------------ - functions in post dialogs - ------------------------------------------------------------------------ */ - -void ChangeViewParam (Post_View *v, XtPointer client_data, XtPointer call_data) ; - -void PostCb (Widget w, XtPointer client_data, XtPointer call_data){ - int j; - Post_View *v=NULL; - double d; - char *c; - XmString xms; - static int LastTimeStep = 0; - - switch((long int)client_data){ - - case POST_EXPORT_BGM_METHOD_H_ERROR : ADAPTATION_METHOD = 3; break; - case POST_EXPORT_BGM_METHOD_H_ELEMENTS : ADAPTATION_METHOD = 4; break; - case POST_EXPORT_BGM_METHOD_P_ERROR : ADAPTATION_METHOD = 1; break; - case POST_EXPORT_BGM_METHOD_P_ELEMENTS : ADAPTATION_METHOD = 2; break; - case POST_EXPORT_BGM_CONSTRAINT : - v = ViewForDialog[POST_EXPORT_BGM]; - ADAPTATION_ERROR = atof(XmTextGetString(w)); - return ; - case POST_EXPORT_BGM_CREATE : - v = ViewForDialog[POST_EXPORT_BGM]; - XtVaGetValues(w, XmNtextString, &xms, NULL); - XmStringGetLtoR(xms, XmSTRING_DEFAULT_CHARSET, &c); - XmStringFree(xms); - CreateBGM(v, ADAPTATION_METHOD, 1.0, ADAPTATION_ERROR, &d, c); - MergeProblem(c); - Draw(); - return; - case POST_COLOR_REPLOT : - v = ViewForDialog[POST_COLOR]; - ColorBarChange(v->Name, - (v->RangeType==DRAW_POST_CUSTOM)?v->CustomMin:v->Min, - (v->RangeType==DRAW_POST_CUSTOM)?v->CustomMax:v->Max, - &v->CT, 0); - ColorBarShow(); - if(v->CT.ipar[COLORTABLE_CHANGED]){ - v->Changed = 1; - if(CTX.post.link){ - ColorTable_Copy(&v->CT); - for(j=0 ; j< List_Nbr(Post_ViewList) ; j++){ - v = (Post_View*)List_Pointer(Post_ViewList, j); - if(v->Visible || CTX.post.link>1){ - ColorTable_Paste(&v->CT); - v->Changed=1; - } - } - } - } - Draw(); - return; - } - - if(CTX.post.link){ - for(j=0 ; j< List_Nbr(Post_ViewList) ; j++){ - v = (Post_View*)List_Pointer(Post_ViewList, j); - if(v->Visible || CTX.post.link>1) ChangeViewParam(v, client_data, call_data); - } - } - else{ - switch((long int)client_data){ - case POST_OFFSET_TRANSLATE: - case POST_OFFSET_RAISE: - case POST_OFFSET_X_TEXT: - case POST_OFFSET_Y_TEXT: - case POST_OFFSET_Z_TEXT: - case POST_OFFSET_X_SCALE: - case POST_OFFSET_Y_SCALE: - case POST_OFFSET_Z_SCALE: - v = ViewForDialog[POST_OFFSET]; - break; - case POST_TIME_STEP_TEXT: - case POST_TIME_STEP_SCALE: - v = ViewForDialog[POST_TIME_STEP]; - break; - case POST_SCALE_SHOW: - case POST_SCALE_TRANSPARENCY: - case POST_SCALE_TIME: - case POST_SCALE_FORMAT: - case POST_SCALE_LABEL: - case POST_SCALE_MIN: - case POST_SCALE_MAX: - case POST_SCALE_TYPE_LIN: - case POST_SCALE_TYPE_LOG: - case POST_SCALE_FORCE_RANGE: - case POST_SCALE_INTERVALS_TYPE_ISO : - case POST_SCALE_INTERVALS_TYPE_DISCRETE : - case POST_SCALE_INTERVALS_TYPE_CONTINUOUS: - case POST_SCALE_INTERVALS_TYPE_NUMERIC: - case POST_SCALE_INTERVALS_TEXT: - case POST_SCALE_INTERVALS_SCALE: - v = ViewForDialog[POST_SCALE]; - break; - case POST_VECTOR_TYPE_SEGMENT: - case POST_VECTOR_TYPE_ARROW: - case POST_VECTOR_TYPE_PYRAMID: - case POST_VECTOR_TYPE_CONE: - case POST_VECTOR_TYPE_DISPLACEMENT: - case POST_VECTOR_SCALE_TEXT: - case POST_VECTOR_SCALE_SCALE: - case POST_VECTOR_LOCATION_COG: - case POST_VECTOR_LOCATION_VERTEX: - v = ViewForDialog[POST_VECTOR]; - break; - default : - Msg(WARNING, "Unknown Event in PostCb"); - break; - } - ChangeViewParam(v, client_data, call_data); - } - - - if((long int)client_data == POST_TIME_STEP_SCALE){ - if(LastTimeStep != v->TimeStep){ - LastTimeStep = v->TimeStep; - Draw(); - } - } - -} - -void ChangeViewParam (Post_View *v, XtPointer client_data, XtPointer call_data){ - double d, sfact; - char *c, label[256]; - int i; - - /* le slider (gradue en interne de -100 a 100) va de -CTX.lc a +CTX.lc */ - sfact = pow(10.,2.-CTX.lc_order); - - switch((long int)client_data){ - - /* Offset */ - case POST_OFFSET_TRANSLATE: - OFFSET_MODE = 0; - for(i=0 ; i<3 ; i++){ - sprintf(label, "%g", v->Offset[i]); - XtVaSetValues(WID.PD.offsetText[i], XmNvalue, label, NULL); - XtVaSetValues(WID.PD.offsetScale[i], XmNvalue, - THRESHOLD((int)(sfact*v->Offset[i]),-100,100), NULL); - XmUpdateDisplay(WID.PD.offsetText[i]); - XmUpdateDisplay(WID.PD.offsetScale[i]); - } - break; - case POST_OFFSET_RAISE: - OFFSET_MODE = 1; - for(i=0 ; i<3 ; i++){ - sprintf(label, "%g", v->Raise[i]); - XtVaSetValues(WID.PD.offsetText[i], XmNvalue, label, NULL); - XtVaSetValues(WID.PD.offsetScale[i], XmNvalue, - THRESHOLD((int)(sfact*v->Raise[i]),-100,100), NULL); - XmUpdateDisplay(WID.PD.offsetText[i]); - XmUpdateDisplay(WID.PD.offsetScale[i]); - } - break; - case POST_OFFSET_X_TEXT: - d = atof(XmTextGetString(WID.PD.offsetText[0])); - OFFSET_MODE ? (v->Raise[0] = d) : (v->Offset[0] = d); - XtVaSetValues(WID.PD.offsetScale[0], XmNvalue, THRESHOLD((int)(sfact*d),-100,100), NULL); - XmUpdateDisplay(WID.PD.offsetScale[0]); - v->Changed = 1; - break; - case POST_OFFSET_Y_TEXT: - d = atof(XmTextGetString(WID.PD.offsetText[1])); - OFFSET_MODE ? (v->Raise[1] = d) : (v->Offset[1] = d); - XtVaSetValues(WID.PD.offsetScale[1], XmNvalue, THRESHOLD((int)(sfact*d),-100,100), NULL); - XmUpdateDisplay(WID.PD.offsetScale[1]); - v->Changed = 1; - break; - case POST_OFFSET_Z_TEXT: - d = atof(XmTextGetString(WID.PD.offsetText[2])); - OFFSET_MODE ? (v->Raise[2] = d) : (v->Offset[2] = d); - XtVaSetValues(WID.PD.offsetScale[2], XmNvalue, THRESHOLD((int)(sfact*d),-100,100), NULL); - XmUpdateDisplay(WID.PD.offsetScale[2]); - v->Changed = 1; - break; - case POST_OFFSET_X_SCALE: - XmScaleGetValue (WID.PD.offsetScale[0], &i); - d = i/sfact ; - sprintf(label, "%g", d); - OFFSET_MODE ? (v->Raise[0] = d) : (v->Offset[0] = d); - XtVaSetValues(WID.PD.offsetText[0],XmNvalue, label, NULL); - XmUpdateDisplay(WID.PD.offsetText[0]); - v->Changed = 1; - break; - case POST_OFFSET_Y_SCALE: - XmScaleGetValue (WID.PD.offsetScale[1], &i); - d = i/sfact ; - sprintf(label, "%g",d); - OFFSET_MODE ? (v->Raise[1]) = d : (v->Offset[1] = d); - XtVaSetValues(WID.PD.offsetText[1],XmNvalue, label, NULL); - XmUpdateDisplay(WID.PD.offsetText[1]); - v->Changed = 1; - break; - case POST_OFFSET_Z_SCALE: - XmScaleGetValue (WID.PD.offsetScale[2], &i); - d = i/sfact ; - sprintf(label, "%g", d); - OFFSET_MODE ? (v->Raise[2] = d) : (v->Offset[2] = d); - XtVaSetValues(WID.PD.offsetText[2],XmNvalue, label, NULL); - XmUpdateDisplay(WID.PD.offsetText[2]); - v->Changed = 1; - break; - - /* Time Step */ - case POST_TIME_STEP_TEXT: - i = atoi(XmTextGetString(WID.PD.timeStepText)); - if(i < 0) - v->TimeStep = 0; - else if(i > v->NbTimeStep-1) - v->TimeStep = v->NbTimeStep-1; - else - v->TimeStep = i; - XtVaSetValues(WID.PD.timeStepScale, XmNvalue, v->TimeStep, NULL); - XmUpdateDisplay(WID.PD.timeStepScale); - v->Changed = 1; - break; - case POST_TIME_STEP_SCALE: - XmScaleGetValue (WID.PD.timeStepScale, &i); - if(i < 0) - v->TimeStep = 0; - else if(i > v->NbTimeStep-1) - v->TimeStep = v->NbTimeStep-1; - else - v->TimeStep = i; - sprintf(label, "%d", v->TimeStep); - XtVaSetValues(WID.PD.timeStepText, XmNvalue, label, NULL); - XmUpdateDisplay(WID.PD.timeStepText); - v->Changed = 1; - break; - - - /* Scale */ - case POST_SCALE_SHOW: - v->ShowScale = !v->ShowScale; - XtSetSensitive(WID.PD.scaleText[0], v->ShowScale?1:0); - XtSetSensitive(WID.PD.scaleText[1], v->ShowScale?1:0); - break; - case POST_SCALE_TRANSPARENCY: - v->TransparentScale = !v->TransparentScale; - break; - case POST_SCALE_TIME: - v->ShowTime = !v->ShowTime; - break; - case POST_SCALE_FORMAT: - c = XmTextGetString(WID.PD.scaleText[0]); strcpy(v->Format,c); - break; - case POST_SCALE_LABEL: - c = XmTextGetString(WID.PD.scaleText[1]); strcpy(v->Name,c); - break; - case POST_SCALE_MIN: - v->CustomMin = atof(XmTextGetString(WID.PD.scaleRangeText[0])); - if(v->RangeType==DRAW_POST_CUSTOM) v->Changed = 1; - break; - case POST_SCALE_MAX: - v->CustomMax = atof(XmTextGetString(WID.PD.scaleRangeText[1])); - if(v->RangeType==DRAW_POST_CUSTOM) v->Changed = 1; - break; - case POST_SCALE_TYPE_LIN: - v->ScaleType = DRAW_POST_LINEAR; - v->Changed = 1; - break; - case POST_SCALE_TYPE_LOG: - v->ScaleType = DRAW_POST_LOGARITHMIC; - v->Changed = 1; - break; - case POST_SCALE_FORCE_RANGE: - (v->RangeType == DRAW_POST_DEFAULT) ? - (v->RangeType=DRAW_POST_CUSTOM) : (v->RangeType=DRAW_POST_DEFAULT); - XtSetSensitive(WID.PD.scaleRangeText[0], (v->RangeType==DRAW_POST_CUSTOM)?1:0); - XtSetSensitive(WID.PD.scaleRangeText[1], (v->RangeType==DRAW_POST_CUSTOM)?1:0); - v->Changed = 1; - break; - case POST_SCALE_INTERVALS_TYPE_ISO : - v->IntervalsType = DRAW_POST_ISO; - v->Changed = 1; - break; - case POST_SCALE_INTERVALS_TYPE_DISCRETE : - v->IntervalsType = DRAW_POST_DISCRETE; - v->Changed = 1; - break; - case POST_SCALE_INTERVALS_TYPE_CONTINUOUS: - v->IntervalsType = DRAW_POST_CONTINUOUS; - v->Changed = 1; - break; - case POST_SCALE_INTERVALS_TYPE_NUMERIC: - v->IntervalsType = DRAW_POST_NUMERIC; - v->Changed = 1; - break; - case POST_SCALE_INTERVALS_TEXT: - v->NbIso = atoi(XmTextGetString(WID.PD.scaleIntervalsText)); - XtVaSetValues(WID.PD.scaleIntervalsScale, XmNvalue, THRESHOLD((int)v->NbIso,1,100), NULL); - XmUpdateDisplay(WID.PD.scaleIntervalsScale); - v->Changed = 1; - break; - case POST_SCALE_INTERVALS_SCALE: - XmScaleGetValue(WID.PD.scaleIntervalsScale, &v->NbIso); - sprintf(label, "%d", v->NbIso); - XtVaSetValues(WID.PD.scaleIntervalsText, XmNvalue, label, NULL); - XmUpdateDisplay(WID.PD.scaleIntervalsText); - v->Changed = 1; - break; - - /* Vector */ - case POST_VECTOR_TYPE_SEGMENT: - v->ArrowType = DRAW_POST_SEGMENT; - XtSetSensitive(WID.PD.vectorLocationCheck, True); - v->Changed = 1; - break; - case POST_VECTOR_TYPE_ARROW: - v->ArrowType = DRAW_POST_ARROW; - XtSetSensitive(WID.PD.vectorLocationCheck, True); - v->Changed = 1; - break; - case POST_VECTOR_TYPE_PYRAMID: - v->ArrowType = DRAW_POST_PYRAMID; - XtSetSensitive(WID.PD.vectorLocationCheck, True); - v->Changed = 1; - break; - case POST_VECTOR_TYPE_CONE: - v->ArrowType = DRAW_POST_CONE; - XtSetSensitive(WID.PD.vectorLocationCheck, True); - v->Changed = 1; - break; - case POST_VECTOR_TYPE_DISPLACEMENT: - v->ArrowType = DRAW_POST_DISPLACEMENT; - XtSetSensitive(WID.PD.vectorLocationCheck, False); - v->Changed = 1; - break; - case POST_VECTOR_SCALE_TEXT: - v->ArrowScale = atof(XmTextGetString(WID.PD.vectorScaleText)); - XtVaSetValues(WID.PD.vectorScaleScale, XmNvalue, THRESHOLD((int)v->ArrowScale,0,500), NULL); - XmUpdateDisplay(WID.PD.vectorScaleScale); - v->Changed = 1; - break; - case POST_VECTOR_SCALE_SCALE: - XmScaleGetValue(WID.PD.vectorScaleScale, &i); - v->ArrowScale = (double)i; - sprintf(label, "%g", v->ArrowScale); - XtVaSetValues(WID.PD.vectorScaleText, XmNvalue, label, NULL); - XmUpdateDisplay(WID.PD.vectorScaleText); - v->Changed = 1; - break; - case POST_VECTOR_LOCATION_COG: - v->ArrowLocation = DRAW_POST_LOCATE_COG; - v->Changed = 1; - break; - case POST_VECTOR_LOCATION_VERTEX: - v->ArrowLocation = DRAW_POST_LOCATE_VERTEX; - v->Changed = 1; - break; - - default: - Msg(WARNING, "Unknown Event in PostCb (%d)", (long int)client_data); - break; - - } - -} - diff --git a/Motif/CbPost.h b/Motif/CbPost.h deleted file mode 100644 index d5b135fb6b9e26514e03fea8f69ebc00e1ce7a14..0000000000000000000000000000000000000000 --- a/Motif/CbPost.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef _CB_POST_H_ -#define _CB_POST_H_ - -#define POST_LINK 1 -#define POST_OFFSET 2 -#define POST_TIME_STEP 3 -#define POST_SCALE 4 -#define POST_VECTOR 5 -#define POST_EXPORT_BGM 6 -#define POST_APPLY_BGM 7 -#define POST_LIGHT 8 -#define POST_COLOR 9 -#define POST_ELEMENT 10 - -#define POST_OFFSET_TRANSLATE 403 -#define POST_OFFSET_RAISE 404 -#define POST_OFFSET_X_TEXT 405 -#define POST_OFFSET_Y_TEXT 406 -#define POST_OFFSET_Z_TEXT 407 -#define POST_OFFSET_X_SCALE 408 -#define POST_OFFSET_Y_SCALE 409 -#define POST_OFFSET_Z_SCALE 410 - -#define POST_TIME_STEP_TEXT 417 -#define POST_TIME_STEP_SCALE 418 - -#define POST_SCALE_SHOW 421 -#define POST_SCALE_TRANSPARENCY 422 -#define POST_SCALE_FORMAT 423 -#define POST_SCALE_LABEL 424 -#define POST_SCALE_FORCE_RANGE 425 -#define POST_SCALE_MIN 426 -#define POST_SCALE_MAX 427 -#define POST_SCALE_TYPE_LIN 428 -#define POST_SCALE_TYPE_LOG 429 -#define POST_SCALE_INTERVALS_TYPE_ISO 430 -#define POST_SCALE_INTERVALS_TYPE_DISCRETE 431 -#define POST_SCALE_INTERVALS_TYPE_CONTINUOUS 432 -#define POST_SCALE_INTERVALS_TYPE_NUMERIC 433 -#define POST_SCALE_INTERVALS_SCALE 434 -#define POST_SCALE_INTERVALS_TEXT 435 -#define POST_SCALE_TIME 436 - -#define POST_COLOR_REPLOT 440 - -#define POST_VECTOR_TYPE_SEGMENT 450 -#define POST_VECTOR_TYPE_ARROW 451 -#define POST_VECTOR_TYPE_PYRAMID 452 -#define POST_VECTOR_TYPE_CONE 453 -#define POST_VECTOR_TYPE_DISPLACEMENT 454 -#define POST_VECTOR_SCALE_TEXT 455 -#define POST_VECTOR_SCALE_SCALE 456 -#define POST_VECTOR_LOCATION_COG 457 -#define POST_VECTOR_LOCATION_VERTEX 458 - -#define POST_EXPORT_BGM_METHOD_H_ERROR 461 -#define POST_EXPORT_BGM_METHOD_H_ELEMENTS 462 -#define POST_EXPORT_BGM_METHOD_P_ERROR 463 -#define POST_EXPORT_BGM_METHOD_P_ELEMENTS 464 -#define POST_EXPORT_BGM_CONSTRAINT 465 -#define POST_EXPORT_BGM_CREATE 466 - -void MarkAllViewsChanged (int action); - -#endif diff --git a/Motif/Geometry.cpp b/Motif/Geometry.cpp deleted file mode 100644 index 45a436971be88ccbe9298bf79374e28c6aa127e1..0000000000000000000000000000000000000000 --- a/Motif/Geometry.cpp +++ /dev/null @@ -1,825 +0,0 @@ -// $Id: Geometry.cpp,v 1.1 2001-01-08 08:20:10 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Context.h" -#include "XContext.h" -#include "Widgets.h" - -extern Context_T CTX ; -extern XContext_T XCTX ; - -#define WINDOW_SHADOW 1 -#define SHADOW 2 -#define IN_FRAME_TYPE XmSHADOW_ETCHED_IN -#define IN_FRAME_SHADOW 2 -#define TITLE_SPACE 0 -#define TITLE_ALIGN XmALIGNMENT_WIDGET_TOP -#define DIALOG_W 6 -#define DIALOG_H 4 - - -/* - XmNchildVerticalAlignment : - CENTER, WIDGET_TOP, WIDGET_BOTTOM, BASELINE_BOTTOM, BASELINE_TOP - - XmNshadowType : - ETCHED_IN, ETCHED_OUT, IN, OUT -*/ - -/* ------------------------------------------------------------------------ - MENU WINDOW - ------------------------------------------------------------------------ */ - -void ForceGeometry_M (Widgets_T *w){ - int n; - - XtVaSetValues(w->M.containerWin, - XmNmenuBar, w->M.menuBar, - NULL); - - XtVaSetValues(w->M.menuBar, - XmNmenuHelpWidget, w->M.helpCascade, - NULL); - - XtVaSetValues(w->M.menuFrame, - XmNshadowType, XmSHADOW_OUT, - XmNshadowThickness, WINDOW_SHADOW, - NULL); - - XtVaSetValues(w->M.menuForm, - XmNfractionBase, 100, - XmNmarginWidth, 3, - XmNmarginHeight, 3, - NULL); - - XtVaSetValues(w->M.modButt, - XmNmarginHeight, 5, - XmNmarginWidth, 2, - XmNtopAttachment, XmATTACH_FORM, - XmNleftAttachment, XmATTACH_WIDGET, - XmNleftWidget, w->M.navigButt[0], - XmNrightAttachment, XmATTACH_WIDGET, - XmNrightWidget, w->M.navigButt[1], - NULL); - - XtVaSetValues(w->M.navigButt[0], - XmNshadowThickness, 0, - XmNwidth, 20, - XmNleftAttachment, XmATTACH_FORM, - NULL); - - XtVaSetValues(w->M.navigButt[1], - XmNshadowThickness, 0, - XmNwidth, 20, - XmNrightAttachment, XmATTACH_FORM, - NULL); - - XtVaSetValues(w->M.defaultButt, - XmNmarginHeight, 5, - XmNtopAttachment, XmATTACH_WIDGET, - XmNtopWidget, w->M.modButt, - XmNleftAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_FORM, - NULL); - - XtVaSetValues(w->M.pushButt[0], - XmNshadowThickness, SHADOW, - XmNmarginHeight, 5, - XmNtopAttachment, XmATTACH_WIDGET, - XmNtopWidget, w->M.modButt, - XmNleftAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_FORM, - NULL); - - XtVaSetValues(w->M.toggleButt[0], - XmNshadowThickness, SHADOW, - XmNmarginHeight, 3, - XmNtopAttachment, XmATTACH_WIDGET, - XmNtopWidget, w->M.modButt, - XmNleftAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_FORM, - NULL); - - for(n=1 ; n<NB_BUTT_MAX ; n++){ - XtVaSetValues(w->M.pushButt[n], - XmNtopAttachment, XmATTACH_WIDGET, - XmNtopWidget, w->M.pushButt[n-1], - XmNleftAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_FORM, - XmNshadowThickness, SHADOW, - XmNmarginHeight, 5, - NULL); - - XtVaSetValues(w->M.toggleButt[n], - XmNtopAttachment, XmATTACH_WIDGET, - XmNtopWidget, w->M.toggleButt[n-1], - XmNleftAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_FORM, - XmNshadowThickness, SHADOW, - XmNmarginHeight, 3, - NULL); - } - -} - -/* ------------------------------------------------------------------------ - GRAPHIC WINDOW - ------------------------------------------------------------------------ */ - -void ForceGeometry_G (Widgets_T *w){ - int i; - - XtVaSetValues(w->G.glw, - XmNtopAttachment, XmATTACH_FORM, - XmNleftAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_WIDGET, - XmNbottomWidget, w->G.bottomForm, - NULL); - - if(CTX.overlay) - XtVaSetValues(w->G.glo, - XmNtopAttachment, XmATTACH_FORM, - XmNleftAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_WIDGET, - XmNbottomWidget, w->G.bottomForm, - NULL); - - XtVaSetValues(w->G.bottomForm, - XmNleftAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_FORM, - XmNmarginHeight, 2, - XmNmarginWidth, 1, - XmNshadowThickness, WINDOW_SHADOW, - XmNfractionBase, 100, - NULL); - - XtVaSetValues(w->G.Butt[0], - XmNtopAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_FORM, - XmNleftAttachment, XmATTACH_FORM, - XmNshadowThickness, 0, - XmNmarginHeight, 1, - NULL); - - for(i=1 ; i<7 ; i++) { - XtVaSetValues(w->G.Butt[i], - XmNtopAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_FORM, - XmNleftAttachment, XmATTACH_WIDGET, - XmNleftWidget, w->G.Butt[i-1], - XmNshadowThickness, 0, - XmNmarginHeight, 1, - NULL); - } - - XtVaSetValues(w->G.textForm, - XmNbottomAttachment, XmATTACH_FORM, - XmNtopAttachment, XmATTACH_FORM, - XmNleftAttachment, XmATTACH_WIDGET, - XmNleftWidget, w->G.Butt[6], - XmNrightAttachment, XmATTACH_FORM, - XmNfractionBase, 300, - NULL); - - XtVaSetValues(w->G.selectLabel, - XmNtopAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_FORM, - XmNleftAttachment, XmATTACH_POSITION, - XmNleftPosition, 2, - XmNrightAttachment, XmATTACH_POSITION, - XmNrightPosition, 90, - XmNmarginHeight, 0, - NULL); - - XtVaSetValues(w->G.infoLabel, - XmNtopAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_FORM, - XmNleftAttachment, XmATTACH_POSITION, - XmNleftPosition, 92, - XmNrightAttachment, XmATTACH_POSITION, - XmNrightPosition, 180, - XmNmarginHeight, 0, - NULL); - - XtVaSetValues(w->G.statusLabel, - XmNtopAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_FORM, - XmNleftAttachment, XmATTACH_POSITION, - XmNleftPosition, 182, - XmNrightAttachment, XmATTACH_POSITION, - XmNrightPosition, 298, - XmNmarginHeight, 0, - NULL); - -} - -/* ------------------------------------------------------------------------ - COMMAND WINDOW - ------------------------------------------------------------------------ */ - -void ForceGeometry_C (Widgets_T *w){ - - XtVaSetValues(w->C.command, - XmNshadowThickness, WINDOW_SHADOW, - XmNshadowType, XmSHADOW_OUT, - XmNmarginHeight, 2, - XmNmarginWidth, 2, - NULL); - - XtVaSetValues(w->C.commandList, - XmNshadowThickness, SHADOW, - XmNmarginHeight, 0, - NULL); - - XtVaSetValues(w->C.commandText, - XmNshadowThickness, SHADOW, - XmNmarginHeight, 4, - NULL); -} - -/* ------------------------------------------------------------------------ - DIALOGS - ------------------------------------------------------------------------ */ - -void ForceGeometry_ED (Widgets_T *w){ -} - -void ForceGeometry_FD (Widgets_T *w){ - - XtVaSetValues(w->FD.openDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - XtVaSetValues(w->FD.mergeDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - XtVaSetValues(w->FD.saveAsDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - XtVaSetValues(w->FD.saveAsFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->FD.saveAsFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->FD.saveAsRowCol, - XmNmarginWidth, 0, - NULL); - - XtVaSetValues(w->FD.saveOptionsAsDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - -} - -void ForceGeometry_OD (Widgets_T *w){ - int i,j; - - XtVaSetValues(w->OD.geomDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - XtVaSetValues(w->OD.geomVisibleFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.geomVisibleFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->OD.geomVisibleByNumFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.geomVisibleByNumFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->OD.geomNormalsFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.geomNormalsFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->OD.geomTangentsFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.geomTangentsFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->OD.meshDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - XtVaSetValues(w->OD.meshAlgoFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.meshAlgoFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->OD.meshSmoothingFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.meshSmoothingFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->OD.meshVisibleFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.meshVisibleFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->OD.meshVisibleByNumFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.meshVisibleByNumFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->OD.meshAspectFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.meshAspectFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->OD.meshExplodeFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.meshExplodeFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->OD.meshNormalsFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.meshNormalsFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->OD.postDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - XtVaSetValues(w->OD.postLinkFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.postLinkFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->OD.postAnimFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.postAnimFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->OD.miscDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - XtVaSetValues(w->OD.miscMiscFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.miscMiscFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->OD.miscColorSchemeFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.miscColorSchemeFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->OD.miscProjFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.miscProjFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->OD.miscLightFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.miscLightFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->OD.miscShineFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.miscShineFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->OD.viewportDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - for(i=0 ; i<3 ; i++){ - XtVaSetValues(w->OD.viewportFrame[0][i], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.viewportFrame[1][i], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - for(j=0 ; j<3 ; j++){ - XtVaSetValues(w->OD.viewportLockButt[j][i], - XmNmarginHeight, 0, - NULL); - } - } - - XtVaSetValues(w->OD.infoDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - for(i=0 ; i<3 ; i++){ - XtVaSetValues(w->OD.infoFrame[0][i], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->OD.infoFrame[1][i], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - } - -} - -void ForceGeometry_HD (Widgets_T *w){ - - XtVaSetValues(w->HD.keysDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); -} - -void ForceGeometry_GD (Widgets_T *w){ - int i; - - XtVaSetValues(w->GD.paramDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - for(i=0 ; i<2 ; i++){ - XtVaSetValues(w->GD.paramFrame[0][i], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->GD.paramFrame[1][i], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - } - - - XtVaSetValues(w->GD.pointDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - for(i=0 ; i<2 ; i++){ - XtVaSetValues(w->GD.pointFrame[0][i], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->GD.pointFrame[1][i], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - } - - XtVaSetValues(w->GD.rotDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - for(i=0 ; i<3 ; i++){ - XtVaSetValues(w->GD.rotFrame[0][i], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->GD.rotFrame[1][i], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - } - - XtVaSetValues(w->GD.tranDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - XtVaSetValues(w->GD.tranFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->GD.tranFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->GD.dilatDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - for(i=0 ; i<2 ; i++){ - XtVaSetValues(w->GD.dilatFrame[0][i], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->GD.dilatFrame[1][i], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - } - - XtVaSetValues(w->GD.symmDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - XtVaSetValues(w->GD.symmFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->GD.symmFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - -} - -void ForceGeometry_MD (Widgets_T *w){ - int i; - - XtVaSetValues(w->MD.charLengthDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - XtVaSetValues(w->MD.charLengthFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->MD.charLengthFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->MD.trsfLineDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - for(i=0 ; i<2 ; i++){ - XtVaSetValues(w->MD.trsfLineFrame[0][i], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - XtVaSetValues(w->MD.trsfLineFrame[1][i], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - } - - XtVaSetValues(w->MD.trsfVolumeDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - XtVaSetValues(w->MD.trsfVolumeFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->MD.trsfVolumeFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - -} - -void ForceGeometry_PD (Widgets_T *w){ - int i; - - - XtVaSetValues(w->PD.offsetDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - for(i=0 ; i<4 ; i++){ - XtVaSetValues(w->PD.offsetFrame[0][i], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - XtVaSetValues(w->PD.offsetFrame[1][i], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - } - - XtVaSetValues(w->PD.timeStepDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - XtVaSetValues(w->PD.timeStepFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - XtVaSetValues(w->PD.timeStepFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->PD.scaleDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - for(i=0 ; i<3 ; i++){ - XtVaSetValues(w->PD.scaleFrame[0][i], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - XtVaSetValues(w->PD.scaleFrame[1][i], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - } - - - XtVaSetValues(w->PD.colorDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - XtVaSetValues(w->PD.colorFrame[0][0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - XtVaSetValues(w->PD.colorFrame[1][0], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - XtVaSetValues(w->PD.colorDrawingArea, - XmNtopAttachment, XmATTACH_FORM, - XmNleftAttachment, XmATTACH_FORM, - XmNrightAttachment, XmATTACH_FORM, - XmNbottomAttachment, XmATTACH_FORM, - XmNwidth, 255, - XmNheight, 200, - NULL); - - - XtVaSetValues(w->PD.vectorDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - for(i=0 ; i<3 ; i++){ - XtVaSetValues(w->PD.vectorFrame[0][i], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - XtVaSetValues(w->PD.vectorFrame[1][i], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - } - - XtVaSetValues(w->PD.exportBGMDialog, - XmNmarginHeight, DIALOG_H, - XmNmarginWidth, DIALOG_W, - NULL); - - XtVaSetValues(w->PD.exportBGMFrame[0], - XmNshadowType, IN_FRAME_TYPE, - XmNshadowThickness, IN_FRAME_SHADOW, - NULL); - - XtVaSetValues(w->PD.exportBGMFrame[1], - XmNchildHorizontalSpacing, TITLE_SPACE, - XmNchildVerticalAlignment, TITLE_ALIGN, - NULL); - - XtVaSetValues(w->PD.exportBGMText, - XmNmarginHeight, 2, - NULL); - -} - - -/* ------------------------------------------------------------------------ - F o r c e G e o m e t r y - ------------------------------------------------------------------------ */ - -void ForceGeometry (Widgets_T *w){ - ForceGeometry_M(w) ; /* menu win */ - ForceGeometry_G(w) ; /* graphic win */ - if(CTX.command_win) ForceGeometry_C(w) ; /* command win */ - - ForceGeometry_ED(w); /* error dialogs */ - ForceGeometry_FD(w); /* file dialogs */ - ForceGeometry_OD(w); /* option dialogs */ - ForceGeometry_HD(w); /* help dialogs */ - ForceGeometry_GD(w); /* geometry dialogs */ - ForceGeometry_MD(w); /* mesh dialogs */ - ForceGeometry_PD(w); /* post dialogs */ -} - diff --git a/Motif/Geometry.h b/Motif/Geometry.h deleted file mode 100644 index 9793884fc83258996240a4f5bb8d79c7683c22c3..0000000000000000000000000000000000000000 --- a/Motif/Geometry.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _GEOMETRY_H_ -#define _GEOMETRY_H_ - -void ForceGeometry(Widgets_T *w); - -#endif diff --git a/Motif/Help.h b/Motif/Help.h deleted file mode 100644 index 813b0127cb83c87b6216cf27e3f2aa40acfee106..0000000000000000000000000000000000000000 --- a/Motif/Help.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef _HELP_H_ -#define _HELP_H_ - -static char txt_help[]= -"\n" -" (x) stands for \"press x\"\n" -" (x-y) stands for \"press x and, keeping it down, press y\"\n" -" (x-y-z) stands for \"press x and, keeping it down, press y and z\"\n" -" C, M and S stand for Control, Meta (or Alt) and Shift\n" -"\n" -"MOUSE:\n" -"\n" -" move . highlight the elementary geometrical entity \n" -" currently under the mouse pointer and display\n" -" its properties in the status bar\n" -" . size a rubber zoom started with (C-left)\n" -"\n" -" (left) . rotate\n" -" . accept a rubber zoom started by (C-left)\n" -" (middle) . zoom (isotropic)\n" -" . cancel a rubber zoom\n" -" (right) . pan\n" -" . cancel a rubber zoom\n" -" . pop up menu on module name\n" -" . pop up menu on post-processing view button\n" -"\n" -" (C-left) start (anisotropic) rubber zoom\n" -" (C-middle) orthogonalize display\n" -" (C-right) reset viewpoint to default\n" -"\n" -"KEYBOARD:\n" -"\n" -"No modifier: basic module interaction\n" -"\n" -" (0) reload input file\n" -" (1), (F1) mesh curves\n" -" (2), (F2) mesh surfaces\n" -" (3), (F3) mesh volumes\n" -" (g) go to geometry module\n" -" (m) go to mesh module\n" -" (p) go to post processor module\n" -"\n" -"Control modifier: file menu\n" -"\n" -" (C-q) quit\n" -" (C-o) hide/show open file dialog\n" -" (C-p) hide/show save/print dialog\n" -" (C-m) hide/show merge file dialog\n" -" (C-s) quick mesh save\n" -"\n" -"Shift modifier: pop up option menus\n" -"\n" -" (S-g) hide/show geometry options\n" -" (S-i) hide/show statistics window\n" -" (S-m) hide/show mesh options\n" -" (S-o) hide/show miscellaneous options\n" -" (S-p) hide/show post-processing general options\n" -" (S-v) hide/show viewpoint options\n" -"\n" -"Meta (Alt) modifier: quick shortcuts (no pop up)\n" -"\n" -" (M-a) hide/show small axes\n" -" (M-S-a) hide/show big moving axes\n" -" (M-b) hide/show all post processing scales\n" -" (M-c) alternate between predefined color schemes\n" -" (M-d) alternate between mesh wire frame, hidden lines\n" -" and shading modes\n" -" (M-f) toggle redraw mode (fast/full)\n" -" (M-h) toggle highlight mode\n" -" (M-l) hide/show geometry lines\n" -" (M-S-l) hide/show mesh lines\n" -" (M-m) toggle visibility of all mesh entities\n" -" (M-o) change projection mode\n" -" (M-p) hide/show geometry points\n" -" (M-S-p) hide/show mesh points\n" -" (M-s) hide/show geometry surfaces\n" -" (M-S-s) hide/show mesh surfaces\n" -" (M-t) alternate intervals mode for all post-processing\n" -" views\n" -" (M-v) hide/show geometry volumes\n" -" (M-S-v) hide/show mesh volumes\n" -" (M-x) set X view\n" -" (M-y) set Y view\n" -" (M-z) set Z view\n" -"\n" -; - - -#endif diff --git a/Motif/Info.h b/Motif/Info.h deleted file mode 100644 index 6ce1718e8618777e3a30a1ad413ab6bf3491efe1..0000000000000000000000000000000000000000 --- a/Motif/Info.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef _INFO_H_ -#define _INFO_H_ - -static char *txt_info [] = - { - /* Geometry */ - "Points", - "Curves", - "Surfaces", - "Volumes", - - /* Mesh */ - "Nodes on Curves", - "Nodes on Surfaces", - "Nodes in Volumes", - "Triangles", - "Quadrangles", - "Tetrahedra", - "Hexahedra", - "Prisms", - "Time for 1D Mesh", - "Time for 2D Mesh", - "Time for 3D Mesh", - - "Gamma", - "Eta", - "Rho", - - /* Post */ - "Views loaded", - "Visible Points", - "Visible Lines", - "Visible Triangles", - "Visible Tetrahedra" - } ; - -#endif diff --git a/Motif/Main.cpp b/Motif/Main.cpp deleted file mode 100644 index 8c99e0b1f2a4cdd44c14a1e34dbfe185e29cc295..0000000000000000000000000000000000000000 --- a/Motif/Main.cpp +++ /dev/null @@ -1,419 +0,0 @@ -// $Id: Main.cpp,v 1.11 2001-05-22 08:30:26 geuzaine Exp $ - -#include <signal.h> - -#include "Gmsh.h" -#include "GmshUI.h" -#include "GmshVersion.h" -#include "Geo.h" -#include "Verif.h" -#include "Mesh.h" -#include "Draw.h" -#include "Context.h" -#include "Options.h" -#include "ColorTable.h" -#include "Parser.h" -#include "Views.h" - -#include "Widgets.h" -#include "Pixmaps.h" -#include "XColors.h" -#include "XContext.h" -#include "XRessources.h" -#include "CbContext.h" -#include "CbGeom.h" -#include "Register.h" -#include "Geometry.h" -#include "OpenFile.h" -#include "GetOptions.h" - -#include "Static.h" -#include "XStatic.h" - -char* ShowVisualClass(int cls){ - if(cls==TrueColor) return "TrueColor"; - if(cls==DirectColor) return "DirectColor"; - if(cls==PseudoColor) return "PseudoColor"; - if(cls==StaticColor) return "StaticColor"; - if(cls==GrayScale) return "GrayScale"; - if(cls==StaticGray) return "StaticGray"; - return "Unknown"; -} - -int main(int argc, char *argv[]){ - int i, nbf; - XColor ov_color_def, ov_color_exact; - extern char *TextBuffer, TextAbout[1024]; - - /* Gmsh default context options */ - - Init_Options(0); - - /* Command line options */ - - Get_Options(argc, argv, &nbf); - - if(CTX.verbosity) - fprintf(stderr, "%s, Version %.2f\n", gmsh_progname, GMSH_VERSION); - - /* Initialize the static Mesh */ - - M.Vertices = NULL ; - M.VertexEdges = NULL ; - M.Simplexes = NULL ; - M.Points = NULL ; - M.Curves = NULL ; - M.SurfaceLoops = NULL ; - M.EdgeLoops = NULL ; - M.Surfaces = NULL ; - M.Volumes = NULL ; - M.PhysicalGroups = NULL ; - M.Metric = NULL ; - - /* Signal handling */ - - signal(SIGINT, Signal); - signal(SIGSEGV, Signal); - signal(SIGFPE, Signal); - - /* Non-interactive Gmsh */ - - if(CTX.batch){ - OpenProblem(CTX.filename); - if(yyerrorstate) - exit(1); - else { - if(nbf > 1){ - for(i=1;i<nbf;i++) MergeProblem(TheFileNameTab[i]); - } - if(TheBgmFileName){ - MergeProblem(TheBgmFileName); - if(List_Nbr(Post_ViewList)) - BGMWithView((Post_View*)List_Pointer(Post_ViewList, List_Nbr(Post_ViewList)-1)); - else - Msg(GERROR, "Invalid Background Mesh (no View)"); - } - if(CTX.batch > 0){ - mai3d(THEM, CTX.batch); - Print_Mesh(THEM,CTX.output_filename,CTX.mesh.format); - } - else - Print_Geo(THEM,CTX.output_filename); - exit(1); - } - } - - - /* Interactive Gmsh */ - - CTX.batch = -1 ; /* The GUI is not ready yet for interactivity */ - - /* Text for about window */ - - sprintf(TextAbout, "%s\n \n%s%.2f\n%s\n%s%s\n%s\n%s\n%s\n%s\n%s\n \n%s\n \n" - "Type 'gmsh -help' for command line options", - gmsh_progname, gmsh_version, GMSH_VERSION, - gmsh_os, gmsh_gui, XmVERSION_STRING, - gmsh_date, gmsh_host, gmsh_packager, - gmsh_url, gmsh_email, gmsh_copyright); - - /* Xlib Threads init */ - -#ifdef _USETHREADS - if(CTX.threads){ - if(!XInitThreads()){ - Msg(WARNING, "Xlib is not Thread Safe (Reverting to '-nothreads')"); - CTX.threads = 0; - } - } -#else - CTX.threads = 0; -#endif - - /* Xtoolkit init */ - - XtToolkitInitialize(); - -#ifdef _USETHREADS - if(CTX.threads){ - if(!XtToolkitThreadInitialize()){ - Msg(WARNING, "Xtoolkit is not Thread Safe (Reverting to '-nothreads')"); - CTX.threads = 0; - } - } -#endif - - XCTX.AppContext = XtCreateApplicationContext(); - - /* X/Motif default resources */ - - XtAppSetFallbackResources(XCTX.AppContext, FallbackResources); - - /* Open display */ - - XCTX.display = XtOpenDisplay(XCTX.AppContext, NULL, "gmshGW", ".gmshrc", - NULL, 0, &argc, argv); - - if(!XCTX.display){ - Msg(FATAL1, "Unable to open the specified display. Set the `DISPLAY'"); - Msg(FATAL2, "environment variable properly or use the `xhost' command"); - Msg(FATAL3, "to authorize access to the display"); - } - - /* Check for GLX extension; for Mesa, this is always OK */ - - if(!glXQueryExtension(XCTX.display,NULL,NULL)){ - Msg(FATAL1, "The specified display does not support the OpenGL extension (GLX)."); - Msg(FATAL3, "You may consider using Mesa instead"); - } - - /* Init with default screen num and default depth */ - - XCTX.scrnum = DefaultScreen(XCTX.display); - XCTX.depth = DefaultDepth(XCTX.display, XCTX.scrnum); - - /* Init with default visual for the gui */ - - XCTX.gui.visual = DefaultVisual(XCTX.display,XCTX.scrnum); - - /* Find visual the regular way for glw */ - - if(CTX.db){ - if(!(XCTX.glw.visinfo = - glXChooseVisual(XCTX.display,XCTX.scrnum, glw_attrib_db))){ - Msg(WARNING,"GBA Double Buffured Visual not Available"); - CTX.db = 0; - } - } - - if(!CTX.db){ - if(!(XCTX.glw.visinfo = - glXChooseVisual(XCTX.display,XCTX.scrnum, glw_attrib_sb))) - Msg(FATAL, "RGBA Single Buffured Visual not Available"); - } - - Msg(DEBUG, "Visual id=%lx depth=%d screen=%d bits/rgb=%d class=%s dblbuf=%d", - XCTX.glw.visinfo->visualid, XCTX.glw.visinfo->depth, - XCTX.glw.visinfo->screen, XCTX.glw.visinfo->bits_per_rgb, -#if defined(__cplusplus) || defined(c_plusplus) - ShowVisualClass(XCTX.glw.visinfo->c_class), -#else - ShowVisualClass(XCTX.glw.visinfo->class), -#endif - CTX.db); - - /* Find visual the regular way for glo */ - -#ifndef _NOOV - if(CTX.overlay){ - if(!(XCTX.glo.visinfo = glXChooseVisual(XCTX.display,XCTX.scrnum,glo_attrib))){ - Msg(DEBUG, "Overlay Visual not Available (Using Blend Function Instead)"); - CTX.overlay = 0; - CTX.geom.highlight = 0; - } - } -#else - CTX.overlay = 0 ; - CTX.geom.highlight = 0; -#endif - - if(CTX.overlay){ - Msg(DEBUG,"Overlay Visual id=%lx depth=%d screen=%d bits/rgb=%d class=%s", - XCTX.glo.visinfo->visualid, XCTX.glo.visinfo->depth, - XCTX.glo.visinfo->screen, XCTX.glo.visinfo->bits_per_rgb, -#if defined(__cplusplus) || defined(c_plusplus) - ShowVisualClass(XCTX.glo.visinfo->c_class) -#else - ShowVisualClass(XCTX.glo.visinfo->class) -#endif - ); - } - - - /* Init with default colormaps */ - - XCTX.gui.colormap = DefaultColormap(XCTX.display,0); - XCTX.glw.colormap = DefaultColormap(XCTX.display,0); - XCTX.glo.colormap = DefaultColormap(XCTX.display,0); - - /* - If not using default visual (i.e. not using the gui visual), we need a colormap for - this visual. Yes, the GL widget can allocate one itself, but we want to make sure - the GUI and the 3D have the same one (if hardware does not allow more than one - simultaneously). This prevents nasty flashing when the window with the 3D widget - looses the focus. - */ - - if(!CTX.flash && (XCTX.glw.visinfo->visual != XCTX.gui.visual)){ - Msg(DEBUG, "Making Another Colormap for Graphic Window"); - XCTX.glw.colormap = XCreateColormap(XCTX.display, RootWindow(XCTX.display,XCTX.scrnum), - XCTX.glw.visinfo->visual, AllocNone); - if(!XCTX.glw.colormap) - Msg(FATAL, "Unable to Create Colormap for Graphic Window (Try Option '-flash')"); - } - - if(CTX.overlay){ - if(!CTX.flash && (XCTX.glo.visinfo->visual != XCTX.gui.visual)){ - Msg(DEBUG, "Making Another Colormap for Overlay Window"); - XCTX.glo.colormap = XCreateColormap(XCTX.display, RootWindow(XCTX.display,XCTX.scrnum), - XCTX.glo.visinfo->visual, AllocNone); - if(!XCTX.glo.colormap){ - Msg(FATAL1, "Unable to Create Private Colormap for Overlay Window"); - Msg(FATAL3, "(Try '-noov' and/or '-flash' Options)"); - } - } - } - - /* Force to use common visual for GUI and GL? Maybe you can invoke - some hardware interrogation function and see if more than one - hardware map is supported. Here, we check for the -samevisual - flag */ - - if(CTX.same_visual){ - XCTX.gui.visual = XCTX.glw.visinfo->visual; - XCTX.gui.colormap = XCTX.glw.colormap; - } - - /* Create all the motif widgets */ - - CreateWidgets(&WID); - - /* create the OpenGL contexts */ - - XCTX.glw.context = glXCreateContext(XtDisplay(WID.G.glw),XCTX.glw.visinfo,NULL,GL_TRUE); - - if(CTX.overlay){ - XCTX.glo.context = glXCreateContext(XtDisplay(WID.G.glo), - XCTX.glo.visinfo,NULL,GL_TRUE); - - if (!XAllocNamedColor(XCTX.display, XCTX.glo.colormap, - "white", &ov_color_def, &ov_color_exact)) { - Msg(WARNING, "Couldn't Allocate White for Overlay window (Reverting to '-noov')"); - CTX.overlay = 0; - } - else - XCTX.xcolor.ovwhite = ov_color_def.pixel; - } - - if(CTX.overlay){ - if (!XAllocNamedColor(XCTX.display, XCTX.glo.colormap, - "black", &ov_color_def, &ov_color_exact)) { - Msg(WARNING, "Couldn't Allocate Black for Overlay Window (Reverting to '-noov')"); - CTX.overlay = 0; - } - else - XCTX.xcolor.ovblack = ov_color_def.pixel; - } - - /* X font initialisation */ - XCTX.xfont.helve = XLoadQueryFont(XCTX.display, CTX.font); - XCTX.xfont.fixed = XLoadQueryFont(XCTX.display, CTX.fixed_font); - - if(XCTX.xfont.helve == NULL){ - Msg(WARNING, "Unable to Load Font '%s'", CTX.font); - XCTX.xfont.helve = XCTX.xfont.fixed ; - } - if(XCTX.xfont.fixed == NULL) - Msg(FATAL, "Unable to Load Font '%s'", CTX.fixed_font); - - XCTX.xfont.helve_h = XCTX.xfont.helve->max_bounds.ascent + - XCTX.xfont.helve->max_bounds.descent; - XCTX.xfont.helve_a = XCTX.xfont.helve->max_bounds.ascent; - XCTX.xfont.helve_w = XCTX.xfont.helve->max_bounds.width; - - XCTX.xfont.fixed_h = XCTX.xfont.fixed->max_bounds.ascent + - XCTX.xfont.fixed->max_bounds.descent; - XCTX.xfont.fixed_a = XCTX.xfont.fixed->max_bounds.ascent; - XCTX.xfont.fixed_w = XCTX.xfont.fixed->max_bounds.width; - - CTX.gl_fontheight = XCTX.xfont.helve_h ; - CTX.gl_fontascent = XCTX.xfont.helve_a ; - - - /* X color initialisation (set the pixel format and allocate some colors in XCTX) */ - - XColorInitialize(); - - /* Force widget geometry */ - - ForceGeometry(&WID); - - /* Register all the callbacks */ - - RegisterCallbacks(&WID); - - /* Realize widgets in the 3 windows (M=menu, G=graphics, C=command) */ - - XtRealizeWidget(WID.M.shell); - XtRealizeWidget(WID.G.shell); - if(CTX.command_win) XtRealizeWidget(WID.C.shell); - - /* Create the pixmaps */ - - CreatePixmaps(&WID, &PIX, XCTX.depth); - - /* Select input events for the graphic window and raise overlay window */ - - if(CTX.overlay){ - XRaiseWindow(XtDisplay(WID.G.glo), XtWindow(WID.G.glo)); - XSelectInput(XtDisplay(WID.G.glo), XtWindow(WID.G.glo), EV_MASK); - } - else{ - XSelectInput(XtDisplay(WID.G.glw), XtWindow(WID.G.glw), EV_MASK); - } - - /* OpenGL display list for the font */ - - if((CTX.font_base = glGenLists(XCTX.xfont.helve->max_char_or_byte2+1)) == 0) - Msg(FATAL, "Font out of OpenGL Display Lists"); - - glXUseXFont(XCTX.xfont.helve->fid, - XCTX.xfont.helve->min_char_or_byte2, - XCTX.xfont.helve->max_char_or_byte2-XCTX.xfont.helve->min_char_or_byte2+1, - CTX.font_base+XCTX.xfont.helve->min_char_or_byte2); - - /* The GUI is ready */ - CTX.batch = 0 ; - CTX.expose = 1 ; - - /* Say welcome! */ - - TextBuffer = (char*)Malloc(1024*sizeof(char)); - Msg(STATUS3, "Ready"); - Msg(STATUS1, "Gmsh %.2f", GMSH_VERSION); - - /* Open input file */ - - OpenProblem(CTX.filename); - - /* Merge all Input Files if any, then init first context (geometry or post) */ - - if(nbf > 1){ - for(i=1;i<nbf;i++) MergeProblem(TheFileNameTab[i]); - ActualizeContextCb (NULL,(XtPointer)CONTEXT_POST,NULL); - } - else { - ActualizeContextCb(NULL,(XtPointer)CONTEXT_GEOM,NULL); - } - - /* Read background mesh on disk if any */ - - if(TheBgmFileName){ - MergeProblem(TheBgmFileName); - if(List_Nbr(Post_ViewList)) - BGMWithView((Post_View*)List_Pointer(Post_ViewList, List_Nbr(Post_ViewList)-1)); - else - Msg(GERROR, "Invalid Background Mesh (no View)"); - } - - /* Draw the actual scene */ - Draw(); - - /* Loop until were done */ - - XtAppMainLoop(XCTX.AppContext); - - /* never here */ - -} - diff --git a/Motif/Makefile b/Motif/Makefile deleted file mode 100644 index b9de799c2b90181be23869da2befd88a23e80d55..0000000000000000000000000000000000000000 --- a/Motif/Makefile +++ /dev/null @@ -1,183 +0,0 @@ -# $Id: Makefile,v 1.19 2001-08-11 23:32:23 geuzaine Exp $ -# -# Makefile for "libMotif.a" -# - -.IGNORE: - -CC = c++ -AR = ar ruvs -RM = rm -RANLIB = ranlib - -LIB = ../lib/libMotif.a -INCLUDE = -I../Common -I../DataStr -I../Graphics -I../Geo\ - -I../Mesh -I../Parser -I../Motif -I../Fltk - -C_FLAGS = -g -Wall -OS_FLAGS = -D_LITTLE_ENDIAN -VERSION_FLAGS = -D_XMOTIF -D_NOTHREADS - -GL_INCLUDE = -I$(HOME)/SOURCES/Mesa-3.1/include\ - -I$(HOME)/SOURCES/Mesa-3.1/include/GL -GUI_INCLUDE = -I/usr/X11R6/LessTif/Motif1.2/include - -RMFLAGS = -f -CFLAGS = $(C_FLAGS) $(OS_FLAGS) $(VERSION_FLAGS) $(INCLUDE)\ - $(GUI_INCLUDE) $(GL_INCLUDE) - -SRC = Main.cpp \ - Widgets.cpp \ - Geometry.cpp \ - Register.cpp \ - Pixmaps.cpp \ - Opengl.cpp \ - XColors.cpp \ - Message.cpp \ - CbContext.cpp \ - CbPost.cpp \ - CbColorbar.cpp \ - CbGeom.cpp \ - CbMesh.cpp \ - CbOptions.cpp \ - CbFile.cpp \ - CbInput.cpp \ - CbGeneral.cpp - - -OBJ = $(SRC:.cpp=.o) - -.SUFFIXES: .o .cpp - -$(LIB): $(OBJ) - $(AR) $(LIB) $(OBJ) - $(RANLIB) $(LIB) - -.cpp.o: - $(CC) $(CFLAGS) -c $< - -clean: - $(RM) $(RMFLAGS) *.o - -lint: - $(LINT) $(CFLAGS) $(SRC) - -depend: - (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ - $(CC) -MM $(CFLAGS) ${SRC} \ - ) >Makefile.new - cp Makefile Makefile.bak - cp Makefile.new Makefile - $(RM) $(RMFLAGS) Makefile.new - -# DO NOT DELETE THIS LINE -Main.o: Main.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ - ../Common/GmshVersion.h ../Geo/Geo.h ../Geo/Verif.h ../Mesh/Mesh.h \ - ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Graphics/Draw.h \ - ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h \ - ../Common/Options.h ../Parser/Parser.h Widgets.h Pixmaps.h XColors.h \ - XContext.h XRessources.h CbContext.h CbGeom.h Register.h Geometry.h \ - ../Parser/OpenFile.h ../Common/GetOptions.h ../Common/Static.h \ - XStatic.h -Widgets.o: Widgets.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Mesh/Mesh.h \ - ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Common/Context.h \ - XContext.h Info.h Widgets.h Help.h -Geometry.o: Geometry.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ - ../Common/Context.h XContext.h Widgets.h -Register.o: Register.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ - ../Common/Context.h XContext.h Widgets.h Register.h CbOptions.h \ - CbContext.h CbFile.h CbGeom.h CbMesh.h CbPost.h -Pixmaps.o: Pixmaps.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h Widgets.h \ - ../Common/Context.h Pixmaps.h ../Common/Bitmaps.h XColors.h -Opengl.o: Opengl.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Geo/Geo.h \ - ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Graphics/Draw.h \ - ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h \ - ../Geo/MinMax.h Widgets.h XContext.h ../Graphics/gl2ps.h -XColors.o: XColors.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h XContext.h -Message.o: Message.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ - ../Common/GmshVersion.h ../Common/Context.h Widgets.h -CbContext.o: CbContext.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Geo/Geo.h \ - ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Graphics/Draw.h \ - ../Common/Views.h ../Common/ColorTable.h Widgets.h \ - ../Common/Context.h XContext.h CbContext.h CbGeom.h CbMesh.h -CbPost.o: CbPost.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Geo/Geo.h \ - ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Graphics/Draw.h \ - ../Common/Views.h ../Common/ColorTable.h Widgets.h \ - ../Common/Context.h XContext.h ../Parser/OpenFile.h CbPost.h CbGeom.h \ - CbMesh.h CbColorbar.h -CbColorbar.o: CbColorbar.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ - ../Common/Numeric.h XColors.h Widgets.h Register.h \ - ../Common/Context.h XContext.h ../Common/ColorTable.h CbColorbar.h -CbGeom.o: CbGeom.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Geo/Geo.h \ - ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Graphics/Draw.h \ - ../Common/Views.h ../Common/ColorTable.h Widgets.h \ - ../Common/Context.h ../Geo/Verif.h ../Parser/OpenFile.h CbGeom.h -CbMesh.o: CbMesh.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Geo/Geo.h \ - ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Graphics/Draw.h \ - ../Common/Views.h ../Common/ColorTable.h CbMesh.h ../Common/Context.h \ - Widgets.h -CbOptions.o: CbOptions.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Geo/Geo.h \ - ../Geo/Verif.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h \ - ../Graphics/Draw.h ../Common/Views.h ../Common/ColorTable.h Widgets.h \ - Pixmaps.h ../Common/Context.h ../Common/Options.h XContext.h \ - Register.h ../Common/Timer.h ../Geo/Visibility.h CbOptions.h CbGeom.h \ - CbMesh.h CbPost.h -CbFile.o: CbFile.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h \ - ../Parser/OpenFile.h ../Mesh/Mesh.h ../Mesh/Vertex.h \ - ../Mesh/Simplex.h ../Mesh/Edge.h ../Geo/ExtrudeParams.h \ - ../Mesh/Metric.h ../Graphics/Draw.h ../Common/Views.h \ - ../Common/ColorTable.h Widgets.h ../Common/Context.h \ - ../Common/Options.h ../Graphics/CreateFile.h CbFile.h CbColorbar.h -CbInput.o: CbInput.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Mesh/Mesh.h \ - ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Graphics/Draw.h \ - ../Common/Views.h ../Common/ColorTable.h Widgets.h \ - ../Common/Context.h ../Common/Options.h XContext.h Register.h \ - CbContext.h CbGeom.h CbPost.h CbMesh.h -CbGeneral.o: CbGeneral.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/GmshUI.h ../Mesh/Mesh.h \ - ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Graphics/Draw.h \ - ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h \ - XContext.h Widgets.h diff --git a/Motif/Message.cpp b/Motif/Message.cpp deleted file mode 100644 index 2de5c03744dca8f92c3185a1958bef2ba69b48bd..0000000000000000000000000000000000000000 --- a/Motif/Message.cpp +++ /dev/null @@ -1,242 +0,0 @@ -// $Id: Message.cpp,v 1.8 2001-02-20 18:32:58 geuzaine Exp $ - -#include <signal.h> -#include <sys/resource.h> - -#include "Gmsh.h" -#include "GmshUI.h" -#include "GmshVersion.h" -#include "Context.h" -#include "Widgets.h" - -extern Context_T CTX; -extern Widgets_T WID; - -/* ------------------------------------------------------------------------ */ -/* S i g n a l */ -/* ------------------------------------------------------------------------ */ - -void Signal (int sig_num){ - - switch (sig_num){ - case SIGSEGV : - Msg(FATAL, "Segmentation Violation (Invalid Memory Reference)\n" - "------------------------------------------------------\n" - "You have discovered a bug in Gmsh. You may e-mail the\n" - "context in which it occurred to one of the authors:\n" - "type 'gmsh -info' to get feedback information"); - break; - case SIGFPE : - Msg(FATAL, "Floating Point Exception (Division by Zero?)"); - break; - case SIGINT : - Msg(FATAL, "Interrupt (Generated from Terminal Special Character)"); - break; - default : - Msg(FATAL, "Unknown Signal"); - break; - } -} - - -/* ------------------------------------------------------------------------ */ -/* M s g */ -/* ------------------------------------------------------------------------ */ - -char *TextBuffer; - -#define PUT_IN_COMMAND_WIN \ - vsprintf(TextBuffer, fmt, args); \ - XmListAddItem(WID.C.commandList,XmStringCreateSimple(TextBuffer),0); \ - XtSetArg(arg[0], XmNitemCount, &nb); \ - XtSetArg(arg[1], XmNvisibleItemCount, &nbvis); \ - XtGetValues(WID.C.commandList, arg, 2); \ - XmListSetPos(WID.C.commandList,(nb>nbvis)?nb-nbvis+1:0); \ - XmUpdateDisplay(WID.C.commandList); - -void Msg(int level, char *fmt, ...){ - va_list args; - int abort=0; - Arg arg[2]; - int nb, nbvis; - - if(level != FATAL && level != GERROR && level != PARSER_ERROR && - CTX.batch && !CTX.verbosity) - return ; - - va_start (args, fmt); - - switch(level){ - case DIRECT : - vfprintf(stderr, fmt, args); - fprintf(stderr, "\n"); - break; - case FATAL : - fprintf(stderr, FATAL_STR); - vfprintf(stderr, fmt, args); - fprintf(stderr, "\n"); - abort = 1; - break; - case GERROR : - if(CTX.batch || !CTX.command_win){ - fprintf(stderr, ERROR_STR); - vfprintf(stderr, fmt, args); - fprintf(stderr, "\n"); - } - else{ - PUT_IN_COMMAND_WIN ; - } - break; - case WARNING : - if(CTX.batch || !CTX.command_win){ - if(CTX.verbosity > 0){ - fprintf(stderr, WARNING_STR); - vfprintf(stderr, fmt, args); - fprintf(stderr, "\n"); - } - } - else{ - PUT_IN_COMMAND_WIN ; - } - break; - case INFO : - if(CTX.batch || !CTX.command_win){ - if(CTX.verbosity > 1){ - fprintf(stderr, INFO_STR); - vfprintf(stderr, fmt, args); - fprintf(stderr, "\n"); - } - } - else{ - PUT_IN_COMMAND_WIN ; - } - break; - case STATUS2 : - case STATUS2N : - if(CTX.batch){ - if(CTX.verbosity > 1){ - fprintf(stderr, STATUS_STR); - vfprintf(stderr, fmt, args); - fprintf(stderr, "\n"); - } - } - else if(CTX.expose){ - vsprintf(TextBuffer, fmt, args); - XtVaSetValues(WID.G.infoLabel, XmNlabelString, - XmStringCreateSimple(TextBuffer), NULL); - XmUpdateDisplay(WID.G.infoLabel); - } - break; - case STATUS1 : - case STATUS1N : - if(CTX.batch){ - if(CTX.verbosity > 1){ - fprintf(stderr, STATUS_STR); - vfprintf(stderr, fmt, args); - fprintf(stderr, "\n"); - } - } - else if(CTX.expose){ - vsprintf(TextBuffer, fmt, args); - XtVaSetValues(WID.G.selectLabel, XmNlabelString, - XmStringCreateSimple(TextBuffer), NULL); - XmUpdateDisplay(WID.G.selectLabel); - } - break; - case STATUS3 : - case STATUS3N : - if(CTX.batch){ - if(CTX.verbosity > 1){ - fprintf(stderr, STATUS_STR); - vfprintf(stderr, fmt, args); - fprintf(stderr, "\n"); - } - } - else if(CTX.expose){ - vsprintf(TextBuffer, fmt, args); - XtVaSetValues(WID.G.statusLabel, XmNlabelString, - XmStringCreateSimple(TextBuffer), NULL); - XmUpdateDisplay(WID.G.statusLabel); - } - break; - case PARSER_ERROR : - if(CTX.batch || !CTX.command_win){ - if(CTX.verbosity > 0){ - fprintf(stderr, PARSER_ERROR_STR); - vfprintf(stderr, fmt, args); - fprintf(stderr, "\n"); - } - } - else{ - PUT_IN_COMMAND_WIN ; - } - break; - case PARSER_INFO : - if(CTX.batch || !CTX.command_win){ - if(CTX.verbosity > 1){ - fprintf(stderr, PARSER_INFO_STR); - vfprintf(stderr, fmt, args); - fprintf(stderr, "\n"); - } - } - else{ - PUT_IN_COMMAND_WIN ; - } - break; - case DEBUG : - if(CTX.batch || !CTX.command_win){ - if(CTX.verbosity > 2){ - fprintf(stderr, DEBUG_STR); - vfprintf(stderr, fmt, args); - fprintf(stderr, "\n"); - } - } - else{ - PUT_IN_COMMAND_WIN ; - } - break; - } - - va_end (args); - - if(abort) exit(1); - -} - - -/* ------------------------------------------------------------------------ */ -/* C p u */ -/* ------------------------------------------------------------------------ */ - -void GetResources(long *s, long *us, long *mem){ - static struct rusage r; - - getrusage(RUSAGE_SELF,&r); - *s = (long)r.ru_utime.tv_sec ; - *us = (long)r.ru_utime.tv_usec ; - *mem = (long)r.ru_maxrss ; -} - -void PrintResources(FILE *stream, char *fmt, long s, long us, long mem){ - fprintf(stream, "Resources = %scpu %ld.%ld s / mem %ld kb\n", fmt, s, us, mem); -} - -double Cpu(void){ - long s, us, mem; - GetResources(&s, &us, &mem); - return (double)s + (double)us/1.e6 ; -} - -/* ------------------------------------------------------------------------ */ -/* P r o g r e s s */ -/* ------------------------------------------------------------------------ */ - -void Progress(int i){ -} - -/* ------------------------------------------------------------------------ */ -/* E d i t G e o m e t r y */ -/* ------------------------------------------------------------------------ */ - -void AddALineInTheEditGeometryForm (char* line){ -} diff --git a/Motif/Opengl.cpp b/Motif/Opengl.cpp deleted file mode 100644 index 9d8de37f6edd1f080da2c96f2417be8a0fafd593..0000000000000000000000000000000000000000 --- a/Motif/Opengl.cpp +++ /dev/null @@ -1,170 +0,0 @@ -// $Id: Opengl.cpp,v 1.5 2001-02-04 12:46:09 geuzaine Exp $ - -#include <X11/IntrinsicP.h> - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Geo.h" -#include "Mesh.h" -#include "Draw.h" -#include "Context.h" -#include "MinMax.h" -#include "Widgets.h" -#include "XContext.h" -#include "gl2ps.h" - -extern XContext_T XCTX ; -extern Widgets_T WID ; -extern Context_T CTX ; -extern Mesh M; - -void Process_SelectionBuffer(int x, int y, int *n, GLuint *ii, GLuint *jj); -void Filter_SelectionBuffer(int n, GLuint *typ, GLuint *ient, Vertex **thev, - Curve **thec, Surface **thes, Mesh *m); -void myZoom(GLdouble X1, GLdouble X2, GLdouble Y1, GLdouble Y2, - GLdouble Xc1, GLdouble Xc2, GLdouble Yc1, GLdouble Yc2); - -/* ------------------------------------------------------------------------ */ -/* Init/Draw */ -/* ------------------------------------------------------------------------ */ - -void InitOpengl(void){ - /* Resize Graphical Window if told to do it */ - XWindowAttributes xattrib; - XGetWindowAttributes(XtDisplay(WID.G.bottomForm),XtWindow(WID.G.bottomForm),&xattrib); - XtResizeWidget(WID.G.shell, - CTX.viewport[2]-CTX.viewport[0], - xattrib.height+CTX.viewport[3]-CTX.viewport[1], - 0); - /* X11 forbids to change the context (GLX) in GL_FEEDBACK or GL_SELECT mode, - which would happen for postscript output */ - if(CTX.stream == TO_SCREEN) - glXMakeCurrent(XtDisplay(WID.G.glw), XtWindow(WID.G.glw), XCTX.glw.context); - Orthogonalize(0,0); -} - -void InitOverlay(void){ - glXMakeCurrent(XtDisplay(WID.G.glo), XtWindow(WID.G.glo), XCTX.glo.context); - Orthogonalize(0,0); -} - -void ClearOpengl(void){ - glClearColor(UNPACK_RED(CTX.color.bg)/255., - UNPACK_GREEN(CTX.color.bg)/255., - UNPACK_BLUE(CTX.color.bg)/255., - 0.); - glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT); -} - -void Draw(void){ - InitOpengl(); - ClearOpengl(); - if(CTX.db) glDrawBuffer(GL_BACK); - Draw3d(); - Draw2d(); - glFlush(); - if(CTX.db) glXSwapBuffers(XCTX.display,XtWindow(WID.G.glw)); -} - -void DrawUI(void){ -} - -void Draw_String(char *s){ - - if(CTX.stream == TO_FILE){ - if(!CTX.print.gl_fonts && CTX.print.eps_quality > 0){ - gl2psText(s,CTX.print.font,CTX.print.font_size); - return ; - } - } - - glListBase(CTX.font_base); - glCallLists(strlen(s), GL_UNSIGNED_BYTE, (GLubyte *)s); -} - -/* ------------------------------------------------------------------------ */ -/* SelectEntity */ -/* ------------------------------------------------------------------------ */ - - -int check_type(int type, Vertex *v, Curve *c, Surface *s){ - return ( (type==ENT_POINT && v) || - (type==ENT_LINE && c) || - (type==ENT_SURFACE && s) ) ; -} - -int SelectEntity(int type, Vertex **v, Curve **c, Surface **s){ - XEvent event; - XComposeStatus stat; - KeySym keysym; - int hits; - GLuint ii[SELECTION_BUFFER_SIZE],jj[SELECTION_BUFFER_SIZE]; - char buf[100]; - - *v = NULL; - *c = NULL; - *s = NULL; - - while(1){ - XtAppNextEvent(XCTX.AppContext,&event); - XtDispatchEvent(&event); - switch(event.type){ - case KeyPress : - XLookupString(&event.xkey, buf, sizeof(buf), &keysym, &stat); - if(keysym == XK_q) return(0); - if(keysym == XK_e) return(-1); - break; - case ButtonPress : - Process_SelectionBuffer(event.xbutton.x, event.xbutton.y, &hits, ii, jj); - Filter_SelectionBuffer(hits,ii,jj,v,c,s,&M); - if(check_type(type,*v,*c,*s)){ - BeginHighlight(); - HighlightEntity(*v,*c,*s,1); - EndHighlight(1); - return(event.xbutton.button); - } - } - } -} - -/* ------------------------------------------------------------------------ */ -/* Callbacks */ -/* ------------------------------------------------------------------------ */ - -void InitCb(Widget w, XtPointer client_data, GLwDrawingAreaCallbackStruct *cb){ - glXMakeCurrent(XtDisplay(WID.G.glw), XtWindow(WID.G.glw), XCTX.glw.context); - CTX.viewport[0] = 0 ; - CTX.viewport[1] = 0 ; - CTX.viewport[2] = cb->width ; - CTX.viewport[3] = cb->height ; - glViewport(CTX.viewport[0], - CTX.viewport[1], - CTX.viewport[2], - CTX.viewport[3]); -} - -void ResizeCb(Widget w,XtPointer client_data, GLwDrawingAreaCallbackStruct *cb){ - CTX.viewport[0] = 0 ; - CTX.viewport[1] = 0 ; - CTX.viewport[2] = cb->width ; - CTX.viewport[3] = cb->height ; - glViewport(CTX.viewport[0], - CTX.viewport[1], - CTX.viewport[2], - CTX.viewport[3]); - Draw(); - if(CTX.overlay) InitOverlay(); -} - -void ExposeCb(Widget w,XtPointer client_data, GLwDrawingAreaCallbackStruct *cb){ - - /* compress incoming events as much as possible */ - if(cb->event->xexpose.count != 0){ - return; - } - - if(!CTX.expose) return; - Draw(); - -} - diff --git a/Motif/Pixmaps.cpp b/Motif/Pixmaps.cpp deleted file mode 100644 index 882e0714b1e970c46410b00653c4c1ad5584312e..0000000000000000000000000000000000000000 --- a/Motif/Pixmaps.cpp +++ /dev/null @@ -1,129 +0,0 @@ -// $Id: Pixmaps.cpp,v 1.1 2001-01-08 08:20:11 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Widgets.h" -#include "Context.h" -#include "Pixmaps.h" -#include "Bitmaps.h" -#include "XColors.h" - -extern Widgets_T WID; -extern Context_T CTX; - -Pixmap bm_to_px(Widget w, void *bits, int width, int height, int depth, int mode){ - Display *display ; - Window window ; - int screen ; - Pixmap ret_pixmap; - Pixel fg, bg; - - display = XtDisplay(w); - window = XtScreen(WID.M.shell)->root; /* XtWindow(w); */ - screen = DefaultScreen(display); - - if (DisplayCells(display, screen) > 2 && depth > 1) { - - switch (mode) { - case BM_PX_BW: - fg = BlackPixel(display, screen); - bg = WhitePixel(display, screen); - break; - case BM_PX_BWREV: - fg = WhitePixel(display, screen); - bg = BlackPixel(display, screen); - break; - case BM_PX_WHITE: - fg = WhitePixel(display, screen); - XtVaGetValues(w,XmNbackground, &bg,NULL); - break; - case BM_PX_BLACK: - fg = BlackPixel(display, screen); - XtVaGetValues(w,XmNbackground, &bg,NULL); - break; - case BM_PX_RED: - fg = AllocateColorInt(255,0,0) ; - XtVaGetValues(w,XmNbackground, &bg,NULL); - break; - case BM_PX_HIGHLIGHT: - XtVaGetValues(w,XmNhighlightColor, &fg,XmNbackground, &bg,NULL); - break; - case BM_PX_NORMAL: - default: - XtVaGetValues(w,XmNforeground, &fg,XmNbackground, &bg,NULL ); - break; - } - } - else { - fg = BlackPixel(display, screen); - bg = WhitePixel(display, screen); - } - - ret_pixmap = - XCreatePixmapFromBitmapData(display, window, (char*)bits, width, height, fg, bg, depth); - - if (ret_pixmap == (Pixmap) NULL){ - Msg(WARNING, "Failing to create pixmap"); - return ((Pixmap) NULL); - } - - return (ret_pixmap); -} - - -void Set_AnimPixmap(Widgets_T *w, Pixmaps_T *p, int start){ - if(start) - XtVaSetValues(w->G.Butt[5], XmNlabelPixmap, p->G.start, NULL); - else - XtVaSetValues(w->G.Butt[5], XmNlabelPixmap, p->G.stop, NULL); -} - -void CreatePixmaps(Widgets_T *w, Pixmaps_T *p, int depth){ - - /* Icons for 3 main windows */ - - XtVaSetValues(w->M.shell, - XmNiconPixmap, - XCreateBitmapFromData(XtDisplay(w->M.shell),XtScreen(w->M.shell)->root, - (char*)g1_bits, g1_width, g1_height), - NULL); - - - XtVaSetValues(w->G.shell, - XmNiconPixmap, - XCreateBitmapFromData(XtDisplay(w->G.shell), XtScreen(w->G.shell)->root, - (char*)g2_bits, g2_width, g2_height), - NULL); - - if(CTX.command_win) - XtVaSetValues(w->C.shell, - XmNiconPixmap, - XCreateBitmapFromData(XtDisplay(w->C.shell), XtScreen(w->C.shell)->root, - (char*)g3_bits, g3_width, g3_height), - NULL); - - /* Graphic window */ - - p->G.abort = bm_to_px(w->G.Butt[6], abort_bits, - abort_width, abort_height, depth, BM_PX_RED); - XtVaSetValues(w->G.Butt[6], XmNlabelPixmap, p->G.abort, NULL); - - p->G.abort_insens = bm_to_px(w->G.Butt[6], abort_bits, - abort_width, abort_height, depth, BM_PX_NORMAL); - XtVaSetValues(w->G.Butt[6], XmNlabelInsensitivePixmap, p->G.abort_insens, NULL); - - p->G.start = bm_to_px(w->G.Butt[5], start_bits, - start_width, start_height, depth, BM_PX_NORMAL); - p->G.stop = bm_to_px(w->G.Butt[5], stop_bits, - stop_width, stop_height, depth, BM_PX_NORMAL); - Set_AnimPixmap(w, p, 1); - - /* About window */ - - p->HD.about = bm_to_px(w->HD.aboutDialog, about_bits, - about_width, about_height, depth, BM_PX_NORMAL); - XtVaSetValues(w->HD.aboutDialog, XmNsymbolPixmap, p->HD.about, NULL); - - -} - diff --git a/Motif/Pixmaps.h b/Motif/Pixmaps.h deleted file mode 100644 index 88b301ef76f55c0d4cba456887d8b24caf8c2e3d..0000000000000000000000000000000000000000 --- a/Motif/Pixmaps.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef _PIXMAPS_H_ -#define _PIXMAPS_H_ - -#define BM_PX_NORMAL 0 /* normal/normal */ -#define BM_PX_HIGHLIGHT 1 /* highlight/normal */ -#define BM_PX_WHITE 2 /* white/normal */ -#define BM_PX_BLACK 3 /* black/normal */ -#define BM_PX_BW 4 /* black/white */ -#define BM_PX_BWREV 5 /* white/black */ -#define BM_PX_RED 6 /* red/normal */ - -typedef struct { - - struct { - Pixmap abort, abort_insens, start, stop ; - } G ; - - struct { - Pixmap about ; - } HD ; - -} Pixmaps_T ; - -void CreatePixmaps(Widgets_T *w, Pixmaps_T *p, int depth); -void Set_AnimCallback(Widgets_T *w, int start) ; -void Set_AnimPixmap(Widgets_T *w, Pixmaps_T *p, int start) ; - -#endif diff --git a/Motif/Register.cpp b/Motif/Register.cpp deleted file mode 100644 index 0c816d344b25a31105ed4dc5dd899ab6561d7d19..0000000000000000000000000000000000000000 --- a/Motif/Register.cpp +++ /dev/null @@ -1,406 +0,0 @@ -// $Id: Register.cpp,v 1.1 2001-01-08 08:20:11 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Context.h" -#include "XContext.h" -#include "Widgets.h" -#include "Register.h" -#include "CbOptions.h" -#include "CbContext.h" -#include "CbFile.h" -#include "CbGeom.h" -#include "CbMesh.h" -#include "CbPost.h" - -extern Context_T CTX ; -extern XContext_T XCTX ; - -void RegisterCallbacks_M(Widgets_T *w){ - long int n ; - XtPointer l[5] ; - - register_activate_cb (w->M.fileButt[0], ManageCb, w->FD.openDialog); - register_activate_cb (w->M.fileButt[1], ManageCb, w->FD.mergeDialog); - register_activate_cb (w->M.fileButt[2], FileCb, FILE_SAVE_MESH); - register_activate_cb (w->M.fileButt[3], ManageCb, w->FD.saveAsDialog); - register_activate_cb (w->M.fileButt[4], ManageCb, w->FD.saveOptionsAsDialog); - register_activate_cb (w->M.fileButt[5], ReloadAllViewsCb, NULL); - register_activate_cb (w->M.fileButt[6], RemoveAllViewsCb, NULL); - register_activate_cb (w->M.fileButt[7], ExitCb, NULL); - - register_activate_cb (w->M.moduleButt[0], ActualizeContextCb, CONTEXT_GEOM); - register_activate_cb (w->M.moduleButt[1], ActualizeContextCb, CONTEXT_MESH); - register_activate_cb (w->M.moduleButt[2], ActualizeContextCb, CONTEXT_POST); - - register_activate_cb (w->M.optionButt[0], ManageCb, w->OD.geomDialog); - register_activate_cb (w->M.optionButt[1], ManageCb, w->OD.meshDialog); - register_activate_cb (w->M.optionButt[2], ManageCb, w->OD.postDialog); - register_activate_cb (w->M.optionButt[3], ManageCb, w->OD.miscDialog); - register_activate_cb (w->M.optionButt[4], CurrentViewportCb, NULL); - register_activate_cb (w->M.optionButt[5], CurrentInfoCb, 1); - - register_activate_cb (w->M.helpButt[0], ManageCb, w->HD.keysDialog); - register_activate_cb (w->M.helpButt[1], ManageCb, w->HD.aboutDialog); - - register_popup_ev (w->M.modButt, w->M.modPop); - register_activate_cb (w->M.geomButt, ActualizeContextCb, CONTEXT_GEOM); - register_activate_cb (w->M.meshButt, ActualizeContextCb, CONTEXT_MESH); - register_activate_cb (w->M.postButt, ActualizeContextCb, CONTEXT_POST); - - register_activate_cb (w->M.navigButt[0], PreviousContextCb, CONTEXT_BACKWARD); - register_activate_cb (w->M.navigButt[1], PreviousContextCb, CONTEXT_FORWARD); - - l[0] = (XtPointer)CurrentViewCb ; - l[2] = (XtPointer)PostDialogCb ; - - for(n=0 ; n<NB_BUTT_MAX ; n++){ - register_activate_cb (w->M.pushButt[n], NextContextCb, n+1); - register_valchg_cb (w->M.toggleButt[n], SwapViewCb, n+1); - register_popup_ev (w->M.toggleButt[n], w->M.popMenu[n]); - register_activate_cb (w->M.reloadButt[n], ReloadViewCb, n+1); - register_activate_cb (w->M.removeButt[n], RemoveViewCb, n+1); - register_activate_cb (w->M.duplicateButt[n], DuplicateViewCb, n+1); - - l[1] = (XtPointer)(n+1) ; - l[4] = NULL ; - l[3] = (XtPointer)POST_LIGHT; register_valchg_cb_list (w->M.lightButt[n],l); - l[3] = (XtPointer)POST_ELEMENT; register_valchg_cb_list (w->M.elementButt[n],l); - l[3] = (XtPointer)POST_OFFSET; register_activate_cb_list (w->M.offsetButt[n],l); - l[3] = (XtPointer)POST_TIME_STEP; register_activate_cb_list (w->M.timeStepButt[n],l); - l[3] = (XtPointer)POST_SCALE; register_activate_cb_list (w->M.scaleButt[n],l); - l[3] = (XtPointer)POST_COLOR; register_activate_cb_list (w->M.colorButt[n],l); - l[3] = (XtPointer)POST_VECTOR; register_activate_cb_list (w->M.vectorButt[n],l); - l[3] = (XtPointer)POST_TIME_STEP; register_activate_cb_list (w->M.timeStepButt[n],l); - l[3] = (XtPointer)POST_EXPORT_BGM; register_activate_cb_list (w->M.exportBGMButt[n],l); - l[3] = (XtPointer)POST_APPLY_BGM; register_activate_cb_list (w->M.applyBGMButt[n],l); - } - -} - - -void RegisterCallbacks_G(Widgets_T *w){ - - register_GLexpose_cb (w->G.glw, ExposeCb, NULL); - register_GLresize_cb (w->G.glw, ResizeCb, NULL); - register_GLinit_cb (w->G.glw, InitCb, NULL); - register_GLinput_cb (w->G.glw, InputCb, NULL); - - if(CTX.overlay){ - register_GLexpose_cb (w->G.glo, ExposeCb, NULL); - register_GLresize_cb (w->G.glo, ResizeCb, NULL); - register_GLinput_cb (w->G.glo, InputCb, NULL); - } - - register_activate_cb (w->G.Butt[0], OptionsCb, OPTIONS_XVIEW); - register_activate_cb (w->G.Butt[1], OptionsCb, OPTIONS_YVIEW); - register_activate_cb (w->G.Butt[2], OptionsCb, OPTIONS_ZVIEW); - register_activate_cb (w->G.Butt[3], OptionsCb, OPTIONS_CVIEW); - register_activate_cb (w->G.Butt[4], OptionsCb, OPTIONS_PVIEW); - register_activate_cb (w->G.Butt[5], OptionsCb, OPTIONS_POST_ANIM_START); - register_activate_cb (w->G.Butt[6], OptionsCb, OPTIONS_MESH_ABORT); - -} - -void Set_AnimCallback(Widgets_T *w, int start){ - if(start){ - register_remove_cb (w->G.Butt[5], OptionsCb, OPTIONS_POST_ANIM_STOP); - register_activate_cb (w->G.Butt[5], OptionsCb, OPTIONS_POST_ANIM_START); - } - else{ - register_remove_cb (w->G.Butt[5], OptionsCb, OPTIONS_POST_ANIM_START); - register_activate_cb (w->G.Butt[5], OptionsCb, OPTIONS_POST_ANIM_STOP); - } -} - - -void RegisterCallbacks_C(Widgets_T *w){ - -} - - -void RegisterCallbacks_ED(Widgets_T *w){ - - register_ok_cb (w->ED.saveAsDialog, FileCb, FILE_SAVE_AS_OVERWRITE); - -} - - -void RegisterCallbacks_FD(Widgets_T *w){ - - register_ok_cb (w->FD.openDialog, FileCb, FILE_LOAD_GEOM); - register_cancel_cb (w->FD.openDialog, ManageCb, w->FD.openDialog); - - register_ok_cb (w->FD.mergeDialog, FileCb, FILE_LOAD_POST); - register_cancel_cb (w->FD.mergeDialog, ManageCb, w->FD.mergeDialog); - - register_ok_cb (w->FD.saveAsDialog, FileCb, FILE_SAVE_AS); - register_cancel_cb (w->FD.saveAsDialog, ManageCb, w->FD.saveAsDialog); - register_activate_cb (w->FD.saveAsButt[0], OptionsCb, OPTIONS_SAVE_AUTO); - register_activate_cb (w->FD.saveAsButt[1], OptionsCb, OPTIONS_SAVE_GEO); - register_activate_cb (w->FD.saveAsButt[2], OptionsCb, OPTIONS_SAVE_MSH); - register_activate_cb (w->FD.saveAsButt[3], OptionsCb, OPTIONS_SAVE_UNV); - register_activate_cb (w->FD.saveAsButt[4], OptionsCb, OPTIONS_SAVE_GREF); - register_activate_cb (w->FD.saveAsButt[5], OptionsCb, OPTIONS_SAVE_EPS_SIMPLE); - register_activate_cb (w->FD.saveAsButt[6], OptionsCb, OPTIONS_SAVE_EPS_COMPLEX); - register_activate_cb (w->FD.saveAsButt[7], OptionsCb, OPTIONS_SAVE_XPM); - register_activate_cb (w->FD.saveAsButt[8], OptionsCb, OPTIONS_SAVE_JPEG); - register_activate_cb (w->FD.saveAsButt[9], OptionsCb, OPTIONS_SAVE_GIF); - register_activate_cb (w->FD.saveAsButt[10], OptionsCb, OPTIONS_SAVE_GIF_DITHERED); - register_activate_cb (w->FD.saveAsButt[11], OptionsCb, OPTIONS_SAVE_GIF_TRANSPARENT); - register_activate_cb (w->FD.saveAsButt[12], OptionsCb, OPTIONS_SAVE_PPM); - register_activate_cb (w->FD.saveAsButt[13], OptionsCb, OPTIONS_SAVE_YUV); - - register_ok_cb (w->FD.saveOptionsAsDialog, FileCb, FILE_SAVE_OPTIONS_AS); - register_cancel_cb (w->FD.saveOptionsAsDialog, ManageCb, w->FD.saveOptionsAsDialog); -} - -void RegisterCallbacks_OD(Widgets_T *w){ - - register_ok_cb (w->OD.geomDialog, OptionsCb, OPTIONS_REPLOT); - register_cancel_cb (w->OD.geomDialog, ManageCb, w->OD.geomDialog); - register_valchg_cb (w->OD.geomVisibleTypeButt[0], OptionsCb, OPTIONS_GEOM_VISIBILITY_ENTITY); - register_valchg_cb (w->OD.geomVisibleTypeButt[1], OptionsCb, OPTIONS_GEOM_VISIBILITY_NUMBER); - register_valchg_cb (w->OD.geomVisibleButt[0], OptionsCb, OPTIONS_GEOM_POINTS); - register_valchg_cb (w->OD.geomVisibleButt[1], OptionsCb, OPTIONS_GEOM_LINES); - register_valchg_cb (w->OD.geomVisibleButt[2], OptionsCb, OPTIONS_GEOM_SURFACES); - register_valchg_cb (w->OD.geomVisibleButt[3], OptionsCb, OPTIONS_GEOM_VOLUMES); - register_activate_cb(w->OD.geomVisibleByNumText, OptionsCb, OPTIONS_GEOM_HIDE_SHOW); - register_valchg_cb (w->OD.geomNormalsScale, OptionsCb, OPTIONS_GEOM_NORMALS_SCALE); - register_drag_cb (w->OD.geomNormalsScale, OptionsCb, OPTIONS_GEOM_NORMALS_SCALE); - register_activate_cb(w->OD.geomNormalsText, OptionsCb, OPTIONS_GEOM_NORMALS_TEXT); - register_valchg_cb (w->OD.geomTangentsScale, OptionsCb, OPTIONS_GEOM_TANGENTS_SCALE); - register_drag_cb (w->OD.geomTangentsScale, OptionsCb, OPTIONS_GEOM_TANGENTS_SCALE); - register_activate_cb(w->OD.geomTangentsText, OptionsCb, OPTIONS_GEOM_TANGENTS_TEXT); - - register_ok_cb (w->OD.meshDialog, OptionsCb, OPTIONS_REPLOT); - register_cancel_cb (w->OD.meshDialog, ManageCb, w->OD.meshDialog); - register_valchg_cb (w->OD.meshAlgoButt[0], OptionsCb, OPTIONS_MESH_DEGRE2); - register_valchg_cb (w->OD.meshAlgoButt[1], OptionsCb, OPTIONS_MESH_ANISOTROPIC); - register_valchg_cb (w->OD.meshAlgoButt[2], OptionsCb, OPTIONS_MESH_INTERACTIVE); - register_valchg_cb (w->OD.meshSmoothingScale, OptionsCb, OPTIONS_MESH_SMOOTHING_SCALE); - register_drag_cb (w->OD.meshSmoothingScale, OptionsCb, OPTIONS_MESH_SMOOTHING_SCALE); - register_activate_cb(w->OD.meshSmoothingText, OptionsCb, OPTIONS_MESH_SMOOTHING_TEXT); - register_valchg_cb (w->OD.meshVisibleTypeButt[0], OptionsCb, OPTIONS_MESH_VISIBILITY_ENTITY); - register_valchg_cb (w->OD.meshVisibleTypeButt[1], OptionsCb, OPTIONS_MESH_VISIBILITY_NUMBER); - register_valchg_cb (w->OD.meshVisibleButt[0], OptionsCb, OPTIONS_MESH_POINTS); - register_valchg_cb (w->OD.meshVisibleButt[1], OptionsCb, OPTIONS_MESH_LINES); - register_valchg_cb (w->OD.meshVisibleButt[2], OptionsCb, OPTIONS_MESH_SURFACES); - register_valchg_cb (w->OD.meshVisibleButt[3], OptionsCb, OPTIONS_MESH_VOLUMES); - register_valchg_cb (w->OD.meshVisibleByNumButt[0], OptionsCb, OPTIONS_MESH_SELECT_ENTITY); - register_valchg_cb (w->OD.meshVisibleByNumButt[1], OptionsCb, OPTIONS_MESH_SELECT_QUALITY); - register_activate_cb(w->OD.meshVisibleByNumText, OptionsCb, OPTIONS_MESH_HIDE_SHOW); - register_valchg_cb (w->OD.meshAspectButt[0], OptionsCb, OPTIONS_MESH_WIREFRAME); - register_valchg_cb (w->OD.meshAspectButt[1], OptionsCb, OPTIONS_MESH_HIDDEN_LINES); - register_valchg_cb (w->OD.meshAspectButt[2], OptionsCb, OPTIONS_MESH_SHADING); - register_valchg_cb (w->OD.meshExplodeScale, OptionsCb, OPTIONS_MESH_EXPLODE_SCALE); - register_drag_cb (w->OD.meshExplodeScale, OptionsCb, OPTIONS_MESH_EXPLODE_SCALE); - register_activate_cb(w->OD.meshExplodeText, OptionsCb, OPTIONS_MESH_EXPLODE_TEXT); - register_valchg_cb (w->OD.meshNormalsScale, OptionsCb, OPTIONS_MESH_NORMALS_SCALE); - register_drag_cb (w->OD.meshNormalsScale, OptionsCb, OPTIONS_MESH_NORMALS_SCALE); - register_activate_cb(w->OD.meshNormalsText, OptionsCb, OPTIONS_MESH_NORMALS_TEXT); - - register_ok_cb (w->OD.postDialog, OptionsCb, OPTIONS_REPLOT); - register_cancel_cb (w->OD.postDialog, ManageCb, w->OD.postDialog); - register_valchg_cb (w->OD.postLinkButt[0], OptionsCb, OPTIONS_POST_LINK_NONE); - register_valchg_cb (w->OD.postLinkButt[1], OptionsCb, OPTIONS_POST_LINK_VISIBLE); - register_valchg_cb (w->OD.postLinkButt[2], OptionsCb, OPTIONS_POST_LINK_ALL); - register_valchg_cb (w->OD.postAnimScale, OptionsCb, OPTIONS_POST_ANIM_DELAY); - register_drag_cb (w->OD.postAnimScale, OptionsCb, OPTIONS_POST_ANIM_DELAY); - - register_ok_cb (w->OD.miscDialog, OptionsCb, OPTIONS_REPLOT); - register_cancel_cb (w->OD.miscDialog, ManageCb, w->OD.miscDialog); - register_valchg_cb (w->OD.miscMiscButt[0], OptionsCb, OPTIONS_AXES); - register_valchg_cb (w->OD.miscMiscButt[1], OptionsCb, OPTIONS_LITTLE_AXES); - register_valchg_cb (w->OD.miscMiscButt[2], OptionsCb, OPTIONS_FAST_REDRAW); - register_valchg_cb (w->OD.miscMiscButt[3], OptionsCb, OPTIONS_DISPLAY_LISTS); - register_valchg_cb (w->OD.miscMiscButt[4], OptionsCb, OPTIONS_ALPHA_BLENDING); - register_valchg_cb (w->OD.miscMiscButt[5], OptionsCb, OPTIONS_TRACKBALL); - register_valchg_cb (w->OD.miscColorSchemeScale, OptionsCb, OPTIONS_COLOR_SCHEME_SCALE); - register_drag_cb (w->OD.miscColorSchemeScale, OptionsCb, OPTIONS_COLOR_SCHEME_SCALE); - register_valchg_cb (w->OD.miscProjButt[0], OptionsCb, OPTIONS_ORTHOGRAPHIC); - register_valchg_cb (w->OD.miscProjButt[1], OptionsCb, OPTIONS_PERSPECTIVE); - register_valchg_cb (w->OD.miscLightScale[0], OptionsCb, OPTIONS_LIGHT_X_SCALE); - register_drag_cb (w->OD.miscLightScale[0], OptionsCb, OPTIONS_LIGHT_X_SCALE); - register_valchg_cb (w->OD.miscLightScale[1], OptionsCb, OPTIONS_LIGHT_Y_SCALE); - register_drag_cb (w->OD.miscLightScale[1], OptionsCb, OPTIONS_LIGHT_Y_SCALE); - register_valchg_cb (w->OD.miscLightScale[2], OptionsCb, OPTIONS_LIGHT_Z_SCALE); - register_drag_cb (w->OD.miscLightScale[2], OptionsCb, OPTIONS_LIGHT_Z_SCALE); - register_valchg_cb (w->OD.miscShineScale, OptionsCb, OPTIONS_SHINE_SCALE); - register_drag_cb (w->OD.miscShineScale, OptionsCb, OPTIONS_SHINE_SCALE); - - register_ok_cb (w->OD.viewportDialog, OptionsCb, OPTIONS_REPLOT); - register_cancel_cb (w->OD.viewportDialog, ManageCb, w->OD.viewportDialog); - register_valchg_cb (w->OD.viewportText[0][0], OptionsCb, OPTIONS_ROTX); - register_valchg_cb (w->OD.viewportText[0][1], OptionsCb, OPTIONS_ROTY); - register_valchg_cb (w->OD.viewportText[0][2], OptionsCb, OPTIONS_ROTZ); - register_valchg_cb (w->OD.viewportText[1][0], OptionsCb, OPTIONS_TRANX); - register_valchg_cb (w->OD.viewportText[1][1], OptionsCb, OPTIONS_TRANY); - register_valchg_cb (w->OD.viewportText[1][2], OptionsCb, OPTIONS_TRANZ); - register_valchg_cb (w->OD.viewportText[2][0], OptionsCb, OPTIONS_SCALEX); - register_valchg_cb (w->OD.viewportText[2][1], OptionsCb, OPTIONS_SCALEY); - register_valchg_cb (w->OD.viewportText[2][2], OptionsCb, OPTIONS_SCALEZ); - register_valchg_cb (w->OD.viewportLockButt[0][0], OptionsCb, OPTIONS_ROTX_LOCKED); - register_valchg_cb (w->OD.viewportLockButt[0][1], OptionsCb, OPTIONS_ROTY_LOCKED); - register_valchg_cb (w->OD.viewportLockButt[0][2], OptionsCb, OPTIONS_ROTZ_LOCKED); - register_valchg_cb (w->OD.viewportLockButt[1][0], OptionsCb, OPTIONS_TRANX_LOCKED); - register_valchg_cb (w->OD.viewportLockButt[1][1], OptionsCb, OPTIONS_TRANY_LOCKED); - register_valchg_cb (w->OD.viewportLockButt[1][2], OptionsCb, OPTIONS_TRANZ_LOCKED); - register_valchg_cb (w->OD.viewportLockButt[2][0], OptionsCb, OPTIONS_SCALEX_LOCKED); - register_valchg_cb (w->OD.viewportLockButt[2][1], OptionsCb, OPTIONS_SCALEY_LOCKED); - register_valchg_cb (w->OD.viewportLockButt[2][2], OptionsCb, OPTIONS_SCALEZ_LOCKED); - - register_ok_cb (w->OD.infoDialog, CurrentInfoCb, 0); - register_cancel_cb (w->OD.infoDialog, ManageCb, w->OD.infoDialog); - -} - -void RegisterCallbacks_HD(Widgets_T *w){ - -} - -void RegisterCallbacks_GD(Widgets_T *w){ - - register_ok_cb (w->GD.paramDialog, GeomCb, GEOM_PARAMETER_ADD); - register_cancel_cb (w->GD.paramDialog, ManageCb, w->GD.paramDialog); - register_valchg_cb (w->GD.paramText[0], GeomCb, GEOM_PARAMETER_NAME); - register_valchg_cb (w->GD.paramText[1], GeomCb, GEOM_PARAMETER_VALUE); - - register_ok_cb (w->GD.pointDialog, GeomCb, GEOM_POINT_ADD); - register_cancel_cb (w->GD.pointDialog, ManageCb, w->GD.pointDialog); - register_valchg_cb (w->GD.pointText[0], GeomCb, GEOM_POINT_X); - register_valchg_cb (w->GD.pointText[1], GeomCb, GEOM_POINT_Y); - register_valchg_cb (w->GD.pointText[2], GeomCb, GEOM_POINT_Z); - register_valchg_cb (w->GD.pointText[3], GeomCb, GEOM_POINT_L); - - register_cancel_cb (w->GD.rotDialog, ManageCb, w->GD.rotDialog); - register_valchg_cb (w->GD.rotText[0], GeomCb, GEOM_ROT_PX); - register_valchg_cb (w->GD.rotText[1], GeomCb, GEOM_ROT_PY); - register_valchg_cb (w->GD.rotText[2], GeomCb, GEOM_ROT_PZ); - register_valchg_cb (w->GD.rotText[3], GeomCb, GEOM_ROT_AX); - register_valchg_cb (w->GD.rotText[4], GeomCb, GEOM_ROT_AY); - register_valchg_cb (w->GD.rotText[5], GeomCb, GEOM_ROT_AZ); - register_valchg_cb (w->GD.rotText[6], GeomCb, GEOM_ROT_ANGLE); - - register_cancel_cb (w->GD.tranDialog, ManageCb, w->GD.tranDialog); - register_valchg_cb (w->GD.tranText[0], GeomCb, GEOM_TRAN_X); - register_valchg_cb (w->GD.tranText[1], GeomCb, GEOM_TRAN_Y); - register_valchg_cb (w->GD.tranText[2], GeomCb, GEOM_TRAN_Z); - - register_cancel_cb (w->GD.dilatDialog, ManageCb, w->GD.dilatDialog); - register_valchg_cb (w->GD.dilatText[0], GeomCb, GEOM_DILAT_X); - register_valchg_cb (w->GD.dilatText[1], GeomCb, GEOM_DILAT_Y); - register_valchg_cb (w->GD.dilatText[2], GeomCb, GEOM_DILAT_Z); - register_valchg_cb (w->GD.dilatText[3], GeomCb, GEOM_DILAT_F); - - register_cancel_cb (w->GD.symmDialog, ManageCb, w->GD.symmDialog); - register_valchg_cb (w->GD.symmText[0], GeomCb, GEOM_SYMMETRY_A); - register_valchg_cb (w->GD.symmText[1], GeomCb, GEOM_SYMMETRY_B); - register_valchg_cb (w->GD.symmText[2], GeomCb, GEOM_SYMMETRY_C); - register_valchg_cb (w->GD.symmText[3], GeomCb, GEOM_SYMMETRY_D); -} - -void RegisterCallbacks_MD(Widgets_T *w){ - - register_cancel_cb (w->MD.charLengthDialog, ManageCb, w->MD.charLengthDialog); - register_valchg_cb (w->MD.charLengthText, MeshCb, MESH_CHAR_LENGTH); - - register_cancel_cb (w->MD.trsfLineDialog, ManageCb, w->MD.trsfLineDialog); - register_valchg_cb (w->MD.trsfLineText[0], MeshCb, MESH_TRSF_LINE_TYPE); - register_valchg_cb (w->MD.trsfLineText[1], MeshCb, MESH_TRSF_LINE_PTS); - - register_cancel_cb (w->MD.trsfVolumeDialog, ManageCb, w->MD.trsfVolumeDialog); - register_valchg_cb (w->MD.trsfVolumeText, MeshCb, MESH_TRSF_VOL_NUM); - -} - -void RegisterCallbacks_PD(Widgets_T *w){ - - register_ok_cb (w->PD.offsetDialog, OptionsCb, OPTIONS_REPLOT); - register_cancel_cb (w->PD.offsetDialog, ManageCb, w->PD.offsetDialog); - register_valchg_cb (w->PD.offsetModeButt[0], PostCb, POST_OFFSET_TRANSLATE); - register_valchg_cb (w->PD.offsetModeButt[1], PostCb, POST_OFFSET_RAISE); - register_valchg_cb (w->PD.offsetScale[0], PostCb, POST_OFFSET_X_SCALE); - register_drag_cb (w->PD.offsetScale[0], PostCb, POST_OFFSET_X_SCALE); - register_activate_cb (w->PD.offsetText[0], PostCb, POST_OFFSET_X_TEXT); - register_valchg_cb (w->PD.offsetScale[1], PostCb, POST_OFFSET_Y_SCALE); - register_drag_cb (w->PD.offsetScale[1], PostCb, POST_OFFSET_Y_SCALE); - register_activate_cb (w->PD.offsetText[1], PostCb, POST_OFFSET_Y_TEXT); - register_valchg_cb (w->PD.offsetScale[2], PostCb, POST_OFFSET_Z_SCALE); - register_drag_cb (w->PD.offsetScale[2], PostCb, POST_OFFSET_Z_SCALE); - register_activate_cb (w->PD.offsetText[2], PostCb, POST_OFFSET_Z_TEXT); - - register_ok_cb (w->PD.timeStepDialog, OptionsCb, OPTIONS_REPLOT); - register_cancel_cb (w->PD.timeStepDialog, ManageCb, w->PD.timeStepDialog); - register_valchg_cb (w->PD.timeStepScale, PostCb, POST_TIME_STEP_SCALE); - register_drag_cb (w->PD.timeStepScale, PostCb, POST_TIME_STEP_SCALE); - register_activate_cb (w->PD.timeStepText, PostCb, POST_TIME_STEP_TEXT); - - register_ok_cb (w->PD.scaleDialog, OptionsCb, OPTIONS_REPLOT); - register_cancel_cb (w->PD.scaleDialog, ManageCb, w->PD.scaleDialog); - register_valchg_cb (w->PD.scaleShowButt, PostCb, POST_SCALE_SHOW); - register_valchg_cb (w->PD.scaleTransButt, PostCb, POST_SCALE_TRANSPARENCY); - register_valchg_cb (w->PD.scaleTimeButt, PostCb, POST_SCALE_TIME); - register_valchg_cb (w->PD.scaleText[0], PostCb, POST_SCALE_FORMAT); - register_valchg_cb (w->PD.scaleText[1], PostCb, POST_SCALE_LABEL); - register_valchg_cb (w->PD.scaleRangeButt, PostCb, POST_SCALE_FORCE_RANGE); - register_valchg_cb (w->PD.scaleRangeText[0], PostCb, POST_SCALE_MIN); - register_valchg_cb (w->PD.scaleRangeText[1], PostCb, POST_SCALE_MAX); - register_valchg_cb (w->PD.scaleTypeButt[0], PostCb, POST_SCALE_TYPE_LIN); - register_valchg_cb (w->PD.scaleTypeButt[1], PostCb, POST_SCALE_TYPE_LOG); - register_valchg_cb (w->PD.scaleIntervalsButt[0], PostCb, POST_SCALE_INTERVALS_TYPE_ISO); - register_valchg_cb (w->PD.scaleIntervalsButt[1], PostCb, POST_SCALE_INTERVALS_TYPE_DISCRETE); - register_valchg_cb (w->PD.scaleIntervalsButt[2], PostCb, POST_SCALE_INTERVALS_TYPE_CONTINUOUS); - register_valchg_cb (w->PD.scaleIntervalsButt[3], PostCb, POST_SCALE_INTERVALS_TYPE_NUMERIC); - register_valchg_cb (w->PD.scaleIntervalsScale, PostCb, POST_SCALE_INTERVALS_SCALE); - register_drag_cb (w->PD.scaleIntervalsScale, PostCb, POST_SCALE_INTERVALS_SCALE); - register_activate_cb (w->PD.scaleIntervalsText, PostCb, POST_SCALE_INTERVALS_TEXT); - - register_ok_cb (w->PD.colorDialog, PostCb, POST_COLOR_REPLOT); - register_cancel_cb (w->PD.colorDialog, ManageCb, w->PD.colorDialog); - register_expose_cb (w->PD.colorDrawingArea, ColorBarExposeCb, NULL); - register_resize_cb (w->PD.colorDrawingArea, ColorBarResizeCb, NULL); - register_input_cb (w->PD.colorDrawingArea, ColorBarInputCb, NULL); - - register_ok_cb (w->PD.vectorDialog, OptionsCb, OPTIONS_REPLOT); - register_cancel_cb (w->PD.vectorDialog, ManageCb, w->PD.vectorDialog); - register_valchg_cb (w->PD.vectorTypeButt[0], PostCb, POST_VECTOR_TYPE_SEGMENT); - register_valchg_cb (w->PD.vectorTypeButt[1], PostCb, POST_VECTOR_TYPE_ARROW); - register_valchg_cb (w->PD.vectorTypeButt[2], PostCb, POST_VECTOR_TYPE_PYRAMID); - register_valchg_cb (w->PD.vectorTypeButt[3], PostCb, POST_VECTOR_TYPE_CONE); - register_valchg_cb (w->PD.vectorTypeButt[4], PostCb, POST_VECTOR_TYPE_DISPLACEMENT); - register_valchg_cb (w->PD.vectorScaleScale, PostCb, POST_VECTOR_SCALE_SCALE); - register_drag_cb (w->PD.vectorScaleScale, PostCb, POST_VECTOR_SCALE_SCALE); - register_activate_cb (w->PD.vectorScaleText, PostCb, POST_VECTOR_SCALE_TEXT); - register_valchg_cb (w->PD.vectorLocationButt[0],PostCb, POST_VECTOR_LOCATION_COG); - register_valchg_cb (w->PD.vectorLocationButt[1],PostCb, POST_VECTOR_LOCATION_VERTEX); - - register_ok_cb (w->PD.exportBGMDialog, PostCb, POST_EXPORT_BGM_CREATE); - register_cancel_cb (w->PD.exportBGMDialog, ManageCb, w->PD.exportBGMDialog); - register_activate_cb (w->PD.exportBGMButt[0], PostCb, POST_EXPORT_BGM_METHOD_H_ERROR) ; - register_activate_cb (w->PD.exportBGMButt[1], PostCb, POST_EXPORT_BGM_METHOD_H_ELEMENTS) ; - register_activate_cb (w->PD.exportBGMButt[2], PostCb, POST_EXPORT_BGM_METHOD_P_ERROR) ; - register_activate_cb (w->PD.exportBGMButt[3], PostCb, POST_EXPORT_BGM_METHOD_P_ELEMENTS) ; - register_valchg_cb (w->PD.exportBGMText, PostCb, POST_EXPORT_BGM_CONSTRAINT) ; - -} - - - -void RegisterCallbacks(Widgets_T *w){ - - RegisterCallbacks_M(w); /* menu win */ - RegisterCallbacks_G(w); /* graphic win */ - if(CTX.command_win) RegisterCallbacks_C(w); /* command win */ - - RegisterCallbacks_ED(w); /* error dialogs */ - RegisterCallbacks_FD(w); /* file dialogs */ - RegisterCallbacks_OD(w); /* option dialogs */ - RegisterCallbacks_HD(w); /* help dialogs */ - RegisterCallbacks_GD(w); /* geometry dialogs */ - RegisterCallbacks_MD(w); /* mesh dialogs */ - RegisterCallbacks_PD(w); /* post dialogs */ - -} - - diff --git a/Motif/Register.h b/Motif/Register.h deleted file mode 100644 index 126a166dc5cc1dc0286b44b8103653490e1f3266..0000000000000000000000000000000000000000 --- a/Motif/Register.h +++ /dev/null @@ -1,142 +0,0 @@ -#ifndef _REGISTER_H_ -#define _REGISTER_H_ - -void InitCb(Widget w, XtPointer client_data, GLwDrawingAreaCallbackStruct *cb); -void ResizeCb(Widget w,XtPointer client_data, GLwDrawingAreaCallbackStruct *cb); -void ExposeCb(Widget w,XtPointer client_data, GLwDrawingAreaCallbackStruct *cb); - -void RegisterCallbacks(Widgets_T *w); - -void ActualizeContextCb (Widget w, XtPointer client_data, XtPointer call_data); - -void ExposeCb(Widget w, XtPointer client_data, GLwDrawingAreaCallbackStruct *call_data); -void InitCb (Widget w, XtPointer client_data, GLwDrawingAreaCallbackStruct *call_data); -void InputCb (Widget w, XtPointer client_data, GLwDrawingAreaCallbackStruct *call_data); -void ResizeCb(Widget w, XtPointer client_data, GLwDrawingAreaCallbackStruct *call_data); - -void ColorBarResizeCb(Widget w, XtPointer client_data, XmDrawingAreaCallbackStruct *cb); -void ColorBarExposeCb(Widget w, XtPointer client_data, XmDrawingAreaCallbackStruct *cb); -void ColorBarInputCb (Widget w, XtPointer client_data, XmDrawingAreaCallbackStruct *cb); - -void ExitCb (Widget w, XtPointer client_data, XtPointer call_data); -void ManageCb (Widget w, XtPointer client_data, XtPointer call_data); -void PreviousContextCb (Widget w, XtPointer client_data, XtPointer call_data); -void NextContextCb (Widget w, XtPointer client_data, XtPointer call_data); -void ActualizeContextCb (Widget w, XtPointer client_data, XtPointer call_data); -void DrawAboutCb (Widget w, XtPointer client_data, XtPointer call_data); -void CurrentInfoCb (Widget w, XtPointer client_data, XtPointer call_data); -void CurrentViewportCb (Widget w, XtPointer client_data, XtPointer call_data); -void CurrentViewCb (Widget w, XtPointer client_data, XtPointer call_data); -void SwapViewCb (Widget w, XtPointer client_data, XtPointer call_data); -void DuplicateViewCb (Widget w, XtPointer client_data, XtPointer call_data); -void ReloadViewCb (Widget w, XtPointer client_data, XtPointer call_data); -void ReloadAllViewsCb (Widget w, XtPointer client_data, XtPointer call_data); -void RemoveViewCb (Widget w, XtPointer client_data, XtPointer call_data); -void RemoveAllViewsCb (Widget w, XtPointer client_data, XtPointer call_data); - -void OptionsCb (Widget w, XtPointer client_data, XtPointer call_data); -void FileCb (Widget w, XtPointer client_data, XtPointer call_data); -void GeomCb (Widget w, XtPointer client_data, XtPointer call_data); -void MeshCb (Widget w, XtPointer client_data, XtPointer call_data); -void PostDialogCb (Widget w, XtPointer client_data, XtPointer call_data); -void PostCb (Widget w, XtPointer client_data, XtPointer call_data); - -void PopupHandler (Widget w, Widget pw, XEvent *event, Boolean *ctd); - - -/* special GL callback registering */ - -#define register_GLexpose_cb(w, func, arg) \ - XtAddCallback((w), GLwNexposeCallback, \ - (XtCallbackProc) (func), \ - (XtPointer) (arg)) - -#define register_GLresize_cb(w, func, arg) \ - XtAddCallback((w), GLwNresizeCallback, \ - (XtCallbackProc) (func), \ - (XtPointer) (arg)) - -#define register_GLinput_cb(w, func, arg) \ - XtAddCallback((w), GLwNinputCallback, \ - (XtCallbackProc) (func), \ - (XtPointer) (arg)) - -#define register_GLinit_cb(w, func, arg) \ - XtAddCallback((w), GLwNginitCallback, \ - (XtCallbackProc) (func), \ - (XtPointer) (arg)) - -/* classic motif callback registering */ - -#define register_help_cb(w, func, arg) \ - XtAddCallback((w), XmNhelpCallback, \ - (XtCallbackProc) (func), \ - (XtPointer) (arg)) - -#define register_expose_cb(w, func, arg) \ - XtAddCallback((w), XmNexposeCallback, \ - (XtCallbackProc) (func), \ - (XtPointer) (arg)) - -#define register_resize_cb(w, func, arg) \ - XtAddCallback((w), XmNresizeCallback, \ - (XtCallbackProc) (func), \ - (XtPointer) (arg)) - -#define register_input_cb(w, func, arg) \ - XtAddCallback((w), XmNinputCallback, \ - (XtCallbackProc) (func), \ - (XtPointer) (arg)) - -#define register_activate_cb(w, func, arg) \ - XtAddCallback((w), XmNactivateCallback, \ - (XtCallbackProc) (func), \ - (XtPointer) (arg)) - -#define register_remove_cb(w, func, arg) \ - XtRemoveCallback((w), XmNactivateCallback, \ - (XtCallbackProc) (func), \ - (XtPointer) (arg)) - -#define register_activate_cb_list(w, list) \ - XtAddCallbacks((w), XmNactivateCallback, \ - (XtCallbackList)(list)) - -#define register_valchg_cb(w, func, arg) \ - XtAddCallback((w), XmNvalueChangedCallback, \ - (XtCallbackProc) (func), \ - (XtPointer) (arg)) - -#define register_valchg_cb_list(w, list) \ - XtAddCallbacks((w), XmNvalueChangedCallback, \ - (XtCallbackList)(list)) - -#define register_ok_cb(w, func, arg) \ - XtAddCallback((w), XmNokCallback, \ - (XtCallbackProc) (func), \ - (XtPointer) (arg)) - -#define register_cancel_cb(w, func, arg) \ - XtAddCallback((w), XmNcancelCallback, \ - (XtCallbackProc) (func), \ - (XtPointer) (arg)) - -#define register_apply_cb(w, func, arg) \ - XtAddCallback((w), XmNapplyCallback, \ - (XtCallbackProc) (func), \ - (XtPointer) (arg)) - -#define register_drag_cb(w, func, arg) \ - XtAddCallback((w), XmNdragCallback, \ - (XtCallbackProc) (func), \ - (XtPointer) (arg)) - -/* event loop */ - -#define register_popup_ev(parent, w) \ - XtAddEventHandler((parent), ButtonPressMask, \ - False, \ - (XtEventHandler)PopupHandler, \ - (XtPointer)(w)) - -#endif diff --git a/Motif/Widgets.cpp b/Motif/Widgets.cpp deleted file mode 100644 index 0851d7a7e5c8be0f42f130c86f54ef421869a6f5..0000000000000000000000000000000000000000 --- a/Motif/Widgets.cpp +++ /dev/null @@ -1,2747 +0,0 @@ -// $Id: Widgets.cpp,v 1.3 2001-02-12 17:38:03 geuzaine Exp $ - -#include "Gmsh.h" -#include "GmshUI.h" -#include "Mesh.h" -#include "Context.h" -#include "XContext.h" -#include "Info.h" -#include "Widgets.h" -#include "Help.h" - -extern Context_T CTX ; -extern XContext_T XCTX ; - -/* hardcoded this one, since it is required for the motion handling */ - -static char DrawingAreaTranslations[] = "#replace\n\ -~s ~m ~a <Key>Return:DrawingAreaInput() ManagerParentActivate()\n\ -<Key>Return:DrawingAreaInput() ManagerGadgetSelect()\n\ -<Key>osfActivate:DrawingAreaInput() ManagerParentActivate()\n\ -<Key>osfCancel:DrawingAreaInput() ManagerParentCancel()\n\ -<Key>osfHelp:DrawingAreaInput() ManagerGadgetHelp()\n\ -<Key>space:DrawingAreaInput() ManagerGadgetSelect()\n\ -<Key>osfSelect:DrawingAreaInput() ManagerGadgetSelect()\n\ -<KeyDown>:DrawingAreaInput() ManagerGadgetKeyInput()\n\ -<KeyUp>:DrawingAreaInput()\n\ -<BtnMotion>:DrawingAreaInput() ManagerGadgetButtonMotion()\n\ -<Motion>:DrawingAreaInput() ManagerGadgetButtonMotion()\n\ -<Btn1Down>:DrawingAreaInput() ManagerGadgetArm()\n\ -<Btn1Up>:DrawingAreaInput() ManagerGadgetActivate()\n\ -<Btn2Down>:DrawingAreaInput() ManagerGadgetDrag()\n\ -<BtnDown>:DrawingAreaInput()\n\ -<BtnUp>:DrawingAreaInput()"; - -/* ------------------------------------------------------------------------ - MENU WINDOW - ------------------------------------------------------------------------ */ - -void CreateWidgets_M(Widgets_T *w){ - int i, n ; - Arg arg[10] ; - - /* menu shell */ - w->M.shell = - XtVaAppCreateShell("Gmsh", "gmshMW", applicationShellWidgetClass, XCTX.display, - XmNvisual, XCTX.gui.visual, - XmNcolormap, XCTX.gui.colormap, - NULL); - - /* menu main window */ - i=0; - w->M.containerWin = XmCreateMainWindow(w->M.shell, "McontainerWin", arg, i); - XtManageChild(w->M.containerWin); - - /* menu bar */ - i=0; - w->M.menuBar = XmCreateMenuBar(w->M.containerWin, "MmenuBar", arg, i); - XtManageChild(w->M.menuBar); - - /* file menu */ - i=0; - w->M.filePane = XmCreatePulldownMenu(w->M.menuBar, "MfilePane", arg, i); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Open")); i++; - XtSetArg(arg[i], XmNacceleratorText, XmStringCreateSimple("(C-o)")); i++; - XtSetArg(arg[i], XmNaccelerator, "Ctrl<Key>o:"); i++; - w->M.fileButt[0] = XmCreatePushButton(w->M.filePane, "MfileButt0", arg, i); - XtManageChild(w->M.fileButt[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Merge")); i++; - XtSetArg(arg[i], XmNacceleratorText, XmStringCreateSimple("(C-m)")); i++; - XtSetArg(arg[i], XmNaccelerator, "Ctrl<Key>m:"); i++; - w->M.fileButt[1] = XmCreatePushButton(w->M.filePane, "MfileButt1", arg, i); - XtManageChild(w->M.fileButt[1]); - - i=0; - w->M.fileSep[0] = XmCreateSeparator(w->M.filePane, "MfileSep0", arg, i); - XtManageChild(w->M.fileSep[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Save Mesh")); i++; - XtSetArg(arg[i], XmNacceleratorText, XmStringCreateSimple("(C-s)")); i++; - XtSetArg(arg[i], XmNaccelerator, "Ctrl<Key>s:"); i++; - w->M.fileButt[2] = XmCreatePushButton(w->M.filePane, "MfileButt2", arg, i); - XtManageChild(w->M.fileButt[2]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Save as")); i++; - XtSetArg(arg[i], XmNacceleratorText, XmStringCreateSimple("(C-p)")); i++; - XtSetArg(arg[i], XmNaccelerator, "Ctrl<Key>p:"); i++; - w->M.fileButt[3] = XmCreatePushButton(w->M.filePane, "MfileButt3", arg, i); - XtManageChild(w->M.fileButt[3]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Save Options as")); i++; - w->M.fileButt[4] = XmCreatePushButton(w->M.filePane, "MfileButt4", arg, i); - XtManageChild(w->M.fileButt[4]); - - i=0; - w->M.fileSep[1] = XmCreateSeparator(w->M.filePane, "MfileSep1", arg, i); - XtManageChild(w->M.fileSep[1]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Reload All Views")); i++; - XtSetArg(arg[i], XmNacceleratorText, XmStringCreateSimple("(C-l)")); i++; - XtSetArg(arg[i], XmNaccelerator, "Ctrl<Key>l:"); i++; - w->M.fileButt[5] = XmCreatePushButton(w->M.filePane, "MfileButt6", arg, i); - XtManageChild(w->M.fileButt[5]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Remove All Views")); i++; - XtSetArg(arg[i], XmNacceleratorText, XmStringCreateSimple("(C-r)")); i++; - XtSetArg(arg[i], XmNaccelerator, "Ctrl<Key>r:"); i++; - w->M.fileButt[6] = XmCreatePushButton(w->M.filePane, "MfileButt7", arg, i); - XtManageChild(w->M.fileButt[6]); - - i=0; - w->M.fileSep[2] = XmCreateSeparator(w->M.filePane, "MfileSep2", arg, i); - XtManageChild(w->M.fileSep[2]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Quit")); i++; - XtSetArg(arg[i], XmNacceleratorText, XmStringCreateSimple("(C-q)")); i++; - XtSetArg(arg[i], XmNaccelerator, "Ctrl<Key>q:"); i++; - w->M.fileButt[7] = XmCreatePushButton(w->M.filePane, "MfileButt8", arg, i); - XtManageChild(w->M.fileButt[7]); - - i=0; - XtSetArg(arg[i], XmNsubMenuId, w->M.filePane); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("File")); i++; - w->M.fileCascade = XmCreateCascadeButton(w->M.menuBar, "MfileCascade", arg, i); - XtManageChild(w->M.fileCascade); - - /* module menu */ - i=0; - w->M.modulePane = XmCreatePulldownMenu(w->M.menuBar, "MmodulePane", arg, i); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Geometry")); i++; - XtSetArg(arg[i], XmNacceleratorText, XmStringCreateSimple("(g)")); i++; - XtSetArg(arg[i], XmNaccelerator, "<Key>g:"); i++; - w->M.moduleButt[0] = XmCreatePushButton(w->M.modulePane, "MmoduleButt0", arg, i); - XtManageChild(w->M.moduleButt[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Mesh")); i++; - XtSetArg(arg[i], XmNacceleratorText, XmStringCreateSimple("(m)")); i++; - XtSetArg(arg[i], XmNaccelerator, "<Key>m:"); i++; - w->M.moduleButt[1] = XmCreatePushButton(w->M.modulePane, "MmoduleButt1", arg, i); - XtManageChild(w->M.moduleButt[1]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Post Processing")); i++; - XtSetArg(arg[i], XmNacceleratorText, XmStringCreateSimple("(p)")); i++; - XtSetArg(arg[i], XmNaccelerator, "<Key>p:"); i++; - w->M.moduleButt[2] = XmCreatePushButton(w->M.modulePane, "MmoduleButt2", arg, i); - XtManageChild(w->M.moduleButt[2]); - - i=0; - XtSetArg(arg[i], XmNsubMenuId, w->M.modulePane); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Module")); i++; - w->M.moduleCascade = XmCreateCascadeButton(w->M.menuBar, "MmoduleCascade", arg, i); - XtManageChild(w->M.moduleCascade); - - /* option menu */ - i=0; - w->M.optionPane = XmCreatePulldownMenu(w->M.menuBar, "MoptionPane", arg, i); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Geometry Options")); i++; - XtSetArg(arg[i], XmNacceleratorText, XmStringCreateSimple("(S-g)")); i++; - XtSetArg(arg[i], XmNaccelerator, "Shift<Key>g:"); i++; - w->M.optionButt[0] = XmCreatePushButton(w->M.optionPane, "MoptionButt0", arg, i); - XtManageChild(w->M.optionButt[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Mesh Options")); i++; - XtSetArg(arg[i], XmNacceleratorText, XmStringCreateSimple("(S-m)")); i++; - XtSetArg(arg[i], XmNaccelerator, "Shift<Key>m:"); i++; - w->M.optionButt[1] = XmCreatePushButton(w->M.optionPane, "MoptionButt1", arg, i); - XtManageChild(w->M.optionButt[1]); - - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Post Processing Options")); i++; - XtSetArg(arg[i], XmNacceleratorText, XmStringCreateSimple("(S-p)")); i++; - XtSetArg(arg[i], XmNaccelerator, "Shift<Key>p:"); i++; - w->M.optionButt[2] = XmCreatePushButton(w->M.optionPane, "MoptionButt2", arg, i); - XtManageChild(w->M.optionButt[2]); - - i=0; - w->M.optionSep[0] = XmCreateSeparator(w->M.optionPane, "MoptionSep0", arg, i); - XtManageChild(w->M.optionSep[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("General Options")); i++; - XtSetArg(arg[i], XmNacceleratorText, XmStringCreateSimple("(S-o)")); i++; - XtSetArg(arg[i], XmNaccelerator, "Shift<Key>o:"); i++; - w->M.optionButt[3] = XmCreatePushButton(w->M.optionPane, "MoptionButt3", arg, i); - XtManageChild(w->M.optionButt[3]); - - i=0; - w->M.optionSep[1] = XmCreateSeparator(w->M.optionPane, "MoptionSep1", arg, i); - XtManageChild(w->M.optionSep[1]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Viewport")); i++; - XtSetArg(arg[i], XmNacceleratorText, XmStringCreateSimple("(S-v)")); i++; - XtSetArg(arg[i], XmNaccelerator, "Shift<Key>v:"); i++; - w->M.optionButt[4] = XmCreatePushButton(w->M.optionPane, "MoptionButt4", arg, i); - XtManageChild(w->M.optionButt[4]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Statistics")); i++; - XtSetArg(arg[i], XmNacceleratorText, XmStringCreateSimple("(S-i)")); i++; - XtSetArg(arg[i], XmNaccelerator, "Shift<Key>i:"); i++; - w->M.optionButt[5] = XmCreatePushButton(w->M.optionPane, "MoptionButt5", arg, i); - XtManageChild(w->M.optionButt[5]); - - i=0; - XtSetArg(arg[i], XmNsubMenuId, w->M.optionPane); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Options")); i++; - w->M.optionCascade = XmCreateCascadeButton(w->M.menuBar, "MoptionCascade", arg, i); - XtManageChild(w->M.optionCascade); - - /* help menu */ - i=0; - w->M.helpPane = XmCreatePulldownMenu(w->M.menuBar, "MhelpPane", arg, i); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Short Help")); i++; - w->M.helpButt[0] = XmCreatePushButton(w->M.helpPane, "MhelpButt0", arg, i); - XtManageChild(w->M.helpButt[0]); - - i=0; - w->M.helpSep[0] = XmCreateSeparator(w->M.helpPane, "MhelpSep0", arg, i); - XtManageChild(w->M.helpSep[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("About...")); i++; - w->M.helpButt[1] = XmCreatePushButton(w->M.helpPane, "MhelpButt1", arg, i); - XtManageChild(w->M.helpButt[1]); - - i=0; - XtSetArg(arg[i], XmNsubMenuId, w->M.helpPane); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("?")); i++; - w->M.helpCascade = XmCreateCascadeButton(w->M.menuBar, "MhelpCascade", arg, i); - XtManageChild(w->M.helpCascade); - - /* menu frame */ - - i=0; - w->M.menuFrame = XmCreateFrame(w->M.containerWin, "MmenuFrame", arg, i); - XtManageChild(w->M.menuFrame); - - /* menu form */ - - i=0; - XtSetArg(arg[i], XmNresizable, False); i++; - XtSetArg(arg[i], XmNresizePolicy, XmRESIZE_NONE); i++; - /* pour eviter des redimensionnements intempestifs sous HP */ - w->M.menuForm = XmCreateForm(w->M.menuFrame, "MmenuForm", arg, i); - XtManageChild(w->M.menuForm); - - /* module butt */ - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple(" ")); i++; - w->M.modButt = XmCreateLabel(w->M.menuForm, "MmodButt", arg, i); - XtManageChild(w->M.modButt); - - i=0; - w->M.modPop = XmCreatePopupMenu(w->M.modButt, "MmodPop", arg, i); - XtUnmanageChild(w->M.modPop); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Geometry")); i++; - w->M.geomButt = XmCreatePushButton(w->M.modPop, "MgeomButt", arg, i); - XtManageChild(w->M.geomButt); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Mesh")); i++; - w->M.meshButt = XmCreatePushButton(w->M.modPop, "MmeshButt", arg, i); - XtManageChild(w->M.meshButt); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Post Processing")); i++; - w->M.postButt = XmCreatePushButton(w->M.modPop, "MpostButt", arg, i); - XtManageChild(w->M.postButt); - - /* navigation arrows */ - - i=0; - XtSetArg(arg[i], XmNarrowDirection, XmARROW_LEFT); i++; - w->M.navigButt[0] = XmCreateArrowButton(w->M.menuForm, "MnavigButt0", arg, i); - XtManageChild(w->M.navigButt[0]); - - i=0; - XtSetArg(arg[i], XmNarrowDirection, XmARROW_RIGHT); i++; - w->M.navigButt[1] = XmCreateArrowButton(w->M.menuForm, "MnavigButt1", arg, i); - XtManageChild(w->M.navigButt[1]); - - /* default button */ - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("No View Loaded")); i++; - w->M.defaultButt = XmCreateLabel(w->M.menuForm, "MdefaultButt", arg, i); - XtUnmanageChild(w->M.defaultButt); - - /* buttons */ - - for(n=0 ; n<NB_BUTT_MAX ; n++){ - i=0; - w->M.pushButt[n] = XmCreatePushButton(w->M.menuForm, "MpushButtn", arg, i); - XtUnmanageChild(w->M.pushButt[n]); - - i=0; - w->M.toggleButt[n] = XmCreateToggleButton(w->M.menuForm, "MtoggleButtn", arg, i); - XtUnmanageChild(w->M.toggleButt[n]); - - i=0; - w->M.popMenu[n] = XmCreatePopupMenu(w->M.toggleButt[n], "MpopMenun", arg, i); - XtUnmanageChild(w->M.popMenu[n]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Reload")); i++; - w->M.reloadButt[n] = XmCreatePushButton(w->M.popMenu[n], "MreloadButtn", arg, i); - XtManageChild(w->M.reloadButt[n]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Remove")); i++; - w->M.removeButt[n] = XmCreatePushButton(w->M.popMenu[n], "MremoveButtn", arg, i); - XtManageChild(w->M.removeButt[n]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Duplicate")); i++; - w->M.duplicateButt[n] = XmCreatePushButton(w->M.popMenu[n], "MduplicateButtn", arg, i); - XtManageChild(w->M.duplicateButt[n]); - - i=0; - w->M.popSep[0][n] = XmCreateSeparator(w->M.popMenu[n], "MpopSep0n", arg, i); - XtManageChild(w->M.popSep[0][n]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Lighting")); i++; - w->M.lightButt[n] = XmCreateToggleButton(w->M.popMenu[n], "MlightButtn", arg, i); - XtManageChild(w->M.lightButt[n]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Show Elements")); i++; - w->M.elementButt[n] = XmCreateToggleButton(w->M.popMenu[n], "MelementButtn", arg, i); - XtManageChild(w->M.elementButt[n]); - - i=0; - w->M.popSep[1][n] = XmCreateSeparator(w->M.popMenu[n], "MpopSep1n", arg, i); - XtManageChild(w->M.popSep[1][n]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Scale, Range and Intervals")); i++; - w->M.scaleButt[n] = XmCreatePushButton(w->M.popMenu[n], "MscaleButtn", arg, i); - XtManageChild(w->M.scaleButt[n]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Colors")); i++; - w->M.colorButt[n] = XmCreatePushButton(w->M.popMenu[n], "McolorButtn", arg, i); - XtManageChild(w->M.colorButt[n]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Offset")); i++; - w->M.offsetButt[n] = XmCreatePushButton(w->M.popMenu[n], "MoffsetButtn", arg, i); - XtManageChild(w->M.offsetButt[n]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Vector Display")); i++; - w->M.vectorButt[n] = XmCreatePushButton(w->M.popMenu[n], "MvectorButtn", arg, i); - XtManageChild(w->M.vectorButt[n]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Time Step")); i++; - w->M.timeStepButt[n] = XmCreatePushButton(w->M.popMenu[n], "MtimeStepButtn", arg, i); - XtManageChild(w->M.timeStepButt[n]); - - i=0; - w->M.popSep[2][n] = XmCreateSeparator(w->M.popMenu[n], "MpopSep2n", arg, i); - XtManageChild(w->M.popSep[2][n]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Export as Background Mesh")); i++; - w->M.exportBGMButt[n] = XmCreatePushButton(w->M.popMenu[n], "MexportBGMButtn", arg, i); - XtManageChild(w->M.exportBGMButt[n]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Apply as Current Background Mesh")); i++; - w->M.applyBGMButt[n] = XmCreatePushButton(w->M.popMenu[n], "MapplyBGMButtn", arg, i); - XtManageChild(w->M.applyBGMButt[n]); - } - -} - - -/* ------------------------------------------------------------------------ - GRAPHIC WINDOW - ------------------------------------------------------------------------ */ - -void CreateWidgets_G(Widgets_T *w){ - int i; - Arg arg[10]; - - /* graphic shell */ - w->G.shell = - XtVaAppCreateShell("Gmsh graphics", "gmshGW", applicationShellWidgetClass, XCTX.display, - XmNvisual,XCTX.gui.visual, - XmNcolormap,XCTX.gui.colormap, - NULL); - - /* container form */ - i=0; - // We want glw to be able to force the size of the container win - //XtSetArg(arg[i], XmNresizable, False); i++; - //XtSetArg(arg[i], XmNresizePolicy, XmRESIZE_NONE); i++; - XtSetArg(arg[i], XmNwidth, 700); i++; - XtSetArg(arg[i], XmNheight, 525); i++; - w->G.containerForm = XmCreateForm(w->G.shell, "GcontainerForm", arg, i); - XtManageChild(w->G.containerForm); - - /* opengl drawing area */ - i=0; - XtSetArg(arg[i], XmNcolormap, XCTX.glw.colormap); i++; - XtSetArg(arg[i], GLwNvisualInfo, XCTX.glw.visinfo); i++; - XtSetArg(arg[i], GLwNinstallColormap, True); i++; - - w->G.glw = GLwCreateMDrawingArea(w->G.containerForm, "glw", arg, i); - XtManageChild(w->G.glw); - - /* overlay opengl drawing area */ - if(CTX.overlay){ - i=0; - XtSetArg(arg[i], XmNcolormap, XCTX.glo.colormap); i++; - XtSetArg(arg[i], GLwNvisualInfo, XCTX.glo.visinfo); i++; - XtSetArg(arg[i], GLwNinstallColormap, True); i++; - w->G.glo = GLwCreateMDrawingArea(w->G.containerForm, "glo", arg, i); - XtManageChild(w->G.glo); - } - - /* bottom */ - - i=0; - XtSetArg(arg[i], XmNresizable, False); i++; - XtSetArg(arg[i], XmNresizePolicy, XmRESIZE_NONE); i++; - w->G.bottomForm = XmCreateForm(w->G.containerForm, "GbottomForm", arg, i); - XtManageChild(w->G.bottomForm); - - /* buttons de gauche: X Y Z 1 Geometry Abort Play Stop */ - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("X")); i++; - XtSetArg(arg[i], XmNtraversalOn, False); i++; - w->G.Butt[0] = XmCreatePushButton(w->G.bottomForm, "GButt0", arg, i); - XtManageChild(w->G.Butt[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Y")); i++; - XtSetArg(arg[i], XmNtraversalOn, False); i++; - w->G.Butt[1] = XmCreatePushButton(w->G.bottomForm, "GButt1", arg, i); - XtManageChild(w->G.Butt[1]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Z")); i++; - XtSetArg(arg[i], XmNtraversalOn, False); i++; - w->G.Butt[2] = XmCreatePushButton(w->G.bottomForm, "GButt2", arg, i); - XtManageChild(w->G.Butt[2]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("1:1")); i++; - XtSetArg(arg[i], XmNtraversalOn, False); i++; - w->G.Butt[3] = XmCreatePushButton(w->G.bottomForm, "GButt3", arg, i); - XtManageChild(w->G.Butt[3]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("?")); i++; - XtSetArg(arg[i], XmNtraversalOn, False); i++; - w->G.Butt[4] = XmCreatePushButton(w->G.bottomForm, "GButt4", arg, i); - XtManageChild(w->G.Butt[4]); - - i=0; - XtSetArg(arg[i], XmNlabelType, XmPIXMAP); i++; - XtSetArg(arg[i], XmNtraversalOn, False); i++; - w->G.Butt[5] = XmCreatePushButton(w->G.bottomForm, "GButt5", arg, i); - XtManageChild(w->G.Butt[5]); - - i=0; - XtSetArg(arg[i], XmNlabelType, XmPIXMAP); i++; - XtSetArg(arg[i], XmNtraversalOn, False); i++; - w->G.Butt[6] = XmCreatePushButton(w->G.bottomForm, "GButt6", arg, i); - XtManageChild(w->G.Butt[6]); - XtSetSensitive(w->G.Butt[6],0); - - /* 3 textes au milieu */ - - i=0; - //XtSetArg(arg[i], XmNresizable, False); i++; - //XtSetArg(arg[i], XmNresizePolicy, XmRESIZE_NONE); i++; - w->G.textForm = XmCreateForm(w->G.bottomForm, "GtextForm", arg, i); - XtManageChild(w->G.textForm); - - i=0; - XtSetArg(arg[i], XmNalignment, XmALIGNMENT_BEGINNING); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple(" ")); i++; - w->G.selectLabel = XmCreateLabel(w->G.textForm, "GselectLabel", arg, i); - XtManageChild(w->G.selectLabel); - - i=0; - XtSetArg(arg[i], XmNalignment, XmALIGNMENT_BEGINNING); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple(" ")); i++; - w->G.infoLabel = XmCreateLabel(w->G.textForm, "GinfoLabel", arg, i); - XtManageChild(w->G.infoLabel); - - i=0; - XtSetArg(arg[i], XmNalignment, XmALIGNMENT_BEGINNING); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple(" ")); i++; - w->G.statusLabel = XmCreateLabel(w->G.textForm, "GstatusLabel", arg, i); - XtManageChild(w->G.statusLabel); - -} - - -/* ------------------------------------------------------------------------ - COMMAND WINDOW - ------------------------------------------------------------------------ */ - -void CreateWidgets_C(Widgets_T *w){ - int i; - Arg arg[10]; - - w->C.shell = - XtVaAppCreateShell("Gmsh commands", "gmshCW", applicationShellWidgetClass, XCTX.display, - XmNvisual,XCTX.gui.visual, - XmNcolormap,XCTX.gui.colormap, - NULL); - - i=0; - XtSetArg(arg[i], XmNpromptString, XmStringCreateSimple("")); i++; - w->C.command = XmCreateCommand(w->C.shell, "Ccommand", arg, i); - XtManageChild(w->C.command); - - w->C.commandList = XmCommandGetChild(w->C.command, XmDIALOG_HISTORY_LIST); - w->C.commandText = XmCommandGetChild(w->C.command, XmDIALOG_COMMAND_TEXT); -} - - -/* ------------------------------------------------------------------------ - ERROR DIALOGS - ------------------------------------------------------------------------ */ - -void CreateWidgets_ED(Widgets_T *w){ - int i; - Arg arg[10]; - Widget tmp ; - - i=0 ; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Warning")); i++; - XtSetArg(arg[i], XmNmessageString, XmStringCreateSimple("File exists")); i++; - XtSetArg(arg[i], XmNautoUnmanage, True); i++; - w->ED.saveAsDialog = XmCreateWarningDialog(w->M.shell, "EDsaveAsDialog", arg, i); - - tmp = XmMessageBoxGetChild(w->ED.saveAsDialog, XmDIALOG_HELP_BUTTON); - XtUnmanageChild(tmp); - -} - - -/* ------------------------------------------------------------------------ - FILE DIALOGS - ------------------------------------------------------------------------ */ - -void CreateWidgets_FD(Widgets_T *w){ - int i; - Arg arg[10]; - Widget tmp ; - - /* open */ - i=0 ; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Open")); i++; - XtSetArg(arg[i], XmNnoMatchString, XmStringCreateSimple("[ NONE ]")); i++; - XtSetArg(arg[i], XmNdirMask, XmStringCreateSimple("*.geo")); i++; - XtSetArg(arg[i], XmNautoUnmanage, True); i++; - w->FD.openDialog = XmCreateFileSelectionDialog(w->M.shell, "FDopenDialog", arg, i); - XtUnmanageChild(w->FD.openDialog); - - /* merge */ - i=0 ; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Merge")); i++; - XtSetArg(arg[i], XmNnoMatchString, XmStringCreateSimple("[ NONE ]")); i++; - XtSetArg(arg[i], XmNdirMask, XmStringCreateSimple("*.[pm][os][sh]")); i++; - XtSetArg(arg[i], XmNautoUnmanage, True); i++; - w->FD.mergeDialog = XmCreateFileSelectionDialog(w->M.shell, "FDmergeDialog", arg, i); - XtUnmanageChild(w->FD.mergeDialog); - - /* save as */ - - i=0 ; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Save")); i++; - XtSetArg(arg[i], XmNnoMatchString, XmStringCreateSimple("[ NONE ]")); i++; - XtSetArg(arg[i], XmNdirMask, XmStringCreateSimple("*")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; /* + pratique qd on sauve des animations */ - w->FD.saveAsDialog = XmCreateFileSelectionDialog(w->M.shell, "FDsaveAsDialog", arg, i); - XtUnmanageChild(w->FD.saveAsDialog); - - i=0; - w->FD.saveAsFrame[0] = XmCreateFrame(w->FD.saveAsDialog, "FDsaveAsFrame0", arg, i); - XtManageChild(w->FD.saveAsFrame[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Format")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->FD.saveAsFrame[1] = XmCreateLabel(w->FD.saveAsFrame[0], "FDsaveAsFrame1", arg, i); - XtManageChild(w->FD.saveAsFrame[1]); - - i=0 ; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - XtSetArg(arg[i], XmNspacing, 0); i++; - w->FD.saveAsRowCol = XmCreateRowColumn(w->FD.saveAsFrame[0], "FDsaveAsRowCol", arg, i); - XtManageChild(w->FD.saveAsRowCol); - - /* save as - type */ - i=0; - w->FD.saveAsPane[0] = XmCreatePulldownMenu(w->FD.saveAsRowCol, "FDsaveAsPane0", arg, i); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("By Extension")); i++; - w->FD.saveAsButt[0] = XmCreatePushButton(w->FD.saveAsPane[0], "MsaveAsButt0", arg, i); - XtManageChild(w->FD.saveAsButt[0]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("GEO")); i++; - w->FD.saveAsButt[1] = XmCreatePushButton(w->FD.saveAsPane[0], "MsaveAsButt1", arg, i); - XtManageChild(w->FD.saveAsButt[1]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("MSH")); i++; - w->FD.saveAsButt[2] = XmCreatePushButton(w->FD.saveAsPane[0], "MsaveAsButt2", arg, i); - XtManageChild(w->FD.saveAsButt[2]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("UNV")); i++; - w->FD.saveAsButt[3] = XmCreatePushButton(w->FD.saveAsPane[0], "MsaveAsButt3", arg, i); - XtManageChild(w->FD.saveAsButt[3]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("GREF")); i++; - w->FD.saveAsButt[4] = XmCreatePushButton(w->FD.saveAsPane[0], "MsaveAsButt4", arg, i); - XtManageChild(w->FD.saveAsButt[4]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("EPS Simple Sort")); i++; - w->FD.saveAsButt[5] = XmCreatePushButton(w->FD.saveAsPane[0], "MsaveAsButt5", arg, i); - XtManageChild(w->FD.saveAsButt[5]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("EPS Accurate Sort")); i++; - w->FD.saveAsButt[6] = XmCreatePushButton(w->FD.saveAsPane[0], "MsaveAsButt6", arg, i); - XtManageChild(w->FD.saveAsButt[6]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("XPM")); i++; - w->FD.saveAsButt[7] = XmCreatePushButton(w->FD.saveAsPane[0], "MsaveAsButt7", arg, i); - XtManageChild(w->FD.saveAsButt[7]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("JPEG")); i++; - w->FD.saveAsButt[8] = XmCreatePushButton(w->FD.saveAsPane[0], "MsaveAsButt8", arg, i); - XtManageChild(w->FD.saveAsButt[8]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("GIF")); i++; - w->FD.saveAsButt[9] = XmCreatePushButton(w->FD.saveAsPane[0], "MsaveAsButt9", arg, i); - XtManageChild(w->FD.saveAsButt[9]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("GIF Dithered")); i++; - w->FD.saveAsButt[10] = XmCreatePushButton(w->FD.saveAsPane[0], "MsaveAsButt10", arg, i); - XtManageChild(w->FD.saveAsButt[10]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("GIF Transparent")); i++; - w->FD.saveAsButt[11] = XmCreatePushButton(w->FD.saveAsPane[0], "MsaveAsButt11", arg, i); - XtManageChild(w->FD.saveAsButt[11]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("PPM")); i++; - w->FD.saveAsButt[12] = XmCreatePushButton(w->FD.saveAsPane[0], "MsaveAsButt12", arg, i); - XtManageChild(w->FD.saveAsButt[12]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("UCB YUV")); i++; - w->FD.saveAsButt[13] = XmCreatePushButton(w->FD.saveAsPane[0], "MsaveAsButt13", arg, i); - XtManageChild(w->FD.saveAsButt[13]); - - i=0; - XtSetArg(arg[i], XmNsubMenuId, w->FD.saveAsPane[0]); i++; - XtSetArg(arg[i], XmNspacing, 0); i++; - w->FD.saveAsMenu[0] = XmCreateOptionMenu(w->FD.saveAsRowCol, "FDsaveAsMenu0", arg, i); - XtManageChild(w->FD.saveAsMenu[0]); - - /* save options as */ - i=0 ; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Save Options")); i++; - XtSetArg(arg[i], XmNnoMatchString, XmStringCreateSimple("[ NONE ]")); i++; - XtSetArg(arg[i], XmNdirMask, XmStringCreateSimple("*.[gp][eo][os]")); i++; - XtSetArg(arg[i], XmNautoUnmanage, True); i++; - w->FD.saveOptionsAsDialog = XmCreateFileSelectionDialog(w->M.shell, "FDsaveOptionsAsDialog", arg, i); - XtUnmanageChild(w->FD.saveOptionsAsDialog); - - tmp = XmFileSelectionBoxGetChild(w->FD.openDialog, XmDIALOG_HELP_BUTTON); - XtUnmanageChild(tmp); - tmp = XmFileSelectionBoxGetChild(w->FD.mergeDialog, XmDIALOG_HELP_BUTTON); - XtUnmanageChild(tmp); - tmp = XmFileSelectionBoxGetChild(w->FD.saveAsDialog, XmDIALOG_HELP_BUTTON); - XtUnmanageChild(tmp); - tmp = XmFileSelectionBoxGetChild(w->FD.saveOptionsAsDialog, XmDIALOG_HELP_BUTTON); - XtUnmanageChild(tmp); - -} - - -/* ------------------------------------------------------------------------ - OPTIONS DIALOGS - ------------------------------------------------------------------------ */ - -void CreateWidgets_OD(Widgets_T *w){ - int i, n; - Arg arg[10]; - char label[32]; - - /* Geometry */ - - i=0; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Geometry Options")); i++; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Apply")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->OD.geomDialog = XmCreateTemplateDialog(w->M.shell, "ODgeomDialog", arg, i); - XtUnmanageChild(w->OD.geomDialog); - - i=0; - w->OD.geomRowCol = XmCreateRowColumn(w->OD.geomDialog, "ODgeomRowCol", arg, i); - XtManageChild(w->OD.geomRowCol); - - /* Geometry - Visible */ - - i=0; - w->OD.geomVisibleFrame[0] = XmCreateFrame(w->OD.geomRowCol, "ODgeomVisibleFrame0", arg, i); - XtManageChild(w->OD.geomVisibleFrame[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Global Visibility")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.geomVisibleFrame[1] = XmCreateLabel(w->OD.geomVisibleFrame[0], "ODgeomVisibleFrame1", arg, i); - XtManageChild(w->OD.geomVisibleFrame[1]); - - i=0; - w->OD.geomVisibleRowCol = XmCreateRowColumn(w->OD.geomVisibleFrame[0], "ODgeomVisibleRowCol", arg, i); - XtManageChild(w->OD.geomVisibleRowCol); - - i=0; - XtSetArg(arg[i], XmNnumColumns, 2); i++; - w->OD.geomVisibleCheck = XmCreateSimpleCheckBox(w->OD.geomVisibleRowCol, "ODgeomVisibleCheck", arg, i); - XtManageChild(w->OD.geomVisibleCheck); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Points")); i++; - XtSetArg(arg[i], XmNset, CTX.geom.points?True:False); i++; - w->OD.geomVisibleButt[0] = XmCreateToggleButton(w->OD.geomVisibleCheck, "ODgeomVisibleButt0", arg, i); - XtManageChild(w->OD.geomVisibleButt[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Lines")); i++; - XtSetArg(arg[i], XmNset, CTX.geom.lines?True:False); i++; - w->OD.geomVisibleButt[1] = XmCreateToggleButton(w->OD.geomVisibleCheck, "ODgeomVisibleButt1", arg, i); - XtManageChild(w->OD.geomVisibleButt[1]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Surfaces")); i++; - XtSetArg(arg[i], XmNset, CTX.geom.surfaces?True:False); i++; - w->OD.geomVisibleButt[2] = XmCreateToggleButton(w->OD.geomVisibleCheck, "ODgeomVisibleButt2", arg, i); - XtManageChild(w->OD.geomVisibleButt[2]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Volumes")); i++; - XtSetArg(arg[i], XmNset, CTX.geom.volumes?True:False); i++; - w->OD.geomVisibleButt[3] = XmCreateToggleButton(w->OD.geomVisibleCheck, "ODgeomVisibleButt3", arg, i); - XtManageChild(w->OD.geomVisibleButt[3]); - - i=0; - XtSetArg(arg[i], XmNnumColumns, 2); i++; - w->OD.geomVisibleTypeCheck = XmCreateRadioBox(w->OD.geomVisibleRowCol, "ODgeomVisibleTypeCheck", arg, i); - XtManageChild(w->OD.geomVisibleTypeCheck); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Entities")); i++; - XtSetArg(arg[i], XmNset, True); i++; - w->OD.geomVisibleTypeButt[0] = XmCreateToggleButton(w->OD.geomVisibleTypeCheck, "ODgeomVisibleTypeButt0", arg, i); - XtManageChild(w->OD.geomVisibleTypeButt[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Labels")); i++; - XtSetArg(arg[i], XmNset, False); i++; - w->OD.geomVisibleTypeButt[1] = XmCreateToggleButton(w->OD.geomVisibleTypeCheck, "ODgeomVisibleTypeButt1", arg, i); - XtManageChild(w->OD.geomVisibleTypeButt[1]); - - - /* Geometry - Visible by Number */ - - i=0; - w->OD.geomVisibleByNumFrame[0] = XmCreateFrame(w->OD.geomRowCol, "ODgeomVisibleByNumFrame0", arg, i); - XtManageChild(w->OD.geomVisibleByNumFrame[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Visibility by Entity Number")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.geomVisibleByNumFrame[1] = XmCreateLabel(w->OD.geomVisibleByNumFrame[0], "ODgeomVisibleByNumFrame1", arg, i); - XtManageChild(w->OD.geomVisibleByNumFrame[1]); - - i=0; - w->OD.geomVisibleByNumRowCol = XmCreateRowColumn(w->OD.geomVisibleByNumFrame[0], "ODgeomVisibleByNumRowCol", arg, i); - XtManageChild(w->OD.geomVisibleByNumRowCol); - - i=0; - XtSetArg(arg[i], XmNvalue, "*"); i++; - w->OD.geomVisibleByNumText = XmCreateTextField(w->OD.geomVisibleByNumRowCol, "ODgeomVisibleByNumText", arg, i); - XtManageChild(w->OD.geomVisibleByNumText); - - /* Geometry - normals */ - - i=0; - w->OD.geomNormalsFrame[0] = XmCreateFrame(w->OD.geomRowCol, "ODgeomNormalsFrame0", arg, i); - XtManageChild(w->OD.geomNormalsFrame[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Normals")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.geomNormalsFrame[1] = XmCreateLabel(w->OD.geomNormalsFrame[0], "ODgeomNormalsFrame1", arg, i); - XtManageChild(w->OD.geomNormalsFrame[1]); - - i=0; - w->OD.geomNormalsRowCol = XmCreateRowColumn(w->OD.geomNormalsFrame[0], "ODgeomNormalsRowCol", arg, i); - XtManageChild(w->OD.geomNormalsRowCol); - - i=0; - XtSetArg(arg[i], XmNminimum, 0); i++; - XtSetArg(arg[i], XmNmaximum, 100); i++; - XtSetArg(arg[i], XmNdecimalPoints, 0); i++; - XtSetArg(arg[i], XmNvalue, CTX.geom.normals); i++; - XtSetArg(arg[i], XmNshowValue, False); i++; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->OD.geomNormalsScale = XmCreateScale(w->OD.geomNormalsRowCol, "ODgeomNormalsScale", arg, i); - XtManageChild(w->OD.geomNormalsScale); - - i=0; - sprintf(label, "%g", CTX.geom.normals); - XtSetArg(arg[i], XmNvalue, label); i++; - w->OD.geomNormalsText = XmCreateTextField(w->OD.geomNormalsRowCol, "ODgeomNormalsText", arg, i); - XtManageChild(w->OD.geomNormalsText); - - /* Geometry - tangents */ - - i=0; - w->OD.geomTangentsFrame[0] = XmCreateFrame(w->OD.geomRowCol, "ODgeomTangentsFrame0", arg, i); - XtManageChild(w->OD.geomTangentsFrame[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Tangents")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.geomTangentsFrame[1] = XmCreateLabel(w->OD.geomTangentsFrame[0], "ODgeomTangentsFrame1", arg, i); - XtManageChild(w->OD.geomTangentsFrame[1]); - - i=0; - w->OD.geomTangentsRowCol = XmCreateRowColumn(w->OD.geomTangentsFrame[0], "ODgeomTangentsRowCol", arg, i); - XtManageChild(w->OD.geomTangentsRowCol); - - i=0; - XtSetArg(arg[i], XmNminimum, 0); i++; - XtSetArg(arg[i], XmNmaximum, 100); i++; - XtSetArg(arg[i], XmNdecimalPoints, 0); i++; - XtSetArg(arg[i], XmNvalue, CTX.geom.tangents); i++; - XtSetArg(arg[i], XmNshowValue, False); i++; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->OD.geomTangentsScale = XmCreateScale(w->OD.geomTangentsRowCol, "ODgeomTangentsScale", arg, i); - XtManageChild(w->OD.geomTangentsScale); - - i=0; - sprintf(label, "%g", CTX.geom.tangents); - XtSetArg(arg[i], XmNvalue, label); i++; - w->OD.geomTangentsText = XmCreateTextField(w->OD.geomTangentsRowCol, "ODgeomTangentsText", arg, i); - XtManageChild(w->OD.geomTangentsText); - - /* Mesh */ - - i=0; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Mesh Options")); i++; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Apply")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->OD.meshDialog = XmCreateTemplateDialog(w->M.shell, "ODmeshDialog", arg, i); - XtUnmanageChild(w->OD.meshDialog); - - i=0; - w->OD.meshRowCol = XmCreateRowColumn(w->OD.meshDialog, "ODmeshRowCol", arg, i); - XtManageChild(w->OD.meshRowCol); - - - /* Mesh - algo */ - - i=0; - w->OD.meshAlgoFrame[0] = XmCreateFrame(w->OD.meshRowCol, "ODmeshAlgoFrame0", arg, i); - XtManageChild(w->OD.meshAlgoFrame[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Algorithm")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.meshAlgoFrame[1] = XmCreateLabel(w->OD.meshAlgoFrame[0], "ODmeshAlgoFrame1", arg, i); - XtManageChild(w->OD.meshAlgoFrame[1]); - - i=0; - w->OD.meshAlgoRowCol = XmCreateRowColumn(w->OD.meshAlgoFrame[0], "ODmeshAlgoRowCol", arg, i); - XtManageChild(w->OD.meshAlgoRowCol); - - i=0; - XtSetArg(arg[i], XmNnumColumns, 2); i++; - w->OD.meshAlgoCheck = XmCreateSimpleCheckBox(w->OD.meshAlgoRowCol, "ODmeshAlgoCheck", arg, i); - XtManageChild(w->OD.meshAlgoCheck); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Degree 2")); i++; - XtSetArg(arg[i], XmNset, (CTX.mesh.degree==2)?True:False); i++; - w->OD.meshAlgoButt[0] = XmCreateToggleButton(w->OD.meshAlgoCheck, "ODmeshAlgoButt0", arg, i); - XtManageChild(w->OD.meshAlgoButt[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Anisotropic")); i++; - XtSetArg(arg[i], XmNset, (CTX.mesh.algo==DELAUNAY_NEWALGO)?True:False); i++; - w->OD.meshAlgoButt[1] = XmCreateToggleButton(w->OD.meshAlgoCheck, "ODmeshAlgoButt1", arg, i); - XtManageChild(w->OD.meshAlgoButt[1]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Interactive")); i++; - XtSetArg(arg[i], XmNset, CTX.mesh.interactive?True:False); i++; - w->OD.meshAlgoButt[2] = XmCreateToggleButton(w->OD.meshAlgoCheck, "ODmeshAlgoButt2", arg, i); - XtManageChild(w->OD.meshAlgoButt[2]); - - /* Mesh - smoothing */ - - i=0; - w->OD.meshSmoothingFrame[0] = XmCreateFrame(w->OD.meshRowCol, "ODmeshSmoothingFrame0", arg, i); - XtManageChild(w->OD.meshSmoothingFrame[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Smoothing")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.meshSmoothingFrame[1] = XmCreateLabel(w->OD.meshSmoothingFrame[0], "ODmeshSmoothingFrame1", arg, i); - XtManageChild(w->OD.meshSmoothingFrame[1]); - - i=0; - w->OD.meshSmoothingRowCol = XmCreateRowColumn(w->OD.meshSmoothingFrame[0], "ODmeshSmoothingRowCol", arg, i); - XtManageChild(w->OD.meshSmoothingRowCol); - - i=0; - XtSetArg(arg[i], XmNminimum, 0); i++; - XtSetArg(arg[i], XmNmaximum, 100); i++; - XtSetArg(arg[i], XmNdecimalPoints, 2); i++; - XtSetArg(arg[i], XmNvalue, CTX.mesh.nb_smoothing); i++; - XtSetArg(arg[i], XmNshowValue, False); i++; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->OD.meshSmoothingScale = XmCreateScale(w->OD.meshSmoothingRowCol, "ODmeshSmoothingScale", arg, i); - XtManageChild(w->OD.meshSmoothingScale); - - i=0; - sprintf(label, "%d", CTX.mesh.nb_smoothing); - XtSetArg(arg[i], XmNvalue, label); i++; - w->OD.meshSmoothingText = XmCreateTextField(w->OD.meshSmoothingRowCol, "ODmeshSmoothingText", arg, i); - XtManageChild(w->OD.meshSmoothingText); - - /* Mesh - Visible */ - - i=0; - w->OD.meshVisibleFrame[0] = XmCreateFrame(w->OD.meshRowCol, "ODmeshVisibleFrame0", arg, i); - XtManageChild(w->OD.meshVisibleFrame[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Global Visibility")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.meshVisibleFrame[1] = XmCreateLabel(w->OD.meshVisibleFrame[0], "ODmeshVisibleFrame1", arg, i); - XtManageChild(w->OD.meshVisibleFrame[1]); - - i=0; - w->OD.meshVisibleRowCol = XmCreateRowColumn(w->OD.meshVisibleFrame[0], "ODmeshVisibleRowCol", arg, i); - XtManageChild(w->OD.meshVisibleRowCol); - - i=0; - XtSetArg(arg[i], XmNnumColumns, 2); i++; - w->OD.meshVisibleCheck = XmCreateSimpleCheckBox(w->OD.meshVisibleRowCol, "ODmeshVisibleCheck", arg, i); - XtManageChild(w->OD.meshVisibleCheck); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Points")); i++; - XtSetArg(arg[i], XmNset, CTX.mesh.points?True:False); i++; - w->OD.meshVisibleButt[0] = XmCreateToggleButton(w->OD.meshVisibleCheck, "ODmeshVisibleButt0", arg, i); - XtManageChild(w->OD.meshVisibleButt[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Lines")); i++; - XtSetArg(arg[i], XmNset, CTX.mesh.lines?True:False); i++; - w->OD.meshVisibleButt[1] = XmCreateToggleButton(w->OD.meshVisibleCheck, "ODmeshVisibleButt1", arg, i); - XtManageChild(w->OD.meshVisibleButt[1]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Surfaces")); i++; - XtSetArg(arg[i], XmNset, CTX.mesh.surfaces?True:False); i++; - w->OD.meshVisibleButt[2] = XmCreateToggleButton(w->OD.meshVisibleCheck, "ODmeshVisibleButt2", arg, i); - XtManageChild(w->OD.meshVisibleButt[2]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Volumes")); i++; - XtSetArg(arg[i], XmNset, CTX.mesh.volumes?True:False); i++; - w->OD.meshVisibleButt[3] = XmCreateToggleButton(w->OD.meshVisibleCheck, "ODmeshVisibleButt3", arg, i); - XtManageChild(w->OD.meshVisibleButt[3]); - - i=0; - XtSetArg(arg[i], XmNnumColumns, 2); i++; - w->OD.meshVisibleTypeCheck = XmCreateRadioBox(w->OD.meshVisibleRowCol, "ODmeshVisibleTypeCheck", arg, i); - XtManageChild(w->OD.meshVisibleTypeCheck); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Entities")); i++; - XtSetArg(arg[i], XmNset, True); i++; - w->OD.meshVisibleTypeButt[0] = XmCreateToggleButton(w->OD.meshVisibleTypeCheck, "ODmeshVisibleTypeButt0", arg, i); - XtManageChild(w->OD.meshVisibleTypeButt[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Labels")); i++; - XtSetArg(arg[i], XmNset, False); i++; - w->OD.meshVisibleTypeButt[1] = XmCreateToggleButton(w->OD.meshVisibleTypeCheck, "ODmeshVisibleTypeButt1", arg, i); - XtManageChild(w->OD.meshVisibleTypeButt[1]); - - - /* Mesh - Visible by Number */ - - i=0; - w->OD.meshVisibleByNumFrame[0] = XmCreateFrame(w->OD.meshRowCol, "ODmeshVisibleByNumFrame0", arg, i); - XtManageChild(w->OD.meshVisibleByNumFrame[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Visibility")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.meshVisibleByNumFrame[1] = XmCreateLabel(w->OD.meshVisibleByNumFrame[0], "ODmeshVisibleByNumFrame1", arg, i); - XtManageChild(w->OD.meshVisibleByNumFrame[1]); - - i=0; - w->OD.meshVisibleByNumRowCol = XmCreateRowColumn(w->OD.meshVisibleByNumFrame[0], "ODmeshVisibleByNumRowCol", arg, i); - XtManageChild(w->OD.meshVisibleByNumRowCol); - - i=0; - XtSetArg(arg[i], XmNnumColumns, 2); i++; - w->OD.meshVisibleByNumCheck = XmCreateRadioBox(w->OD.meshVisibleByNumRowCol, "ODmeshVisibleByNumCheck", arg, i); - XtManageChild(w->OD.meshVisibleByNumCheck); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("By Entity")); i++; - XtSetArg(arg[i], XmNset, True); i++; - w->OD.meshVisibleByNumButt[0] = XmCreateToggleButton(w->OD.meshVisibleByNumCheck, "ODmeshVisibleByNumButt0", arg, i); - XtManageChild(w->OD.meshVisibleByNumButt[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("By Quality")); i++; - XtSetArg(arg[i], XmNset, False); i++; - w->OD.meshVisibleByNumButt[1] = XmCreateToggleButton(w->OD.meshVisibleByNumCheck, "ODmeshVisibleByNumButt1", arg, i); - XtManageChild(w->OD.meshVisibleByNumButt[1]); - - i=0; - XtSetArg(arg[i], XmNvalue, "*"); i++; - w->OD.meshVisibleByNumText = XmCreateTextField(w->OD.meshVisibleByNumRowCol, "ODmeshVisibleByNumText", arg, i); - XtManageChild(w->OD.meshVisibleByNumText); - - /* Mesh - aspect */ - - i=0; - w->OD.meshAspectFrame[0] = XmCreateFrame(w->OD.meshRowCol, "ODmeshAspectFrame0", arg, i); - XtManageChild(w->OD.meshAspectFrame[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Aspect")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.meshAspectFrame[1] = XmCreateLabel(w->OD.meshAspectFrame[0], "ODmeshAspectFrame1", arg, i); - XtManageChild(w->OD.meshAspectFrame[1]); - - i=0; - w->OD.meshAspectCheck = XmCreateRadioBox(w->OD.meshAspectFrame[0], "ODmeshAspectCheck", arg, i); - XtManageChild(w->OD.meshAspectCheck); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Wireframe")); i++; - XtSetArg(arg[i], XmNset, (!CTX.mesh.hidden)?True:False); i++; - w->OD.meshAspectButt[0] = XmCreateToggleButton(w->OD.meshAspectCheck, "ODmeshAspectButt0", arg, i); - XtManageChild(w->OD.meshAspectButt[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Hidden Lines")); i++; - XtSetArg(arg[i], XmNset, CTX.mesh.hidden?True:False); i++; - w->OD.meshAspectButt[1] = XmCreateToggleButton(w->OD.meshAspectCheck, "ODmeshAspectButt1", arg, i); - XtManageChild(w->OD.meshAspectButt[1]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Solid")); i++; - XtSetArg(arg[i], XmNset, CTX.mesh.shade?True:False); i++; - w->OD.meshAspectButt[2] = XmCreateToggleButton(w->OD.meshAspectCheck, "ODmeshAspectButt2", arg, i); - XtManageChild(w->OD.meshAspectButt[2]); - - /* Mesh - explode */ - - i=0; - w->OD.meshExplodeFrame[0] = XmCreateFrame(w->OD.meshRowCol, "ODmeshExplodeFrame0", arg, i); - XtManageChild(w->OD.meshExplodeFrame[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Explode")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.meshExplodeFrame[1] = XmCreateLabel(w->OD.meshExplodeFrame[0], "ODmeshExplodeFrame1", arg, i); - XtManageChild(w->OD.meshExplodeFrame[1]); - - i=0; - w->OD.meshExplodeRowCol = XmCreateRowColumn(w->OD.meshExplodeFrame[0], "ODmeshExplodeRowCol", arg, i); - XtManageChild(w->OD.meshExplodeRowCol); - - i=0; - XtSetArg(arg[i], XmNminimum, 0); i++; - XtSetArg(arg[i], XmNmaximum, 100); i++; - XtSetArg(arg[i], XmNdecimalPoints, 2); i++; - XtSetArg(arg[i], XmNvalue, (int)100*CTX.mesh.explode); i++; - XtSetArg(arg[i], XmNshowValue, False); i++; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->OD.meshExplodeScale = XmCreateScale(w->OD.meshExplodeRowCol, "ODmeshExplodeScale", arg, i); - XtManageChild(w->OD.meshExplodeScale); - - i=0; - sprintf(label, "%g", CTX.mesh.explode); - XtSetArg(arg[i], XmNvalue, label); i++; - w->OD.meshExplodeText = XmCreateTextField(w->OD.meshExplodeRowCol, "ODmeshExplodeText", arg, i); - XtManageChild(w->OD.meshExplodeText); - - /* Mesh - normals */ - - i=0; - w->OD.meshNormalsFrame[0] = XmCreateFrame(w->OD.meshRowCol, "ODmeshNormalsFrame0", arg, i); - XtManageChild(w->OD.meshNormalsFrame[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Normals")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.meshNormalsFrame[1] = XmCreateLabel(w->OD.meshNormalsFrame[0], "ODmeshNormalsFrame1", arg, i); - XtManageChild(w->OD.meshNormalsFrame[1]); - - i=0; - w->OD.meshNormalsRowCol = XmCreateRowColumn(w->OD.meshNormalsFrame[0], "ODmeshNormalsRowCol", arg, i); - XtManageChild(w->OD.meshNormalsRowCol); - - i=0; - XtSetArg(arg[i], XmNminimum, 0); i++; - XtSetArg(arg[i], XmNmaximum, 100); i++; - XtSetArg(arg[i], XmNdecimalPoints, 0); i++; - XtSetArg(arg[i], XmNvalue, CTX.mesh.normals); i++; - XtSetArg(arg[i], XmNshowValue, False); i++; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->OD.meshNormalsScale = XmCreateScale(w->OD.meshNormalsRowCol, "ODmeshNormalsScale", arg, i); - XtManageChild(w->OD.meshNormalsScale); - - i=0; - sprintf(label, "%g", CTX.mesh.normals); - XtSetArg(arg[i], XmNvalue, label); i++; - w->OD.meshNormalsText = XmCreateTextField(w->OD.meshNormalsRowCol, "ODmeshNormalsText", arg, i); - XtManageChild(w->OD.meshNormalsText); - - - /* Post */ - - i=0; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Post Options")); i++; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Apply")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->OD.postDialog = XmCreateTemplateDialog(w->M.shell, "ODpostDialog", arg, i); - XtUnmanageChild(w->OD.postDialog); - - i=0; - w->OD.postRowCol = XmCreateRowColumn(w->OD.postDialog, "ODpostRowCol", arg, i); - XtManageChild(w->OD.postRowCol); - - /* Post - link */ - - i=0; - w->OD.postLinkFrame[0] = XmCreateFrame(w->OD.postRowCol, "ODpostLinkFrame0", arg, i); - XtManageChild(w->OD.postLinkFrame[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Links")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.postLinkFrame[1] = XmCreateLabel(w->OD.postLinkFrame[0], "ODpostLinkFrame1", arg, i); - XtManageChild(w->OD.postLinkFrame[1]); - - i=0; - w->OD.postLinkRowCol = XmCreateRowColumn(w->OD.postLinkFrame[0], "ODpostLinkRowCol", arg, i); - XtManageChild(w->OD.postLinkRowCol); - - i=0; - w->OD.postLinkCheck = XmCreateRadioBox(w->OD.postLinkRowCol, "ODpostLinkCheck", arg, i); - XtManageChild(w->OD.postLinkCheck); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("No Links")); i++; - XtSetArg(arg[i], XmNset, CTX.post.link?False:True); i++; - w->OD.postLinkButt[0] = XmCreateToggleButton(w->OD.postLinkCheck, "ODpostLinkButt0", arg, i); - XtManageChild(w->OD.postLinkButt[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Link Visible Views")); i++; - XtSetArg(arg[i], XmNset, (CTX.post.link==1)?True:False); i++; - w->OD.postLinkButt[1] = XmCreateToggleButton(w->OD.postLinkCheck, "ODpostLinkButt1", arg, i); - XtManageChild(w->OD.postLinkButt[1]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Link All Views")); i++; - XtSetArg(arg[i], XmNset, (CTX.post.link==2)?True:False); i++; - w->OD.postLinkButt[2] = XmCreateToggleButton(w->OD.postLinkCheck, "ODpostLinkButt2", arg, i); - XtManageChild(w->OD.postLinkButt[2]); - - /* post - anim */ - i=0; - w->OD.postAnimFrame[0] = XmCreateFrame(w->OD.postRowCol, "ODpostAnimFrame0", arg, i); - XtManageChild(w->OD.postAnimFrame[0]); - - i=0; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Animation Delay")); i++; - w->OD.postAnimFrame[1] = XmCreateLabel(w->OD.postAnimFrame[0], "ODpostAnimFrame1", arg, i); - XtManageChild(w->OD.postAnimFrame[1]); - - i=0; - w->OD.postAnimFrameRowCol = XmCreateRowColumn(w->OD.postAnimFrame[0], "ODpostAnimFrameRowCol", arg, i); - XtManageChild(w->OD.postAnimFrameRowCol); - - i=0; - XtSetArg(arg[i], XmNminimum, 0); i++; - XtSetArg(arg[i], XmNmaximum, 10); i++; - XtSetArg(arg[i], XmNdecimalPoints, 1); i++; - XtSetArg(arg[i], XmNshowValue, True); i++; - XtSetArg(arg[i], XmNvalue, CTX.post.anim_delay); i++; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->OD.postAnimScale = XmCreateScale(w->OD.postAnimFrameRowCol, "ODpostAnimScale", arg, i); - XtManageChild(w->OD.postAnimScale); - - - /* Miscellaneous */ - - i=0; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("General Options")); i++; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Apply")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->OD.miscDialog = XmCreateTemplateDialog(w->M.shell, "ODmiscDialog", arg, i); - XtUnmanageChild(w->OD.miscDialog); - - i=0; - w->OD.miscRowCol = XmCreateRowColumn(w->OD.miscDialog, "ODmiscRowCol", arg, i); - XtManageChild(w->OD.miscRowCol); - - /* misc - Misc */ - - i=0; - w->OD.miscMiscFrame[0] = XmCreateFrame(w->OD.miscRowCol, "ODmiscMiscFrame0", arg, i); - XtManageChild(w->OD.miscMiscFrame[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Miscellaneous")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.miscMiscFrame[1] = XmCreateLabel(w->OD.miscMiscFrame[0], "ODmiscMiscFrame1", arg, i); - XtManageChild(w->OD.miscMiscFrame[1]); - - i=0; - w->OD.miscMiscCheck = XmCreateSimpleCheckBox(w->OD.miscMiscFrame[0], "ODmiscMiscCheck", arg, i); - XtManageChild(w->OD.miscMiscCheck); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Show Moving Axes")); i++; - XtSetArg(arg[i], XmNset, CTX.axes?True:False); i++; - w->OD.miscMiscButt[0] = XmCreateToggleButton(w->OD.miscMiscCheck, "ODmiscMiscButt0", arg, i); - XtManageChild(w->OD.miscMiscButt[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Show Small Axes")); i++; - XtSetArg(arg[i], XmNset, CTX.small_axes?True:False); i++; - w->OD.miscMiscButt[1] = XmCreateToggleButton(w->OD.miscMiscCheck, "ODmiscMiscButt1", arg, i); - XtManageChild(w->OD.miscMiscButt[1]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Enable Fast Redraw")); i++; - XtSetArg(arg[i], XmNset, CTX.fast?True:False); i++; - w->OD.miscMiscButt[2] = XmCreateToggleButton(w->OD.miscMiscCheck, "ODmiscMiscButt2", arg, i); - XtManageChild(w->OD.miscMiscButt[2]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Use Display Lists")); i++; - XtSetArg(arg[i], XmNset, CTX.display_lists?True:False); i++; - w->OD.miscMiscButt[3] = XmCreateToggleButton(w->OD.miscMiscCheck, "ODmiscMiscButt3", arg, i); - XtManageChild(w->OD.miscMiscButt[3]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Enable Alpha Blending")); i++; - XtSetArg(arg[i], XmNset, CTX.alpha?True:False); i++; - w->OD.miscMiscButt[4] = XmCreateToggleButton(w->OD.miscMiscCheck, "ODmiscMiscButt4", arg, i); - XtManageChild(w->OD.miscMiscButt[4]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Trackball Rotation Mode")); i++; - XtSetArg(arg[i], XmNset, CTX.useTrackball?True:False); i++; - w->OD.miscMiscButt[5] = XmCreateToggleButton(w->OD.miscMiscCheck, "ODmiscMiscButt5", arg, i); - XtManageChild(w->OD.miscMiscButt[5]); - - /* misc - colorscheme */ - - i=0; - w->OD.miscColorSchemeFrame[0] = XmCreateFrame(w->OD.miscRowCol, "ODmiscColorSchemeFrame0", arg, i); - XtManageChild(w->OD.miscColorSchemeFrame[0]); - - i=0; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Predefined Color Schemes")); i++; - w->OD.miscColorSchemeFrame[1] = XmCreateLabel(w->OD.miscColorSchemeFrame[0], "ODmiscColorSchemeFrame1", arg, i); - XtManageChild(w->OD.miscColorSchemeFrame[1]); - - i=0; - w->OD.miscColorSchemeFrameRowCol = XmCreateRowColumn(w->OD.miscColorSchemeFrame[0], "ODmiscColorSchemeFrameRowCol", arg, i); - XtManageChild(w->OD.miscColorSchemeFrameRowCol); - - i=0; - XtSetArg(arg[i], XmNminimum, 0); i++; - XtSetArg(arg[i], XmNmaximum, 2); i++; - XtSetArg(arg[i], XmNdecimalPoints, 0); i++; - XtSetArg(arg[i], XmNshowValue, True); i++; - XtSetArg(arg[i], XmNvalue, CTX.color_scheme); i++; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->OD.miscColorSchemeScale = XmCreateScale(w->OD.miscColorSchemeFrameRowCol, "ODmiscColorSchemeScale", arg, i); - XtManageChild(w->OD.miscColorSchemeScale); - - /* misc - projection */ - - i=0; - w->OD.miscProjFrame[0] = XmCreateFrame(w->OD.miscRowCol, "ODmiscProjFrame0", arg, i); - XtManageChild(w->OD.miscProjFrame[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Projection")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.miscProjFrame[1] = XmCreateLabel(w->OD.miscProjFrame[0], "ODmiscProjFrame1", arg, i); - XtManageChild(w->OD.miscProjFrame[1]); - - i=0; - w->OD.miscProjCheck = XmCreateRadioBox(w->OD.miscProjFrame[0], "ODmiscProjCheck", arg, i); - XtManageChild(w->OD.miscProjCheck); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Orthographic")); i++; - XtSetArg(arg[i], XmNset, CTX.ortho?True:False); i++; - w->OD.miscProjButt[0] = XmCreateToggleButton(w->OD.miscProjCheck, "ODmiscProjButt0", arg, i); - XtManageChild(w->OD.miscProjButt[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Perspective")); i++; - XtSetArg(arg[i], XmNset, CTX.ortho?False:True); i++; - w->OD.miscProjButt[1] = XmCreateToggleButton(w->OD.miscProjCheck, "ODmiscProjButt1", arg, i); - XtManageChild(w->OD.miscProjButt[1]); - - - /* misc - light position */ - i=0; - w->OD.miscLightFrame[0] = XmCreateFrame(w->OD.miscRowCol, "ODmiscLightFrame0", arg, i); - XtManageChild(w->OD.miscLightFrame[0]); - - i=0; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Light Position")); i++; - w->OD.miscLightFrame[1] = XmCreateLabel(w->OD.miscLightFrame[0], "ODmiscLightFrame1", arg, i); - XtManageChild(w->OD.miscLightFrame[1]); - - i=0; - w->OD.miscLightFrameRowCol = XmCreateRowColumn(w->OD.miscLightFrame[0], "ODmiscLightFrameRowCol", arg, i); - XtManageChild(w->OD.miscLightFrameRowCol); - - for(n=0 ; n<3 ; n++){ - i=0; - XtSetArg(arg[i], XmNminimum, -25); i++; - XtSetArg(arg[i], XmNmaximum, 25); i++; - XtSetArg(arg[i], XmNdecimalPoints, 0); i++; - XtSetArg(arg[i], XmNshowValue, False); i++; - XtSetArg(arg[i], XmNvalue, (int)25*CTX.light_position[0][n]); i++; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->OD.miscLightScale[n] = XmCreateScale(w->OD.miscLightFrameRowCol, "ODmiscLightScalen", arg, i); - XtManageChild(w->OD.miscLightScale[n]); - } - - /* misc - shininess */ - i=0; - w->OD.miscShineFrame[0] = XmCreateFrame(w->OD.miscRowCol, "ODmiscShineFrame0", arg, i); - XtManageChild(w->OD.miscShineFrame[0]); - - i=0; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Shininess")); i++; - w->OD.miscShineFrame[1] = XmCreateLabel(w->OD.miscShineFrame[0], "ODmiscShineFrame1", arg, i); - XtManageChild(w->OD.miscShineFrame[1]); - - i=0; - w->OD.miscShineFrameRowCol = XmCreateRowColumn(w->OD.miscShineFrame[0], "ODmiscShineFrameRowCol", arg, i); - XtManageChild(w->OD.miscShineFrameRowCol); - - i=0; - XtSetArg(arg[i], XmNminimum, 0); i++; - XtSetArg(arg[i], XmNmaximum, 25); i++; - XtSetArg(arg[i], XmNdecimalPoints, 0); i++; - XtSetArg(arg[i], XmNshowValue, False); i++; - XtSetArg(arg[i], XmNvalue, (int)25*CTX.shine); i++; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->OD.miscShineScale = XmCreateScale(w->OD.miscShineFrameRowCol, "ODmiscShineScale", arg, i); - XtManageChild(w->OD.miscShineScale); - - /* Viewport */ - - i=0; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Viewport")); i++; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Apply")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->OD.viewportDialog = XmCreateTemplateDialog(w->M.shell, "ODviewportDialog", arg, i); - XtUnmanageChild(w->OD.viewportDialog); - - i=0; - w->OD.viewportRowCol = XmCreateRowColumn(w->OD.viewportDialog, "ODviewportRowCol", arg, i); - XtManageChild(w->OD.viewportRowCol); - - /* viewport - rotate */ - - i=0; - w->OD.viewportFrame[0][0] = XmCreateFrame(w->OD.viewportRowCol, "ODviewportFrame00", arg, i); - XtManageChild(w->OD.viewportFrame[0][0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Rotation")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.viewportFrame[1][0] = XmCreateLabel(w->OD.viewportFrame[0][0], "ODviewportFrame10", arg, i); - XtManageChild(w->OD.viewportFrame[1][0]); - - i=0; - XtSetArg(arg[i], XmNpacking, XmPACK_COLUMN); i++; - XtSetArg(arg[i], XmNnumColumns, 3); i++; - w->OD.viewportFrameRowCol[0] = XmCreateRowColumn(w->OD.viewportFrame[0][0], "ODviewportFrameRowCol0", arg, i); - XtManageChild(w->OD.viewportFrameRowCol[0]); - - i=0; - sprintf(label, "%g", CTX.r[0]); - XtSetArg(arg[i], XmNvalue, label); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->OD.viewportText[0][0] = XmCreateTextField(w->OD.viewportFrameRowCol[0], "ODviewportText00", arg, i); - XtManageChild(w->OD.viewportText[0][0]); - i=0; - XtSetArg(arg[i], XmNset, CTX.rlock[0]); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("x-lock")); i++; - w->OD.viewportLockButt[0][0] = XmCreateToggleButton(w->OD.viewportFrameRowCol[0], "ODviewportLockButt00", arg, i); - XtManageChild(w->OD.viewportLockButt[0][0]); - - i=0; - sprintf(label, "%g", CTX.r[1]); - XtSetArg(arg[i], XmNvalue, label); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->OD.viewportText[0][1] = XmCreateTextField(w->OD.viewportFrameRowCol[0], "ODviewportText01", arg, i); - XtManageChild(w->OD.viewportText[0][1]); - i=0; - XtSetArg(arg[i], XmNset, CTX.rlock[1]); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("y-lock")); i++; - w->OD.viewportLockButt[0][1] = XmCreateToggleButton(w->OD.viewportFrameRowCol[0], "ODviewportLockButt00", arg, i); - XtManageChild(w->OD.viewportLockButt[0][1]); - - i=0; - sprintf(label, "%g", CTX.r[2]); - XtSetArg(arg[i], XmNvalue, label); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->OD.viewportText[0][2] = XmCreateTextField(w->OD.viewportFrameRowCol[0], "ODviewportText02", arg, i); - XtManageChild(w->OD.viewportText[0][2]); - i=0; - XtSetArg(arg[i], XmNset, CTX.rlock[2]); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("z-lock")); i++; - w->OD.viewportLockButt[0][2] = XmCreateToggleButton(w->OD.viewportFrameRowCol[0], "ODviewportLockButt02", arg, i); - XtManageChild(w->OD.viewportLockButt[0][2]); - - - /* viewport - translate */ - - i=0; - w->OD.viewportFrame[0][1] = XmCreateFrame(w->OD.viewportRowCol, "ODviewportFrame01", arg, i); - XtManageChild(w->OD.viewportFrame[0][1]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Translation")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.viewportFrame[1][1] = XmCreateLabel(w->OD.viewportFrame[0][1], "ODviewportFrame11", arg, i); - XtManageChild(w->OD.viewportFrame[1][1]); - - i=0; - XtSetArg(arg[i], XmNpacking, XmPACK_COLUMN); i++; - XtSetArg(arg[i], XmNnumColumns, 3); i++; - w->OD.viewportFrameRowCol[1] = XmCreateRowColumn(w->OD.viewportFrame[0][1], "ODviewportFrameRowCol1", arg, i); - XtManageChild(w->OD.viewportFrameRowCol[1]); - - i=0; - sprintf(label, "%g", CTX.t[0]); - XtSetArg(arg[i], XmNvalue, label); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->OD.viewportText[1][0] = XmCreateTextField(w->OD.viewportFrameRowCol[1], "ODviewportText10", arg, i); - XtManageChild(w->OD.viewportText[1][0]); - i=0; - XtSetArg(arg[i], XmNset, CTX.tlock[0]); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("x-lock")); i++; - w->OD.viewportLockButt[1][0] = XmCreateToggleButton(w->OD.viewportFrameRowCol[1], "ODviewportLockButt10", arg, i); - XtManageChild(w->OD.viewportLockButt[1][0]); - - i=0; - sprintf(label, "%g", CTX.t[1]); - XtSetArg(arg[i], XmNvalue, label); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->OD.viewportText[1][1] = XmCreateTextField(w->OD.viewportFrameRowCol[1], "ODviewportText11", arg, i); - XtManageChild(w->OD.viewportText[1][1]); - i=0; - XtSetArg(arg[i], XmNset, CTX.tlock[1]); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("y-lock")); i++; - w->OD.viewportLockButt[1][1] = XmCreateToggleButton(w->OD.viewportFrameRowCol[1], "ODviewportLockButt00", arg, i); - XtManageChild(w->OD.viewportLockButt[1][1]); - - i=0; - sprintf(label, "%g", CTX.t[2]); - XtSetArg(arg[i], XmNvalue, label); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->OD.viewportText[1][2] = XmCreateTextField(w->OD.viewportFrameRowCol[1], "ODviewportText12", arg, i); - XtManageChild(w->OD.viewportText[1][2]); - i=0; - XtSetArg(arg[i], XmNset, CTX.tlock[2]); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("z-lock")); i++; - w->OD.viewportLockButt[1][2] = XmCreateToggleButton(w->OD.viewportFrameRowCol[1], "ODviewportLockButt12", arg, i); - XtManageChild(w->OD.viewportLockButt[1][2]); - - - /* viewport - scale */ - - i=0; - w->OD.viewportFrame[0][2] = XmCreateFrame(w->OD.viewportRowCol, "ODviewportFrame02", arg, i); - XtManageChild(w->OD.viewportFrame[0][2]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Scale")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.viewportFrame[1][2] = XmCreateLabel(w->OD.viewportFrame[0][2], "ODviewportFrame12", arg, i); - XtManageChild(w->OD.viewportFrame[1][2]); - - i=0; - XtSetArg(arg[i], XmNpacking, XmPACK_COLUMN); i++; - XtSetArg(arg[i], XmNnumColumns, 3); i++; - w->OD.viewportFrameRowCol[2] = XmCreateRowColumn(w->OD.viewportFrame[0][2], "ODviewportFrameRowCol2", arg, i); - XtManageChild(w->OD.viewportFrameRowCol[2]); - - i=0; - sprintf(label, "%g", CTX.s[0]); - XtSetArg(arg[i], XmNvalue, label); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->OD.viewportText[2][0] = XmCreateTextField(w->OD.viewportFrameRowCol[2], "ODviewportText20", arg, i); - XtManageChild(w->OD.viewportText[2][0]); - i=0; - XtSetArg(arg[i], XmNset, CTX.slock[0]); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("x-lock")); i++; - w->OD.viewportLockButt[2][0] = XmCreateToggleButton(w->OD.viewportFrameRowCol[2], "ODviewportLockButt20", arg, i); - XtManageChild(w->OD.viewportLockButt[2][0]); - - i=0; - sprintf(label, "%g", CTX.s[1]); - XtSetArg(arg[i], XmNvalue, label); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->OD.viewportText[2][1] = XmCreateTextField(w->OD.viewportFrameRowCol[2], "ODviewportText21", arg, i); - XtManageChild(w->OD.viewportText[2][1]); - i=0; - XtSetArg(arg[i], XmNset, CTX.slock[1]); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("y-lock")); i++; - w->OD.viewportLockButt[2][1] = XmCreateToggleButton(w->OD.viewportFrameRowCol[2], "ODviewportLockButt20", arg, i); - XtManageChild(w->OD.viewportLockButt[2][1]); - - i=0; - sprintf(label, "%g", CTX.s[2]); - XtSetArg(arg[i], XmNvalue, label); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->OD.viewportText[2][2] = XmCreateTextField(w->OD.viewportFrameRowCol[2], "ODviewportText22", arg, i); - XtManageChild(w->OD.viewportText[2][2]); - i=0; - XtSetArg(arg[i], XmNset, CTX.slock[2]); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("z-lock")); i++; - w->OD.viewportLockButt[2][2] = XmCreateToggleButton(w->OD.viewportFrameRowCol[2], "ODviewportLockButt22", arg, i); - XtManageChild(w->OD.viewportLockButt[2][2]); - - /* Info */ - - i=0; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Statistics")); i++; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Update")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->OD.infoDialog = XmCreateTemplateDialog(w->M.shell, "ODinfoDialog", arg, i); - XtUnmanageChild(w->OD.infoDialog); - - i=0; - w->OD.infoRowCol = XmCreateRowColumn(w->OD.infoDialog, "ODinfoRowCol", arg, i); - XtManageChild(w->OD.infoRowCol); - - /* info - geom */ - - i=0; - w->OD.infoFrame[0][0] = XmCreateFrame(w->OD.infoRowCol, "ODinfoFrame00", arg, i); - XtManageChild(w->OD.infoFrame[0][0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Geometry")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.infoFrame[1][0] = XmCreateLabel(w->OD.infoFrame[0][0], "ODinfoFrame10", arg, i); - XtManageChild(w->OD.infoFrame[1][0]); - - i=0; - XtSetArg(arg[i], XmNpacking, XmPACK_COLUMN); i++; - XtSetArg(arg[i], XmNnumColumns, 2); i++; - w->OD.infoFrameRowCol[0] = XmCreateRowColumn(w->OD.infoFrame[0][0], "ODinfoFrameRowCol0", arg, i); - XtManageChild(w->OD.infoFrameRowCol[0]); - - for(n=0 ; n<NB_INFO_GEOM ; n++){ - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple(txt_info[n])); i++; - w->OD.infoKeyLabel[n] = XmCreateLabel(w->OD.infoFrameRowCol[0], "ODinfoKeyLabel", arg, i); - XtManageChild(w->OD.infoKeyLabel[n]); - } - for(n=0 ; n<NB_INFO_GEOM ; n++){ - i=0; - w->OD.infoValueLabel[n] = XmCreateLabel(w->OD.infoFrameRowCol[0], "ODinfoValueLabel", arg, i); - XtManageChild(w->OD.infoValueLabel[n]); - } - - /* info - mesh */ - - i=0; - w->OD.infoFrame[0][1] = XmCreateFrame(w->OD.infoRowCol, "ODinfoFrame01", arg, i); - XtManageChild(w->OD.infoFrame[0][1]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Mesh")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.infoFrame[1][1] = XmCreateLabel(w->OD.infoFrame[0][1], "ODinfoFrame11", arg, i); - XtManageChild(w->OD.infoFrame[1][1]); - - i=0; - XtSetArg(arg[i], XmNpacking, XmPACK_COLUMN); i++; - XtSetArg(arg[i], XmNnumColumns, 2); i++; - w->OD.infoFrameRowCol[1] = XmCreateRowColumn(w->OD.infoFrame[0][1], "ODinfoFrameRowCol1", arg, i); - XtManageChild(w->OD.infoFrameRowCol[1]); - - for(n=NB_INFO_GEOM ; n<NB_INFO_GEOM+NB_INFO_MESH ; n++){ - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple(txt_info[n])); i++; - w->OD.infoKeyLabel[n] = XmCreateLabel(w->OD.infoFrameRowCol[1], "ODinfoKeyLabel", arg, i); - XtManageChild(w->OD.infoKeyLabel[n]); - } - for(n=NB_INFO_GEOM ; n<NB_INFO_GEOM+NB_INFO_MESH ; n++){ - i=0; - w->OD.infoValueLabel[n] = XmCreateLabel(w->OD.infoFrameRowCol[1], "ODinfoValueLabel", arg, i); - XtManageChild(w->OD.infoValueLabel[n]); - } - - /* info - post */ - - i=0; - w->OD.infoFrame[0][2] = XmCreateFrame(w->OD.infoRowCol, "ODinfoFrame02", arg, i); - XtManageChild(w->OD.infoFrame[0][2]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Post Processing")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->OD.infoFrame[1][2] = XmCreateLabel(w->OD.infoFrame[0][2], "ODinfoFrame12", arg, i); - XtManageChild(w->OD.infoFrame[1][2]); - - i=0; - XtSetArg(arg[i], XmNpacking, XmPACK_COLUMN); i++; - XtSetArg(arg[i], XmNnumColumns, 2); i++; - w->OD.infoFrameRowCol[2] = XmCreateRowColumn(w->OD.infoFrame[0][2], "ODinfoFrameRowCol2", arg, i); - XtManageChild(w->OD.infoFrameRowCol[2]); - - for(n=NB_INFO_GEOM+NB_INFO_MESH ; n<NB_INFO_MAX ; n++){ - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple(txt_info[n])); i++; - w->OD.infoKeyLabel[n] = XmCreateLabel(w->OD.infoFrameRowCol[2], "ODinfoKeyLabel", arg, i); - XtManageChild(w->OD.infoKeyLabel[n]); - } - for(n=NB_INFO_GEOM+NB_INFO_MESH ; n<NB_INFO_MAX ; n++){ - i=0; - w->OD.infoValueLabel[n] = XmCreateLabel(w->OD.infoFrameRowCol[2], "ODinfoValueLabel", arg, i); - XtManageChild(w->OD.infoValueLabel[n]); - } - -} - - -/* ------------------------------------------------------------------------ - HELP DIALOGS - ------------------------------------------------------------------------ */ - -char TextAbout[1024]; - -void CreateWidgets_HD(Widgets_T *w){ - int i; - Arg arg[10]; - Widget tmp ; - - /* keys */ - i=0; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Short Help")); i++; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, True); i++; - w->HD.keysDialog = XmCreateTemplateDialog(w->M.shell, "HDkeysDialog", arg, i); - XtUnmanageChild(w->HD.keysDialog); - - i=0; - XtSetArg(arg[i], XmNeditable, False); i++; - XtSetArg(arg[i], XmNeditMode, XmMULTI_LINE_EDIT); i++; - XtSetArg(arg[i], XmNcolumns, 66); i++; - XtSetArg(arg[i], XmNrows, 25); i++; - XtSetArg(arg[i], XmNvalue, txt_help); i++; - w->HD.keysText = XmCreateScrolledText(w->HD.keysDialog, "HDkeysText", arg, i); - XtManageChild(w->HD.keysText); - - - /* about */ - i=0; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("About Gmsh")); i++; - XtSetArg(arg[i], XmNautoUnmanage, True); i++; - XtSetArg(arg[i], XmNmessageString, XmStringCreateLtoR(TextAbout,XmFONTLIST_DEFAULT_TAG)); i++; - w->HD.aboutDialog = XmCreateInformationDialog(w->M.shell, "HDaboutDialog", arg, i); - XtUnmanageChild(w->HD.aboutDialog); - - tmp = XmMessageBoxGetChild(w->HD.aboutDialog, XmDIALOG_HELP_BUTTON); - XtUnmanageChild(tmp); - tmp = XmMessageBoxGetChild(w->HD.aboutDialog, XmDIALOG_CANCEL_BUTTON); - XtUnmanageChild(tmp); - -} - -/* ------------------------------------------------------------------------ - GEOMETRY DIALOGS - ------------------------------------------------------------------------ */ - -void CreateWidgets_GD(Widgets_T *w){ - int i; - Arg arg[10]; - - /* Parameter */ - - i=0; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Add Parameter")); i++; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Add")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->GD.paramDialog = XmCreateTemplateDialog(w->M.shell, "GDparamDialog", arg, i); - XtUnmanageChild(w->GD.paramDialog); - - i=0; - w->GD.paramRowCol = XmCreateRowColumn(w->GD.paramDialog, "ODparamRowCol", arg, i); - XtManageChild(w->GD.paramRowCol); - - /* param - name */ - - i=0; - w->GD.paramFrame[0][0] = XmCreateFrame(w->GD.paramRowCol, "GDparamFrame00", arg, i); - XtManageChild(w->GD.paramFrame[0][0]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Name")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->GD.paramFrame[1][0] = XmCreateLabel(w->GD.paramFrame[0][0], "GDparamFrame10", arg, i); - XtManageChild(w->GD.paramFrame[1][0]); - - i=0; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->GD.paramFrameRowCol[0] = XmCreateRowColumn(w->GD.paramFrame[0][0], "ODparamFrameRowCol0", arg, i); - XtManageChild(w->GD.paramFrameRowCol[0]); - - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - w->GD.paramText[0] = XmCreateTextField(w->GD.paramFrameRowCol[0], "GDparamText0", arg, i); - XtManageChild(w->GD.paramText[0]); - - /* param - value */ - - i=0; - w->GD.paramFrame[0][1] = XmCreateFrame(w->GD.paramRowCol, "GDparamFrame01", arg, i); - XtManageChild(w->GD.paramFrame[0][1]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Value")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->GD.paramFrame[1][1] = XmCreateLabel(w->GD.paramFrame[0][1], "GDparamFrame11", arg, i); - XtManageChild(w->GD.paramFrame[1][1]); - - i=0; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->GD.paramFrameRowCol[1] = XmCreateRowColumn(w->GD.paramFrame[0][1], "ODparamFrameRowCol1", arg, i); - XtManageChild(w->GD.paramFrameRowCol[1]); - - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - w->GD.paramText[1] = XmCreateTextField(w->GD.paramFrameRowCol[1], "GDparamText1", arg, i); - XtManageChild(w->GD.paramText[1]); - - - /* Point */ - - i=0; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Add Point")); i++; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Add")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->GD.pointDialog = XmCreateTemplateDialog(w->M.shell, "GDpointDialog", arg, i); - XtUnmanageChild(w->GD.pointDialog); - - i=0; - w->GD.pointRowCol = XmCreateRowColumn(w->GD.pointDialog, "ODpointRowCol", arg, i); - XtManageChild(w->GD.pointRowCol); - - /* point - coords */ - - i=0; - w->GD.pointFrame[0][0] = XmCreateFrame(w->GD.pointRowCol, "GDpointFrame00", arg, i); - XtManageChild(w->GD.pointFrame[0][0]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Coordinates")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->GD.pointFrame[1][0] = XmCreateLabel(w->GD.pointFrame[0][0], "GDpointFrame10", arg, i); - XtManageChild(w->GD.pointFrame[1][0]); - - i=0; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->GD.pointFrameRowCol[0] = XmCreateRowColumn(w->GD.pointFrame[0][0], "ODpointFrameRowCol0", arg, i); - XtManageChild(w->GD.pointFrameRowCol[0]); - - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.pointText[0] = XmCreateTextField(w->GD.pointFrameRowCol[0], "GDpointText0", arg, i); - XtManageChild(w->GD.pointText[0]); - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.pointText[1] = XmCreateTextField(w->GD.pointFrameRowCol[0], "GDpointText1", arg, i); - XtManageChild(w->GD.pointText[1]); - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.pointText[2] = XmCreateTextField(w->GD.pointFrameRowCol[0], "GDpointText2", arg, i); - XtManageChild(w->GD.pointText[2]); - - /* point - char length */ - - i=0; - w->GD.pointFrame[0][1] = XmCreateFrame(w->GD.pointRowCol, "GDpointFrame01", arg, i); - XtManageChild(w->GD.pointFrame[0][1]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Characteristc Length")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->GD.pointFrame[1][1] = XmCreateLabel(w->GD.pointFrame[0][1], "GDpointFrame11", arg, i); - XtManageChild(w->GD.pointFrame[1][1]); - - i=0; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->GD.pointFrameRowCol[1] = XmCreateRowColumn(w->GD.pointFrame[0][1], "ODpointFrameRowCol1", arg, i); - XtManageChild(w->GD.pointFrameRowCol[1]); - - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.pointText[3] = XmCreateTextField(w->GD.pointFrameRowCol[1], "GDpointText3", arg, i); - XtManageChild(w->GD.pointText[3]); - - - /* Rotation */ - - i=0; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Current Rotation")); i++; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Ok")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->GD.rotDialog = XmCreateTemplateDialog(w->M.shell, "GDrotDialog", arg, i); - XtUnmanageChild(w->GD.rotDialog); - - i=0; - w->GD.rotRowCol = XmCreateRowColumn(w->GD.rotDialog, "ODrotRowCol", arg, i); - XtManageChild(w->GD.rotRowCol); - - /* rot - axis point */ - - i=0; - w->GD.rotFrame[0][0] = XmCreateFrame(w->GD.rotRowCol, "GDrotFrame00", arg, i); - XtManageChild(w->GD.rotFrame[0][0]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Axis Point")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->GD.rotFrame[1][0] = XmCreateLabel(w->GD.rotFrame[0][0], "GDrotFrame10", arg, i); - XtManageChild(w->GD.rotFrame[1][0]); - - i=0; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->GD.rotFrameRowCol[0] = XmCreateRowColumn(w->GD.rotFrame[0][0], "ODrotFrameRowCol0", arg, i); - XtManageChild(w->GD.rotFrameRowCol[0]); - - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.rotText[0] = XmCreateTextField(w->GD.rotFrameRowCol[0], "GDrotText0", arg, i); - XtManageChild(w->GD.rotText[0]); - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.rotText[1] = XmCreateTextField(w->GD.rotFrameRowCol[0], "GDrotText1", arg, i); - XtManageChild(w->GD.rotText[1]); - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.rotText[2] = XmCreateTextField(w->GD.rotFrameRowCol[0], "GDrotText2", arg, i); - XtManageChild(w->GD.rotText[2]); - - /* rot - direction */ - - i=0; - w->GD.rotFrame[0][1] = XmCreateFrame(w->GD.rotRowCol, "GDrotFrame01", arg, i); - XtManageChild(w->GD.rotFrame[0][1]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Direction")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->GD.rotFrame[1][1] = XmCreateLabel(w->GD.rotFrame[0][1], "GDrotFrame11", arg, i); - XtManageChild(w->GD.rotFrame[1][1]); - - i=0; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->GD.rotFrameRowCol[1] = XmCreateRowColumn(w->GD.rotFrame[0][1], "ODrotFrameRowCol1", arg, i); - XtManageChild(w->GD.rotFrameRowCol[1]); - - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.rotText[3] = XmCreateTextField(w->GD.rotFrameRowCol[1], "GDrotText3", arg, i); - XtManageChild(w->GD.rotText[3]); - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.rotText[4] = XmCreateTextField(w->GD.rotFrameRowCol[1], "GDrotText4", arg, i); - XtManageChild(w->GD.rotText[4]); - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.rotText[5] = XmCreateTextField(w->GD.rotFrameRowCol[1], "GDrotText5", arg, i); - XtManageChild(w->GD.rotText[5]); - - /* rot - angle */ - - i=0; - w->GD.rotFrame[0][2] = XmCreateFrame(w->GD.rotRowCol, "GDrotFrame02", arg, i); - XtManageChild(w->GD.rotFrame[0][2]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Angle")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->GD.rotFrame[1][2] = XmCreateLabel(w->GD.rotFrame[0][2], "GDrotFrame12", arg, i); - XtManageChild(w->GD.rotFrame[1][2]); - - i=0; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->GD.rotFrameRowCol[2] = XmCreateRowColumn(w->GD.rotFrame[0][2], "ODrotFrameRowCol2", arg, i); - XtManageChild(w->GD.rotFrameRowCol[2]); - - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.rotText[6] = XmCreateTextField(w->GD.rotFrameRowCol[2], "GDrotText6", arg, i); - XtManageChild(w->GD.rotText[6]); - - - /* Translation */ - - i=0; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Current Translation")); i++; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Ok")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->GD.tranDialog = XmCreateTemplateDialog(w->M.shell, "GDtranDialog", arg, i); - XtUnmanageChild(w->GD.tranDialog); - - i=0; - w->GD.tranFrame[0] = XmCreateFrame(w->GD.tranDialog, "GDtranFrame0", arg, i); - XtManageChild(w->GD.tranFrame[0]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Vector")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->GD.tranFrame[1] = XmCreateLabel(w->GD.tranFrame[0], "GDtranFrame1", arg, i); - XtManageChild(w->GD.tranFrame[1]); - - i=0; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->GD.tranFrameRowCol = XmCreateRowColumn(w->GD.tranFrame[0], "ODtranFrameRowCol", arg, i); - XtManageChild(w->GD.tranFrameRowCol); - - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.tranText[0] = XmCreateTextField(w->GD.tranFrameRowCol, "GDtranText0", arg, i); - XtManageChild(w->GD.tranText[0]); - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.tranText[1] = XmCreateTextField(w->GD.tranFrameRowCol, "GDtranText1", arg, i); - XtManageChild(w->GD.tranText[1]); - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.tranText[2] = XmCreateTextField(w->GD.tranFrameRowCol, "GDtranText2", arg, i); - XtManageChild(w->GD.tranText[2]); - - - /* Dilatation */ - - i=0; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Current Dilatation")); i++; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Ok")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->GD.dilatDialog = XmCreateTemplateDialog(w->M.shell, "GDdilatDialog", arg, i); - XtUnmanageChild(w->GD.dilatDialog); - - i=0; - w->GD.dilatRowCol = XmCreateRowColumn(w->GD.dilatDialog, "ODdilatRowCol", arg, i); - XtManageChild(w->GD.dilatRowCol); - - /* dilat - coords */ - - i=0; - w->GD.dilatFrame[0][0] = XmCreateFrame(w->GD.dilatRowCol, "GDdilatFrame00", arg, i); - XtManageChild(w->GD.dilatFrame[0][0]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Vector")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->GD.dilatFrame[1][0] = XmCreateLabel(w->GD.dilatFrame[0][0], "GDdilatFrame10", arg, i); - XtManageChild(w->GD.dilatFrame[1][0]); - - i=0; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->GD.dilatFrameRowCol[0] = XmCreateRowColumn(w->GD.dilatFrame[0][0], "ODdilatFrameRowCol0", arg, i); - XtManageChild(w->GD.dilatFrameRowCol[0]); - - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.dilatText[0] = XmCreateTextField(w->GD.dilatFrameRowCol[0], "GDdilatText0", arg, i); - XtManageChild(w->GD.dilatText[0]); - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.dilatText[1] = XmCreateTextField(w->GD.dilatFrameRowCol[0], "GDdilatText1", arg, i); - XtManageChild(w->GD.dilatText[1]); - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.dilatText[2] = XmCreateTextField(w->GD.dilatFrameRowCol[0], "GDdilatText2", arg, i); - XtManageChild(w->GD.dilatText[2]); - - /* dilat - factor */ - - i=0; - w->GD.dilatFrame[0][1] = XmCreateFrame(w->GD.dilatRowCol, "GDdilatFrame01", arg, i); - XtManageChild(w->GD.dilatFrame[0][1]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Factor")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->GD.dilatFrame[1][1] = XmCreateLabel(w->GD.dilatFrame[0][1], "GDdilatFrame11", arg, i); - XtManageChild(w->GD.dilatFrame[1][1]); - - i=0; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->GD.dilatFrameRowCol[1] = XmCreateRowColumn(w->GD.dilatFrame[0][1], "ODdilatFrameRowCol1", arg, i); - XtManageChild(w->GD.dilatFrameRowCol[1]); - - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.dilatText[3] = XmCreateTextField(w->GD.dilatFrameRowCol[1], "GDdilatText3", arg, i); - XtManageChild(w->GD.dilatText[3]); - - /* Symmetry */ - - i=0; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Current Symmetry")); i++; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Ok")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->GD.symmDialog = XmCreateTemplateDialog(w->M.shell, "GDsymmDialog", arg, i); - XtUnmanageChild(w->GD.symmDialog); - - i=0; - w->GD.symmFrame[0] = XmCreateFrame(w->GD.symmDialog, "GDsymmFrame0", arg, i); - XtManageChild(w->GD.symmFrame[0]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Plane")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->GD.symmFrame[1] = XmCreateLabel(w->GD.symmFrame[0], "GDsymmFrame1", arg, i); - XtManageChild(w->GD.symmFrame[1]); - - i=0; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->GD.symmFrameRowCol = XmCreateRowColumn(w->GD.symmFrame[0], "ODsymmFrameRowCol", arg, i); - XtManageChild(w->GD.symmFrameRowCol); - - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.symmText[0] = XmCreateTextField(w->GD.symmFrameRowCol, "GDsymmText0", arg, i); - XtManageChild(w->GD.symmText[0]); - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.symmText[1] = XmCreateTextField(w->GD.symmFrameRowCol, "GDsymmText1", arg, i); - XtManageChild(w->GD.symmText[1]); - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.symmText[2] = XmCreateTextField(w->GD.symmFrameRowCol, "GDsymmText2", arg, i); - XtManageChild(w->GD.symmText[2]); - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - XtSetArg(arg[i], XmNcolumns, 10); i++; - w->GD.symmText[3] = XmCreateTextField(w->GD.symmFrameRowCol, "GDsymmText3", arg, i); - XtManageChild(w->GD.symmText[3]); - -} - -/* ------------------------------------------------------------------------ - MESH DIALOGS - ------------------------------------------------------------------------ */ - -void CreateWidgets_MD(Widgets_T *w){ - int i; - Arg arg[10]; - - /* Characteristic length */ - i=0; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Characteristic Length")); i++; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Ok")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->MD.charLengthDialog = XmCreateTemplateDialog(w->M.shell, "MDcharLengthDialog", arg, i); - XtUnmanageChild(w->MD.charLengthDialog); - - i=0; - w->MD.charLengthFrame[0] = XmCreateFrame(w->MD.charLengthDialog, "MDcharLengthFrame0", arg, i); - XtManageChild(w->MD.charLengthFrame[0]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Value")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->MD.charLengthFrame[1] = XmCreateLabel(w->MD.charLengthFrame[0], "MDcharLengthFrame1", arg, i); - XtManageChild(w->MD.charLengthFrame[1]); - - i=0; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->MD.charLengthFrameRowCol = XmCreateRowColumn(w->MD.charLengthFrame[0], "MDcharLengthFrameRowCol", arg, i); - XtManageChild(w->MD.charLengthFrameRowCol); - - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - w->MD.charLengthText = XmCreateTextField(w->MD.charLengthFrameRowCol, "MDcharLengthText", arg, i); - XtManageChild(w->MD.charLengthText); - - /* Transfinite Line */ - - i=0; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Transfinite Line")); i++; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Ok")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->MD.trsfLineDialog = XmCreateTemplateDialog(w->M.shell, "MDtrsfLineDialog", arg, i); - XtUnmanageChild(w->MD.trsfLineDialog); - - i=0; - w->MD.trsfLineRowCol = XmCreateRowColumn(w->MD.trsfLineDialog, "MDtrsfLineRowCol", arg, i); - XtManageChild(w->MD.trsfLineRowCol); - - /* trsf line - type */ - - i=0; - w->MD.trsfLineFrame[0][0] = XmCreateFrame(w->MD.trsfLineRowCol, "MDtrsfLineFrame00", arg, i); - XtManageChild(w->MD.trsfLineFrame[0][0]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Type")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->MD.trsfLineFrame[1][0] = XmCreateLabel(w->MD.trsfLineFrame[0][0], "MDtrsfLineFrame10", arg, i); - XtManageChild(w->MD.trsfLineFrame[1][0]); - - i=0; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->MD.trsfLineFrameRowCol[0] = XmCreateRowColumn(w->MD.trsfLineFrame[0][0], "MDtrsfLineFrameRowCol0", arg, i); - XtManageChild(w->MD.trsfLineFrameRowCol[0]); - - i=0; - XtSetArg(arg[i], XmNvalue, "Power 1.0"); i++; - w->MD.trsfLineText[0] = XmCreateTextField(w->MD.trsfLineFrameRowCol[0], "MDtrsfLineText0", arg, i); - XtManageChild(w->MD.trsfLineText[0]); - - /* trsf line - nb pts */ - - i=0; - w->MD.trsfLineFrame[0][1] = XmCreateFrame(w->MD.trsfLineRowCol, "MDtrsfLineFrame01", arg, i); - XtManageChild(w->MD.trsfLineFrame[0][1]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Number of Points")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->MD.trsfLineFrame[1][1] = XmCreateLabel(w->MD.trsfLineFrame[0][1], "MDtrsfLineFrame11", arg, i); - XtManageChild(w->MD.trsfLineFrame[1][1]); - - i=0; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->MD.trsfLineFrameRowCol[1] = XmCreateRowColumn(w->MD.trsfLineFrame[0][1], "MDtrsfLineFrameRowCol1", arg, i); - XtManageChild(w->MD.trsfLineFrameRowCol[1]); - - i=0; - XtSetArg(arg[i], XmNvalue, "2"); i++; - w->MD.trsfLineText[1] = XmCreateTextField(w->MD.trsfLineFrameRowCol[1], "MDtrsfLineText1", arg, i); - XtManageChild(w->MD.trsfLineText[1]); - - /* Transfinite Volume */ - i=0; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Transfinite Volume")); i++; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Ok")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->MD.trsfVolumeDialog = XmCreateTemplateDialog(w->M.shell, "MDtrsfVolumeDialog", arg, i); - XtUnmanageChild(w->MD.trsfVolumeDialog); - - i=0; - w->MD.trsfVolumeFrame[0] = XmCreateFrame(w->MD.trsfVolumeDialog, "MDtrsfVolumeFrame0", arg, i); - XtManageChild(w->MD.trsfVolumeFrame[0]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Number")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->MD.trsfVolumeFrame[1] = XmCreateLabel(w->MD.trsfVolumeFrame[0], "MDtrsfVolumeFrame1", arg, i); - XtManageChild(w->MD.trsfVolumeFrame[1]); - - i=0; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->MD.trsfVolumeFrameRowCol = XmCreateRowColumn(w->MD.trsfVolumeFrame[0], "MDtrsfVolumeFrameRowCol", arg, i); - XtManageChild(w->MD.trsfVolumeFrameRowCol); - - i=0; - XtSetArg(arg[i], XmNvalue, ""); i++; - w->MD.trsfVolumeText = XmCreateTextField(w->MD.trsfVolumeFrameRowCol, "MDtrsfVolumeText", arg, i); - XtManageChild(w->MD.trsfVolumeText); - -} - -/* ------------------------------------------------------------------------ - POST PROCESSING DIALOGS - ------------------------------------------------------------------------ */ - -void CreateWidgets_PD(Widgets_T *w){ - int i, n; - Arg arg[10]; - Widget tmp; - - /* Offset */ - i=0; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Apply")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->PD.offsetDialog = XmCreateTemplateDialog(w->M.shell, "PDoffsetDialog", arg, i); - XtUnmanageChild(w->PD.offsetDialog); - - i=0; - w->PD.offsetRowCol = XmCreateRowColumn(w->PD.offsetDialog, "PDoffsetRowCol", arg, i); - XtManageChild(w->PD.offsetRowCol); - - - /* Offset mode */ - i=0; - w->PD.offsetFrame[0][0] = XmCreateFrame(w->PD.offsetRowCol, "ODoffsetFrame00", arg, i); - XtManageChild(w->PD.offsetFrame[0][0]); - - i=0; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Offset Mode")); i++; - w->PD.offsetFrame[1][0] = XmCreateLabel(w->PD.offsetFrame[0][0], "PDoffsetFrame10", arg, i); - XtManageChild(w->PD.offsetFrame[1][0]); - - i=0; - w->PD.offsetFrameRowCol[0] = XmCreateRowColumn(w->PD.offsetFrame[0][0], "PDoffsetFrameRowCol0", arg, i); - XtManageChild(w->PD.offsetFrameRowCol[0]); - - i=0; - XtSetArg(arg[i], XmNnumColumns, 2); i++; - w->PD.offsetModeCheck = XmCreateRadioBox(w->PD.offsetFrameRowCol[0], "PDoffsetModeCheck", arg, i); - XtManageChild(w->PD.offsetModeCheck); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Translation")); i++; - w->PD.offsetModeButt[0] = XmCreateToggleButton(w->PD.offsetModeCheck, "PDoffsetModeButt0", arg, i); - XtManageChild(w->PD.offsetModeButt[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Raise")); i++; - w->PD.offsetModeButt[1] = XmCreateToggleButton(w->PD.offsetModeCheck, "PDoffsetModeButt1", arg, i); - XtManageChild(w->PD.offsetModeButt[1]); - - /* Offset sliders and text fields */ - - for(n=1 ; n<4 ; n++){ - i=0; - w->PD.offsetFrame[0][n] = XmCreateFrame(w->PD.offsetRowCol, "ODoffsetFrame0n", arg, i); - XtManageChild(w->PD.offsetFrame[0][n]); - - i=0; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->PD.offsetFrame[1][n] = XmCreateLabel(w->PD.offsetFrame[0][n], "PDoffsetFrame1n", arg, i); - XtManageChild(w->PD.offsetFrame[1][n]); - - i=0; - w->PD.offsetFrameRowCol[n] = XmCreateRowColumn(w->PD.offsetFrame[0][n], "PDoffsetFrameRowColn", arg, i); - XtManageChild(w->PD.offsetFrameRowCol[n]); - - i=0; - XtSetArg(arg[i], XmNminimum, -100); i++; - XtSetArg(arg[i], XmNmaximum, 100); i++; - XtSetArg(arg[i], XmNdecimalPoints, 2); i++; - XtSetArg(arg[i], XmNshowValue, False); i++; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->PD.offsetScale[n-1] = XmCreateScale(w->PD.offsetFrameRowCol[n], "PDoffsetScalen", arg, i); - XtManageChild(w->PD.offsetScale[n-1]); - - i=0; - w->PD.offsetText[n-1] = XmCreateTextField(w->PD.offsetFrameRowCol[n], "PDoffsetTextn", arg, i); - XtManageChild(w->PD.offsetText[n-1]); - } - - XtVaSetValues(w->PD.offsetFrame[1][1], XmNlabelString, XmStringCreateSimple("X"), NULL); - XtVaSetValues(w->PD.offsetFrame[1][2], XmNlabelString, XmStringCreateSimple("Y"), NULL); - XtVaSetValues(w->PD.offsetFrame[1][3], XmNlabelString, XmStringCreateSimple("Z"), NULL); - - - /* TimeStep */ - i=0; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Apply")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->PD.timeStepDialog = XmCreateTemplateDialog(w->M.shell, "PDtimeStepDialog", arg, i); - XtUnmanageChild(w->PD.timeStepDialog); - - i=0; - w->PD.timeStepFrame[0] = XmCreateFrame(w->PD.timeStepDialog, "ODtimeStepFrame0", arg, i); - XtManageChild(w->PD.timeStepFrame[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Time Step")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->PD.timeStepFrame[1] = XmCreateLabel(w->PD.timeStepFrame[0], "PDtimeStepFrame1", arg, i); - XtManageChild(w->PD.timeStepFrame[1]); - - i=0; - w->PD.timeStepFrameRowCol = XmCreateRowColumn(w->PD.timeStepFrame[0], "PDtimeStepRowCol", arg, i); - XtManageChild(w->PD.timeStepFrameRowCol); - - i=0; - XtSetArg(arg[i], XmNshowValue, False); i++; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->PD.timeStepScale = XmCreateScale(w->PD.timeStepFrameRowCol, "PDtimeStepScale", arg, i); - XtManageChild(w->PD.timeStepScale); - - i=0; - w->PD.timeStepText = XmCreateTextField(w->PD.timeStepFrameRowCol, "PDtimeStepText", arg, i); - XtManageChild(w->PD.timeStepText); - - /* Scale */ - i=0; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Apply")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->PD.scaleDialog = XmCreateTemplateDialog(w->M.shell, "PDscaleDialog", arg, i); - XtUnmanageChild(w->PD.scaleDialog); - - i=0; - w->PD.scaleRowCol = XmCreateRowColumn(w->PD.scaleDialog, "PDscaleRowCol", arg, i); - XtManageChild(w->PD.scaleRowCol); - - /* Scale - bar */ - i=0; - w->PD.scaleFrame[0][0] = XmCreateFrame(w->PD.scaleRowCol, "ODscaleFrame00", arg, i); - XtManageChild(w->PD.scaleFrame[0][0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Scale Bar")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->PD.scaleFrame[1][0] = XmCreateLabel(w->PD.scaleFrame[0][0], "PDscaleFrame10", arg, i); - XtManageChild(w->PD.scaleFrame[1][0]); - - i=0; - w->PD.scaleFrameRowCol[0] = XmCreateRowColumn(w->PD.scaleFrame[0][0], "PDscaleFrameRowCol0", arg, i); - XtManageChild(w->PD.scaleFrameRowCol[0]); - - i=0; - XtSetArg(arg[i], XmNnumColumns, 2); i++; - w->PD.scaleCheck = XmCreateSimpleCheckBox(w->PD.scaleFrameRowCol[0], "PDscaleCheck", arg, i); - XtManageChild(w->PD.scaleCheck); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Show")); i++; - w->PD.scaleShowButt = XmCreateToggleButton(w->PD.scaleCheck, "PDscaleShowButt", arg, i); - XtManageChild(w->PD.scaleShowButt); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Transparency")); i++; - w->PD.scaleTransButt = XmCreateToggleButton(w->PD.scaleCheck, "PDscaleTransButt", arg, i); - XtManageChild(w->PD.scaleTransButt); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Time Display")); i++; - w->PD.scaleTimeButt = XmCreateToggleButton(w->PD.scaleCheck, "PDscaleTimeButt", arg, i); - XtManageChild(w->PD.scaleTimeButt); - - for(n=0 ; n<2 ; n++){ - i=0; - XtSetArg(arg[i], XmNvalue, "0.00000000000000000001e-1"); i++; /* lesstif bug */ - w->PD.scaleText[n] = XmCreateTextField(w->PD.scaleFrameRowCol[0], "PDscaleTextn", arg, i); - XtManageChild(w->PD.scaleText[n]); - } - - /* Scale - range */ - i=0; - w->PD.scaleFrame[0][1] = XmCreateFrame(w->PD.scaleRowCol, "ODscaleFrame01", arg, i); - XtManageChild(w->PD.scaleFrame[0][1]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Value Range")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->PD.scaleFrame[1][1] = XmCreateLabel(w->PD.scaleFrame[0][1], "PDscaleFrame11", arg, i); - XtManageChild(w->PD.scaleFrame[1][1]); - - i=0; - w->PD.scaleFrameRowCol[1] = XmCreateRowColumn(w->PD.scaleFrame[0][1], "PDscaleFrameRowCol1", arg, i); - XtManageChild(w->PD.scaleFrameRowCol[1]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Custom")); i++; - w->PD.scaleRangeButt = XmCreateToggleButton(w->PD.scaleFrameRowCol[1], "PDscaleRangeButt", arg, i); - XtManageChild(w->PD.scaleRangeButt); - - for(n=0 ; n<2 ; n++){ - i=0; - XtSetArg(arg[i], XmNvalue, "0.00000000000000000001e-1"); i++; /* lesstif bug */ - w->PD.scaleRangeText[n] = XmCreateTextField(w->PD.scaleFrameRowCol[1], "PDscaleRangeTextn", arg, i); - XtManageChild(w->PD.scaleRangeText[n]); - } - - i=0; - XtSetArg(arg[i], XmNnumColumns, 2); i++; - w->PD.scaleTypeCheck = XmCreateRadioBox(w->PD.scaleFrameRowCol[1], "PDscaleTypeCheck", arg, i); - XtManageChild(w->PD.scaleTypeCheck); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Linear")); i++; - w->PD.scaleTypeButt[0] = XmCreateToggleButton(w->PD.scaleTypeCheck, "PDscaleTypeButt0", arg, i); - XtManageChild(w->PD.scaleTypeButt[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Logarithmic")); i++; - w->PD.scaleTypeButt[1] = XmCreateToggleButton(w->PD.scaleTypeCheck, "PDscaleTypeButt1", arg, i); - XtManageChild(w->PD.scaleTypeButt[1]); - - - /* Scale - intervals */ - i=0; - w->PD.scaleFrame[0][2] = XmCreateFrame(w->PD.scaleRowCol, "ODscaleFrame02", arg, i); - XtManageChild(w->PD.scaleFrame[0][2]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Intervals")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->PD.scaleFrame[1][2] = XmCreateLabel(w->PD.scaleFrame[0][2], "PDscaleFrame12", arg, i); - XtManageChild(w->PD.scaleFrame[1][2]); - - i=0; - w->PD.scaleFrameRowCol[2] = XmCreateRowColumn(w->PD.scaleFrame[0][2], "PDscaleFrameRowCol2", arg, i); - XtManageChild(w->PD.scaleFrameRowCol[2]); - - i=0; - XtSetArg(arg[i], XmNminimum, 1); i++; - XtSetArg(arg[i], XmNmaximum, 100); i++; - XtSetArg(arg[i], XmNvalue, 15); i++; - XtSetArg(arg[i], XmNshowValue, False); i++; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->PD.scaleIntervalsScale = XmCreateScale(w->PD.scaleFrameRowCol[2], "PDscaleIntervalsScale", arg, i); - XtManageChild(w->PD.scaleIntervalsScale); - - i=0; - w->PD.scaleIntervalsText = XmCreateTextField(w->PD.scaleFrameRowCol[2], "PDscaleIntervalsText", arg, i); - XtManageChild(w->PD.scaleIntervalsText); - - i=0; - XtSetArg(arg[i], XmNnumColumns, 2); i++; - w->PD.scaleIntervalsCheck = XmCreateRadioBox(w->PD.scaleFrameRowCol[2], "PDscaleIntervalsCheck", arg, i); - XtManageChild(w->PD.scaleIntervalsCheck); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Iso")); i++; - w->PD.scaleIntervalsButt[0] = XmCreateToggleButton(w->PD.scaleIntervalsCheck, "PDscaleIntervalsButt0", arg, i); - XtManageChild(w->PD.scaleIntervalsButt[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Filled Iso")); i++; - w->PD.scaleIntervalsButt[1] = XmCreateToggleButton(w->PD.scaleIntervalsCheck, "PDscaleIntervalsButt1", arg, i); - XtManageChild(w->PD.scaleIntervalsButt[1]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Continous")); i++; - w->PD.scaleIntervalsButt[2] = XmCreateToggleButton(w->PD.scaleIntervalsCheck, "PDscaleIntervalsButt2", arg, i); - XtManageChild(w->PD.scaleIntervalsButt[2]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Numeric")); i++; - w->PD.scaleIntervalsButt[3] = XmCreateToggleButton(w->PD.scaleIntervalsCheck, "PDscaleIntervalsButt3", arg, i); - XtManageChild(w->PD.scaleIntervalsButt[3]); - - /* Color */ - i=0; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Apply")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->PD.colorDialog = XmCreateTemplateDialog(w->M.shell, "PDcolorDialog", arg, i); - XtUnmanageChild(w->PD.colorDialog); - - i=0; - w->PD.colorFrame[0][0] = XmCreateFrame(w->PD.colorDialog, "ODcolorFrame00", arg, i); - XtManageChild(w->PD.colorFrame[0][0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Colors")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->PD.colorFrame[1][0] = XmCreateLabel(w->PD.colorFrame[0][0], "PDcolorFrame10", arg, i); - XtManageChild(w->PD.colorFrame[1][0]); - - i=0; - /* hardcoded this one, since its is required for the motion handling */ - XtSetArg(arg[i], XmNtranslations, XtParseTranslationTable(DrawingAreaTranslations)); i++; - w->PD.colorDrawingArea = XmCreateDrawingArea(w->PD.colorFrame[0][0], "PDcolorDrawingArea", arg, i); - XtManageChild(w->PD.colorDrawingArea); - - - /* Vectors */ - i=0; - XtSetArg(arg[i], XmNokLabelString, XmStringCreateSimple("Apply")); i++; - XtSetArg(arg[i], XmNcancelLabelString, XmStringCreateSimple("Cancel")); i++; - XtSetArg(arg[i], XmNautoUnmanage, False); i++; - w->PD.vectorDialog = XmCreateTemplateDialog(w->M.shell, "PDvectorDialog", arg, i); - XtUnmanageChild(w->PD.vectorDialog); - - i=0; - w->PD.vectorRowCol = XmCreateRowColumn(w->PD.vectorDialog, "PDvectorRowCol", arg, i); - XtManageChild(w->PD.vectorRowCol); - - /* vector - type */ - - i=0; - w->PD.vectorFrame[0][0] = XmCreateFrame(w->PD.vectorRowCol, "ODvectorFrame00", arg, i); - XtManageChild(w->PD.vectorFrame[0][0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Vector Display Type")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->PD.vectorFrame[1][0] = XmCreateLabel(w->PD.vectorFrame[0][0], "PDvectorFrame10", arg, i); - XtManageChild(w->PD.vectorFrame[1][0]); - - i=0; - XtSetArg(arg[i], XmNnumColumns, 2); i++; - w->PD.vectorTypeCheck = XmCreateRadioBox(w->PD.vectorFrame[0][0], "PDvectorTypeCheck", arg, i); - XtManageChild(w->PD.vectorTypeCheck); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Line")); i++; - w->PD.vectorTypeButt[0] = XmCreateToggleButton(w->PD.vectorTypeCheck, "PDvectorTypeButt0", arg, i); - XtManageChild(w->PD.vectorTypeButt[0]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Arrow")); i++; - w->PD.vectorTypeButt[1] = XmCreateToggleButton(w->PD.vectorTypeCheck, "PDvectorTypeButt1", arg, i); - XtManageChild(w->PD.vectorTypeButt[1]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Pyramid")); i++; - w->PD.vectorTypeButt[2] = XmCreateToggleButton(w->PD.vectorTypeCheck, "PDvectorTypeButt2", arg, i); - XtManageChild(w->PD.vectorTypeButt[2]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Cone")); i++; - w->PD.vectorTypeButt[3] = XmCreateToggleButton(w->PD.vectorTypeCheck, "PDvectorTypeButt3", arg, i); - XtManageChild(w->PD.vectorTypeButt[3]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Displacement")); i++; - w->PD.vectorTypeButt[4] = XmCreateToggleButton(w->PD.vectorTypeCheck, "PDvectorTypeButt4", arg, i); - XtManageChild(w->PD.vectorTypeButt[4]); - - /* vector - scale */ - - i=0; - w->PD.vectorFrame[0][1] = XmCreateFrame(w->PD.vectorRowCol, "ODvectorFrame01", arg, i); - XtManageChild(w->PD.vectorFrame[0][1]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Scale")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->PD.vectorFrame[1][1] = XmCreateLabel(w->PD.vectorFrame[0][1], "PDvectorFrame11", arg, i); - XtManageChild(w->PD.vectorFrame[1][1]); - - i=0; - w->PD.vectorScaleRowCol = XmCreateRowColumn(w->PD.vectorFrame[0][1], "PDvectorFrameRowCol1", arg, i); - XtManageChild(w->PD.vectorScaleRowCol); - - i=0; - XtSetArg(arg[i], XmNminimum, 0); i++; - XtSetArg(arg[i], XmNmaximum, 500); i++; - XtSetArg(arg[i], XmNdecimalPoints, 2); i++; - XtSetArg(arg[i], XmNshowValue, False); i++; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->PD.vectorScaleScale = XmCreateScale(w->PD.vectorScaleRowCol, "PDvectorScaleScale", arg, i); - XtManageChild(w->PD.vectorScaleScale); - - i=0; - w->PD.vectorScaleText = XmCreateTextField(w->PD.vectorScaleRowCol, "PDvectorScaleText", arg, i); - XtManageChild(w->PD.vectorScaleText); - - /* vector - location */ - - i=0; - w->PD.vectorFrame[0][2] = XmCreateFrame(w->PD.vectorRowCol, "ODvectorFrame02", arg, i); - XtManageChild(w->PD.vectorFrame[0][2]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Location")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->PD.vectorFrame[1][2] = XmCreateLabel(w->PD.vectorFrame[0][2], "PDvectorFrame12", arg, i); - XtManageChild(w->PD.vectorFrame[1][2]); - - i=0; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - w->PD.vectorLocationCheck = XmCreateRadioBox(w->PD.vectorFrame[0][2], "PDvectorLocationCheck", arg, i); - XtManageChild(w->PD.vectorLocationCheck); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("COG")); i++; - w->PD.vectorLocationButt[0] = XmCreateToggleButton(w->PD.vectorLocationCheck, "PDvectorLocationButt0", arg, i); - XtManageChild(w->PD.vectorLocationButt[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Vertex")); i++; - w->PD.vectorLocationButt[1] = XmCreateToggleButton(w->PD.vectorLocationCheck, "PDvectorLocationButt1", arg, i); - XtManageChild(w->PD.vectorLocationButt[1]); - - - /* export BGM */ - i=0 ; - XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Export BGM")); i++; - XtSetArg(arg[i], XmNnoMatchString, XmStringCreateSimple("[ NONE ]")); i++; - XtSetArg(arg[i], XmNdirMask, XmStringCreateSimple("*")); i++; - XtSetArg(arg[i], XmNautoUnmanage, True); i++; - w->PD.exportBGMDialog = XmCreateFileSelectionDialog(w->M.shell, "FDexportBGMDialog", arg, i); - XtUnmanageChild(w->PD.exportBGMDialog); - - tmp = XmFileSelectionBoxGetChild(w->PD.exportBGMDialog, XmDIALOG_HELP_BUTTON); - XtUnmanageChild(tmp); - - i=0; - w->PD.exportBGMFrame[0] = XmCreateFrame(w->PD.exportBGMDialog, "FDexportBGMFrame0", arg, i); - XtManageChild(w->PD.exportBGMFrame[0]); - - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("Options")); i++; - XtSetArg(arg[i], XmNchildType, XmFRAME_TITLE_CHILD); i++; - w->PD.exportBGMFrame[1] = XmCreateLabel(w->PD.exportBGMFrame[0], "FDexportBGMFrame1", arg, i); - XtManageChild(w->PD.exportBGMFrame[1]); - - i=0 ; - XtSetArg(arg[i], XmNorientation, XmHORIZONTAL); i++; - XtSetArg(arg[i], XmNspacing, 0); i++; - w->PD.exportBGMRowCol = XmCreateRowColumn(w->PD.exportBGMFrame[0], "FDexportBGMRowCol", arg, i); - XtManageChild(w->PD.exportBGMRowCol); - - /* export BGM - method */ - i=0; - w->PD.exportBGMPane = XmCreatePulldownMenu(w->PD.exportBGMRowCol, "FDexportBGMPane", arg, i); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("h: error (%)")); i++; - w->PD.exportBGMButt[0] = XmCreatePushButton(w->PD.exportBGMPane, "MexportBGMButt0", arg, i); - XtManageChild(w->PD.exportBGMButt[0]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("h: elements")); i++; - w->PD.exportBGMButt[1] = XmCreatePushButton(w->PD.exportBGMPane, "MexportBGMButt1", arg, i); - XtManageChild(w->PD.exportBGMButt[1]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("p: error (%)")); i++; - w->PD.exportBGMButt[2] = XmCreatePushButton(w->PD.exportBGMPane, "MexportBGMButt2", arg, i); - XtManageChild(w->PD.exportBGMButt[2]); - i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("p: elements")); i++; - w->PD.exportBGMButt[3] = XmCreatePushButton(w->PD.exportBGMPane, "MexportBGMButt3", arg, i); - XtManageChild(w->PD.exportBGMButt[3]); - i=0; - XtSetArg(arg[i], XmNsubMenuId, w->PD.exportBGMPane); i++; - XtSetArg(arg[i], XmNspacing, 0); i++; - w->PD.exportBGMMenu = XmCreateOptionMenu(w->PD.exportBGMRowCol, "FDexportBGMMenu", arg, i); - XtManageChild(w->PD.exportBGMMenu); - - /* export BGM - constraint */ - i=0; - w->PD.exportBGMText = XmCreateTextField(w->PD.exportBGMRowCol, "FDexportBGMText", arg, i); - XtManageChild(w->PD.exportBGMText); - - -} - - - -/* ------------------------------------------------------------------------ - C r e a t e W i d g e t s - ------------------------------------------------------------------------ */ - -void CreateWidgets (Widgets_T *w){ - CreateWidgets_M(w); /* menu win */ - CreateWidgets_G(w); /* graphic win */ - if(CTX.command_win) CreateWidgets_C(w); /* command win */ - - CreateWidgets_ED(w); /* error dialogs */ - CreateWidgets_FD(w); /* file dialogs */ - CreateWidgets_OD(w); /* option dialogs */ - CreateWidgets_HD(w); /* help dialogs */ - CreateWidgets_GD(w); /* geometry dialogs */ - CreateWidgets_MD(w); /* mesh dialogs */ - CreateWidgets_PD(w); /* post dialogs */ -} - - diff --git a/Motif/Widgets.h b/Motif/Widgets.h deleted file mode 100644 index f79631b63de98cc05ba69fc52b7a8fcd104b4a3c..0000000000000000000000000000000000000000 --- a/Motif/Widgets.h +++ /dev/null @@ -1,237 +0,0 @@ -#ifndef _WIDGETS_H_ -#define _WIDGETS_H_ - -#define NB_BUTT_MAX 50 - -/* check Info.h */ -#define NB_INFO_GEOM 4 -#define NB_INFO_MESH 14 -#define NB_INFO_POST 5 -#define NB_INFO_MAX 23 - -/* Holder for all Widgets */ - -typedef struct { - - /* menu window */ - - struct { - Widget shell, containerWin ; - Widget menuBar ; - Widget fileCascade, filePane, fileButt[10], fileSep[3] ; - Widget moduleCascade, modulePane, moduleButt[3] ; - Widget optionCascade, optionPane, optionButt[6], optionSep[2] ; - Widget helpCascade, helpPane, helpButt[2], helpSep[1] ; - Widget menuFrame, menuForm ; - Widget modButt, modPop, geomButt, meshButt, postButt ; - Widget navigButt[2]; - Widget defaultButt ; - Widget pushButt [NB_BUTT_MAX] ; - Widget toggleButt [NB_BUTT_MAX] ; - Widget popMenu [NB_BUTT_MAX] ; - Widget popSep [3][NB_BUTT_MAX] ; - Widget lightButt [NB_BUTT_MAX] ; - Widget elementButt [NB_BUTT_MAX] ; - Widget offsetButt [NB_BUTT_MAX] ; - Widget timeStepButt [NB_BUTT_MAX] ; - Widget scaleButt [NB_BUTT_MAX] ; - Widget colorButt [NB_BUTT_MAX] ; - Widget vectorButt [NB_BUTT_MAX] ; - Widget exportBGMButt[NB_BUTT_MAX] ; - Widget applyBGMButt [NB_BUTT_MAX] ; - Widget reloadButt [NB_BUTT_MAX] ; - Widget removeButt [NB_BUTT_MAX] ; - Widget duplicateButt[NB_BUTT_MAX] ; - } M; - - /* graphic window */ - - struct { - Widget shell, containerForm ; - Widget glw, glo ; - Widget bottomForm ; - Widget Butt[7] ; - Widget textForm, infoLabel, selectLabel, statusLabel ; - } G; - - /* command window */ - - struct { - Widget shell ; - Widget command, commandList, commandText ; - } C; - - - /* error dialogs */ - - struct { - Widget saveAsDialog ; - } ED; - - /* file dialogs */ - - struct { - Widget openDialog ; - Widget mergeDialog ; - Widget saveAsDialog ; - Widget saveAsFrame[2], saveAsRowCol ; - Widget saveAsPane[3], saveAsButt[20], saveAsMenu[3] ; - Widget saveOptionsAsDialog ; - } FD; - - /* options dialogs */ - - struct { - Widget geomDialog, geomRowCol ; - Widget geomVisibleFrame[2], geomVisibleRowCol ; - Widget geomVisibleTypeCheck, geomVisibleTypeButt[2] ; - Widget geomVisibleCheck, geomVisibleButt[4] ; - Widget geomVisibleByNumFrame[2], geomVisibleByNumRowCol ; - Widget geomVisibleByNumText ; - Widget geomNormalsFrame[2], geomNormalsRowCol ; - Widget geomNormalsScale, geomNormalsText ; - Widget geomTangentsFrame[2], geomTangentsRowCol ; - Widget geomTangentsScale, geomTangentsText ; - - Widget meshDialog, meshRowCol; - Widget meshAlgoFrame[2], meshAlgoRowCol ; - Widget meshAlgoCheck, meshAlgoButt[4] ; - Widget meshSmoothingFrame[2], meshSmoothingRowCol ; - Widget meshSmoothingScale, meshSmoothingText ; - Widget meshVisibleFrame[2], meshVisibleRowCol ; - Widget meshVisibleTypeCheck, meshVisibleTypeButt[2] ; - Widget meshVisibleCheck, meshVisibleButt[4] ; - Widget meshVisibleByNumFrame[2], meshVisibleByNumRowCol ; - Widget meshVisibleByNumCheck, meshVisibleByNumButt[4]; - Widget meshVisibleByNumText ; - Widget meshAspectFrame[2] ; - Widget meshAspectCheck, meshAspectButt[3] ; - Widget meshExplodeFrame[2], meshExplodeRowCol ; - Widget meshExplodeScale, meshExplodeText ; - Widget meshNormalsFrame[2], meshNormalsRowCol ; - Widget meshNormalsScale, meshNormalsText ; - - Widget postDialog, postRowCol; - Widget postLinkFrame[2], postLinkRowCol ; - Widget postLinkCheck, postLinkButt[3] ; - Widget postAnimFrame[2] ; - Widget postAnimFrameRowCol, postAnimScale ; - - Widget miscDialog, miscRowCol ; - Widget miscMiscFrame[2] ; - Widget miscMiscCheck, miscMiscButt[6] ; - Widget miscColorSchemeFrame[2] ; - Widget miscColorSchemeFrameRowCol, miscColorSchemeScale ; - Widget miscProjFrame[2] ; - Widget miscProjCheck, miscProjButt[2] ; - Widget miscLightFrame[2] ; - Widget miscLightFrameRowCol, miscLightScale[3] ; - Widget miscShineFrame[2] ; - Widget miscShineFrameRowCol, miscShineScale ; - - Widget viewportDialog, viewportRowCol ; - Widget viewportFrame[2][3], viewportFrameRowCol[3] ; - Widget viewportText[3][3], viewportLockButt[3][3] ; - - Widget infoDialog, infoRowCol ; - Widget infoFrame[2][3], infoFrameRowCol[3] ; - Widget infoKeyLabel[NB_INFO_MAX], infoValueLabel[NB_INFO_MAX] ; - - } OD; - - /* help dialogs */ - - struct { - Widget keysDialog, keysText ; - - Widget aboutDialog ; - } HD; - - /* geometry dialogs */ - - struct { - Widget paramDialog, paramRowCol ; - Widget paramFrame[2][2], paramFrameRowCol[2], paramText[2] ; - - Widget pointDialog, pointRowCol ; - Widget pointFrame[2][2], pointFrameRowCol[2], pointText[4] ; - - Widget rotDialog, rotRowCol ; - Widget rotFrame[2][3], rotFrameRowCol[3], rotText[7] ; - - Widget tranDialog ; - Widget tranFrame[2], tranFrameRowCol, tranText[3] ; - - Widget dilatDialog, dilatRowCol ; - Widget dilatFrame[2][2], dilatFrameRowCol[2], dilatText[4] ; - - Widget symmDialog, symmRowCol ; - Widget symmFrame[2], symmFrameRowCol, symmText[4] ; - } GD; - - /* mesh dialogs */ - - struct { - Widget charLengthDialog ; - Widget charLengthFrame[2], charLengthFrameRowCol, charLengthText ; - - Widget trsfLineDialog, trsfLineRowCol ; - Widget trsfLineFrame[2][2], trsfLineFrameRowCol[2], trsfLineText[2] ; - - Widget trsfVolumeDialog ; - Widget trsfVolumeFrame[2], trsfVolumeFrameRowCol, trsfVolumeText ; - } MD; - - /* post dialogs */ - - struct { - Widget offsetDialog, offsetRowCol ; - Widget offsetFrame[2][4], offsetFrameRowCol[4] ; - Widget /* 1 */ offsetModeCheck, offsetModeButt[2] ; - Widget /* 2 */ offsetText[3], offsetScale[3] ; - - Widget timeStepDialog ; - Widget timeStepFrame[2], timeStepFrameRowCol ; - Widget timeStepText, timeStepScale ; - - Widget scaleDialog, scaleRowCol ; - Widget scaleFrame[2][4], scaleFrameRowCol[4] ; - Widget /* 1 */ scaleCheck, scaleShowButt, scaleTransButt, scaleTimeButt, scaleText[2] ; - Widget /* 2 */ scaleRangeButt, scaleRangeText[2], scaleTypeCheck, - scaleTypeButt[2] ; - Widget /* 3 */ scaleIntervalsCheck, scaleIntervalsButt[4], - scaleIntervalsScale, scaleIntervalsText ; - - Widget colorDialog, colorRowCol ; - Widget colorFrame[2][4] ; - Widget /* 1 */ colorDrawingArea ; - - Widget vectorDialog, vectorRowCol ; - Widget vectorFrame[2][3]; - Widget /* 1 */ vectorTypeCheck, vectorTypeButt[5]; - Widget /* 2 */ vectorScaleRowCol, vectorScaleScale, vectorScaleText ; - Widget /* 3 */ vectorLocationCheck, vectorLocationButt[2]; - - Widget exportBGMDialog ; - Widget exportBGMFrame[2], exportBGMRowCol ; - Widget exportBGMPane, exportBGMButt[4], exportBGMMenu ; - Widget exportBGMText ; - } PD; - - - /* tooltips */ - - struct { - Widget shell; - Widget tooltip_lbl; - } tooltip; - - -} Widgets_T; - - - -void CreateWidgets(Widgets_T *w); - -#endif - diff --git a/Motif/XColors.cpp b/Motif/XColors.cpp deleted file mode 100644 index 655f1ad05083e399ad7038d2176d0d5da96834cb..0000000000000000000000000000000000000000 --- a/Motif/XColors.cpp +++ /dev/null @@ -1,246 +0,0 @@ -// $Id: XColors.cpp,v 1.2 2001-01-10 08:50:31 geuzaine Exp $ - -/* - Attention. Toutes les couleurs sont crees a partir de la colormap de - l'interface : XCTX.gui.colormap -*/ - -#include <X11/Xlib.h> -#include <X11/Xutil.h> -#include "Gmsh.h" -#include "GmshUI.h" -#include "XContext.h" - -extern XContext_T XCTX ; - -#define PF_TRUECOLOR 0 -#define PF_XALLOC 1 -#define PF_8BIT 2 - -static int pixelformat; -static unsigned long ctable8[5][9][5]; /* Only for PF_8BIT */ -static unsigned long rtable[256], gtable[256], btable[256]; /* PF_TRUECOLOR */ - -/* - * Replacement for XAllocColor. This function should never fail - * to allocate a color. When XAllocColor fails we return the nearest - * matching color. - */ - -#define DISTANCE(r1,g1,b1,r2,g2,b2) ( ((r2)-(r1)) * ((r2)-(r1)) + \ - ((g2)-(g1)) * ((g2)-(g1)) + ((b2)-(b1)) * ((b2)-(b1)) ) - -Status New_XAllocColor( Display *dpy, Colormap cmap, int cmap_size, - XColor *color ) -{ - int p, bestmatch; - double dist, mindist; /* 3*2^16^2 exceeds long int precision */ - static XColor *allcolors = NULL; - XColor *acptr; - - if (!XAllocColor(dpy, cmap, color)) { - /* query whole colormap if not yet done */ - if (!allcolors) { - allcolors = (XColor *) malloc( cmap_size * sizeof(XColor) ); - for (p = 0; p < cmap_size; p++) - allcolors[p].pixel = p; - XQueryColors (dpy, cmap, allcolors, cmap_size); - } - - /* find best match */ - bestmatch = -1; - mindist = 0.0; - p = cmap_size; - while (p--) { - acptr = allcolors + p; - dist = DISTANCE( (double)color->red, (double)color->green, - (double)color->blue, (double)acptr->red, - (double)acptr->green, (double)acptr->blue); - if (bestmatch < 0 || dist < mindist) - mindist = dist, bestmatch = p; - } - color->red = allcolors[bestmatch].red; - color->green = allcolors[bestmatch].green; - color->blue = allcolors[bestmatch].blue; - if (!XAllocColor( dpy, cmap, color )) { - /* this is a real hack but should be good enough */ - color->pixel = bestmatch; - /*printf("code problem in lui.c\n");*/ - } - } - return 1; -} - -#undef DISTANCE - - - - -/* - * Given an RGB color, return the corresponding pixel value. - * Input; r, g, b - red, green, and blue in [0,255] - * Return: a pixel value - */ -unsigned long AllocateColorInt( int r, int g, int b ) -{ - XColor xcol; - - switch (pixelformat) { - case PF_TRUECOLOR: - return rtable[r] | gtable[g] | btable[b]; - case PF_8BIT: - return ctable8[r/52][g/31][b/52]; - case PF_XALLOC: - xcol.red = r << 8; - xcol.green = g << 8; - xcol.blue = b << 8; - New_XAllocColor( XCTX.display, XCTX.gui.colormap, XCTX.gui.visual->map_entries, - &xcol ); - return xcol.pixel; - default: - Msg(GERROR, "Error in AllocateColorInt %d", pixelformat); - exit(0); - } - return 0; -} - - - - -/* - * Allocate a color specified by red, green, and blue and return a pixel - * value. If the color allocation fails, the white pixel will be returned. - * Input: red, green, blue - values in [0,1] - * Return: a pixel value - */ -unsigned long AllocateColor( float red, float green, float blue ) -{ - return AllocateColorInt( (int) (red*255.0), (int) (green*255.0), - (int) (blue*255.0) ); -} - - -void XColorInitialize(void) { - XSetWindowAttributes attr; - XGCValues gcv; - unsigned long gc_mask; - static int initialized = 0; - static Window DummyWindow; - - if (initialized) - return; - else - initialized = 1; - -#if defined(__cplusplus) || defined(c_plusplus) - if (XCTX.gui.visual->c_class==TrueColor || XCTX.gui.visual->c_class==DirectColor) { -#else - if (XCTX.gui.visual->class==TrueColor || XCTX.gui.visual->class==DirectColor) { -#endif - - XColor xcol; - int i; - xcol.green = 0; - xcol.blue = 0; - for (i=0;i<256;i++) { - xcol.red = i * 0xffff / 0xff; - XAllocColor( XCTX.display, XCTX.gui.colormap, &xcol ); - rtable[i] = xcol.pixel; - } - xcol.red = 0; - xcol.blue = 0; - for (i=0;i<256;i++) { - xcol.green = i * 0xffff / 0xff; - XAllocColor( XCTX.display, XCTX.gui.colormap, &xcol ); - gtable[i] = xcol.pixel; - } - xcol.red = 0; - xcol.green = 0; - for (i=0;i<256;i++) { - xcol.blue = i * 0xffff / 0xff; - XAllocColor( XCTX.display, XCTX.gui.colormap, &xcol ); - btable[i] = xcol.pixel; - } - pixelformat = PF_TRUECOLOR; - } - -#if defined(__cplusplus) || defined(c_plusplus) - else if (XCTX.gui.visual->c_class==PseudoColor) { -#else - else if (XCTX.gui.visual->class==PseudoColor) { -#endif - /* Note: the color allocation scheme must be the same as what's used */ - /* in Mesa to allow colormap sharing! */ - int r, g, b; - for (r=0;r<5;r++) { - for (g=0;g<9;g++) { - for (b=0;b<5;b++) { - XColor xcol; - xcol.red = r * 65535 / 4; - xcol.green = g * 65535 / 8; - xcol.blue = b * 65535 / 4; - New_XAllocColor( XCTX.display, XCTX.gui.colormap, - XCTX.gui.visual->map_entries, &xcol ); - ctable8[r][g][b] = xcol.pixel; - } - } - } - pixelformat = PF_8BIT; - } - - else { - pixelformat = PF_XALLOC; - } - - - /* Create a dummy window. This is needed because XCreateGC needs a - drawable of the type which we'll be using in LUI. Unfortunately, - the RootWindow may not have the visual we want. For example, - on the SGI PI, the default root window is pseudo color but we want - LUI to use TrueColor if it's available. In this case using RootWindow - in XCreateGC will make a GC of the wrong type. */ - attr.border_pixel = 0; - attr.background_pixel = 255; - attr.colormap = XCTX.gui.colormap; - DummyWindow = XCreateWindow( XCTX.display, DefaultRootWindow(XCTX.display), - 0, 0, 10, 10, 1, - XCTX.depth, InputOutput, XCTX.gui.visual, - CWBorderPixel | CWBackPixel | CWColormap, - &attr ); - - /*** The basic GC ***/ - gc_mask = GCForeground | GCBackground | GCFont | GCArcMode; - gcv.font = XCTX.xfont.fixed->fid; - gcv.arc_mode = ArcChord; - XCTX.xgc.xgc = XCreateGC(XCTX.display, DummyWindow, gc_mask, &gcv); - - /*** Black ***/ - XCTX.xcolor.black = AllocateColor( 0.0, 0.0, 0.0 ); - gcv.foreground = XCTX.xcolor.black; - XCTX.xgc.black = XCreateGC(XCTX.display, DummyWindow, gc_mask, &gcv); - - /*** White ***/ - XCTX.xcolor.white = AllocateColor( 1.0, 1.0, 1.0 ); - gcv.foreground = XCTX.xcolor.white; - XCTX.xgc.white = XCreateGC(XCTX.display, DummyWindow, gc_mask, &gcv); - - /*** Red (black on monochrome) ***/ - XCTX.xcolor.red = AllocateColor( 1.0, 0.0, 0.0 ); - if (XCTX.xcolor.red == XCTX.xcolor.white) { - XCTX.xcolor.red = XCTX.xcolor.black; - } - gcv.foreground = XCTX.xcolor.red; - XCTX.xgc.red = XCreateGC(XCTX.display, DummyWindow, gc_mask, &gcv); - - /*** Green ***/ - XCTX.xcolor.green = AllocateColor( 0.0, 1.0, 0.0 ); - gcv.foreground = XCTX.xcolor.green; - XCTX.xgc.green = XCreateGC( XCTX.display, DummyWindow, gc_mask, &gcv ); - - /*** Blue ***/ - XCTX.xcolor.blue = AllocateColor( 0.0, 0.5, 1.0 ); - gcv.foreground = XCTX.xcolor.blue; - XCTX.xgc.blue = XCreateGC( XCTX.display, DummyWindow, gc_mask, &gcv ); - -} - diff --git a/Motif/XColors.h b/Motif/XColors.h deleted file mode 100644 index 2a8088dd489eac01fc35595778d51ef58431e4f4..0000000000000000000000000000000000000000 --- a/Motif/XColors.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef _XCOLORS_H_ -#define _XCOLORS_H_ - -void XColorInitialize(void); -unsigned long AllocateColorInt( int r, int g, int b ); -unsigned long AllocateColor( float red, float green, float blue ); - -#endif - diff --git a/Motif/XContext.h b/Motif/XContext.h deleted file mode 100644 index 9ce7d6cdc13a9f9142a877322971771f00ba5c3a..0000000000000000000000000000000000000000 --- a/Motif/XContext.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef _XCONTEXT_H_ -#define _XCONTEXT_H_ - -/* - X/GLX context -*/ - -typedef struct { - Display *display; /* the X display */ - int scrnum, depth; /* the X screen number and depth */ - XtAppContext AppContext; - - struct { - XVisualInfo *visinfo ; - GLXContext context ; - Colormap colormap ; - } glw ; - - struct { - XVisualInfo *visinfo ; - GLXContext context ; - Colormap colormap ; - } glo ; - - struct { - Visual *visual ; - Colormap colormap ; - } gui ; - - struct { - XFontStruct *helve, *fixed ; - int helve_h, helve_a, helve_w ; - int fixed_h, fixed_a, fixed_w ; - } xfont ; - - struct { - unsigned long black, white ; - unsigned long red, green, blue ; - unsigned long ovblack, ovwhite ; - } xcolor ; - - struct { - GC xgc; - GC black, white ; - GC red, green, blue ; - } xgc ; - -} XContext_T ; - -#define EV_MASK KeyPressMask|KeyReleaseMask|\ - ButtonPressMask|ButtonReleaseMask|ButtonMotionMask|\ - PointerMotionMask|ExposureMask|ResizeRedirectMask|\ - EnterWindowMask|LeaveWindowMask|ShiftMask|ControlMask|Mod1Mask - - -#endif diff --git a/Motif/XCursor.cpp b/Motif/XCursor.cpp deleted file mode 100644 index e138d6f84b0b2707efb79e2e653af18c5e4742d4..0000000000000000000000000000000000000000 --- a/Motif/XCursor.cpp +++ /dev/null @@ -1,45 +0,0 @@ -// $Id: XCursor.cpp,v 1.1 2001-01-08 08:20:11 geuzaine Exp $ - -#include <X11/cursorfont.h> - -#include "xcontext.h" - -extern XContext_T XCTX ; - -#define MAIN_CURSOR 0 -#define DIAL_CURSOR 1 -#define DIAL_CW_CURSOR 2 -#define DIAL_CCW_CURSOR 3 -#define DIAL_RES_CURSOR 4 -#define QUESTION_CURSOR 5 -#define DOWN_CURSOR 6 -#define UP_CURSOR 7 -#define UP_DOWN_CURSOR 8 -#define CLOCK_CURSOR 9 -#define PENCIL_CURSOR 10 -#define ARROW_HAND_CURSOR 11 - -static Cursor CursorTable[32]; - -void SetCursor(Window window, int cursor){ - static int init = 0; - - if (!init) { - init = 1; - CursorTable[MAIN_CURSOR] = XCreateFontCursor(XCTX.display,XC_top_left_arrow); - CursorTable[DIAL_CURSOR] = XCreateFontCursor(XCTX.display,XC_draft_small); - CursorTable[DIAL_CW_CURSOR] = XCreateFontCursor(XCTX.display,XC_exchange); - CursorTable[DIAL_CCW_CURSOR] = XCreateFontCursor(XCTX.display,XC_exchange); - CursorTable[DIAL_RES_CURSOR] = XCreateFontCursor(XCTX.display,XC_circle); - CursorTable[QUESTION_CURSOR] = XCreateFontCursor(XCTX.display,XC_question_arrow); - CursorTable[DOWN_CURSOR] = XCreateFontCursor(XCTX.display,XC_sb_down_arrow); - CursorTable[UP_CURSOR] = XCreateFontCursor(XCTX.display,XC_sb_up_arrow); - CursorTable[UP_DOWN_CURSOR] = XCreateFontCursor(XCTX.display,XC_sb_v_double_arrow); - CursorTable[CLOCK_CURSOR] = XCreateFontCursor(XCTX.display,XC_watch); - CursorTable[PENCIL_CURSOR] = XCreateFontCursor(XCTX.display,XC_pencil); - CursorTable[ARROW_HAND_CURSOR]= XCreateFontCursor(XCTX.display,XC_draft_large); - } - - XDefineCursor(XCTX.display, window, CursorTable[cursor]); -} - diff --git a/Motif/XRessources.h b/Motif/XRessources.h deleted file mode 100644 index 0901139af98da9b585249913fbbe4651b30b2c58..0000000000000000000000000000000000000000 --- a/Motif/XRessources.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - Les resources ci-dessous sont prises en compte par defaut. Toutre - resource definie dans ~/.gmshrc ou dans APP_DEFAULTS/.gmshrc est - prioritaire - - Palette I-DEAS R G B - background 42 71 94 - foreground 255 232 148 - highlight 42 71 95 - topshadow 84 127 158 - bottomshadow 8 12 28 - - Palette netscape - background gray70 - foreground black - highlightColor gray71 - XmTextField*background MistyRose3 - XmList*background MistyRose3 - ArrowBack*foreground MistyRose3 -*/ - -String FallbackResources[] = { - - /* couleurs */ - "gmshGW*background: Grey75", - "gmshGW*borderColor: Grey75", - "gmshGW*foreground: Black", - "gmshGW*highlightColor: Grey76", - - "gmshMW*background: Grey75", - "gmshMW*borderColor: Grey75", - "gmshMW*foreground: Black", - "gmshMW*XmText*background: White", - "gmshMW*XmText*foreground: Black", - "gmshMW*XmTextField*background: White", - "gmshMW*XmList*background: White", - "gmshMW*selectColor: Yellow", - "gmshMW*highlightColor: DarkOrchid", - - "gmshCW*background: Grey75", - "gmshCW*foreground: Black", - "gmshCW*borderColor: Gray75", - "gmshCW*XmTextField*background: Gray75", - "gmshCW*XmList*background: Gray75", - "gmshCW*highlightColor: Grey76", - - /* fontes */ - "*fontList: -*-helvetica-medium-r-*-*-10-*-*-*-*-*-*-*", - "*XmTextField*fontList: -*-helvetica-medium-r-*-*-10-*-*-*-*-*-*-*", - "*XmList*fontList: -*-helvetica-medium-r-*-*-10-*-*-*-*-*-*-*", - "gmshMW*HDkeysText*fontList: fixed", - "gmshMW*HDkeysText*XmPushButton*fontList: -*-helvetica-medium-r-*-*-10-*-*-*-*-*-*-*", - "gmshMW*HDaboutDialog*fontList: fixed", - - /* geometrie */ - //"gmshGW*geometry: 700x525+20+30", Dont't force the dimension this way !!! - "gmshGW*geometry: +20+30", - "gmshMW*geometry: x420+800+80", - "gmshCW*geometry: 440x130+30+570", - - /* sizes -> compact layout */ - - "*XmCascadeButton*marginWidth: 2", - - NULL }; - -/* - *toolbar*XmPushButton.baseTranslations: #override\n\ - : CustomShadows(on) Arm()\n\ - : CustomShadows(on) Enter()\n\ - : CustomShadows(off) Leave()\n\ - : MapCheck() - - *toolbar*XmToggleButton.baseTranslations: #override\n\ - : CustomShadows(on) Arm()\n\ - : Select() Disarm() CustomShadows(check)\n\ - : CustomShadows(on) Enter()\n\ - : CustomShadows(off) Leave()\n\ - : MapCheck() - */ diff --git a/Motif/XStatic.h b/Motif/XStatic.h deleted file mode 100644 index ad1ecb04947395e8fe9dcbb1a8d78f0e6f701856..0000000000000000000000000000000000000000 --- a/Motif/XStatic.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef _XSTATIC_H_ -#define _XSTATIC_H_ - -/* Fenetre OpenGL principale : visual RGBA, simple ou double buffer */ - -int glw_attrib_sb[] = { - GLX_RGBA, - GLX_DEPTH_SIZE, 16, - GLX_RED_SIZE, 1, - GLX_GREEN_SIZE, 1, - GLX_BLUE_SIZE, 1, - None }; - -int glw_attrib_db[] = { - GLX_RGBA, - GLX_DOUBLEBUFFER, - GLX_DEPTH_SIZE, 16, - GLX_RED_SIZE, 1, - GLX_GREEN_SIZE, 1, - GLX_BLUE_SIZE, 1, - None }; - -/* Fenetre OpenGL overlay : visual INDEXE, simple buffer */ - -int glo_attrib[] = { GLX_LEVEL, 1, None }; - -/* variables globales */ - -XContext_T XCTX ; -Widgets_T WID ; -Pixmaps_T PIX ; - -#endif diff --git a/Parallel/Makefile b/Parallel/Makefile deleted file mode 100644 index 276a697e4d52c26c23b411c9b4bef1e3dde5385a..0000000000000000000000000000000000000000 --- a/Parallel/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -# $Id: Makefile,v 1.3 2001-08-13 07:19:02 geuzaine Exp $ -# -# Makefile for "libParallel.a" -# - -.IGNORE: -AR = ar ruvs -RM = rm -RANLIB = ranlib -LIB = ../lib/libParallel.a - -C_FLAGS = -g -OS_FLAGS = -VERSION_FLAGS = - -RMFLAGS = -f -CFLAGS = $(C_FLAGS) $(OS_FLAGS) $(VERSION_FLAGS) $(INCLUDE) -I/usr/local/mpich/latest/include/ - -SRC = ParUtil.cpp - -OBJ = $(SRC:.cpp=.o) - -.SUFFIXES: .o .cpp - -$(LIB): $(OBJ) - $(AR) $(LIB) $(OBJ) - $(RANLIB) $(LIB) - -.cpp.o: - $(CC) $(CFLAGS) -c $< - -clean: - $(RM) $(RMFLAGS) *.o - -lint: - $(LINT) $(CFLAGS) $(SRC) - -depend: - (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ - $(CC) -MM $(CFLAGS) ${SRC} \ - ) >Makefile.new - cp Makefile Makefile.bak - cp Makefile.new Makefile - $(RM) $(RMFLAGS) Makefile.new - -# DO NOT DELETE THIS LINE diff --git a/Parallel/ParUtil.cpp b/Parallel/ParUtil.cpp deleted file mode 100644 index ab24d15e2f10426eae4e3b2f3ad2cfae29d89469..0000000000000000000000000000000000000000 --- a/Parallel/ParUtil.cpp +++ /dev/null @@ -1,99 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include "ParUtil.h" -#ifdef PARALLEL -#include "mpi.h" -#else -#include <sys/time.h> -#endif - -ParUtil* ParUtil::Instance() -{ - if(!instance) - { - instance = new ParUtil; - } - return instance; -} - -ParUtil::~ParUtil() -{ -} - -ParUtil::ParUtil() -{ -} - -void ParUtil::init(int &argc, char **&argv) { - -#ifdef PARALLEL - int namelen; - char name[1024]; - MPI_Init(&argc, &argv); - - MPI_Comm_rank(MPI_COMM_WORLD, &myrank); - MPI_Comm_size(MPI_COMM_WORLD, &mysize); - - MPI_Errhandler_set(MPI_COMM_WORLD,MPI_ERRORS_RETURN); - MPI_Get_processor_name(name,&namelen); - procName = new char[namelen+1]; - strcpy(procName,name); -#endif -} - -double ParUtil::wTime() const -{ - -#ifdef PARALLEL - return MPI_Wtime(); -#else - struct timeval tp; - struct timezone tzp; - double timeval; - - gettimeofday(&tp,&tzp); - - timeval = (double) tp.tv_sec; - timeval = timeval + (double) ((double) .000001 * (double) tp.tv_usec); - - return(timeval); -#endif -} - -void ParUtil::processorName(char *name) const -{ -#ifdef PARALLEL - strcpy(name,procName); -#else - strcpy(name,"localhost"); -#endif -} - -void ParUtil::Abort() -{ -#ifdef PARALLEL - MPI_Abort(MPI_COMM_WORLD, 1); -#else - abort(); -#endif -} - -void ParUtil::Exit() -{ -#ifdef PARALLEL - MPI_Finalize(); -#else - exit(1); -#endif -} - -void ParUtil::Barrier(int line, const char *fn) -{ -#ifdef PARALLEL - MPI_Barrier(MPI_COMM_WORLD); -#endif -} - -ParUtil* ParUtil::instance = 0; - diff --git a/Parallel/ParUtil.h b/Parallel/ParUtil.h deleted file mode 100644 index dee5c4a12cef1f385327f38cafa1208d900ae4fe..0000000000000000000000000000000000000000 --- a/Parallel/ParUtil.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef _H_ParUtil -#define _H_ParUtil -#include <stdio.h> - -/** - ParUtil is a Singleton. It gives some - general services for parallel implementation. -*/ - -class ParUtil { - ParUtil(); - ~ParUtil(); -public: - /// returne the only instance - static ParUtil* Instance(); - /// initialization, needed for mpi and autopack - void init(int &argc, char **&argv); - /// adds a barrier - void Barrier(int, const char*); - /// compute wall time - void Exit(); - /// compute wall time - double wTime () const; - /// gets the processor name - void processorName(char *name) const; - /// abort a calculation - void Abort(); -#ifdef PARALLEL - inline int rank() { return myrank; } - inline int size() { return mysize; } - inline int master() { return myrank==0; } -#else - /// gets the processor id - inline int rank() { return 0; } - /// gets the number of processors - inline int size() { return 1; } - /// tells if it's processor 0 - inline int master() { return 1; } -#endif -private: - static ParUtil *instance; - char *procName; -#ifdef PARALLEL - int myrank; - int mysize; -#endif -}; - -#endif - - - - - - diff --git a/Parser/FunctionManager.cpp b/Parser/FunctionManager.cpp deleted file mode 100644 index 681c4f961eb547b11b388164330614616c90b734..0000000000000000000000000000000000000000 --- a/Parser/FunctionManager.cpp +++ /dev/null @@ -1,97 +0,0 @@ -// $Id: FunctionManager.cpp,v 1.11 2001-07-26 18:47:59 remacle Exp $ - -#include <map> -#include <stdio.h> -#include <stack> -#include "FunctionManager.h" - -using namespace std; - -struct ltstr -{ - bool operator()(const char* s1, const char* s2) const - { - return strcmp(s1, s2) < 0; - } -}; - -class File_Position -{ - public : - int lineno; - fpos_t position; - FILE *file; -}; - -// Pour utiliser un namespace global sur SGI, il faut compiler avec -// -LANG:std, et ajouter "use namespace std;". Dans tous les cas, il -// FAUT creer les librairies avec 'CC -ar', et pas avec 'ar'. - -class mystack -{ -public: - stack<File_Position> s; -}; -class mymap -{ -public : - map<char*,File_Position,ltstr> m; -}; - -FunctionManager *FunctionManager::instance = 0; - -FunctionManager::FunctionManager() -{ - functions = new mymap; - calls = new mystack; -} - -FunctionManager* FunctionManager::Instance() -{ - if(!instance) - { - instance = new FunctionManager; - } - return instance; -} - -int FunctionManager::enterFunction(char *name, FILE **f, int &lno) const -{ - if(functions->m.find(name) == functions->m.end())return 0; - File_Position fpold; - fpold.lineno = lno; - fpold.file = *f; - fgetpos(fpold.file,&fpold.position); - calls->s.push(fpold); - File_Position fp = (functions->m)[name]; - fsetpos(fp.file,&fp.position); - *f = fp.file; - lno = fp.lineno; - return 1; -} - -int FunctionManager::leaveFunction(FILE **f,int &lno) -{ - if(!calls->s.size())return 0; - File_Position fp; - fp = calls->s.top(); - calls->s.pop(); - fsetpos(fp.file,&fp.position); - *f = fp.file; - lno = fp.lineno; - return 1; -} - -int FunctionManager::createFunction(char *name, FILE *f, int lno) -{ - File_Position fp; - fp.file = f; - fp.lineno = lno; - fgetpos(fp.file,&fp.position); - (functions->m)[name] = fp; - return 1; -} - - - - diff --git a/Parser/FunctionManager.h b/Parser/FunctionManager.h deleted file mode 100644 index 0e82deb1bb8a54201d87f60a51bae01d1e83195c..0000000000000000000000000000000000000000 --- a/Parser/FunctionManager.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef _FUNCTION_MANAGER_H_ -#define _FUNCTION_MANAGER_H_ - -class mystack; -class mymap; -#include <stdio.h> -/* - Singleton, one function manager for - all parsers. -*/ - -class FunctionManager -{ - mymap *functions; - mystack *calls; - FunctionManager (); - static FunctionManager *instance; - public : - static FunctionManager* Instance(); - int enterFunction (char *name, FILE **f, int &) const; - int createFunction (char *name, FILE *f, int); - int leaveFunction (FILE **f, int &); -}; - -#endif diff --git a/Parser/Gmsh.l b/Parser/Gmsh.l deleted file mode 100644 index a4424a10a660ff92f7855091737f10dc0aa3d096..0000000000000000000000000000000000000000 --- a/Parser/Gmsh.l +++ /dev/null @@ -1,374 +0,0 @@ -%{ - -// $Id: Gmsh.l,v 1.35 2001-08-11 23:28:33 geuzaine Exp $ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <math.h> - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "CAD.h" -#include "Gmsh.tab.cpp.h" - -char TmpString[1024]; -int yywhere = INFILE; -int yylineno = 1; - -void parsestring(char endchar); -char *strsave(char *ptr); -void skipcomments(void); -void skipline(void); - -#define YY_ALWAYS_INTERACTIVE 1 - -#define YY_INPUT(buf,result,max_size) \ - if ( yy_current_buffer->yy_is_interactive ) \ - { \ - int c = '*', n; \ - for ( n = 0; n < max_size && \ - (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ){ \ - buf[n++] = (char) c; \ - yylineno++; \ - } \ - if ( c == EOF && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \ - && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); - -%} - -alpha [a-zA-Z\_] -dieze [\#] -special [\.] -digit [0-9] -exp [Ee][-+]?{digit}+ -string {alpha}({alpha}|{digit})* -stepid {dieze}({digit})* - -%e 2000 -%p 7000 -%n 2000 -%k 1500 -%a 7000 -%o 7000 - -%% - -[\ \t\n\r\f] /* none */ ; -";" return tEND; -"/*" skipcomments(); -"//" skipline(); -"\"" {parsestring('\"'); return tBIGSTR;} -"\'" {parsestring('\''); return tBIGSTR;} -"newreg" {yylval.d = NEWREG(); return tDOUBLE;} -"newp" {yylval.d = NEWPOINT(); return tDOUBLE;} -"=" return tAFFECT; -"+=" return tAFFECTPLUS ; -"-=" return tAFFECTMINUS ; -"*=" return tAFFECTTIMES ; -"/=" return tAFFECTDIVIDE ; -":" return tDOTS; -"..." return tDOTS; -"/\\" return tCROSSPRODUCT ; -"||" return tOR ; -"&&" return tAND ; -"++" return tPLUSPLUS ; -"--" return tMINUSMINUS ; -"==" return tEQUAL ; -"!=" return tNOTEQUAL ; -"~=" return tAPPROXEQUAL ; -"<=" return tLESSOREQUAL ; -">=" return tGREATEROREQUAL ; - -Acos return tAcos ; -ArcCos return tAcos ; -Asin return tAsin; -ArcSin return tAsin; -Atan return tAtan ; -ArcTan return tAtan ; -Atan2 return tAtan2 ; -ArcTan2 return tAtan2 ; -Attractor return tAttractor; - -Bump return tBump; -BSpline return tBSpline; -Bounds return tBounds; - -Ceil return tCeil ; -Cosh return tCosh ; -Cos return tCos ; -Characteristic return tCharacteristic; -Circle return tCircle; -Coherence return tCoherence; -Complex return tComplex; -Color return tColor; -ColorTable return tColorTable; -CatmullRom return tSpline; -Call return tCall; - -Delete return tDelete; -Dilate return tDilate; -Duplicata return tDuplicata; -Draw return tDraw; - -Exp return tExp ; -Ellipsis return tEllipsis; -Extrude return tExtrude; -Elliptic return tElliptic; -ELLIPSE return tELLIPSE; -EndFor return tEndFor; -EndIf return tEndIf; -Exit return tExit; - -Fabs return tFabs ; -Floor return tFloor ; -Fmod return tFmod ; -For return tFor; -Function return tFunction; - -Hypot return tHypot ; - -In return tIn; -If return tIf; -Intersect return tIntersect; - -Knots return tKnots; - -Length return tLength; -Line return tLine; -Loop return tLoop; -Log return tLog ; -Log10 return tLog10 ; -Layers return tLayers; - -Modulo return tModulo ; -Meshes return tMesh; -MPI_Rank return tMPI_Rank; -MPI_Size return tMPI_Size; - -Nurbs return tNurbs; - -Order return tOrder; - -Physical return tPhysical; -Pi return tPi; -Plane return tPlane; -Point return tPoint; -Power return tProgression; -Progression return tProgression; -Parametric return tParametric; -Printf return tPrintf; -Plugin return tPlugin; - -Recombine return tRecombine; -Rotate return tRotate; -Ruled return tRuled; -Rand return tRand; -Return return tReturn; - -Sqrt return tSqrt ; -Sin return tSin ; -Sinh return tSinh ; -Spline return tSpline; -Surface return tSurface; -Symmetry return tSymmetry; -Sprintf return tSprintf ; -StrCat return tStrCat ; -StrPrefix return tStrPrefix ; - -Transfinite return tTransfinite; -Translate return tTranslate; -Tanh return tTanh ; -Tan return tTan; -Trimmed return tTrimmed; - -Using return tUsing; - -Volume return tVolume; - -With return tWith; - -SS return tScalarTetrahedron; -VS return tVectorTetrahedron; -TS return tTensorTetrahedron; -ST return tScalarTriangle; -VT return tVectorTriangle; -TT return tTensorTriangle; -SL return tScalarLine; -VL return tVectorLine; -TL return tTensorLine; -SP return tScalarPoint; -VP return tVectorPoint; -TP return tTensorPoint; - - -CARTESIAN_POINT return tCARTESIAN_POINT; -B_SPLINE_SURFACE_WITH_KNOTS return tB_SPLINE_SURFACE_WITH_KNOTS; -B_SPLINE_CURVE_WITH_KNOTS return tB_SPLINE_CURVE_WITH_KNOTS; -.UNSPECIFIED. return tUNSPECIFIED; -.CONTINUOUS. return tCONTINUOUS; -".F." return tFALSE; -".T." return tTRUE; -".U." return tU; -".V." return tV; -ORIENTED_EDGE return tORIENTED_EDGE; -EDGE_CURVE return tEDGE_CURVE; -EDGE_LOOP return tEDGE_LOOP; -VERTEX_POINT return tVERTEX_POINT; -FACE_OUTER_BOUND return tFACE_OUTER_BOUND; -FACE_BOUND return tFACE_BOUND; -ADVANCED_FACE return tADVANCED_FACE; -LINE return tLine; -VECTOR return tVECTOR; -DIRECTION return tDIRECTION; -AXIS2_PLACEMENT_3D return tAXIS2_PLACEMENT_3D; -PLANE return tPLANE; -HEADER return tHEADER; -DATA return tDATA; -FILE_SCHEMA return tFILE_SCHEMA; -FILE_NAME return tFILE_NAME; -FILE_DESCRIPTION return tFILE_DESCRIPTION; -"ISO-10303-21" return tISO; -"END-ISO-10303-21" return tENDISO; -ENDSEC return tENDSEC; -CLOSED_SHELL return tCLOSED_SHELL; -ADVANCED_BREP_SHAPE_REPRESENTATION return tADVANCED_BREP_SHAPE_REPRESENTATION; -MANIFOLD_SOLID_BREP return tMANIFOLD_SOLID_BREP; -CYLINDRICAL_SURFACE return tCYLINDRICAL_SURFACE; -CONICAL_SURFACE return tCONICAL_SURFACE; -TOROIDAL_SURFACE return tTOROIDAL_SURFACE; -CIRCLE return tCIRCLE; -TRIMMED_CURVE return tTRIMMED_CURVE; -GEOMETRIC_SET return tGEOMETRIC_SET; -COMPOSITE_CURVE_SEGMENT return tCOMPOSITE_CURVE_SEGMENT; -COMPOSITE_CURVE return tCOMPOSITE_CURVE; -PRODUCT_DEFINITION return tPRODUCT_DEFINITION; -PRODUCT_DEFINITION_SHAPE return tPRODUCT_DEFINITION_SHAPE; -SHAPE_DEFINITION_REPRESENTATION return tSHAPE_DEFINITION_REPRESENTATION; - -vertex return tVertex; -facet return tFacet; -normal return tNormal; -outer return tOuter; -loop return tLoopSTL; -endloop return tEndLoop; -endfacet return tEndFacet; -endsolid {skipline();return tEndSolid;} -solid {skipline();return tSolid;} - -{stepid} {yylval.d = (double)atoi((char*)(yytext+1)); return tDOUBLE;} - -{digit}+ | -{digit}+"."{digit}*({exp})? | -{digit}*"."{digit}+({exp})? | -{digit}+{exp} {yylval.d = atof((char *)yytext); return tDOUBLE;} - -{string} {yylval.c = strsave((char*)yytext); return tSTRING;} - -. return yytext[0]; - -%% - -#undef yywrap - -int yywrap() {return 1;} - -void skipcomments(void) { - int c; - - while (1) { - while ((c=yyinput()) != '*'){ - if(c == EOF){ - Msg(GERROR, "End of file in commented region") ; - return; - } - } - if ((c = yyinput()) == '/') - return; - unput(c); - } -} - -void parsestring(char endchar){ - int c, i; - - c = yyinput(); - i = 0; - while (c != endchar) { - TmpString[i++] = c; - c = yyinput(); - } - TmpString[i++] = '\0'; - yylval.c = strsave(TmpString); -} - -char *strsave(char *ptr){ - return((char*)strcpy((char*)malloc(strlen(ptr)+1),ptr)); -} - -void skipline(void){ - while (yyinput() != '\n') ; -} - -void skip_until(char *skip, char *until){ - int i, nb_skip; - int l, l_skip, l_until; - char chars[256]; - - nb_skip = 0 ; - - if(skip) - l_skip = strlen(skip); - else - l_skip = 0 ; - - l_until = strlen(until); - - while(1){ - while (1){ - chars[0] = yyinput(); - if(chars[0] == (char)EOF){ - Msg(GERROR, "Unexpected end of file") ; - return; - } - if(chars[0] == until[0]) break; - if(skip && chars[0] == skip[0]) break; - } - - l = MAX(l_skip,l_until) ; - for(i=1 ; i<l ; i++){ - chars[i] = yyinput(); - if(chars[i] == (char)EOF){ - l = i; - break; - } - } - - if(!strncmp(chars,until,l_until)){ - if(!nb_skip){ - return; - } - else{ - nb_skip--; - } - } - else if(skip && !strncmp(chars,skip,l_skip)){ - nb_skip++; - } - else{ - for(i=1;i<l-1;i++){ - unput(chars[l-i]); - } - } - - } -} - diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp deleted file mode 100644 index b14a2d656adb6b4cc5adbf6292dfa8eb702345e1..0000000000000000000000000000000000000000 --- a/Parser/Gmsh.tab.cpp +++ /dev/null @@ -1,5931 +0,0 @@ - -/* A Bison parser, made from Gmsh.y - by GNU Bison version 1.28 */ - -#define YYBISON 1 /* Identify Bison output. */ - -#define tDOUBLE 257 -#define tSTRING 258 -#define tBIGSTR 259 -#define tEND 260 -#define tAFFECT 261 -#define tDOTS 262 -#define tPi 263 -#define tMPI_Rank 264 -#define tMPI_Size 265 -#define tExp 266 -#define tLog 267 -#define tLog10 268 -#define tSqrt 269 -#define tSin 270 -#define tAsin 271 -#define tCos 272 -#define tAcos 273 -#define tTan 274 -#define tRand 275 -#define tAtan 276 -#define tAtan2 277 -#define tSinh 278 -#define tCosh 279 -#define tTanh 280 -#define tFabs 281 -#define tFloor 282 -#define tCeil 283 -#define tFmod 284 -#define tModulo 285 -#define tHypot 286 -#define tPrintf 287 -#define tSprintf 288 -#define tStrCat 289 -#define tStrPrefix 290 -#define tDraw 291 -#define tPoint 292 -#define tCircle 293 -#define tEllipsis 294 -#define tLine 295 -#define tSurface 296 -#define tSpline 297 -#define tVolume 298 -#define tCharacteristic 299 -#define tLength 300 -#define tParametric 301 -#define tElliptic 302 -#define tPlane 303 -#define tRuled 304 -#define tTransfinite 305 -#define tComplex 306 -#define tPhysical 307 -#define tUsing 308 -#define tBump 309 -#define tProgression 310 -#define tPlugin 311 -#define tRotate 312 -#define tTranslate 313 -#define tSymmetry 314 -#define tDilate 315 -#define tExtrude 316 -#define tDuplicata 317 -#define tLoop 318 -#define tRecombine 319 -#define tDelete 320 -#define tCoherence 321 -#define tIntersect 322 -#define tAttractor 323 -#define tLayers 324 -#define tScalarTetrahedron 325 -#define tVectorTetrahedron 326 -#define tTensorTetrahedron 327 -#define tScalarTriangle 328 -#define tVectorTriangle 329 -#define tTensorTriangle 330 -#define tScalarLine 331 -#define tVectorLine 332 -#define tTensorLine 333 -#define tScalarPoint 334 -#define tVectorPoint 335 -#define tTensorPoint 336 -#define tBSpline 337 -#define tNurbs 338 -#define tOrder 339 -#define tWith 340 -#define tBounds 341 -#define tKnots 342 -#define tColor 343 -#define tColorTable 344 -#define tFor 345 -#define tIn 346 -#define tEndFor 347 -#define tIf 348 -#define tEndIf 349 -#define tExit 350 -#define tReturn 351 -#define tCall 352 -#define tFunction 353 -#define tMesh 354 -#define tB_SPLINE_SURFACE_WITH_KNOTS 355 -#define tB_SPLINE_CURVE_WITH_KNOTS 356 -#define tCARTESIAN_POINT 357 -#define tTRUE 358 -#define tFALSE 359 -#define tUNSPECIFIED 360 -#define tU 361 -#define tV 362 -#define tEDGE_CURVE 363 -#define tVERTEX_POINT 364 -#define tORIENTED_EDGE 365 -#define tPLANE 366 -#define tFACE_OUTER_BOUND 367 -#define tEDGE_LOOP 368 -#define tADVANCED_FACE 369 -#define tVECTOR 370 -#define tDIRECTION 371 -#define tAXIS2_PLACEMENT_3D 372 -#define tISO 373 -#define tENDISO 374 -#define tENDSEC 375 -#define tDATA 376 -#define tHEADER 377 -#define tFILE_DESCRIPTION 378 -#define tFILE_SCHEMA 379 -#define tFILE_NAME 380 -#define tMANIFOLD_SOLID_BREP 381 -#define tCLOSED_SHELL 382 -#define tADVANCED_BREP_SHAPE_REPRESENTATION 383 -#define tFACE_BOUND 384 -#define tCYLINDRICAL_SURFACE 385 -#define tCONICAL_SURFACE 386 -#define tCIRCLE 387 -#define tTRIMMED_CURVE 388 -#define tGEOMETRIC_SET 389 -#define tCOMPOSITE_CURVE_SEGMENT 390 -#define tCONTINUOUS 391 -#define tCOMPOSITE_CURVE 392 -#define tTOROIDAL_SURFACE 393 -#define tPRODUCT_DEFINITION 394 -#define tPRODUCT_DEFINITION_SHAPE 395 -#define tSHAPE_DEFINITION_REPRESENTATION 396 -#define tELLIPSE 397 -#define tTrimmed 398 -#define tSolid 399 -#define tEndSolid 400 -#define tVertex 401 -#define tFacet 402 -#define tNormal 403 -#define tOuter 404 -#define tLoopSTL 405 -#define tEndLoop 406 -#define tEndFacet 407 -#define tAFFECTPLUS 408 -#define tAFFECTMINUS 409 -#define tAFFECTTIMES 410 -#define tAFFECTDIVIDE 411 -#define tOR 412 -#define tAND 413 -#define tEQUAL 414 -#define tNOTEQUAL 415 -#define tAPPROXEQUAL 416 -#define tLESSOREQUAL 417 -#define tGREATEROREQUAL 418 -#define tCROSSPRODUCT 419 -#define tPLUSPLUS 420 -#define tMINUSMINUS 421 -#define UNARYPREC 422 - -#line 1 "Gmsh.y" - - -// $Id: Gmsh.tab.cpp,v 1.106 2001-08-12 14:24:50 geuzaine Exp $ - - // - // Generaliser sprintf avec des chaines de caracteres - // - -#include <stdarg.h> -#ifndef _NOPLUGIN -#include "PluginManager.h" -#endif -#include "ParUtil.h" -#include "Gmsh.h" -#include "Numeric.h" -#include "Context.h" -#include "Geo.h" -#include "CAD.h" -#include "DataBase.h" -#include "Mesh.h" -#include "Draw.h" -#include "Create.h" -#include "Views.h" -#include "StepGeomDatabase.h" -#include "Options.h" -#include "Colors.h" -#include "Parser.h" -#include "OpenFile.h" -#include "FunctionManager.h" -#include "ColorTable.h" -#include "Timer.h" -#include "CreateFile.h" -#include "STL.h" - -#ifdef __DECCXX // bug in bison -#include <alloca.h> -#endif - -List_T *Symbol_L=NULL; - -extern Context_T CTX; -extern Mesh *THEM; - -static FILE *yyinTab[MAX_OPEN_FILES]; -static int yylinenoTab[MAX_OPEN_FILES]; -static fpos_t yyposImbricatedLoopsTab[MAX_OPEN_FILES]; -static double LoopControlVariablesTab[MAX_OPEN_FILES][3]; -static char* LoopControlVariablesNameTab[MAX_OPEN_FILES]; -static char yynameTab[MAX_OPEN_FILES][256]; -static char tmpstring[256]; -static char tmpstring2[256], tmpstring3[256]; -static Symbol TheSymbol, *pSymbol; -static Surface *STL_Surf; -static Shape TheShape; -static int i,j,k,flag,RecursionLevel=0,ImbricatedLoop = 0; -static int Last_NumberOfPoints = 0; -static double d, *pd; -static ExtrudeParams extr; -static char *str; -static StringXString *pStrCat; -static StringXNumber *pNumCat; -static StringXColor *pColCat; -static double (*pNumOpt)(int num, int action, double value); -static char* (*pStrOpt)(int num, int action, char *value); -static unsigned int (*pColOpt)(int num, int action, unsigned int value); -static Post_View *View; - -char *strsave(char *ptr); -void yyerror (char *s); -void vyyerror (char *fmt, ...); -void skip_until (char *skip, char *until); - -#line 74 "Gmsh.y" -typedef union { - char *c; - int i; - unsigned int u; - double d; - double v[5]; - Shape s; - List_T *l; -} YYSTYPE; -#include <stdio.h> - -#ifndef __cplusplus -#ifndef __STDC__ -#define const -#endif -#endif - - - -#define YYFINAL 1542 -#define YYFLAG -32768 -#define YYNTBASE 187 - -#define YYTRANSLATE(x) ((unsigned)(x) <= 422 ? yytranslate[x] : 270) - -static const short yytranslate[] = { 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 174, 2, 2, 2, 172, 2, 2, 179, - 180, 170, 168, 184, 169, 183, 171, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 164, - 2, 166, 158, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 181, 2, 182, 178, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 185, 2, 186, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, - 157, 159, 160, 161, 162, 163, 165, 167, 173, 175, - 176, 177 -}; - -#if YYDEBUG != 0 -static const short yyprhs[] = { 0, - 0, 2, 4, 6, 9, 11, 14, 16, 38, 40, - 41, 44, 46, 48, 50, 53, 56, 59, 62, 65, - 73, 79, 97, 107, 131, 163, 179, 191, 203, 219, - 229, 243, 253, 265, 279, 289, 299, 311, 321, 333, - 343, 355, 369, 383, 395, 409, 427, 437, 449, 461, - 475, 487, 497, 498, 501, 503, 505, 507, 509, 511, - 513, 515, 517, 519, 521, 523, 525, 531, 539, 546, - 555, 556, 559, 562, 565, 568, 571, 574, 577, 580, - 583, 586, 589, 592, 594, 598, 599, 613, 615, 619, - 620, 634, 636, 640, 641, 655, 657, 661, 662, 682, - 684, 688, 689, 709, 711, 715, 716, 736, 738, 742, - 743, 769, 771, 775, 776, 802, 804, 808, 809, 835, - 837, 841, 842, 874, 876, 880, 881, 913, 915, 919, - 920, 952, 954, 956, 958, 960, 962, 964, 966, 971, - 979, 989, 996, 1000, 1007, 1014, 1024, 1031, 1041, 1047, - 1056, 1065, 1077, 1084, 1094, 1104, 1114, 1122, 1131, 1144, - 1151, 1157, 1165, 1173, 1186, 1194, 1204, 1222, 1230, 1239, - 1248, 1256, 1268, 1274, 1283, 1296, 1305, 1328, 1349, 1358, - 1367, 1373, 1382, 1390, 1399, 1405, 1417, 1423, 1433, 1435, - 1437, 1439, 1440, 1443, 1448, 1453, 1460, 1464, 1468, 1472, - 1480, 1483, 1486, 1493, 1502, 1511, 1522, 1524, 1527, 1529, - 1533, 1538, 1540, 1549, 1562, 1571, 1584, 1593, 1606, 1607, - 1620, 1621, 1638, 1640, 1643, 1653, 1656, 1663, 1673, 1683, - 1692, 1701, 1710, 1717, 1722, 1725, 1728, 1730, 1732, 1734, - 1736, 1738, 1740, 1744, 1747, 1750, 1753, 1757, 1761, 1765, - 1769, 1773, 1777, 1781, 1785, 1789, 1793, 1797, 1801, 1805, - 1809, 1815, 1820, 1825, 1830, 1835, 1840, 1845, 1850, 1855, - 1860, 1865, 1872, 1877, 1882, 1887, 1892, 1897, 1902, 1909, - 1916, 1923, 1928, 1930, 1932, 1934, 1936, 1938, 1943, 1946, - 1952, 1956, 1963, 1968, 1976, 1978, 1981, 1984, 1988, 1992, - 2004, 2014, 2022, 2030, 2031, 2035, 2037, 2041, 2042, 2046, - 2050, 2052, 2056, 2058, 2060, 2064, 2069, 2073, 2079, 2083, - 2088, 2095, 2103, 2105, 2107, 2111, 2115, 2125, 2133, 2135, - 2141, 2145, 2152, 2154, 2158, 2160, 2167, 2172, 2177, 2184, - 2191 -}; - -static const short yyrhs[] = { 190, - 0, 189, 0, 195, 0, 1, 6, 0, 3, 0, - 169, 3, 0, 145, 0, 148, 149, 188, 188, 188, - 150, 151, 147, 188, 188, 188, 147, 188, 188, 188, - 147, 188, 188, 188, 152, 153, 0, 146, 0, 0, - 190, 191, 0, 192, 0, 194, 0, 193, 0, 119, - 6, 0, 120, 6, 0, 122, 6, 0, 121, 6, - 0, 123, 6, 0, 124, 179, 259, 184, 5, 180, - 6, 0, 125, 179, 259, 180, 6, 0, 126, 179, - 5, 184, 5, 184, 259, 184, 259, 184, 5, 184, - 5, 184, 5, 180, 6, 0, 3, 7, 103, 179, - 5, 184, 257, 180, 6, 0, 3, 7, 102, 179, - 5, 184, 255, 184, 263, 184, 254, 184, 254, 184, - 254, 184, 263, 184, 263, 184, 254, 180, 6, 0, - 3, 7, 101, 179, 5, 184, 255, 184, 255, 184, - 261, 184, 254, 184, 254, 184, 254, 184, 254, 184, - 263, 184, 263, 184, 263, 184, 263, 184, 254, 180, - 6, 0, 3, 7, 109, 179, 5, 184, 3, 184, - 3, 184, 3, 184, 254, 180, 6, 0, 3, 7, - 113, 179, 5, 184, 3, 184, 254, 180, 6, 0, - 3, 7, 130, 179, 5, 184, 3, 184, 254, 180, - 6, 0, 3, 7, 111, 179, 5, 184, 170, 184, - 170, 184, 255, 184, 254, 180, 6, 0, 3, 7, - 114, 179, 5, 184, 263, 180, 6, 0, 3, 7, - 115, 179, 5, 184, 263, 184, 3, 184, 254, 180, - 6, 0, 3, 7, 110, 179, 5, 184, 3, 180, - 6, 0, 3, 7, 116, 179, 5, 184, 3, 184, - 255, 180, 6, 0, 3, 7, 118, 179, 5, 184, - 3, 184, 3, 184, 3, 180, 6, 0, 3, 7, - 117, 179, 5, 184, 257, 180, 6, 0, 3, 7, - 112, 179, 5, 184, 3, 180, 6, 0, 3, 7, - 41, 179, 5, 184, 3, 184, 3, 180, 6, 0, - 3, 7, 128, 179, 5, 184, 263, 180, 6, 0, - 3, 7, 129, 179, 5, 184, 263, 184, 3, 180, - 6, 0, 3, 7, 127, 179, 5, 184, 3, 180, - 6, 0, 3, 7, 131, 179, 5, 184, 3, 184, - 255, 180, 6, 0, 3, 7, 132, 179, 5, 184, - 3, 184, 255, 184, 255, 180, 6, 0, 3, 7, - 139, 179, 5, 184, 3, 184, 255, 184, 255, 180, - 6, 0, 3, 7, 133, 179, 5, 184, 3, 184, - 255, 180, 6, 0, 3, 7, 143, 179, 5, 184, - 3, 184, 255, 184, 255, 180, 6, 0, 3, 7, - 134, 179, 5, 184, 3, 184, 263, 184, 263, 184, - 254, 184, 254, 180, 6, 0, 3, 7, 135, 179, - 5, 184, 263, 180, 6, 0, 3, 7, 136, 179, - 137, 184, 254, 184, 3, 180, 6, 0, 3, 7, - 138, 179, 5, 184, 263, 184, 254, 180, 6, 0, - 3, 7, 140, 179, 5, 184, 5, 184, 3, 184, - 3, 180, 6, 0, 3, 7, 141, 179, 5, 184, - 5, 184, 3, 180, 6, 0, 3, 7, 142, 179, - 3, 184, 3, 180, 6, 0, 0, 195, 196, 0, - 198, 0, 197, 0, 238, 0, 239, 0, 240, 0, - 243, 0, 244, 0, 247, 0, 252, 0, 253, 0, - 246, 0, 245, 0, 33, 179, 5, 180, 6, 0, - 33, 179, 5, 184, 265, 180, 6, 0, 4, 5, - 185, 199, 186, 6, 0, 4, 5, 4, 257, 185, - 199, 186, 6, 0, 0, 199, 201, 0, 199, 204, - 0, 199, 207, 0, 199, 210, 0, 199, 213, 0, - 199, 216, 0, 199, 219, 0, 199, 222, 0, 199, - 225, 0, 199, 228, 0, 199, 231, 0, 199, 234, - 0, 255, 0, 200, 184, 255, 0, 0, 80, 179, - 255, 184, 255, 184, 255, 180, 202, 185, 200, 186, - 6, 0, 255, 0, 203, 184, 255, 0, 0, 81, - 179, 255, 184, 255, 184, 255, 180, 205, 185, 203, - 186, 6, 0, 255, 0, 206, 184, 255, 0, 0, - 82, 179, 255, 184, 255, 184, 255, 180, 208, 185, - 206, 186, 6, 0, 255, 0, 209, 184, 255, 0, - 0, 77, 179, 255, 184, 255, 184, 255, 184, 255, - 184, 255, 184, 255, 180, 211, 185, 209, 186, 6, - 0, 255, 0, 212, 184, 255, 0, 0, 78, 179, - 255, 184, 255, 184, 255, 184, 255, 184, 255, 184, - 255, 180, 214, 185, 212, 186, 6, 0, 255, 0, - 215, 184, 255, 0, 0, 79, 179, 255, 184, 255, - 184, 255, 184, 255, 184, 255, 184, 255, 180, 217, - 185, 215, 186, 6, 0, 255, 0, 218, 184, 255, - 0, 0, 74, 179, 255, 184, 255, 184, 255, 184, - 255, 184, 255, 184, 255, 184, 255, 184, 255, 184, - 255, 180, 220, 185, 218, 186, 6, 0, 255, 0, - 221, 184, 255, 0, 0, 75, 179, 255, 184, 255, - 184, 255, 184, 255, 184, 255, 184, 255, 184, 255, - 184, 255, 184, 255, 180, 223, 185, 221, 186, 6, - 0, 255, 0, 224, 184, 255, 0, 0, 76, 179, - 255, 184, 255, 184, 255, 184, 255, 184, 255, 184, - 255, 184, 255, 184, 255, 184, 255, 180, 226, 185, - 224, 186, 6, 0, 255, 0, 227, 184, 255, 0, - 0, 71, 179, 255, 184, 255, 184, 255, 184, 255, - 184, 255, 184, 255, 184, 255, 184, 255, 184, 255, - 184, 255, 184, 255, 184, 255, 180, 229, 185, 227, - 186, 6, 0, 255, 0, 230, 184, 255, 0, 0, - 72, 179, 255, 184, 255, 184, 255, 184, 255, 184, - 255, 184, 255, 184, 255, 184, 255, 184, 255, 184, - 255, 184, 255, 184, 255, 180, 232, 185, 230, 186, - 6, 0, 255, 0, 233, 184, 255, 0, 0, 73, - 179, 255, 184, 255, 184, 255, 184, 255, 184, 255, - 184, 255, 184, 255, 184, 255, 184, 255, 184, 255, - 184, 255, 184, 255, 180, 235, 185, 233, 186, 6, - 0, 7, 0, 154, 0, 155, 0, 156, 0, 157, - 0, 175, 0, 176, 0, 4, 236, 255, 6, 0, - 4, 181, 255, 182, 236, 255, 6, 0, 4, 181, - 185, 265, 186, 182, 236, 263, 6, 0, 4, 181, - 182, 7, 263, 6, 0, 4, 237, 6, 0, 4, - 181, 255, 182, 237, 6, 0, 4, 183, 4, 7, - 269, 6, 0, 4, 181, 255, 182, 183, 4, 7, - 269, 6, 0, 4, 183, 4, 236, 255, 6, 0, - 4, 181, 255, 182, 183, 4, 236, 255, 6, 0, - 4, 183, 4, 237, 6, 0, 4, 181, 255, 182, - 183, 4, 237, 6, 0, 4, 183, 89, 183, 4, - 7, 266, 6, 0, 4, 181, 255, 182, 183, 89, - 183, 4, 7, 266, 6, 0, 4, 183, 90, 7, - 267, 6, 0, 4, 181, 255, 182, 183, 90, 7, - 267, 6, 0, 57, 179, 4, 180, 183, 4, 7, - 255, 6, 0, 57, 179, 4, 180, 183, 4, 7, - 269, 6, 0, 38, 179, 255, 180, 7, 257, 6, - 0, 53, 38, 179, 255, 180, 7, 263, 6, 0, - 69, 38, 263, 7, 185, 255, 184, 255, 184, 255, - 186, 6, 0, 45, 46, 263, 7, 255, 6, 0, - 38, 185, 255, 186, 6, 0, 41, 179, 255, 180, - 7, 263, 6, 0, 43, 179, 255, 180, 7, 263, - 6, 0, 69, 41, 263, 7, 185, 255, 184, 255, - 184, 255, 186, 6, 0, 39, 179, 255, 180, 7, - 263, 6, 0, 39, 179, 255, 180, 7, 263, 49, - 257, 6, 0, 47, 179, 255, 180, 7, 185, 255, - 184, 255, 184, 5, 184, 5, 184, 5, 186, 6, - 0, 40, 179, 255, 180, 7, 263, 6, 0, 53, - 41, 179, 255, 180, 7, 263, 6, 0, 41, 64, - 179, 255, 180, 7, 263, 6, 0, 83, 179, 255, - 180, 7, 263, 6, 0, 84, 179, 255, 180, 7, - 263, 88, 263, 85, 255, 6, 0, 41, 185, 255, - 186, 6, 0, 49, 42, 179, 255, 180, 7, 263, - 6, 0, 144, 42, 179, 255, 180, 7, 185, 255, - 184, 263, 186, 6, 0, 50, 42, 179, 255, 180, - 7, 263, 6, 0, 84, 42, 86, 87, 179, 255, - 180, 7, 261, 88, 185, 263, 184, 263, 186, 85, - 185, 255, 184, 255, 186, 6, 0, 84, 42, 179, - 255, 180, 7, 261, 88, 185, 263, 184, 263, 186, - 85, 185, 255, 184, 255, 186, 6, 0, 53, 42, - 179, 255, 180, 7, 263, 6, 0, 42, 64, 179, - 255, 180, 7, 263, 6, 0, 42, 185, 255, 186, - 6, 0, 52, 44, 179, 255, 180, 7, 263, 6, - 0, 44, 179, 255, 180, 7, 263, 6, 0, 53, - 44, 179, 255, 180, 7, 263, 6, 0, 59, 257, - 185, 241, 186, 0, 58, 185, 257, 184, 257, 184, - 255, 186, 185, 241, 186, 0, 60, 257, 185, 241, - 186, 0, 61, 185, 257, 184, 255, 186, 185, 241, - 186, 0, 243, 0, 242, 0, 240, 0, 0, 242, - 239, 0, 63, 185, 242, 186, 0, 66, 185, 242, - 186, 0, 66, 4, 181, 255, 182, 6, 0, 66, - 100, 6, 0, 4, 269, 6, 0, 4, 255, 6, - 0, 57, 179, 4, 180, 183, 4, 6, 0, 96, - 6, 0, 37, 6, 0, 91, 179, 255, 8, 255, - 180, 0, 91, 179, 255, 8, 255, 8, 255, 180, - 0, 91, 4, 92, 185, 255, 8, 255, 186, 0, - 91, 4, 92, 185, 255, 8, 255, 8, 255, 186, - 0, 93, 0, 99, 4, 0, 97, 0, 98, 4, - 6, 0, 94, 179, 255, 180, 0, 95, 0, 62, - 38, 185, 255, 184, 257, 186, 6, 0, 62, 38, - 185, 255, 184, 257, 184, 257, 184, 255, 186, 6, - 0, 62, 41, 185, 255, 184, 257, 186, 6, 0, - 62, 41, 185, 255, 184, 257, 184, 257, 184, 255, - 186, 6, 0, 62, 42, 185, 255, 184, 257, 186, - 6, 0, 62, 42, 185, 255, 184, 257, 184, 257, - 184, 255, 186, 6, 0, 0, 62, 42, 185, 255, - 184, 257, 186, 248, 185, 250, 186, 6, 0, 0, - 62, 42, 185, 255, 184, 257, 184, 257, 184, 255, - 186, 249, 185, 250, 186, 6, 0, 251, 0, 250, - 251, 0, 70, 185, 263, 184, 263, 184, 263, 186, - 6, 0, 65, 6, 0, 51, 41, 263, 7, 255, - 6, 0, 51, 41, 263, 7, 255, 54, 56, 255, - 6, 0, 51, 41, 263, 7, 255, 54, 55, 255, - 6, 0, 51, 42, 185, 255, 186, 7, 263, 6, - 0, 48, 42, 185, 255, 186, 7, 263, 6, 0, - 51, 44, 185, 255, 186, 7, 263, 6, 0, 65, - 42, 263, 7, 255, 6, 0, 65, 42, 263, 6, - 0, 67, 6, 0, 68, 6, 0, 104, 0, 105, - 0, 106, 0, 107, 0, 108, 0, 256, 0, 179, - 255, 180, 0, 169, 255, 0, 168, 255, 0, 174, - 255, 0, 255, 169, 255, 0, 255, 168, 255, 0, - 255, 170, 255, 0, 255, 171, 255, 0, 255, 172, - 255, 0, 255, 178, 255, 0, 255, 164, 255, 0, - 255, 166, 255, 0, 255, 165, 255, 0, 255, 167, - 255, 0, 255, 161, 255, 0, 255, 162, 255, 0, - 255, 160, 255, 0, 255, 159, 255, 0, 255, 158, - 255, 8, 255, 0, 12, 179, 255, 180, 0, 13, - 179, 255, 180, 0, 14, 179, 255, 180, 0, 15, - 179, 255, 180, 0, 16, 179, 255, 180, 0, 17, - 179, 255, 180, 0, 18, 179, 255, 180, 0, 19, - 179, 255, 180, 0, 20, 179, 255, 180, 0, 22, - 179, 255, 180, 0, 23, 179, 255, 184, 255, 180, - 0, 24, 179, 255, 180, 0, 25, 179, 255, 180, - 0, 26, 179, 255, 180, 0, 27, 179, 255, 180, - 0, 28, 179, 255, 180, 0, 29, 179, 255, 180, - 0, 30, 179, 255, 184, 255, 180, 0, 31, 179, - 255, 184, 255, 180, 0, 32, 179, 255, 184, 255, - 180, 0, 21, 179, 255, 180, 0, 3, 0, 9, - 0, 10, 0, 11, 0, 4, 0, 4, 181, 255, - 182, 0, 4, 237, 0, 4, 181, 255, 182, 237, - 0, 4, 183, 4, 0, 4, 181, 255, 182, 183, - 4, 0, 4, 183, 4, 237, 0, 4, 181, 255, - 182, 183, 4, 237, 0, 258, 0, 169, 257, 0, - 168, 257, 0, 257, 169, 257, 0, 257, 168, 257, - 0, 185, 255, 184, 255, 184, 255, 184, 255, 184, - 255, 186, 0, 185, 255, 184, 255, 184, 255, 184, - 255, 186, 0, 185, 255, 184, 255, 184, 255, 186, - 0, 179, 255, 184, 255, 184, 255, 180, 0, 0, - 179, 260, 180, 0, 5, 0, 260, 184, 5, 0, - 0, 185, 262, 186, 0, 179, 262, 180, 0, 263, - 0, 262, 184, 263, 0, 255, 0, 264, 0, 185, - 265, 186, 0, 169, 185, 265, 186, 0, 255, 8, - 255, 0, 255, 8, 255, 8, 255, 0, 4, 181, - 182, 0, 169, 4, 181, 182, 0, 4, 181, 185, - 265, 186, 182, 0, 169, 4, 181, 185, 265, 186, - 182, 0, 255, 0, 264, 0, 265, 184, 255, 0, - 265, 184, 264, 0, 185, 255, 184, 255, 184, 255, - 184, 255, 186, 0, 185, 255, 184, 255, 184, 255, - 186, 0, 4, 0, 4, 183, 89, 183, 4, 0, - 185, 268, 186, 0, 4, 181, 255, 182, 183, 90, - 0, 266, 0, 268, 184, 266, 0, 5, 0, 35, - 179, 269, 184, 269, 180, 0, 36, 179, 269, 180, - 0, 34, 179, 269, 180, 0, 34, 179, 269, 184, - 265, 180, 0, 34, 179, 4, 183, 4, 180, 0, - 34, 179, 4, 181, 255, 182, 183, 4, 180, 0 -}; - -#endif - -#if YYDEBUG != 0 -static const short yyrline[] = { 0, - 156, 158, 159, 160, 167, 169, 172, 180, 194, 206, - 208, 211, 213, 214, 217, 223, 228, 229, 230, 233, - 237, 240, 246, 251, 257, 265, 270, 274, 280, 285, - 289, 294, 298, 301, 306, 310, 314, 318, 323, 327, - 330, 334, 338, 342, 346, 350, 354, 357, 361, 364, - 368, 371, 380, 384, 390, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 405, 410, 439, 444, - 450, 455, 456, 457, 458, 459, 460, 461, 462, 463, - 464, 465, 466, 469, 472, 476, 482, 488, 491, 495, - 501, 507, 510, 514, 520, 526, 529, 533, 541, 547, - 550, 554, 562, 568, 571, 575, 583, 589, 592, 596, - 608, 614, 617, 621, 633, 639, 642, 646, 658, 664, - 667, 671, 684, 690, 693, 697, 710, 716, 719, 723, - 736, 748, 750, 751, 752, 753, 755, 757, 759, 790, - 824, 871, 886, 895, 910, 922, 936, 959, 983, 995, - 1009, 1021, 1035, 1051, 1067, 1080, 1100, 1111, 1117, 1136, - 1147, 1155, 1161, 1167, 1186, 1192, 1208, 1215, 1221, 1227, - 1233, 1239, 1258, 1270, 1276, 1295, 1316, 1324, 1330, 1336, - 1342, 1354, 1360, 1366, 1378, 1384, 1389, 1394, 1401, 1403, - 1404, 1407, 1412, 1423, 1441, 1449, 1454, 1465, 1533, 1553, - 1559, 1563, 1583, 1599, 1613, 1638, 1663, 1689, 1695, 1700, - 1705, 1709, 1719, 1725, 1731, 1735, 1739, 1743, 1747, 1752, - 1757, 1763, 1770, 1774, 1779, 1800, 1810, 1829, 1847, 1865, - 1887, 1908, 1929, 1943, 1964, 1969, 1980, 1982, 1983, 1984, - 1985, 1988, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, - 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, - 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, - 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, - 2034, 2035, 2040, 2045, 2046, 2047, 2051, 2062, 2079, 2090, - 2109, 2125, 2141, 2157, 2174, 2179, 2183, 2187, 2191, 2196, - 2201, 2205, 2209, 2215, 2219, 2224, 2228, 2233, 2237, 2241, - 2247, 2253, 2260, 2266, 2270, 2274, 2284, 2291, 2302, 2316, - 2332, 2352, 2376, 2382, 2386, 2390, 2401, 2406, 2417, 2422, - 2440, 2445, 2458, 2464, 2470, 2475, 2483, 2496, 2500, 2525, - 2539 -}; -#endif - - -#if YYDEBUG != 0 || defined (YYERROR_VERBOSE) - -static const char * const yytname[] = { "$","error","$undefined.","tDOUBLE", -"tSTRING","tBIGSTR","tEND","tAFFECT","tDOTS","tPi","tMPI_Rank","tMPI_Size","tExp", -"tLog","tLog10","tSqrt","tSin","tAsin","tCos","tAcos","tTan","tRand","tAtan", -"tAtan2","tSinh","tCosh","tTanh","tFabs","tFloor","tCeil","tFmod","tModulo", -"tHypot","tPrintf","tSprintf","tStrCat","tStrPrefix","tDraw","tPoint","tCircle", -"tEllipsis","tLine","tSurface","tSpline","tVolume","tCharacteristic","tLength", -"tParametric","tElliptic","tPlane","tRuled","tTransfinite","tComplex","tPhysical", -"tUsing","tBump","tProgression","tPlugin","tRotate","tTranslate","tSymmetry", -"tDilate","tExtrude","tDuplicata","tLoop","tRecombine","tDelete","tCoherence", -"tIntersect","tAttractor","tLayers","tScalarTetrahedron","tVectorTetrahedron", -"tTensorTetrahedron","tScalarTriangle","tVectorTriangle","tTensorTriangle","tScalarLine", -"tVectorLine","tTensorLine","tScalarPoint","tVectorPoint","tTensorPoint","tBSpline", -"tNurbs","tOrder","tWith","tBounds","tKnots","tColor","tColorTable","tFor","tIn", -"tEndFor","tIf","tEndIf","tExit","tReturn","tCall","tFunction","tMesh","tB_SPLINE_SURFACE_WITH_KNOTS", -"tB_SPLINE_CURVE_WITH_KNOTS","tCARTESIAN_POINT","tTRUE","tFALSE","tUNSPECIFIED", -"tU","tV","tEDGE_CURVE","tVERTEX_POINT","tORIENTED_EDGE","tPLANE","tFACE_OUTER_BOUND", -"tEDGE_LOOP","tADVANCED_FACE","tVECTOR","tDIRECTION","tAXIS2_PLACEMENT_3D","tISO", -"tENDISO","tENDSEC","tDATA","tHEADER","tFILE_DESCRIPTION","tFILE_SCHEMA","tFILE_NAME", -"tMANIFOLD_SOLID_BREP","tCLOSED_SHELL","tADVANCED_BREP_SHAPE_REPRESENTATION", -"tFACE_BOUND","tCYLINDRICAL_SURFACE","tCONICAL_SURFACE","tCIRCLE","tTRIMMED_CURVE", -"tGEOMETRIC_SET","tCOMPOSITE_CURVE_SEGMENT","tCONTINUOUS","tCOMPOSITE_CURVE", -"tTOROIDAL_SURFACE","tPRODUCT_DEFINITION","tPRODUCT_DEFINITION_SHAPE","tSHAPE_DEFINITION_REPRESENTATION", -"tELLIPSE","tTrimmed","tSolid","tEndSolid","tVertex","tFacet","tNormal","tOuter", -"tLoopSTL","tEndLoop","tEndFacet","tAFFECTPLUS","tAFFECTMINUS","tAFFECTTIMES", -"tAFFECTDIVIDE","'?'","tOR","tAND","tEQUAL","tNOTEQUAL","tAPPROXEQUAL","'<'", -"tLESSOREQUAL","'>'","tGREATEROREQUAL","'+'","'-'","'*'","'/'","'%'","tCROSSPRODUCT", -"'!'","tPLUSPLUS","tMINUSMINUS","UNARYPREC","'^'","'('","')'","'['","']'","'.'", -"','","'{'","'}'","All","SignedDouble","STLFormatItem","StepFormatItems","StepFormatItem", -"StepSpecial","StepHeaderItem","StepDataItem","GeomFormatList","GeomFormat", -"Printf","View","Views","ScalarPointValues","ScalarPoint","@1","VectorPointValues", -"VectorPoint","@2","TensorPointValues","TensorPoint","@3","ScalarLineValues", -"ScalarLine","@4","VectorLineValues","VectorLine","@5","TensorLineValues","TensorLine", -"@6","ScalarTriangleValues","ScalarTriangle","@7","VectorTriangleValues","VectorTriangle", -"@8","TensorTriangleValues","TensorTriangle","@9","ScalarTetrahedronValues", -"ScalarTetrahedron","@10","VectorTetrahedronValues","VectorTetrahedron","@11", -"TensorTetrahedronValues","TensorTetrahedron","@12","NumericAffectation","NumericIncrement", -"Affectation","Shape","Transform","MultipleShape","ListOfShapes","Duplicata", -"Delete","Command","Loop","Extrude","@13","@14","ExtrudeParameters","ExtrudeParameter", -"Transfini","Coherence","BoolExpr","FExpr","FExpr_Single","VExpr","VExpr_Single", -"ListOfStrings","RecursiveListOfStrings","ListOfListOfDouble","RecursiveListOfListOfDouble", -"ListOfDouble","FExpr_Multi","RecursiveListOfDouble","ColorExpr","ListOfColor", -"RecursiveListOfColor","StringExpr", NULL -}; -#endif - -static const short yyr1[] = { 0, - 187, 187, 187, 187, 188, 188, 189, 189, 189, 190, - 190, 191, 191, 191, 192, 192, 192, 192, 192, 193, - 193, 193, 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, - 194, 194, 195, 195, 196, 196, 196, 196, 196, 196, - 196, 196, 196, 196, 196, 196, 197, 197, 198, 198, - 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, - 199, 199, 199, 200, 200, 202, 201, 203, 203, 205, - 204, 206, 206, 208, 207, 209, 209, 211, 210, 212, - 212, 214, 213, 215, 215, 217, 216, 218, 218, 220, - 219, 221, 221, 223, 222, 224, 224, 226, 225, 227, - 227, 229, 228, 230, 230, 232, 231, 233, 233, 235, - 234, 236, 236, 236, 236, 236, 237, 237, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 239, 239, 239, 239, - 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, - 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, - 239, 239, 239, 239, 240, 240, 240, 240, 241, 241, - 241, 242, 242, 243, 244, 244, 244, 245, 245, 245, - 245, 245, 246, 246, 246, 246, 246, 246, 246, 246, - 246, 246, 247, 247, 247, 247, 247, 247, 248, 247, - 249, 247, 250, 250, 251, 251, 252, 252, 252, 252, - 252, 252, 252, 252, 253, 253, 254, 254, 254, 254, - 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 256, 256, 256, 256, 256, 256, 256, 256, - 256, 256, 256, 256, 257, 257, 257, 257, 257, 258, - 258, 258, 258, 259, 259, 260, 260, 261, 261, 261, - 262, 262, 263, 263, 263, 263, 264, 264, 264, 264, - 264, 264, 265, 265, 265, 265, 266, 266, 266, 266, - 267, 267, 268, 268, 269, 269, 269, 269, 269, 269, - 269 -}; - -static const short yyr2[] = { 0, - 1, 1, 1, 2, 1, 2, 1, 21, 1, 0, - 2, 1, 1, 1, 2, 2, 2, 2, 2, 7, - 5, 17, 9, 23, 31, 15, 11, 11, 15, 9, - 13, 9, 11, 13, 9, 9, 11, 9, 11, 9, - 11, 13, 13, 11, 13, 17, 9, 11, 11, 13, - 11, 9, 0, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 5, 7, 6, 8, - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 1, 3, 0, 13, 1, 3, 0, - 13, 1, 3, 0, 13, 1, 3, 0, 19, 1, - 3, 0, 19, 1, 3, 0, 19, 1, 3, 0, - 25, 1, 3, 0, 25, 1, 3, 0, 25, 1, - 3, 0, 31, 1, 3, 0, 31, 1, 3, 0, - 31, 1, 1, 1, 1, 1, 1, 1, 4, 7, - 9, 6, 3, 6, 6, 9, 6, 9, 5, 8, - 8, 11, 6, 9, 9, 9, 7, 8, 12, 6, - 5, 7, 7, 12, 7, 9, 17, 7, 8, 8, - 7, 11, 5, 8, 12, 8, 22, 20, 8, 8, - 5, 8, 7, 8, 5, 11, 5, 9, 1, 1, - 1, 0, 2, 4, 4, 6, 3, 3, 3, 7, - 2, 2, 6, 8, 8, 10, 1, 2, 1, 3, - 4, 1, 8, 12, 8, 12, 8, 12, 0, 12, - 0, 16, 1, 2, 9, 2, 6, 9, 9, 8, - 8, 8, 6, 4, 2, 2, 1, 1, 1, 1, - 1, 1, 3, 2, 2, 2, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 6, 4, 4, 4, 4, 4, 4, 6, 6, - 6, 4, 1, 1, 1, 1, 1, 4, 2, 5, - 3, 6, 4, 7, 1, 2, 2, 3, 3, 11, - 9, 7, 7, 0, 3, 1, 3, 0, 3, 3, - 1, 3, 1, 1, 3, 4, 3, 5, 3, 4, - 6, 7, 1, 1, 3, 3, 9, 7, 1, 5, - 3, 6, 1, 3, 1, 6, 4, 4, 6, 6, - 9 -}; - -static const short yydefact[] = { 0, - 0, 7, 9, 0, 2, 1, 3, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, - 14, 13, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 207, 0, 212, 0, 209, - 0, 0, 0, 54, 56, 55, 57, 58, 59, 60, - 61, 66, 65, 62, 63, 64, 5, 0, 0, 0, - 15, 16, 18, 17, 19, 304, 304, 0, 283, 287, - 335, 132, 284, 285, 286, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, - 134, 135, 136, 0, 0, 0, 137, 138, 0, 0, - 0, 0, 0, 0, 242, 0, 0, 202, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 295, - 0, 0, 0, 0, 0, 192, 0, 0, 0, 192, - 235, 236, 0, 0, 0, 0, 0, 0, 0, 0, - 201, 0, 208, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 289, 0, 71, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, - 244, 246, 0, 0, 0, 0, 0, 0, 0, 0, - 143, 199, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 198, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 287, 0, 0, 313, 0, 314, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 297, 296, 0, 0, 0, 0, 192, 192, 0, 0, - 0, 0, 0, 0, 0, 197, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, - 0, 0, 0, 0, 0, 291, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 335, 0, 0, 0, 243, 0, 0, 323, 324, 0, - 0, 132, 0, 0, 0, 0, 139, 0, 260, 259, - 257, 258, 253, 255, 254, 256, 248, 247, 249, 250, - 251, 252, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 299, 298, 191, - 0, 190, 189, 0, 0, 0, 0, 0, 194, 193, - 234, 0, 0, 195, 0, 0, 0, 0, 0, 0, - 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 305, 0, 0, 21, 0, - 288, 293, 71, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 282, 271, 0, - 273, 274, 275, 276, 277, 278, 0, 0, 0, 0, - 0, 338, 0, 0, 337, 0, 0, 0, 0, 0, - 0, 0, 0, 149, 0, 0, 0, 0, 0, 67, - 0, 0, 161, 0, 0, 0, 0, 173, 0, 181, - 0, 0, 319, 0, 0, 0, 315, 317, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 185, 187, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 307, 0, 304, 0, 290, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, - 142, 325, 326, 0, 0, 0, 0, 0, 144, 145, - 147, 0, 0, 329, 0, 333, 0, 153, 261, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 320, - 0, 316, 0, 160, 0, 0, 0, 0, 227, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 233, 196, 0, 0, 0, - 0, 308, 0, 0, 0, 203, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 237, 238, 239, 240, 241, 0, 0, 0, 0, - 0, 0, 0, 20, 0, 292, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, - 279, 280, 281, 0, 340, 339, 336, 0, 132, 0, - 0, 0, 0, 140, 0, 0, 0, 0, 0, 331, - 68, 157, 165, 0, 168, 0, 162, 0, 163, 183, - 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, - 0, 192, 0, 0, 0, 0, 0, 219, 0, 0, - 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 304, 294, 70, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, - 0, 0, 151, 0, 0, 0, 334, 0, 170, 180, - 321, 0, 0, 231, 174, 176, 0, 0, 230, 232, - 182, 158, 169, 179, 184, 0, 0, 0, 303, 0, - 302, 0, 0, 213, 0, 215, 0, 217, 0, 0, - 0, 308, 0, 311, 0, 0, 0, 0, 205, 204, - 0, 0, 0, 0, 0, 23, 0, 32, 0, 36, - 0, 30, 0, 0, 35, 0, 40, 38, 0, 0, - 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, - 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 141, 146, 148, 0, - 154, 0, 0, 0, 166, 322, 0, 229, 228, 155, - 156, 192, 0, 188, 0, 0, 0, 0, 0, 0, - 0, 310, 0, 309, 0, 0, 0, 0, 0, 0, - 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 341, 0, 332, 330, 0, 0, 0, - 0, 301, 0, 0, 0, 0, 0, 0, 223, 0, - 0, 0, 312, 0, 0, 206, 0, 0, 37, 0, - 0, 0, 0, 27, 0, 33, 0, 39, 28, 41, - 0, 44, 0, 48, 49, 0, 0, 51, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 152, 0, 0, 186, 0, 0, 0, 221, - 226, 0, 0, 224, 0, 0, 0, 0, 172, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 86, 90, 94, 0, 328, 0, 300, 214, - 216, 218, 0, 0, 220, 159, 164, 0, 0, 175, - 0, 0, 0, 0, 0, 31, 34, 42, 0, 43, - 50, 45, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 327, 0, 0, 0, 0, 0, 0, 0, 0, 26, - 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 84, 0, 88, 0, 92, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, - 0, 46, 22, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 85, 87, 89, 91, 93, 95, 167, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 98, 102, 106, 225, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 178, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 96, 0, 100, 0, 104, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 177, 0, 24, 0, 0, 0, - 0, 0, 0, 97, 99, 101, 103, 105, 107, 0, - 0, 0, 0, 110, 114, 118, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 108, 0, 112, 0, 116, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 109, 111, 113, 115, 117, 119, - 0, 122, 126, 130, 25, 0, 0, 0, 0, 0, - 0, 0, 120, 0, 124, 0, 128, 0, 0, 0, - 0, 0, 0, 121, 123, 125, 127, 129, 131, 0, - 0, 0 -}; - -static const short yydefgoto[] = { 1540, - 79, 5, 6, 19, 20, 21, 22, 7, 64, 65, - 66, 388, 1313, 557, 1263, 1315, 558, 1264, 1317, 559, - 1265, 1424, 560, 1397, 1426, 561, 1398, 1428, 562, 1399, - 1485, 563, 1471, 1487, 564, 1472, 1489, 565, 1473, 1522, - 566, 1516, 1524, 567, 1517, 1526, 568, 1518, 132, 233, - 67, 490, 480, 481, 482, 483, 71, 72, 73, 74, - 999, 1233, 1138, 1139, 75, 76, 817, 304, 135, 169, - 170, 228, 381, 905, 1003, 1004, 306, 420, 736, 608, - 737, 136 -}; - -static const short yypact[] = { 1927, - 108,-32768,-32768, -10,-32768, 27, 2128,-32768, 11, 176, - 136, 196, 228, 233, 269, 102, 119, 126,-32768,-32768, --32768,-32768, 1572, 162, 338, -75, 180, 190, -45, -44, - 212, 219, 283, 238, 339, 378, 384, 168, 386, 346, - 262, 274, 207, 207, 278, 202, 282, 428, 13, 475, - 476, 92, 334, -21, 8,-32768, 335,-32768, 496,-32768, - 514, 551, 520,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768, 553, 11, 1978, --32768,-32768,-32768,-32768,-32768, 389, 389, 567,-32768, 264, - 7,-32768,-32768,-32768,-32768, 405, 419, 439, 440, 444, - 445, 446, 447, 448, 449, 450, 451, 454, 456, 457, - 458, 461, 462, 467, 469, 495, 497, 513, 515,-32768, --32768,-32768,-32768, 67, 67, 67,-32768,-32768, 67, 522, - 70, 67, 569, 811,-32768, 593, 604,-32768, 67, 67, - 67, 67, 516, 67, 67, 518, 67, 67, 67, 984, - 67, 464, 519, 521, 984, 490, 508, 523, 526, 527, - 529, 530, 695, 207, 207, 207, 67, 67, 97,-32768, - 135, 207, 528, 544, 546,-32768, 984, 533, 705,-32768, --32768,-32768, 984, 984, 67, -14, 67, 644, 67, 67, --32768, 744,-32768, 574,-32768, 11, 575, 576, 577, 578, - 579, 580, 581, 584, 585, 586, 587, 588, 589, 592, - 594, 595, 620, 621, 622, 623, 624, 626, 627, 628, - 629, 632, 633, 634, 635, 637, 747, 638, 639, 640, - 67, 768,-32768, 207,-32768, 67, 67, 67, 67, 67, - 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 67, 67, 67, 279, 242, 242, 643, - 643, 643, 4939, 818, 1606, 4814, 15, 646, 821, 952, --32768,-32768, 67, 67, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 67, 67, 67, 67,-32768, -111, 4962, - 1976, 4985, 5008, 67, 5031, 2176, 67, 2199, 5054, 5077, - 285, 1507, 1606, 978, 823,-32768, 5100, 67, 67, 67, - 825, 67, 67, 67, 67, 67, 67, 67, 653, 104, --32768,-32768, 2567, 2588, 207, 207, 500, 500, 209, 67, - 67, 67, 313, 150, 67,-32768, 2016, 827, 829, 5123, - 731, 67, 5146, 659, 1674, 5169,-32768, 67, 688, 849, - 853, 855, 857, 858, 864, 865, 866, 867, 868, 869, - 870, 873, 874, 875, 876, 877, 878, 879, 880, 895, - 896, 897, 772, 898, 900, 905, 906, 909, 911,-32768, - 4, 913, 908, 914, 4839, 160, 204, 330, 5192, 5215, - 5238, 5261, 5284, 5307, 5330, 5353, 5376, 5399, 5422, 2609, - 5445, 5468, 5491, 5514, 5537, 5560, 2630, 2651, 2672, -152, --32768, 23, 736, 753,-32768, 984, 1778, 978,-32768, 132, - 21, 242, 67, 930, 933, 9,-32768, 1701, 573, 726, - 425, 425, 280, 280, 280, 280, 302, 302, 643, 643, - 643, 643, 932, 1606, 934, 936, 937, 939, 5583, 940, - 943, 5606, 946, 947, 948, 641, 329, 1606, 258, 67, - 67, 949, 2222, 5629, 5652, 67, 2245, 2268, 5675, 5698, - 5721, 5744, 5767, 770, 207, 67, 67,-32768,-32768,-32768, - 773, 1323,-32768, 774, 67, 2693, 2714, 2735,-32768,-32768, --32768, 67, 4864,-32768, 776, 778, 957, 786, 5790, 959, - 67, 67,-32768, 5813, 817, 790, 808, 833, 840, 850, - 851, 852, 854, 856, 859, 860, 862, 863, 881, 882, - 883, 884, 885, 886, 888, 889, 890, 893, 894, 899, - 901, 902, 904, 917, 918,-32768, 1032, 871,-32768, 919, - 164,-32768,-32768, 903, 925, 927, 928, 950, 953, 954, - 955, 956, 962, 972, 975, 1035,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 67, --32768,-32768,-32768,-32768,-32768,-32768, 67, 67, 67, 67, - 1038,-32768, 1606, 242,-32768, 1039, 1606, 944, 159, 67, - 1042, 1043, 1012,-32768, 1051, 974, 14, 1044, 67,-32768, - 147, 207,-32768, 984, 984, 1052, 984,-32768, 1053,-32768, - 984, 984,-32768, 1606, 766, 314,-32768, 1716, 1049, 924, - 1054, 1055, 1057, 861, 1073, 1074, 1108, 1120, 1124, 1150, - 1152, 1156, 211, 2756, 2777,-32768,-32768, 2291, 207, 207, - 207, 1070, 1155, 67, 67, 984, 67, 1157, 984, 1748, - 681, 1158, 1015, 1163, 67, 67, 207, 1164, 1182, 1016, - 1184, 1185, 984, 984, 1186, 207, 1197, 1198, 984, 984, - 1199, 1201, 1202, 1203, 1209, 984, 416, 984, 1219, 1220, - 1221, 1230, 1240,-32768, 1238, 389, 1241,-32768, 645, 67, - 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, - 67,-32768, 5836, 5859, 5882, 5905, 4889, 1066, 166, 1067, --32768, 978,-32768, 113, 167, 1069, 1242, 1119,-32768,-32768, --32768, 14, 67, 1071, 67,-32768, 322,-32768, 6411, 1244, - 17, 59, 1247, 984, 1249, 984, 1262, 1263, 323,-32768, - 1606,-32768, 67,-32768, 67, 984, 984, 984,-32768, 400, - 984, 984, 984, 984, 984, 984, 984, 470, 67, 67, - 67, 1085, -57, 142, 199,-32768,-32768, 2798, 2819, 1265, - 5928, -47, 1187, 67, 67,-32768, 1087, 11, 1089, 2840, - 2861, 169, 1090, 1102, 1109, 1112, 1110, 1115, 1114, 1117, - 256, 1118, 1116, 1123, 1121, 1132, 1134, 1136, 1137, 1138, - 1143,-32768,-32768,-32768,-32768,-32768, 1140, 1141, 1142, 1148, - 1159, 1162, 1160,-32768, 1161, 160, 1293, 2882, 2903, 2924, - 2945, 2966, 2987, 3008, 3029, 3050, 3071, 3092, 3113,-32768, --32768,-32768,-32768, 1167,-32768,-32768,-32768, 984, 242, 67, - 1298, 1342, 9,-32768, 1345, 4914, 1270, 3134, 14,-32768, --32768,-32768,-32768, 207,-32768, 1346,-32768, 1354,-32768,-32768, - 1189, 331, 6411, 3155, 1363, 1368, 1372, 67, 67, 1373, - 1374, 1375, 1385, 1387, 1388, 1389,-32768, 32, 2314, 5951, - 2075, 500, 207, 1390, 207, 1391, 207, 1392, 67, 67, --32768, 1393, 984, 984, 1311, 984, 325, 5974, 67, 11, - 1398, 67, 984, 1396, 1400, 1399, 1234, 1402, 416, 1403, - 1414, 67, 1413, 1420, 1419, 1421, 1423, 416, 67, 67, - 67, 984, 1424, 1428, 416, 67, 1429, 1430, 1431, 67, - 389,-32768,-32768, 67, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 67, 67, 1432, 1435, 1436, 1169,-32768, - 1427, 1437,-32768, 1252, 1261, 67,-32768, 69,-32768,-32768, --32768, 1264, 67,-32768,-32768,-32768, 1482, 1536,-32768,-32768, --32768,-32768,-32768,-32768,-32768, 1599, 1439, 1266,-32768, 67, --32768, 1272, 245,-32768, 247,-32768, 250,-32768, 1274, 3176, - 3197, -47, 243,-32768, 343, 1275, 1362, 67,-32768,-32768, - 3218, 11, 1268, 3239, 1277,-32768, 1278,-32768, 1280,-32768, - 1269,-32768, 1281, 5997,-32768, 1284,-32768,-32768, 1295, 1297, - 6020, 3260, 6043, 1289,-32768, 1299, 1302, 3281, 1294, 1303, --32768, 3302, 1300, 3323, 3344, 3365, 3386, 3407, 3428, 3449, - 3470, 3491, 3512, 3533, 3554, 1305,-32768,-32768,-32768, 14, --32768, 1360, 1485, 3575,-32768,-32768, 3596,-32768,-32768,-32768, --32768, 500, 2118,-32768, 67, 67, 67, 35, 67, 67, - 1404,-32768, 984,-32768, 984, 67, 2337, 984, 1343, 1488, - -47, 416, 1496, 67, 1494, 416, 1495, 1499, 1497, 1498, - 1500, 67, 1502, 984, 1506, 1508, 67, 1510, 1509, 67, - 1486, 67, 67, 67, 67, 67, 67, 67, 67, 67, - 67, 67, 67,-32768, 1534,-32768,-32768, 67, 1538, 1355, - 67,-32768, 2360, 2383, 2406, 1539, 1359, -32,-32768, 2429, - 2452, 1361,-32768, 1364, 1653,-32768, 1366, 11,-32768, 1365, - 1370, 1371, 3617,-32768, 1367,-32768, 1376,-32768,-32768,-32768, - 6066,-32768, 1377,-32768,-32768, 6089, 1378,-32768, 6112, 1382, - 3638, 3659, 3680, 3701, 3722, 3743, 3764, 3785, 3806, 6135, - 6158, 6181,-32768, 2147, 1383,-32768, 2475, 1544, 1551, 1553, --32768, 984, 1554,-32768, 1556, 1574, 984, 984,-32768, 1605, - 11, 416, 416, 416, 416, 1607, 1608, 1633, 416, 1639, - 1650, 1651, 1573, 67, 67, 67, 67, 67, 67, 67, - 67, 67,-32768,-32768,-32768, 67,-32768, 1656,-32768,-32768, --32768,-32768, 1473, 1478,-32768,-32768,-32768, 1479, 1426,-32768, - 11, 1480, 1481, 1487, 1489,-32768,-32768,-32768, 1484,-32768, --32768,-32768, 1490, 3827, 3848, 3869, 3890, 3911, 3932, 3953, - 3974, 3995, 1492, 1493, 1503, 2498, 1501, 35, 984, 984, - 1581, 1523, 416, 416, 1665, 1666, 416, 1668, 67, 67, - 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, --32768, 1675, -31, 1505, 1504, 1514, 11, 1526, 1527,-32768, --32768, 1511, 1513, 4016, 4037, 4058, 4079, 4100, 4121, 4142, - 4163, 4184, 344, 6411, 387, 6411, 392, 6411, 1529, 1673, - 984, 1598, 67, 11, 416, 984, 1678, 1681, 67, 67, - 67, 67, 67, 67, 67, 67, 67, 67, 1706, 67, - 1710, 67, 1711, 1712,-32768, 1533, 1537, 4205, 11, 1541, - 1546,-32768,-32768, 4226, 4247, 4268, 4289, 4310, 4331, 6204, - 6227, 6250, 6411,-32768, 6411,-32768, 6411,-32768,-32768, 1715, - 67, 67, 1571, 416, 984, 67, 67, 67, 67, 67, - 67,-32768,-32768,-32768,-32768, 4352, 2521, 1578, 1548, 1549, - 4373, 4394, 4415, 4436, 4457, 4478, 1550, 1552, 1557, 67, - 1728,-32768, 984, 416, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 2544,-32768, 1559, 1558, 4499, 4520, 4541, - 4562, 4583, 4604, 395, 6411, 396, 6411, 401, 6411, 1730, - 984, 1738, 67, 67, 67, 67, 67, 67, 67, 1739, - 67, 1743, 67, 1744,-32768, 1568,-32768, 4625, 4646, 4667, - 6273, 6296, 6319, 6411,-32768, 6411,-32768, 6411,-32768, 984, - 67, 67, 67,-32768,-32768,-32768, 1570, 4688, 4709, 4730, - 1577, 1587, 1588, 984, 67, 67, 67, 67, 67, 67, - 1592, 4751, 4772, 4793, 420, 6411, 421, 6411, 424, 6411, - 416, 67, 67, 67, 67, 1772, 67, 1773, 67, 1777, - 1604, 6342, 6365, 6388, 6411,-32768, 6411,-32768, 6411,-32768, - 1780,-32768,-32768,-32768,-32768, 1631, 1641, 1642, 67, 67, - 67, 427, 6411, 430, 6411, 431, 6411, 67, 1822, 67, - 1823, 67, 1824, 6411,-32768, 6411,-32768, 6411,-32768, 1837, - 1847,-32768 -}; - -static const short yypgoto[] = {-32768, - -73,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768, 1306,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, -260, -22, --32768, 1841, 1843, -323, 252, 1844,-32768,-32768,-32768,-32768, --32768,-32768, 590, -1114,-32768,-32768, -903, -23,-32768, -29, --32768, -84,-32768, -976, 951, 807, -263, -276, -728, 1000, --32768, -249 -}; - - -#define YYLAST 6589 - - -static const short yytable[] = { 134, - 133, 419, 229, 855, 484, 196, 423, 412, 413, 414, - 234, 188, 606, 77, 171, 1021, 178, 734, 143, 146, - 186, 422, 862, 1194, 1030, 1081, 459, 92, 590, 10, - 591, 1037, 1136, 1136, 89, 90, 411, 1137, 1137, 419, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 863, 117, 118, 119, 443, 89, - 90, 341, 444, 267, 1065, 93, 94, 95, 96, 97, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 1136, - 260, 261, 262, 139, 1137, 263, 266, 864, 270, 140, - 325, 326, 179, 8, 1150, 290, 291, 292, 293, 92, - 295, 296, 349, 298, 299, 300, 893, 307, 894, 183, - 967, 903, 184, 144, 320, 321, 322, 904, 9, 145, - 147, 81, 329, 323, 324, 11, 12, 13, 14, 15, - 16, 17, 18, 1193, 1320, 491, 492, 187, 268, 269, - 600, 340, 725, 343, 342, 345, 346, 611, 120, 121, - 122, 123, 602, 849, 120, 121, 122, 123, 1194, 78, - 419, 626, 80, 536, 325, 326, 189, 537, 1151, 127, - 128, 235, 1155, 607, 419, 127, 128, 180, 735, 124, - 125, 82, 592, 599, 387, 126, 593, 385, 155, 156, - 129, 157, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 83, 124, 125, 325, 326, 84, 173, - 126, 418, 174, 175, 424, 129, 411, 726, 727, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 325, 326, 120, 121, 122, 123, - 449, 325, 326, 452, 85, 117, 118, 119, 261, 418, - 86, 327, 410, 411, 463, 464, 465, 475, 467, 468, - 469, 470, 471, 472, 473, 478, 479, 87, 1242, 1243, - 1244, 1245, 325, 326, 88, 1249, 486, 487, 488, 325, - 326, 493, 117, 118, 119, 597, 719, 598, 499, 328, - 120, 121, 122, 123, 504, 895, 740, 896, 150, 419, - 597, 1125, 1008, 723, 127, 128, 325, 326, 127, 128, - 137, 127, 128, 138, 720, 846, 697, 749, 914, 597, - 26, 27, 28, 29, 30, 31, 32, 33, 141, 34, - 419, 36, 37, 542, 39, 40, 325, 326, 142, 1298, - 1299, 325, 326, 1302, 165, 166, 325, 326, 325, 326, - 152, 52, 897, 159, 898, 167, 160, 161, 543, 162, - 148, 168, 485, 261, 769, 53, 54, 149, 601, 603, - 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, - 554, 555, 325, 326, 325, 326, 151, 325, 326, 153, - 418, 1350, 1082, 325, 326, 154, 1083, 333, 1075, 158, - 1076, 337, 385, 1077, 418, 923, 628, 629, 127, 128, - 163, 597, 634, 627, 231, 643, 232, 282, 283, 284, - 285, 286, 644, 645, 878, 879, 63, 287, 164, 127, - 128, 648, 172, 848, 850, 456, 176, 232, 652, 177, - 1389, 284, 285, 286, 872, 887, 888, 660, 661, 287, - 181, 182, 273, 274, 275, 276, 277, 419, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 597, 489, 752, - 1417, 191, 287, 127, 128, 859, 597, 860, 871, 625, - 1009, 232, 185, 190, 597, 556, 972, 192, 698, 812, - 813, 814, 815, 816, 89, 90, 1083, 1338, 1084, 1339, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 193, 195, 713, 42, 43, 44, - 45, 194, 47, 714, 715, 716, 717, 227, 992, 418, - 1340, 230, 1341, 722, 271, 1342, 728, 1343, 1439, 1441, - 1440, 1442, 741, 236, 1443, 739, 1444, 1501, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 237, 288, 958, - 418, 385, 287, 1495, 1497, 1496, 1498, 1499, 289, 1500, - 1528, 825, 1529, 1530, 1532, 1531, 1533, 238, 239, 773, - 774, 775, 240, 241, 242, 243, 244, 245, 246, 247, - 778, 779, 248, 781, 249, 250, 251, 792, 987, 252, - 253, 790, 791, 89, 90, 254, 801, 255, 308, 93, - 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 256, 312, 257, 828, 829, 830, 831, - 832, 833, 834, 835, 836, 837, 838, 839, 785, 124, - 125, 258, 313, 259, 294, 126, 297, 309, 319, 310, - 129, 314, 851, 264, 315, 316, 265, 317, 318, 856, - 336, 858, 330, 335, 910, 544, 545, 546, 547, 548, - 549, 550, 551, 552, 553, 554, 555, 418, 331, 873, - 332, 874, 275, 276, 277, 344, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 889, 890, 891, 1130, 347, - 287, 380, 348, 350, 351, 352, 353, 354, 355, 356, - 907, 908, 357, 358, 359, 360, 361, 362, 89, 90, - 363, 386, 364, 365, 93, 94, 95, 96, 97, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 366, 367, - 368, 369, 370, 942, 371, 372, 373, 374, 124, 125, - 375, 376, 377, 378, 126, 379, 272, 498, 383, 129, - 287, 382, 623, 384, 416, 624, 959, 426, 425, 461, - 827, 466, 474, 495, 968, 496, 1012, 505, 273, 274, - 275, 276, 277, 501, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 506, 977, 978, 1043, 507, 287, 508, - 786, 509, 510, 993, 986, 995, 759, 997, 511, 512, - 513, 514, 515, 516, 517, 1000, 1001, 518, 519, 520, - 521, 522, 523, 524, 525, 1011, 276, 277, 1014, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 1024, 526, - 527, 528, 530, 287, 531, 1031, 1032, 1033, 529, 532, - 533, 534, 1038, 539, 760, 535, 1042, 538, 540, 594, - 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, - 1054, 1055, 595, 124, 125, 604, 605, 610, 1089, 126, - 612, 613, 1064, 614, 129, 615, 617, 750, 618, 1067, - 751, 620, 642, 621, 622, 630, 305, 427, 646, 647, - 654, 311, 655, 656, 657, 659, 1073, 663, 273, 274, - 275, 276, 277, 664, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 334, 1087, 460, 89, 301, 287, 338, - 339, 665, 93, 94, 95, 96, 97, 98, 99, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 666, 731, 273, 274, - 275, 276, 277, 667, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 668, 669, 670, 694, 671, 287, 672, - 712, 718, 673, 674, 721, 675, 676, 729, 730, 738, - 695, 1133, 1134, 1135, 754, 1140, 1141, 732, 744, 746, - 756, 757, 1145, 758, 677, 678, 679, 680, 681, 682, - 1153, 683, 684, 685, 1201, 776, 686, 687, 1161, 761, - 762, 700, 688, 1166, 689, 690, 1169, 691, 1171, 1172, - 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, - 692, 693, 696, 701, 1184, 702, 703, 1187, 755, 273, - 274, 275, 276, 277, 763, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 854, 724, 764, 1241, 704, 287, - 765, 705, 706, 707, 708, 273, 274, 275, 276, 277, - 709, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 710, 124, 302, 711, 733, 287, 766, 126, 767, 768, - 777, 788, 129, 782, 787, 789, 793, 1272, 303, 273, - 274, 275, 276, 277, 1059, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 794, 795, 796, 797, 800, 287, - 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 802, - 803, 806, 1266, 807, 808, 809, 273, 274, 275, 276, - 277, 810, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 819, 596, 1324, 820, 821, 287, 273, 274, 275, - 276, 277, 822, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 823, 824, 826, 845, 847, 287, 853, 861, - 1349, 852, 865, 857, 867, 1304, 1305, 1306, 1307, 1308, - 1309, 1310, 1311, 1312, 1314, 1316, 1318, 869, 870, 892, - 901, 909, 911, 915, 906, 1373, 273, 274, 275, 276, - 277, 916, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 918, 917, 919, 920, 925, 287, 921, 943, 1348, - 922, 924, 926, 960, 927, 1354, 1355, 1356, 1357, 1358, - 1359, 1360, 1361, 1362, 1363, 928, 1365, 929, 1367, 930, - 931, 932, 933, 934, 935, 936, 273, 274, 275, 276, - 277, 937, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 939, 938, 940, 941, 961, 287, 1386, 1387, 956, - 963, 969, 1391, 1392, 1393, 1394, 1395, 1396, 965, 970, - 26, 27, 28, 29, 30, 31, 32, 33, 974, 34, - 971, 36, 37, 975, 39, 40, 1414, 976, 979, 980, - 981, 1418, 1419, 1420, 1421, 1422, 1423, 1425, 1427, 1429, - 982, 52, 983, 984, 985, 994, 996, 998, 1006, 1002, - 1013, 1016, 1017, 1019, 1018, 53, 54, 1020, 1022, 1448, - 1449, 1450, 1451, 1452, 1453, 1454, 1023, 1456, 1025, 1458, - 742, 743, 1026, 745, 1027, 1029, 1028, 747, 748, 1035, - 1036, 1039, 1040, 1060, 1062, 1056, 1041, 1468, 1469, 1470, - 1057, 1058, 1061, 1063, 1071, 1066, 1086, 1090, 1095, 1126, - 1072, 1482, 1483, 1484, 1486, 1488, 1490, 1074, 1078, 1085, - 1092, 1093, 780, 1094, 1096, 783, 63, 1098, 1502, 1503, - 1504, 1505, 1104, 1507, 1099, 1509, 1100, 1108, 1105, 798, - 799, 1106, 1109, 1111, 1124, 804, 805, 1068, 1127, 1148, - 1170, 1142, 811, 1149, 818, 1523, 1525, 1527, 1152, 1154, - 1156, 1157, 1158, 1159, 1534, 1160, 1536, 1162, 1538, 89, - 457, 1164, 1167, 1165, 1168, 93, 94, 95, 96, 97, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 1183, - 1186, 1069, 1185, 1192, 1191, 1197, 1206, 1198, 1202, 1230, - 866, 1200, 868, 1203, 1204, 1207, 1231, 1211, 1232, 1235, - 1209, 1236, 875, 876, 877, 1213, 1228, 880, 881, 882, - 883, 884, 885, 886, 89, 90, 91, 1253, 92, 1237, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 1070, 117, 118, 119, 89, 301, - 1240, 1271, 1246, 1247, 93, 94, 95, 96, 97, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 1248, 273, - 274, 275, 276, 277, 1250, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 957, 1251, 1252, 1268, 1199, 287, - 1267, 1269, 1270, 1273, 1274, 1296, 1275, 1277, 1276, 1297, - 1300, 1301, 1303, 1278, 124, 125, 1288, 1289, 1345, 1319, - 126, 502, 1347, 1352, 1292, 129, 1353, 1290, 1321, 1322, - 1327, 458, 1328, 273, 274, 275, 276, 277, 1323, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 609, 1325, - 1326, 1364, 1007, 287, 1344, 1366, 1368, 1369, 1370, 1015, - 1385, 1371, 1388, 753, 1374, 120, 121, 122, 123, 1375, - 1402, 1403, 1404, 1415, 1411, 1445, 1412, 1432, 1034, 124, - 125, 1413, 1431, 1447, 1455, 126, 127, 128, 1457, 1459, - 129, 1460, 130, 1474, 131, 784, 273, 274, 275, 276, - 277, 1478, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 1479, 1480, 124, 417, 1491, 287, 1506, 1508, 126, - 89, 457, 1510, 1511, 129, 1515, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 273, 274, 275, 276, 277, 1519, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 1520, 1521, 1535, 1537, 1539, - 287, 273, 274, 275, 276, 277, 1541, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 1542, 68, 699, 69, - 70, 287, 962, 0, 1005, 0, 0, 1293, 273, 274, - 275, 276, 277, 0, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 273, 274, 275, 276, 277, 287, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 1143, - 0, 1144, 0, 287, 1147, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 273, 274, 275, 276, 277, - 1163, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, -10, 1, 0, -10, - -53, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 124, 125, 0, 0, 0, - 0, 126, 0, 0, 0, 0, 129, 0, 0, -53, - 0, 0, 0, -53, -53, -53, -53, -53, -53, -53, - -53, -53, 0, -53, -53, -53, -53, -53, -53, -53, - 0, 0, 0, -53, -53, -53, -53, -53, -53, -53, - 0, -53, -53, -53, -53, -53, 0, 0, 1234, 0, - 0, 0, 0, 1238, 1239, 0, 0, 0, 0, -53, - -53, 0, 0, 0, 0, 0, 0, -53, 197, -53, - -53, -53, -53, -53, -53, -53, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -10, -10, -10, -10, -10, - -10, -10, -10, 26, 27, 28, 29, 30, 31, 32, - 33, 0, 34, 0, 36, 37, 0, 39, 40, 0, - -53, 2, 3, 0, 4, 1294, 1295, 0, 198, 199, - 200, 0, 0, 0, 52, 0, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 0, 0, 53, 54, - 0, 0, 0, 0, 211, 212, 213, 214, 215, 216, - 217, 218, 219, 220, 0, 221, 222, 223, 224, 225, - 226, 0, 0, 0, 0, 0, 0, 1346, 0, 0, - 0, 23, 1351, 273, 274, 275, 276, 277, 0, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 0, 0, 0, 0, 0, 63, - 24, 446, 0, 0, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 0, 34, 35, 36, 37, 38, 39, - 40, 1390, 0, 0, 41, 42, 43, 44, 45, 46, - 47, 0, 48, 49, 50, 51, 52, 0, 0, 0, - 0, 494, 0, 0, 0, 0, 0, 0, 0, 1416, - 53, 54, 0, 0, 0, 0, 0, 0, 55, 0, - 56, 57, 58, 59, 60, 61, 62, 0, 0, 0, - 0, 0, 273, 274, 275, 276, 277, 1446, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 0, 0, 0, 0, 0, 990, 0, - 991, 0, 0, 0, 0, 0, 1467, 0, 0, 0, - 0, 63, 0, 0, 0, 273, 274, 275, 276, 277, - 1481, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, - 0, 1131, 0, 1132, 273, 274, 275, 276, 277, 0, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, - 1226, 0, 1227, 273, 274, 275, 276, 277, 0, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 0, 0, 273, 274, 275, 276, - 277, 451, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 0, 0, 273, - 274, 275, 276, 277, 453, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 0, 0, 273, 274, 275, 276, 277, 631, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 0, 0, 273, 274, 275, 276, 277, - 635, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 0, 0, 273, 274, - 275, 276, 277, 636, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 0, - 0, 273, 274, 275, 276, 277, 772, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 0, 0, 273, 274, 275, 276, 277, 988, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 0, 0, 273, 274, 275, - 276, 277, 1146, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 287, 0, 0, - 273, 274, 275, 276, 277, 1188, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 0, 0, 0, - 287, 0, 0, 273, 274, 275, 276, 277, 1189, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 0, 0, 273, 274, 275, 276, - 277, 1190, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 0, 0, 273, - 274, 275, 276, 277, 1195, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 0, 0, 273, 274, 275, 276, 277, 1196, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 0, 0, 273, 274, 275, 276, 277, - 1229, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 0, 0, 273, 274, - 275, 276, 277, 1291, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 0, - 0, 273, 274, 275, 276, 277, 1401, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 0, 0, 273, 274, 275, 276, 277, 1430, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 273, 274, 275, 276, 277, - 476, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 273, 274, 275, 276, - 277, 477, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 273, 274, 275, - 276, 277, 580, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 287, 273, 274, - 275, 276, 277, 587, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 273, - 274, 275, 276, 277, 588, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 273, 274, 275, 276, 277, 589, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 0, 0, 0, - 287, 273, 274, 275, 276, 277, 649, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 273, 274, 275, 276, 277, 650, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 273, 274, 275, 276, 277, 651, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 273, 274, 275, 276, 277, 770, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 273, 274, 275, 276, 277, - 771, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 273, 274, 275, 276, - 277, 899, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 273, 274, 275, - 276, 277, 900, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 287, 273, 274, - 275, 276, 277, 912, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 273, - 274, 275, 276, 277, 913, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 273, 274, 275, 276, 277, 944, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 0, 0, 0, - 287, 273, 274, 275, 276, 277, 945, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 273, 274, 275, 276, 277, 946, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 273, 274, 275, 276, 277, 947, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 273, 274, 275, 276, 277, 948, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 273, 274, 275, 276, 277, - 949, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 273, 274, 275, 276, - 277, 950, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 273, 274, 275, - 276, 277, 951, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 287, 273, 274, - 275, 276, 277, 952, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 273, - 274, 275, 276, 277, 953, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 273, 274, 275, 276, 277, 954, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 0, 0, 0, - 287, 273, 274, 275, 276, 277, 955, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 273, 274, 275, 276, 277, 966, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 273, 274, 275, 276, 277, 973, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 273, 274, 275, 276, 277, 1079, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 273, 274, 275, 276, 277, - 1080, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 273, 274, 275, 276, - 277, 1088, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 273, 274, 275, - 276, 277, 1091, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 287, 273, 274, - 275, 276, 277, 1102, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 273, - 274, 275, 276, 277, 1107, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 273, 274, 275, 276, 277, 1110, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 0, 0, 0, - 287, 273, 274, 275, 276, 277, 1112, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 273, 274, 275, 276, 277, 1113, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 273, 274, 275, 276, 277, 1114, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 273, 274, 275, 276, 277, 1115, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 273, 274, 275, 276, 277, - 1116, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 273, 274, 275, 276, - 277, 1117, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 273, 274, 275, - 276, 277, 1118, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 287, 273, 274, - 275, 276, 277, 1119, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 273, - 274, 275, 276, 277, 1120, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 273, 274, 275, 276, 277, 1121, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 0, 0, 0, - 287, 273, 274, 275, 276, 277, 1122, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 273, 274, 275, 276, 277, 1123, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 273, 274, 275, 276, 277, 1128, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 273, 274, 275, 276, 277, 1129, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 273, 274, 275, 276, 277, - 1205, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 273, 274, 275, 276, - 277, 1214, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 273, 274, 275, - 276, 277, 1215, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 287, 273, 274, - 275, 276, 277, 1216, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 273, - 274, 275, 276, 277, 1217, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 273, 274, 275, 276, 277, 1218, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 0, 0, 0, - 287, 273, 274, 275, 276, 277, 1219, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 273, 274, 275, 276, 277, 1220, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 273, 274, 275, 276, 277, 1221, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 273, 274, 275, 276, 277, 1222, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 273, 274, 275, 276, 277, - 1279, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 273, 274, 275, 276, - 277, 1280, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 273, 274, 275, - 276, 277, 1281, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 287, 273, 274, - 275, 276, 277, 1282, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 273, - 274, 275, 276, 277, 1283, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 273, 274, 275, 276, 277, 1284, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 0, 0, 0, - 287, 273, 274, 275, 276, 277, 1285, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 273, 274, 275, 276, 277, 1286, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 273, 274, 275, 276, 277, 1287, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 273, 274, 275, 276, 277, 1329, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 273, 274, 275, 276, 277, - 1330, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 273, 274, 275, 276, - 277, 1331, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 273, 274, 275, - 276, 277, 1332, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 287, 273, 274, - 275, 276, 277, 1333, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 273, - 274, 275, 276, 277, 1334, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 273, 274, 275, 276, 277, 1335, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 0, 0, 0, - 287, 273, 274, 275, 276, 277, 1336, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 273, 274, 275, 276, 277, 1337, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 273, 274, 275, 276, 277, 1372, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 273, 274, 275, 276, 277, 1376, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 273, 274, 275, 276, 277, - 1377, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 273, 274, 275, 276, - 277, 1378, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 273, 274, 275, - 276, 277, 1379, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 287, 273, 274, - 275, 276, 277, 1380, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 273, - 274, 275, 276, 277, 1381, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 273, 274, 275, 276, 277, 1400, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 0, 0, 0, - 287, 273, 274, 275, 276, 277, 1405, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 273, 274, 275, 276, 277, 1406, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 273, 274, 275, 276, 277, 1407, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 273, 274, 275, 276, 277, 1408, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 273, 274, 275, 276, 277, - 1409, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 273, 274, 275, 276, - 277, 1410, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 273, 274, 275, - 276, 277, 1433, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 287, 273, 274, - 275, 276, 277, 1434, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 273, - 274, 275, 276, 277, 1435, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 273, 274, 275, 276, 277, 1436, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 0, 0, 0, - 287, 273, 274, 275, 276, 277, 1437, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 273, 274, 275, 276, 277, 1438, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 273, 274, 275, 276, 277, 1461, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 273, 274, 275, 276, 277, 1462, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 273, 274, 275, 276, 277, - 1463, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 273, 274, 275, 276, - 277, 1475, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 273, 274, 275, - 276, 277, 1476, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 287, 273, 274, - 275, 276, 277, 1477, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 273, - 274, 275, 276, 277, 1492, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 273, 274, 275, 276, 277, 1493, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 0, 0, 0, - 287, 273, 274, 275, 276, 277, 1494, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 0, 0, 0, 421, 273, 274, 275, 276, - 277, 0, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 0, 0, 0, - 541, 273, 274, 275, 276, 277, 0, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 0, 0, 0, 653, 273, 274, 275, 276, - 277, 0, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 0, 0, 0, - 844, 273, 274, 275, 276, 277, 0, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 0, 0, 0, 964, 273, 274, 275, 276, - 277, 0, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 0, 415, 273, - 274, 275, 276, 277, 0, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 0, 445, 273, 274, 275, 276, 277, 0, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 0, 447, 273, 274, 275, 276, 277, - 0, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 0, 448, 273, 274, - 275, 276, 277, 0, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 0, - 450, 273, 274, 275, 276, 277, 0, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 0, 454, 273, 274, 275, 276, 277, 0, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 0, 455, 273, 274, 275, - 276, 277, 0, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 287, 0, 462, - 273, 274, 275, 276, 277, 0, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 0, 0, 0, - 287, 0, 497, 273, 274, 275, 276, 277, 0, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 0, 500, 273, 274, 275, 276, - 277, 0, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 0, 503, 273, - 274, 275, 276, 277, 0, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 0, 569, 273, 274, 275, 276, 277, 0, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 0, 570, 273, 274, 275, 276, 277, - 0, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 0, 571, 273, 274, - 275, 276, 277, 0, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 0, - 572, 273, 274, 275, 276, 277, 0, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 0, 573, 273, 274, 275, 276, 277, 0, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 0, 574, 273, 274, 275, - 276, 277, 0, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 287, 0, 575, - 273, 274, 275, 276, 277, 0, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 0, 0, 0, - 287, 0, 576, 273, 274, 275, 276, 277, 0, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 0, 577, 273, 274, 275, 276, - 277, 0, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 0, 578, 273, - 274, 275, 276, 277, 0, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 0, 579, 273, 274, 275, 276, 277, 0, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 0, 581, 273, 274, 275, 276, 277, - 0, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 0, 582, 273, 274, - 275, 276, 277, 0, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 0, - 583, 273, 274, 275, 276, 277, 0, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 0, 584, 273, 274, 275, 276, 277, 0, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 0, 585, 273, 274, 275, - 276, 277, 0, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 287, 0, 586, - 273, 274, 275, 276, 277, 0, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 0, 0, 0, - 287, 0, 616, 273, 274, 275, 276, 277, 0, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 0, 619, 273, 274, 275, 276, - 277, 0, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 0, 632, 273, - 274, 275, 276, 277, 0, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 0, 633, 273, 274, 275, 276, 277, 0, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 0, 637, 273, 274, 275, 276, 277, - 0, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 0, 638, 273, 274, - 275, 276, 277, 0, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 0, - 639, 273, 274, 275, 276, 277, 0, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 0, 640, 273, 274, 275, 276, 277, 0, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 0, 641, 273, 274, 275, - 276, 277, 0, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 287, 0, 658, - 273, 274, 275, 276, 277, 0, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 0, 0, 0, - 287, 0, 662, 273, 274, 275, 276, 277, 0, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 0, 840, 273, 274, 275, 276, - 277, 0, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 0, 841, 273, - 274, 275, 276, 277, 0, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 0, 842, 273, 274, 275, 276, 277, 0, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 0, 843, 273, 274, 275, 276, 277, - 0, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 0, 902, 273, 274, - 275, 276, 277, 0, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 0, - 989, 273, 274, 275, 276, 277, 0, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 0, 1010, 273, 274, 275, 276, 277, 0, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 0, 1097, 273, 274, 275, - 276, 277, 0, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 287, 0, 1101, - 273, 274, 275, 276, 277, 0, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 0, 0, 0, - 287, 0, 1103, 273, 274, 275, 276, 277, 0, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 0, 1208, 273, 274, 275, 276, - 277, 0, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 0, 1210, 273, - 274, 275, 276, 277, 0, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 0, 1212, 273, 274, 275, 276, 277, 0, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 0, 1223, 273, 274, 275, 276, 277, - 0, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 0, 1224, 273, 274, - 275, 276, 277, 0, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287, 0, - 1225, 273, 274, 275, 276, 277, 0, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 0, 0, 0, 0, - 0, 287, 0, 1382, 273, 274, 275, 276, 277, 0, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 0, - 0, 0, 0, 0, 287, 0, 1383, 273, 274, 275, - 276, 277, 0, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 287, 0, 1384, - 273, 274, 275, 276, 277, 0, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 0, 0, 0, 0, 0, - 287, 0, 1464, 273, 274, 275, 276, 277, 0, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 0, 0, - 0, 0, 0, 287, 0, 1465, 273, 274, 275, 276, - 277, 0, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 0, 0, 0, 0, 0, 287, 0, 1466, 273, - 274, 275, 276, 277, 0, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 0, 0, 0, 0, 0, 287, - 0, 1512, 273, 274, 275, 276, 277, 0, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 0, 0, 0, - 0, 0, 287, 0, 1513, 273, 274, 275, 276, 277, - 0, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 0, 0, 0, 0, 0, 287, 0, 1514, 273, 274, - 275, 276, 277, 0, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 0, 0, 0, 0, 0, 287 -}; - -static const short yycheck[] = { 23, - 23, 265, 87, 732, 328, 79, 267, 257, 258, 259, - 4, 4, 4, 3, 44, 919, 4, 4, 64, 64, - 42, 7, 6, 1138, 928, 1002, 303, 7, 181, 3, - 183, 935, 65, 65, 3, 4, 5, 70, 70, 303, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 6, 34, 35, 36, 180, 3, - 4, 86, 184, 4, 6, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 65, - 124, 125, 126, 179, 70, 129, 130, 49, 132, 185, - 168, 169, 100, 6, 1091, 139, 140, 141, 142, 7, - 144, 145, 196, 147, 148, 149, 184, 151, 186, 38, - 859, 179, 41, 179, 164, 165, 166, 185, 149, 185, - 185, 6, 172, 167, 168, 119, 120, 121, 122, 123, - 124, 125, 126, 186, 186, 6, 7, 179, 89, 90, - 421, 185, 4, 187, 179, 189, 190, 444, 154, 155, - 156, 157, 422, 7, 154, 155, 156, 157, 1293, 169, - 444, 458, 7, 180, 168, 169, 179, 184, 1092, 175, - 176, 185, 1096, 185, 458, 175, 176, 185, 185, 168, - 169, 6, 180, 183, 234, 174, 184, 231, 41, 42, - 179, 44, 236, 237, 238, 239, 240, 241, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 6, 168, 169, 168, 169, 6, 38, - 174, 265, 41, 42, 267, 179, 5, 89, 90, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 168, 169, 154, 155, 156, 157, - 294, 168, 169, 297, 6, 34, 35, 36, 302, 303, - 179, 185, 4, 5, 308, 309, 310, 184, 312, 313, - 314, 315, 316, 317, 318, 325, 326, 179, 1202, 1203, - 1204, 1205, 168, 169, 179, 1209, 330, 331, 332, 168, - 169, 335, 34, 35, 36, 184, 593, 186, 342, 185, - 154, 155, 156, 157, 348, 184, 180, 186, 46, 593, - 184, 1060, 8, 597, 175, 176, 168, 169, 175, 176, - 179, 175, 176, 6, 594, 180, 183, 624, 180, 184, - 38, 39, 40, 41, 42, 43, 44, 45, 179, 47, - 624, 49, 50, 386, 52, 53, 168, 169, 179, 1273, - 1274, 168, 169, 1277, 168, 169, 168, 169, 168, 169, - 42, 69, 184, 38, 186, 179, 41, 42, 185, 44, - 179, 185, 184, 417, 184, 83, 84, 179, 421, 423, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 168, 169, 168, 169, 179, 168, 169, 42, - 444, 1325, 180, 168, 169, 42, 184, 176, 184, 44, - 184, 180, 456, 184, 458, 180, 460, 461, 175, 176, - 179, 184, 466, 186, 181, 475, 183, 168, 169, 170, - 171, 172, 476, 477, 55, 56, 144, 178, 185, 175, - 176, 485, 185, 724, 725, 181, 185, 183, 492, 42, - 1374, 170, 171, 172, 751, 6, 7, 501, 502, 178, - 6, 6, 158, 159, 160, 161, 162, 751, 164, 165, - 166, 167, 168, 169, 170, 171, 172, 184, 186, 186, - 1404, 6, 178, 175, 176, 184, 184, 186, 186, 181, - 186, 183, 179, 179, 184, 186, 186, 4, 541, 104, - 105, 106, 107, 108, 3, 4, 184, 184, 186, 186, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 4, 3, 580, 58, 59, 60, - 61, 42, 63, 587, 588, 589, 590, 179, 892, 593, - 184, 5, 186, 597, 6, 184, 600, 186, 184, 184, - 186, 186, 612, 179, 184, 609, 186, 1491, 164, 165, - 166, 167, 168, 169, 170, 171, 172, 179, 6, 849, - 624, 625, 178, 184, 184, 186, 186, 184, 5, 186, - 184, 696, 186, 184, 184, 186, 186, 179, 179, 649, - 650, 651, 179, 179, 179, 179, 179, 179, 179, 179, - 654, 655, 179, 657, 179, 179, 179, 667, 888, 179, - 179, 665, 666, 3, 4, 179, 676, 179, 185, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 179, 185, 179, 700, 701, 702, 703, - 704, 705, 706, 707, 708, 709, 710, 711, 8, 168, - 169, 179, 185, 179, 179, 174, 179, 179, 4, 179, - 179, 179, 725, 182, 179, 179, 185, 179, 179, 733, - 6, 735, 185, 181, 788, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 751, 185, 753, - 185, 755, 160, 161, 162, 92, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 769, 770, 771, 1072, 6, - 178, 5, 179, 179, 179, 179, 179, 179, 179, 179, - 784, 785, 179, 179, 179, 179, 179, 179, 3, 4, - 179, 4, 179, 179, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 179, 179, - 179, 179, 179, 826, 179, 179, 179, 179, 168, 169, - 179, 179, 179, 179, 174, 179, 6, 87, 180, 179, - 178, 184, 182, 184, 7, 185, 850, 7, 183, 7, - 186, 7, 180, 7, 864, 7, 910, 150, 158, 159, - 160, 161, 162, 185, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 5, 878, 879, 941, 5, 178, 5, - 180, 5, 5, 893, 888, 895, 6, 897, 5, 5, - 5, 5, 5, 5, 5, 899, 900, 5, 5, 5, - 5, 5, 5, 5, 5, 909, 161, 162, 912, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 922, 5, - 5, 5, 5, 178, 5, 929, 930, 931, 137, 5, - 5, 3, 936, 6, 54, 5, 940, 5, 5, 184, - 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, - 954, 955, 180, 168, 169, 6, 4, 6, 1012, 174, - 7, 6, 966, 7, 179, 7, 7, 182, 6, 973, - 185, 6, 183, 7, 7, 7, 150, 6, 186, 186, - 185, 155, 185, 7, 179, 7, 990, 151, 158, 159, - 160, 161, 162, 184, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 177, 1008, 8, 3, 4, 178, 183, - 184, 184, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 184, 6, 158, 159, - 160, 161, 162, 184, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 184, 184, 184, 5, 184, 178, 184, - 6, 4, 184, 184, 6, 184, 184, 6, 6, 6, - 180, 1075, 1076, 1077, 6, 1079, 1080, 7, 7, 7, - 7, 7, 1086, 7, 184, 184, 184, 184, 184, 184, - 1094, 184, 184, 184, 1148, 6, 184, 184, 1102, 7, - 7, 179, 184, 1107, 184, 184, 1110, 184, 1112, 1113, - 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, - 184, 184, 184, 179, 1128, 179, 179, 1131, 185, 158, - 159, 160, 161, 162, 7, 164, 165, 166, 167, 168, - 169, 170, 171, 172, 6, 182, 7, 1201, 179, 178, - 7, 179, 179, 179, 179, 158, 159, 160, 161, 162, - 179, 164, 165, 166, 167, 168, 169, 170, 171, 172, - 179, 168, 169, 179, 181, 178, 7, 174, 7, 4, - 6, 147, 179, 7, 7, 3, 3, 1241, 185, 158, - 159, 160, 161, 162, 6, 164, 165, 166, 167, 168, - 169, 170, 171, 172, 3, 170, 3, 3, 3, 178, - 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 3, - 3, 3, 1226, 3, 3, 3, 158, 159, 160, 161, - 162, 3, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 3, 416, 1297, 5, 5, 178, 158, 159, 160, - 161, 162, 3, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 3, 6, 4, 180, 180, 178, 7, 6, - 1324, 183, 6, 183, 6, 1279, 1280, 1281, 1282, 1283, - 1284, 1285, 1286, 1287, 1288, 1289, 1290, 6, 6, 185, - 6, 185, 184, 184, 88, 1349, 158, 159, 160, 161, - 162, 180, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 180, 184, 184, 180, 180, 178, 184, 6, 1323, - 184, 184, 180, 6, 184, 1329, 1330, 1331, 1332, 1333, - 1334, 1335, 1336, 1337, 1338, 184, 1340, 184, 1342, 184, - 184, 184, 180, 184, 184, 184, 158, 159, 160, 161, - 162, 184, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 180, 184, 184, 184, 4, 178, 1371, 1372, 183, - 6, 6, 1376, 1377, 1378, 1379, 1380, 1381, 89, 6, - 38, 39, 40, 41, 42, 43, 44, 45, 6, 47, - 182, 49, 50, 6, 52, 53, 1400, 6, 6, 6, - 6, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, - 6, 69, 6, 6, 6, 6, 6, 6, 88, 7, - 3, 6, 3, 170, 6, 83, 84, 6, 6, 1433, - 1434, 1435, 1436, 1437, 1438, 1439, 3, 1441, 6, 1443, - 614, 615, 3, 617, 6, 3, 6, 621, 622, 6, - 3, 3, 3, 7, 183, 4, 6, 1461, 1462, 1463, - 6, 6, 6, 183, 6, 182, 85, 180, 180, 90, - 185, 1475, 1476, 1477, 1478, 1479, 1480, 186, 185, 185, - 184, 184, 656, 184, 184, 659, 144, 184, 1492, 1493, - 1494, 1495, 184, 1497, 180, 1499, 180, 184, 180, 673, - 674, 180, 180, 184, 180, 679, 680, 6, 4, 147, - 5, 88, 686, 6, 688, 1519, 1520, 1521, 3, 6, - 6, 3, 6, 6, 1528, 6, 1530, 6, 1532, 3, - 4, 6, 3, 6, 6, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 6, - 186, 6, 5, 185, 6, 185, 180, 184, 184, 6, - 744, 186, 746, 184, 184, 180, 6, 180, 6, 6, - 184, 6, 756, 757, 758, 184, 184, 761, 762, 763, - 764, 765, 766, 767, 3, 4, 5, 5, 7, 6, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 6, 34, 35, 36, 3, 4, - 6, 186, 6, 6, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 6, 158, - 159, 160, 161, 162, 6, 164, 165, 166, 167, 168, - 169, 170, 171, 172, 848, 6, 6, 185, 6, 178, - 5, 184, 184, 184, 184, 85, 180, 184, 180, 147, - 6, 6, 5, 184, 168, 169, 185, 185, 6, 5, - 174, 8, 85, 6, 184, 179, 6, 185, 184, 186, - 180, 185, 180, 158, 159, 160, 161, 162, 185, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 8, 184, - 184, 6, 906, 178, 186, 6, 6, 6, 186, 913, - 6, 185, 152, 8, 184, 154, 155, 156, 157, 184, - 153, 184, 184, 6, 185, 6, 185, 180, 932, 168, - 169, 185, 184, 6, 6, 174, 175, 176, 6, 6, - 179, 184, 181, 184, 183, 8, 158, 159, 160, 161, - 162, 185, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 185, 185, 168, 169, 184, 178, 6, 6, 174, - 3, 4, 6, 180, 179, 6, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 158, 159, 160, 161, 162, 185, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 185, 185, 6, 6, 6, - 178, 158, 159, 160, 161, 162, 0, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 0, 7, 543, 7, - 7, 178, 853, -1, 904, -1, -1, 1268, 158, 159, - 160, 161, 162, -1, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 158, 159, 160, 161, 162, 178, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, 1083, - -1, 1085, -1, 178, 1088, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 158, 159, 160, 161, 162, - 1104, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, 0, 1, -1, 3, - 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 168, 169, -1, -1, -1, - -1, 174, -1, -1, -1, -1, 179, -1, -1, 33, - -1, -1, -1, 37, 38, 39, 40, 41, 42, 43, - 44, 45, -1, 47, 48, 49, 50, 51, 52, 53, - -1, -1, -1, 57, 58, 59, 60, 61, 62, 63, - -1, 65, 66, 67, 68, 69, -1, -1, 1192, -1, - -1, -1, -1, 1197, 1198, -1, -1, -1, -1, 83, - 84, -1, -1, -1, -1, -1, -1, 91, 41, 93, - 94, 95, 96, 97, 98, 99, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 119, 120, 121, 122, 123, - 124, 125, 126, 38, 39, 40, 41, 42, 43, 44, - 45, -1, 47, -1, 49, 50, -1, 52, 53, -1, - 144, 145, 146, -1, 148, 1269, 1270, -1, 101, 102, - 103, -1, -1, -1, 69, -1, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, -1, -1, 83, 84, - -1, -1, -1, -1, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, -1, 138, 139, 140, 141, 142, - 143, -1, -1, -1, -1, -1, -1, 1321, -1, -1, - -1, 4, 1326, 158, 159, 160, 161, 162, -1, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, -1, -1, -1, -1, -1, 144, - 33, 186, -1, -1, 37, 38, 39, 40, 41, 42, - 43, 44, 45, -1, 47, 48, 49, 50, 51, 52, - 53, 1375, -1, -1, 57, 58, 59, 60, 61, 62, - 63, -1, 65, 66, 67, 68, 69, -1, -1, -1, - -1, 186, -1, -1, -1, -1, -1, -1, -1, 1403, - 83, 84, -1, -1, -1, -1, -1, -1, 91, -1, - 93, 94, 95, 96, 97, 98, 99, -1, -1, -1, - -1, -1, 158, 159, 160, 161, 162, 1431, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, -1, -1, -1, -1, -1, 184, -1, - 186, -1, -1, -1, -1, -1, 1460, -1, -1, -1, - -1, 144, -1, -1, -1, 158, 159, 160, 161, 162, - 1474, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, -1, -1, -1, -1, - -1, 184, -1, 186, 158, 159, 160, 161, 162, -1, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, -1, -1, -1, -1, -1, - 184, -1, 186, 158, 159, 160, 161, 162, -1, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, -1, -1, 158, 159, 160, 161, - 162, 186, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, -1, -1, 158, - 159, 160, 161, 162, 186, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - -1, -1, 158, 159, 160, 161, 162, 186, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, -1, -1, 158, 159, 160, 161, 162, - 186, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, -1, -1, 158, 159, - 160, 161, 162, 186, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, -1, - -1, 158, 159, 160, 161, 162, 186, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, -1, -1, 158, 159, 160, 161, 162, 186, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, -1, -1, 158, 159, 160, - 161, 162, 186, 164, 165, 166, 167, 168, 169, 170, - 171, 172, -1, -1, -1, -1, -1, 178, -1, -1, - 158, 159, 160, 161, 162, 186, 164, 165, 166, 167, - 168, 169, 170, 171, 172, -1, -1, -1, -1, -1, - 178, -1, -1, 158, 159, 160, 161, 162, 186, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, -1, -1, 158, 159, 160, 161, - 162, 186, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, -1, -1, 158, - 159, 160, 161, 162, 186, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - -1, -1, 158, 159, 160, 161, 162, 186, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, -1, -1, 158, 159, 160, 161, 162, - 186, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, -1, -1, 158, 159, - 160, 161, 162, 186, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, -1, - -1, 158, 159, 160, 161, 162, 186, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, -1, -1, 158, 159, 160, 161, 162, 186, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, 158, 159, 160, 161, 162, - 184, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, 158, 159, 160, 161, - 162, 184, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, 158, 159, 160, - 161, 162, 184, 164, 165, 166, 167, 168, 169, 170, - 171, 172, -1, -1, -1, -1, -1, 178, 158, 159, - 160, 161, 162, 184, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, 158, - 159, 160, 161, 162, 184, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - 158, 159, 160, 161, 162, 184, 164, 165, 166, 167, - 168, 169, 170, 171, 172, -1, -1, -1, -1, -1, - 178, 158, 159, 160, 161, 162, 184, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, 158, 159, 160, 161, 162, 184, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, 158, 159, 160, 161, 162, 184, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, 158, 159, 160, 161, 162, 184, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, 158, 159, 160, 161, 162, - 184, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, 158, 159, 160, 161, - 162, 184, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, 158, 159, 160, - 161, 162, 184, 164, 165, 166, 167, 168, 169, 170, - 171, 172, -1, -1, -1, -1, -1, 178, 158, 159, - 160, 161, 162, 184, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, 158, - 159, 160, 161, 162, 184, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - 158, 159, 160, 161, 162, 184, 164, 165, 166, 167, - 168, 169, 170, 171, 172, -1, -1, -1, -1, -1, - 178, 158, 159, 160, 161, 162, 184, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, 158, 159, 160, 161, 162, 184, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, 158, 159, 160, 161, 162, 184, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, 158, 159, 160, 161, 162, 184, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, 158, 159, 160, 161, 162, - 184, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, 158, 159, 160, 161, - 162, 184, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, 158, 159, 160, - 161, 162, 184, 164, 165, 166, 167, 168, 169, 170, - 171, 172, -1, -1, -1, -1, -1, 178, 158, 159, - 160, 161, 162, 184, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, 158, - 159, 160, 161, 162, 184, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - 158, 159, 160, 161, 162, 184, 164, 165, 166, 167, - 168, 169, 170, 171, 172, -1, -1, -1, -1, -1, - 178, 158, 159, 160, 161, 162, 184, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, 158, 159, 160, 161, 162, 184, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, 158, 159, 160, 161, 162, 184, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, 158, 159, 160, 161, 162, 184, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, 158, 159, 160, 161, 162, - 184, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, 158, 159, 160, 161, - 162, 184, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, 158, 159, 160, - 161, 162, 184, 164, 165, 166, 167, 168, 169, 170, - 171, 172, -1, -1, -1, -1, -1, 178, 158, 159, - 160, 161, 162, 184, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, 158, - 159, 160, 161, 162, 184, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - 158, 159, 160, 161, 162, 184, 164, 165, 166, 167, - 168, 169, 170, 171, 172, -1, -1, -1, -1, -1, - 178, 158, 159, 160, 161, 162, 184, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, 158, 159, 160, 161, 162, 184, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, 158, 159, 160, 161, 162, 184, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, 158, 159, 160, 161, 162, 184, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, 158, 159, 160, 161, 162, - 184, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, 158, 159, 160, 161, - 162, 184, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, 158, 159, 160, - 161, 162, 184, 164, 165, 166, 167, 168, 169, 170, - 171, 172, -1, -1, -1, -1, -1, 178, 158, 159, - 160, 161, 162, 184, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, 158, - 159, 160, 161, 162, 184, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - 158, 159, 160, 161, 162, 184, 164, 165, 166, 167, - 168, 169, 170, 171, 172, -1, -1, -1, -1, -1, - 178, 158, 159, 160, 161, 162, 184, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, 158, 159, 160, 161, 162, 184, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, 158, 159, 160, 161, 162, 184, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, 158, 159, 160, 161, 162, 184, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, 158, 159, 160, 161, 162, - 184, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, 158, 159, 160, 161, - 162, 184, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, 158, 159, 160, - 161, 162, 184, 164, 165, 166, 167, 168, 169, 170, - 171, 172, -1, -1, -1, -1, -1, 178, 158, 159, - 160, 161, 162, 184, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, 158, - 159, 160, 161, 162, 184, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - 158, 159, 160, 161, 162, 184, 164, 165, 166, 167, - 168, 169, 170, 171, 172, -1, -1, -1, -1, -1, - 178, 158, 159, 160, 161, 162, 184, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, 158, 159, 160, 161, 162, 184, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, 158, 159, 160, 161, 162, 184, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, 158, 159, 160, 161, 162, 184, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, 158, 159, 160, 161, 162, - 184, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, 158, 159, 160, 161, - 162, 184, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, 158, 159, 160, - 161, 162, 184, 164, 165, 166, 167, 168, 169, 170, - 171, 172, -1, -1, -1, -1, -1, 178, 158, 159, - 160, 161, 162, 184, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, 158, - 159, 160, 161, 162, 184, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - 158, 159, 160, 161, 162, 184, 164, 165, 166, 167, - 168, 169, 170, 171, 172, -1, -1, -1, -1, -1, - 178, 158, 159, 160, 161, 162, 184, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, 158, 159, 160, 161, 162, 184, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, 158, 159, 160, 161, 162, 184, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, 158, 159, 160, 161, 162, 184, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, 158, 159, 160, 161, 162, - 184, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, 158, 159, 160, 161, - 162, 184, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, 158, 159, 160, - 161, 162, 184, 164, 165, 166, 167, 168, 169, 170, - 171, 172, -1, -1, -1, -1, -1, 178, 158, 159, - 160, 161, 162, 184, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, 158, - 159, 160, 161, 162, 184, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - 158, 159, 160, 161, 162, 184, 164, 165, 166, 167, - 168, 169, 170, 171, 172, -1, -1, -1, -1, -1, - 178, 158, 159, 160, 161, 162, 184, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, 158, 159, 160, 161, 162, 184, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, 158, 159, 160, 161, 162, 184, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, 158, 159, 160, 161, 162, 184, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, 158, 159, 160, 161, 162, - 184, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, 158, 159, 160, 161, - 162, 184, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, 158, 159, 160, - 161, 162, 184, 164, 165, 166, 167, 168, 169, 170, - 171, 172, -1, -1, -1, -1, -1, 178, 158, 159, - 160, 161, 162, 184, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, 158, - 159, 160, 161, 162, 184, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - 158, 159, 160, 161, 162, 184, 164, 165, 166, 167, - 168, 169, 170, 171, 172, -1, -1, -1, -1, -1, - 178, 158, 159, 160, 161, 162, 184, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, 158, 159, 160, 161, 162, 184, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, 158, 159, 160, 161, 162, 184, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, 158, 159, 160, 161, 162, 184, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, 158, 159, 160, 161, 162, - 184, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, 158, 159, 160, 161, - 162, 184, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, 158, 159, 160, - 161, 162, 184, 164, 165, 166, 167, 168, 169, 170, - 171, 172, -1, -1, -1, -1, -1, 178, 158, 159, - 160, 161, 162, 184, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, 158, - 159, 160, 161, 162, 184, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - 158, 159, 160, 161, 162, 184, 164, 165, 166, 167, - 168, 169, 170, 171, 172, -1, -1, -1, -1, -1, - 178, 158, 159, 160, 161, 162, 184, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, 158, 159, 160, 161, 162, 184, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, 158, 159, 160, 161, 162, 184, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, 158, 159, 160, 161, 162, 184, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, 158, 159, 160, 161, 162, - 184, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, 158, 159, 160, 161, - 162, 184, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, 158, 159, 160, - 161, 162, 184, 164, 165, 166, 167, 168, 169, 170, - 171, 172, -1, -1, -1, -1, -1, 178, 158, 159, - 160, 161, 162, 184, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, 158, - 159, 160, 161, 162, 184, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - 158, 159, 160, 161, 162, 184, 164, 165, 166, 167, - 168, 169, 170, 171, 172, -1, -1, -1, -1, -1, - 178, 158, 159, 160, 161, 162, 184, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, -1, -1, -1, 182, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, -1, -1, -1, - 182, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, -1, -1, -1, 182, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, -1, -1, -1, - 182, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, -1, -1, -1, 182, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, -1, 180, 158, - 159, 160, 161, 162, -1, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - -1, 180, 158, 159, 160, 161, 162, -1, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, -1, 180, 158, 159, 160, 161, 162, - -1, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, -1, 180, 158, 159, - 160, 161, 162, -1, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, -1, - 180, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, -1, 180, 158, 159, 160, 161, 162, -1, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, -1, 180, 158, 159, 160, - 161, 162, -1, 164, 165, 166, 167, 168, 169, 170, - 171, 172, -1, -1, -1, -1, -1, 178, -1, 180, - 158, 159, 160, 161, 162, -1, 164, 165, 166, 167, - 168, 169, 170, 171, 172, -1, -1, -1, -1, -1, - 178, -1, 180, 158, 159, 160, 161, 162, -1, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, -1, 180, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, -1, 180, 158, - 159, 160, 161, 162, -1, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - -1, 180, 158, 159, 160, 161, 162, -1, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, -1, 180, 158, 159, 160, 161, 162, - -1, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, -1, 180, 158, 159, - 160, 161, 162, -1, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, -1, - 180, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, -1, 180, 158, 159, 160, 161, 162, -1, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, -1, 180, 158, 159, 160, - 161, 162, -1, 164, 165, 166, 167, 168, 169, 170, - 171, 172, -1, -1, -1, -1, -1, 178, -1, 180, - 158, 159, 160, 161, 162, -1, 164, 165, 166, 167, - 168, 169, 170, 171, 172, -1, -1, -1, -1, -1, - 178, -1, 180, 158, 159, 160, 161, 162, -1, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, -1, 180, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, -1, 180, 158, - 159, 160, 161, 162, -1, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - -1, 180, 158, 159, 160, 161, 162, -1, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, -1, 180, 158, 159, 160, 161, 162, - -1, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, -1, 180, 158, 159, - 160, 161, 162, -1, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, -1, - 180, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, -1, 180, 158, 159, 160, 161, 162, -1, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, -1, 180, 158, 159, 160, - 161, 162, -1, 164, 165, 166, 167, 168, 169, 170, - 171, 172, -1, -1, -1, -1, -1, 178, -1, 180, - 158, 159, 160, 161, 162, -1, 164, 165, 166, 167, - 168, 169, 170, 171, 172, -1, -1, -1, -1, -1, - 178, -1, 180, 158, 159, 160, 161, 162, -1, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, -1, 180, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, -1, 180, 158, - 159, 160, 161, 162, -1, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - -1, 180, 158, 159, 160, 161, 162, -1, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, -1, 180, 158, 159, 160, 161, 162, - -1, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, -1, 180, 158, 159, - 160, 161, 162, -1, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, -1, - 180, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, -1, 180, 158, 159, 160, 161, 162, -1, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, -1, 180, 158, 159, 160, - 161, 162, -1, 164, 165, 166, 167, 168, 169, 170, - 171, 172, -1, -1, -1, -1, -1, 178, -1, 180, - 158, 159, 160, 161, 162, -1, 164, 165, 166, 167, - 168, 169, 170, 171, 172, -1, -1, -1, -1, -1, - 178, -1, 180, 158, 159, 160, 161, 162, -1, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, -1, 180, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, -1, 180, 158, - 159, 160, 161, 162, -1, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - -1, 180, 158, 159, 160, 161, 162, -1, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, -1, 180, 158, 159, 160, 161, 162, - -1, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, -1, 180, 158, 159, - 160, 161, 162, -1, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, -1, - 180, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, -1, 180, 158, 159, 160, 161, 162, -1, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, -1, 180, 158, 159, 160, - 161, 162, -1, 164, 165, 166, 167, 168, 169, 170, - 171, 172, -1, -1, -1, -1, -1, 178, -1, 180, - 158, 159, 160, 161, 162, -1, 164, 165, 166, 167, - 168, 169, 170, 171, 172, -1, -1, -1, -1, -1, - 178, -1, 180, 158, 159, 160, 161, 162, -1, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, -1, 180, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, -1, 180, 158, - 159, 160, 161, 162, -1, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - -1, 180, 158, 159, 160, 161, 162, -1, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, -1, 180, 158, 159, 160, 161, 162, - -1, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, -1, 180, 158, 159, - 160, 161, 162, -1, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178, -1, - 180, 158, 159, 160, 161, 162, -1, 164, 165, 166, - 167, 168, 169, 170, 171, 172, -1, -1, -1, -1, - -1, 178, -1, 180, 158, 159, 160, 161, 162, -1, - 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, - -1, -1, -1, -1, 178, -1, 180, 158, 159, 160, - 161, 162, -1, 164, 165, 166, 167, 168, 169, 170, - 171, 172, -1, -1, -1, -1, -1, 178, -1, 180, - 158, 159, 160, 161, 162, -1, 164, 165, 166, 167, - 168, 169, 170, 171, 172, -1, -1, -1, -1, -1, - 178, -1, 180, 158, 159, 160, 161, 162, -1, 164, - 165, 166, 167, 168, 169, 170, 171, 172, -1, -1, - -1, -1, -1, 178, -1, 180, 158, 159, 160, 161, - 162, -1, 164, 165, 166, 167, 168, 169, 170, 171, - 172, -1, -1, -1, -1, -1, 178, -1, 180, 158, - 159, 160, 161, 162, -1, 164, 165, 166, 167, 168, - 169, 170, 171, 172, -1, -1, -1, -1, -1, 178, - -1, 180, 158, 159, 160, 161, 162, -1, 164, 165, - 166, 167, 168, 169, 170, 171, 172, -1, -1, -1, - -1, -1, 178, -1, 180, 158, 159, 160, 161, 162, - -1, 164, 165, 166, 167, 168, 169, 170, 171, 172, - -1, -1, -1, -1, -1, 178, -1, 180, 158, 159, - 160, 161, 162, -1, 164, 165, 166, 167, 168, 169, - 170, 171, 172, -1, -1, -1, -1, -1, 178 -}; -/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ -#line 3 "/usr/lib/bison.simple" -/* This file comes from bison-1.28. */ - -/* Skeleton output parser for bison, - Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* This is the parser code that is written into each bison parser - when the %semantic_parser declaration is not specified in the grammar. - It was written by Richard Stallman by simplifying the hairy parser - used when %semantic_parser is specified. */ - -#ifndef YYSTACK_USE_ALLOCA -#ifdef alloca -#define YYSTACK_USE_ALLOCA -#else /* alloca not defined */ -#ifdef __GNUC__ -#define YYSTACK_USE_ALLOCA -#define alloca __builtin_alloca -#else /* not GNU C. */ -#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386)) -#define YYSTACK_USE_ALLOCA -#include <alloca.h> -#else /* not sparc */ -/* We think this test detects Watcom and Microsoft C. */ -/* This used to test MSDOS, but that is a bad idea - since that symbol is in the user namespace. */ -#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__) -#if 0 /* No need for malloc.h, which pollutes the namespace; - instead, just don't use alloca. */ -#include <malloc.h> -#endif -#else /* not MSDOS, or __TURBOC__ */ -#if defined(_AIX) -/* I don't know what this was needed for, but it pollutes the namespace. - So I turned it off. rms, 2 May 1997. */ -/* #include <malloc.h> */ - #pragma alloca -#define YYSTACK_USE_ALLOCA -#else /* not MSDOS, or __TURBOC__, or _AIX */ -#if 0 -#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up, - and on HPUX 10. Eventually we can turn this on. */ -#define YYSTACK_USE_ALLOCA -#define alloca __builtin_alloca -#endif /* __hpux */ -#endif -#endif /* not _AIX */ -#endif /* not MSDOS, or __TURBOC__ */ -#endif /* not sparc */ -#endif /* not GNU C */ -#endif /* alloca not defined */ -#endif /* YYSTACK_USE_ALLOCA not defined */ - -#ifdef YYSTACK_USE_ALLOCA -#define YYSTACK_ALLOC alloca -#else -#define YYSTACK_ALLOC malloc -#endif - -/* Note: there must be only one dollar sign in this file. - It is replaced by the list of actions, each action - as one case of the switch. */ - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY -2 -#define YYEOF 0 -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrlab1 -/* Like YYERROR except do call yyerror. - This remains here temporarily to ease the - transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ -#define YYFAIL goto yyerrlab -#define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(token, value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { yychar = (token), yylval = (value); \ - yychar1 = YYTRANSLATE (yychar); \ - YYPOPSTACK; \ - goto yybackup; \ - } \ - else \ - { yyerror ("syntax error: cannot back up"); YYERROR; } \ -while (0) - -#define YYTERROR 1 -#define YYERRCODE 256 - -#ifndef YYPURE -#define YYLEX yylex() -#endif - -#ifdef YYPURE -#ifdef YYLSP_NEEDED -#ifdef YYLEX_PARAM -#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) -#else -#define YYLEX yylex(&yylval, &yylloc) -#endif -#else /* not YYLSP_NEEDED */ -#ifdef YYLEX_PARAM -#define YYLEX yylex(&yylval, YYLEX_PARAM) -#else -#define YYLEX yylex(&yylval) -#endif -#endif /* not YYLSP_NEEDED */ -#endif - -/* If nonreentrant, generate the variables here */ - -#ifndef YYPURE - -int yychar; /* the lookahead symbol */ -YYSTYPE yylval; /* the semantic value of the */ - /* lookahead symbol */ - -#ifdef YYLSP_NEEDED -YYLTYPE yylloc; /* location data for the lookahead */ - /* symbol */ -#endif - -int yynerrs; /* number of parse errors so far */ -#endif /* not YYPURE */ - -#if YYDEBUG != 0 -int yydebug; /* nonzero means print parse trace */ -/* Since this is uninitialized, it does not stop multiple parsers - from coexisting. */ -#endif - -/* YYINITDEPTH indicates the initial size of the parser's stacks */ - -#ifndef YYINITDEPTH -#define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH is the maximum size the stacks can grow to - (effective only if the built-in stack extension method is used). */ - -#if YYMAXDEPTH == 0 -#undef YYMAXDEPTH -#endif - -#ifndef YYMAXDEPTH -#define YYMAXDEPTH 10000 -#endif - -/* Define __yy_memcpy. Note that the size argument - should be passed with type unsigned int, because that is what the non-GCC - definitions require. With GCC, __builtin_memcpy takes an arg - of type size_t, but it can handle unsigned int. */ - -#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ -#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) -#else /* not GNU C or C++ */ -#ifndef __cplusplus - -/* This is the most reliable way to avoid incompatibilities - in available built-in functions on various systems. */ -static void -__yy_memcpy (to, from, count) - char *to; - char *from; - unsigned int count; -{ - register char *f = from; - register char *t = to; - register int i = count; - - while (i-- > 0) - *t++ = *f++; -} - -#else /* __cplusplus */ - -/* This is the most reliable way to avoid incompatibilities - in available built-in functions on various systems. */ -static void -__yy_memcpy (char *to, char *from, unsigned int count) -{ - register char *t = to; - register char *f = from; - register int i = count; - - while (i-- > 0) - *t++ = *f++; -} - -#endif -#endif - -#line 217 "/usr/lib/bison.simple" - -/* The user can define YYPARSE_PARAM as the name of an argument to be passed - into yyparse. The argument should have type void *. - It should actually point to an object. - Grammar actions can access the variable by casting it - to the proper pointer type. */ - -#ifdef YYPARSE_PARAM -#ifdef __cplusplus -#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM -#define YYPARSE_PARAM_DECL -#else /* not __cplusplus */ -#define YYPARSE_PARAM_ARG YYPARSE_PARAM -#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; -#endif /* not __cplusplus */ -#else /* not YYPARSE_PARAM */ -#define YYPARSE_PARAM_ARG -#define YYPARSE_PARAM_DECL -#endif /* not YYPARSE_PARAM */ - -/* Prevent warning if -Wstrict-prototypes. */ -#ifdef __GNUC__ -#ifdef YYPARSE_PARAM -int yyparse (void *); -#else -int yyparse (void); -#endif -#endif - -int -yyparse(YYPARSE_PARAM_ARG) - YYPARSE_PARAM_DECL -{ - register int yystate; - register int yyn; - register short *yyssp; - register YYSTYPE *yyvsp; - int yyerrstatus; /* number of tokens to shift before error messages enabled */ - int yychar1 = 0; /* lookahead token as an internal (translated) token number */ - - short yyssa[YYINITDEPTH]; /* the state stack */ - YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ - - short *yyss = yyssa; /* refer to the stacks thru separate pointers */ - YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ - -#ifdef YYLSP_NEEDED - YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ - YYLTYPE *yyls = yylsa; - YYLTYPE *yylsp; - -#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) -#else -#define YYPOPSTACK (yyvsp--, yyssp--) -#endif - - int yystacksize = YYINITDEPTH; - int yyfree_stacks = 0; - -#ifdef YYPURE - int yychar; - YYSTYPE yylval; - int yynerrs; -#ifdef YYLSP_NEEDED - YYLTYPE yylloc; -#endif -#endif - - YYSTYPE yyval; /* the variable used to return */ - /* semantic values from the action */ - /* routines */ - - int yylen; - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Starting parse\n"); -#endif - - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ - - /* Initialize stack pointers. - Waste one element of value and location stack - so that they stay on the same level as the state stack. - The wasted elements are never initialized. */ - - yyssp = yyss - 1; - yyvsp = yyvs; -#ifdef YYLSP_NEEDED - yylsp = yyls; -#endif - -/* Push a new state, which is found in yystate . */ -/* In all cases, when you get here, the value and location stacks - have just been pushed. so pushing a state here evens the stacks. */ -yynewstate: - - *++yyssp = yystate; - - if (yyssp >= yyss + yystacksize - 1) - { - /* Give user a chance to reallocate the stack */ - /* Use copies of these so that the &'s don't force the real ones into memory. */ - YYSTYPE *yyvs1 = yyvs; - short *yyss1 = yyss; -#ifdef YYLSP_NEEDED - YYLTYPE *yyls1 = yyls; -#endif - - /* Get the current used size of the three stacks, in elements. */ - int size = yyssp - yyss + 1; - -#ifdef yyoverflow - /* Each stack pointer address is followed by the size of - the data in use in that stack, in bytes. */ -#ifdef YYLSP_NEEDED - /* This used to be a conditional around just the two extra args, - but that might be undefined if yyoverflow is a macro. */ - yyoverflow("parser stack overflow", - &yyss1, size * sizeof (*yyssp), - &yyvs1, size * sizeof (*yyvsp), - &yyls1, size * sizeof (*yylsp), - &yystacksize); -#else - yyoverflow("parser stack overflow", - &yyss1, size * sizeof (*yyssp), - &yyvs1, size * sizeof (*yyvsp), - &yystacksize); -#endif - - yyss = yyss1; yyvs = yyvs1; -#ifdef YYLSP_NEEDED - yyls = yyls1; -#endif -#else /* no yyoverflow */ - /* Extend the stack our own way. */ - if (yystacksize >= YYMAXDEPTH) - { - yyerror("parser stack overflow"); - if (yyfree_stacks) - { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); -#endif - } - return 2; - } - yystacksize *= 2; - if (yystacksize > YYMAXDEPTH) - yystacksize = YYMAXDEPTH; -#ifndef YYSTACK_USE_ALLOCA - yyfree_stacks = 1; -#endif - yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); - __yy_memcpy ((char *)yyss, (char *)yyss1, - size * (unsigned int) sizeof (*yyssp)); - yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); - __yy_memcpy ((char *)yyvs, (char *)yyvs1, - size * (unsigned int) sizeof (*yyvsp)); -#ifdef YYLSP_NEEDED - yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); - __yy_memcpy ((char *)yyls, (char *)yyls1, - size * (unsigned int) sizeof (*yylsp)); -#endif -#endif /* no yyoverflow */ - - yyssp = yyss + size - 1; - yyvsp = yyvs + size - 1; -#ifdef YYLSP_NEEDED - yylsp = yyls + size - 1; -#endif - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Stack size increased to %d\n", yystacksize); -#endif - - if (yyssp >= yyss + yystacksize - 1) - YYABORT; - } - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Entering state %d\n", yystate); -#endif - - goto yybackup; - yybackup: - -/* Do appropriate processing given the current state. */ -/* Read a lookahead token if we need one and don't already have one. */ -/* yyresume: */ - - /* First try to decide what to do without reference to lookahead token. */ - - yyn = yypact[yystate]; - if (yyn == YYFLAG) - goto yydefault; - - /* Not known => get a lookahead token if don't already have one. */ - - /* yychar is either YYEMPTY or YYEOF - or a valid token in external form. */ - - if (yychar == YYEMPTY) - { -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Reading a token: "); -#endif - yychar = YYLEX; - } - - /* Convert token to internal form (in yychar1) for indexing tables with */ - - if (yychar <= 0) /* This means end of input. */ - { - yychar1 = 0; - yychar = YYEOF; /* Don't call YYLEX any more */ - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Now at end of input.\n"); -#endif - } - else - { - yychar1 = YYTRANSLATE(yychar); - -#if YYDEBUG != 0 - if (yydebug) - { - fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); - /* Give the individual parser a way to print the precise meaning - of a token, for further debugging info. */ -#ifdef YYPRINT - YYPRINT (stderr, yychar, yylval); -#endif - fprintf (stderr, ")\n"); - } -#endif - } - - yyn += yychar1; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) - goto yydefault; - - yyn = yytable[yyn]; - - /* yyn is what to do for this token type in this state. - Negative => reduce, -yyn is rule number. - Positive => shift, yyn is new state. - New state is final state => don't bother to shift, - just return success. - 0, or most negative number => error. */ - - if (yyn < 0) - { - if (yyn == YYFLAG) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - else if (yyn == 0) - goto yyerrlab; - - if (yyn == YYFINAL) - YYACCEPT; - - /* Shift the lookahead token. */ - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); -#endif - - /* Discard the token being shifted unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; - - *++yyvsp = yylval; -#ifdef YYLSP_NEEDED - *++yylsp = yylloc; -#endif - - /* count tokens shifted since error; after three, turn off error status. */ - if (yyerrstatus) yyerrstatus--; - - yystate = yyn; - goto yynewstate; - -/* Do the default action for the current state. */ -yydefault: - - yyn = yydefact[yystate]; - if (yyn == 0) - goto yyerrlab; - -/* Do a reduction. yyn is the number of a rule to reduce with. */ -yyreduce: - yylen = yyr2[yyn]; - if (yylen > 0) - yyval = yyvsp[1-yylen]; /* implement default value of the action */ - -#if YYDEBUG != 0 - if (yydebug) - { - int i; - - fprintf (stderr, "Reducing via rule %d (line %d), ", - yyn, yyrline[yyn]); - - /* Print the symbols being reduced, and their result. */ - for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) - fprintf (stderr, "%s ", yytname[yyrhs[i]]); - fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); - } -#endif - - - switch (yyn) { - -case 4: -#line 160 "Gmsh.y" -{ yyerrok ; return 1; ; - break;} -case 5: -#line 168 "Gmsh.y" -{ yyval.d = yyvsp[0].d; ; - break;} -case 6: -#line 169 "Gmsh.y" -{ yyval.d = -yyvsp[0].d; ; - break;} -case 7: -#line 174 "Gmsh.y" -{ - Msg(PARSER_INFO,"STL file format"); - STL_Surf = Create_Surface(1,MSH_SURF_STL,1); - STL_Surf->STL = new STL_Data; - return 1; - ; - break;} -case 8: -#line 188 "Gmsh.y" -{ - STL_Surf->STL->Add_Facet( yyvsp[-12].d, yyvsp[-11].d, yyvsp[-10].d, - yyvsp[-8].d, yyvsp[-7].d, yyvsp[-6].d, - yyvsp[-4].d, yyvsp[-3].d, yyvsp[-2].d); - return 1; - ; - break;} -case 9: -#line 195 "Gmsh.y" -{ - Msg(PARSER_INFO,"STL file format read"); - Tree_Add(THEM->Surfaces, &STL_Surf); - return 1; - ; - break;} -case 12: -#line 212 "Gmsh.y" -{ return 1; ; - break;} -case 13: -#line 213 "Gmsh.y" -{ return 1; ; - break;} -case 14: -#line 214 "Gmsh.y" -{ return 1; ; - break;} -case 15: -#line 219 "Gmsh.y" -{ - Msg(PARSER_INFO,"Step Iso-10303-21 file format"); - Create_Step_Solid_BRep(); - ; - break;} -case 16: -#line 224 "Gmsh.y" -{ - Msg(PARSER_INFO,"Step Iso-10303-21 file format read"); - Resolve_BREP (); - ; - break;} -case 20: -#line 235 "Gmsh.y" -{ - ; - break;} -case 21: -#line 238 "Gmsh.y" -{ - ; - break;} -case 22: -#line 242 "Gmsh.y" -{ - ; - break;} -case 23: -#line 248 "Gmsh.y" -{ - Add_Cartesian_Point((int)yyvsp[-8].d,yyvsp[-4].c,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2]); - ; - break;} -case 24: -#line 254 "Gmsh.y" -{ - Add_BSpline_Curve_With_Knots ((int)yyvsp[-22].d, yyvsp[-18].c, (int) yyvsp[-16].d, yyvsp[-14].l, yyvsp[-6].l, yyvsp[-4].l, 0., 1.); - ; - break;} -case 25: -#line 261 "Gmsh.y" -{ - Add_BSpline_Surface_With_Knots ((int)yyvsp[-30].d, yyvsp[-26].c, (int) yyvsp[-24].d, (int) yyvsp[-22].d, yyvsp[-20].l, yyvsp[-10].l, - yyvsp[-8].l, yyvsp[-6].l, yyvsp[-4].l, 0., 1., 0., 1. ); - ; - break;} -case 26: -#line 267 "Gmsh.y" -{ - Add_Edge_Curve ((int)yyvsp[-14].d, yyvsp[-10].c , (int)yyvsp[-8].d , (int)yyvsp[-6].d, (int)yyvsp[-4].d); - ; - break;} -case 27: -#line 271 "Gmsh.y" -{ - Add_Face_Outer_Bound((int)yyvsp[-10].d,yyvsp[-6].c,(int)yyvsp[-4].d,yyvsp[-2].i,1); - ; - break;} -case 28: -#line 275 "Gmsh.y" -{ - /* La je dois voir la norme ! Face_Bound : trou externe a la surface ! */ - Msg(PARSER_INFO,"Found a face bound"); - Add_Face_Outer_Bound((int)yyvsp[-10].d,yyvsp[-6].c,(int)yyvsp[-4].d,yyvsp[-2].i,0); - ; - break;} -case 29: -#line 282 "Gmsh.y" -{ - Add_Oriented_Edge((int)yyvsp[-14].d,yyvsp[-10].c,(int)yyvsp[-4].d,yyvsp[-2].i); - ; - break;} -case 30: -#line 286 "Gmsh.y" -{ - Add_Edge_Loop((int)yyvsp[-8].d,yyvsp[-4].c,yyvsp[-2].l); - ; - break;} -case 31: -#line 291 "Gmsh.y" -{ - Add_Advanced_Face((int)yyvsp[-12].d,yyvsp[-8].c,yyvsp[-6].l,(int)yyvsp[-4].d,yyvsp[-2].i); - ; - break;} -case 32: -#line 295 "Gmsh.y" -{ - Add_Vertex_Point((int)yyvsp[-8].d,yyvsp[-4].c,(int)yyvsp[-2].d); - ; - break;} -case 33: -#line 299 "Gmsh.y" -{ - ; - break;} -case 34: -#line 303 "Gmsh.y" -{ - Add_Axis2_Placement3D ( (int)yyvsp[-12].d, (int)yyvsp[-4].d, (int)yyvsp[-2].d, (int)yyvsp[-6].d); - ; - break;} -case 35: -#line 307 "Gmsh.y" -{ - Add_Direction((int)yyvsp[-8].d , yyvsp[-4].c, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2]); - ; - break;} -case 36: -#line 311 "Gmsh.y" -{ - Add_Plane((int)yyvsp[-8].d,yyvsp[-4].c,(int)yyvsp[-2].d); - ; - break;} -case 37: -#line 315 "Gmsh.y" -{ - Add_Line ((int)yyvsp[-10].d, yyvsp[-6].c , (int) yyvsp[-4].d, (int)yyvsp[-2].d); - ; - break;} -case 38: -#line 319 "Gmsh.y" -{ - Msg(PARSER_INFO,"Found a closed shell"); - Add_Closed_Shell((int)yyvsp[-8].d, yyvsp[-4].c , yyvsp[-2].l); - ; - break;} -case 39: -#line 325 "Gmsh.y" -{ - ; - break;} -case 40: -#line 328 "Gmsh.y" -{ - ; - break;} -case 41: -#line 331 "Gmsh.y" -{ - Add_Cylinder ((int)yyvsp[-10].d, yyvsp[-6].c , (int)yyvsp[-4].d, yyvsp[-2].d); - ; - break;} -case 42: -#line 335 "Gmsh.y" -{ - Add_Cone ((int)yyvsp[-12].d, yyvsp[-8].c , (int)yyvsp[-6].d, yyvsp[-4].d,yyvsp[-2].d); - ; - break;} -case 43: -#line 339 "Gmsh.y" -{ - Add_Torus ((int)yyvsp[-12].d, yyvsp[-8].c , (int)yyvsp[-6].d, yyvsp[-4].d,yyvsp[-2].d); - ; - break;} -case 44: -#line 343 "Gmsh.y" -{ - Add_Circle((int) yyvsp[-10].d, yyvsp[-6].c, (int) yyvsp[-4].d, yyvsp[-2].d); - ; - break;} -case 45: -#line 347 "Gmsh.y" -{ - Add_Ellipsis((int) yyvsp[-12].d, yyvsp[-8].c, (int) yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d); - ; - break;} -case 46: -#line 352 "Gmsh.y" -{ - ; - break;} -case 47: -#line 355 "Gmsh.y" -{ - ; - break;} -case 48: -#line 359 "Gmsh.y" -{ - ; - break;} -case 49: -#line 362 "Gmsh.y" -{ - ; - break;} -case 50: -#line 366 "Gmsh.y" -{ - ; - break;} -case 51: -#line 369 "Gmsh.y" -{ - ; - break;} -case 52: -#line 372 "Gmsh.y" -{ - ; - break;} -case 53: -#line 382 "Gmsh.y" -{ - ; - break;} -case 54: -#line 385 "Gmsh.y" -{ - Msg(PARSER_INFO,"Gmsh file format read"); - ; - break;} -case 55: -#line 391 "Gmsh.y" -{ return 1; ; - break;} -case 56: -#line 392 "Gmsh.y" -{ return 1; ; - break;} -case 57: -#line 393 "Gmsh.y" -{ return 1; ; - break;} -case 58: -#line 394 "Gmsh.y" -{ return 1; ; - break;} -case 59: -#line 395 "Gmsh.y" -{ return 1; ; - break;} -case 60: -#line 396 "Gmsh.y" -{ return 1; ; - break;} -case 61: -#line 397 "Gmsh.y" -{ return 1; ; - break;} -case 62: -#line 398 "Gmsh.y" -{ return 1; ; - break;} -case 63: -#line 399 "Gmsh.y" -{ return 1; ; - break;} -case 64: -#line 400 "Gmsh.y" -{ return 1; ; - break;} -case 65: -#line 401 "Gmsh.y" -{ return 1; ; - break;} -case 66: -#line 402 "Gmsh.y" -{ return 1; ; - break;} -case 67: -#line 407 "Gmsh.y" -{ - Msg(DIRECT, yyvsp[-2].c); - ; - break;} -case 68: -#line 411 "Gmsh.y" -{ - for(i = 0 ; i<List_Nbr(yyvsp[-2].l) ; i++){ - if(!i){ - str = strtok(yyvsp[-4].c, "%"); - strcpy(tmpstring, str); - } - str = strtok(NULL, "%"); - if(str){ - strcpy(tmpstring2, "%"); - strcat(tmpstring2, str); - sprintf(tmpstring3, tmpstring2, *(double*)List_Pointer(yyvsp[-2].l,i)); - strcat(tmpstring, tmpstring3); - } - else{ - vyyerror("Missing %d parameter(s) in Printf format", - List_Nbr(yyvsp[-2].l)-i); - break ; - } - } - Msg(DIRECT, tmpstring); - List_Delete(yyvsp[-2].l); - ; - break;} -case 69: -#line 441 "Gmsh.y" -{ - if(!strcmp(yyvsp[-5].c, "View")) EndView(View, 1, yyname, yyvsp[-4].c); - ; - break;} -case 70: -#line 445 "Gmsh.y" -{ - if(!strcmp(yyvsp[-7].c, "View")) EndView(View, 1, yyname, yyvsp[-6].c); - ; - break;} -case 71: -#line 452 "Gmsh.y" -{ - View = BeginView(1); - ; - break;} -case 84: -#line 471 "Gmsh.y" -{ List_Add(View->SP, &yyvsp[0].d) ; ; - break;} -case 85: -#line 473 "Gmsh.y" -{ List_Add(View->SP, &yyvsp[0].d) ; ; - break;} -case 86: -#line 478 "Gmsh.y" -{ - List_Add(View->SP, &yyvsp[-5].d); List_Add(View->SP, &yyvsp[-3].d); - List_Add(View->SP, &yyvsp[-1].d); - ; - break;} -case 87: -#line 483 "Gmsh.y" -{ - View->NbSP++ ; - ; - break;} -case 88: -#line 490 "Gmsh.y" -{ List_Add(View->VP, &yyvsp[0].d) ; ; - break;} -case 89: -#line 492 "Gmsh.y" -{ List_Add(View->VP, &yyvsp[0].d) ; ; - break;} -case 90: -#line 497 "Gmsh.y" -{ - List_Add(View->VP, &yyvsp[-5].d); List_Add(View->VP, &yyvsp[-3].d); - List_Add(View->VP, &yyvsp[-1].d); - ; - break;} -case 91: -#line 502 "Gmsh.y" -{ - View->NbVP++ ; - ; - break;} -case 92: -#line 509 "Gmsh.y" -{ List_Add(View->TP, &yyvsp[0].d) ; ; - break;} -case 93: -#line 511 "Gmsh.y" -{ List_Add(View->TP, &yyvsp[0].d) ; ; - break;} -case 94: -#line 516 "Gmsh.y" -{ - List_Add(View->TP, &yyvsp[-5].d); List_Add(View->TP, &yyvsp[-3].d); - List_Add(View->TP, &yyvsp[-1].d); - ; - break;} -case 95: -#line 521 "Gmsh.y" -{ - View->NbTP++ ; - ; - break;} -case 96: -#line 528 "Gmsh.y" -{ List_Add(View->SL, &yyvsp[0].d) ; ; - break;} -case 97: -#line 530 "Gmsh.y" -{ List_Add(View->SL, &yyvsp[0].d) ; ; - break;} -case 98: -#line 536 "Gmsh.y" -{ - List_Add(View->SL, &yyvsp[-11].d); List_Add(View->SL, &yyvsp[-5].d); - List_Add(View->SL, &yyvsp[-9].d); List_Add(View->SL, &yyvsp[-3].d); - List_Add(View->SL, &yyvsp[-7].d); List_Add(View->SL, &yyvsp[-1].d); - ; - break;} -case 99: -#line 542 "Gmsh.y" -{ - View->NbSL++ ; - ; - break;} -case 100: -#line 549 "Gmsh.y" -{ List_Add(View->VL, &yyvsp[0].d) ; ; - break;} -case 101: -#line 551 "Gmsh.y" -{ List_Add(View->VL, &yyvsp[0].d) ; ; - break;} -case 102: -#line 557 "Gmsh.y" -{ - List_Add(View->VL, &yyvsp[-11].d); List_Add(View->VL, &yyvsp[-5].d); - List_Add(View->VL, &yyvsp[-9].d); List_Add(View->VL, &yyvsp[-3].d); - List_Add(View->VL, &yyvsp[-7].d); List_Add(View->VL, &yyvsp[-1].d); - ; - break;} -case 103: -#line 563 "Gmsh.y" -{ - View->NbVL++ ; - ; - break;} -case 104: -#line 570 "Gmsh.y" -{ List_Add(View->TL, &yyvsp[0].d) ; ; - break;} -case 105: -#line 572 "Gmsh.y" -{ List_Add(View->TL, &yyvsp[0].d) ; ; - break;} -case 106: -#line 578 "Gmsh.y" -{ - List_Add(View->TL, &yyvsp[-11].d); List_Add(View->TL, &yyvsp[-5].d); - List_Add(View->TL, &yyvsp[-9].d); List_Add(View->TL, &yyvsp[-3].d); - List_Add(View->TL, &yyvsp[-7].d); List_Add(View->TL, &yyvsp[-1].d); - ; - break;} -case 107: -#line 584 "Gmsh.y" -{ - View->NbTL++ ; - ; - break;} -case 108: -#line 591 "Gmsh.y" -{ List_Add(View->ST, &yyvsp[0].d) ; ; - break;} -case 109: -#line 593 "Gmsh.y" -{ List_Add(View->ST, &yyvsp[0].d) ; ; - break;} -case 110: -#line 600 "Gmsh.y" -{ - List_Add(View->ST, &yyvsp[-17].d); List_Add(View->ST, &yyvsp[-11].d); - List_Add(View->ST, &yyvsp[-5].d); - List_Add(View->ST, &yyvsp[-15].d); List_Add(View->ST, &yyvsp[-9].d); - List_Add(View->ST, &yyvsp[-3].d); - List_Add(View->ST, &yyvsp[-13].d); List_Add(View->ST, &yyvsp[-7].d); - List_Add(View->ST, &yyvsp[-1].d); - ; - break;} -case 111: -#line 609 "Gmsh.y" -{ - View->NbST++ ; - ; - break;} -case 112: -#line 616 "Gmsh.y" -{ List_Add(View->VT, &yyvsp[0].d) ; ; - break;} -case 113: -#line 618 "Gmsh.y" -{ List_Add(View->VT, &yyvsp[0].d) ; ; - break;} -case 114: -#line 625 "Gmsh.y" -{ - List_Add(View->VT, &yyvsp[-17].d); List_Add(View->VT, &yyvsp[-11].d); - List_Add(View->VT, &yyvsp[-5].d); - List_Add(View->VT, &yyvsp[-15].d); List_Add(View->VT, &yyvsp[-9].d); - List_Add(View->VT, &yyvsp[-3].d); - List_Add(View->VT, &yyvsp[-13].d); List_Add(View->VT, &yyvsp[-7].d); - List_Add(View->VT, &yyvsp[-1].d); - ; - break;} -case 115: -#line 634 "Gmsh.y" -{ - View->NbVT++ ; - ; - break;} -case 116: -#line 641 "Gmsh.y" -{ List_Add(View->TT, &yyvsp[0].d) ; ; - break;} -case 117: -#line 643 "Gmsh.y" -{ List_Add(View->TT, &yyvsp[0].d) ; ; - break;} -case 118: -#line 650 "Gmsh.y" -{ - List_Add(View->TT, &yyvsp[-17].d); List_Add(View->TT, &yyvsp[-11].d); - List_Add(View->TT, &yyvsp[-5].d); - List_Add(View->TT, &yyvsp[-15].d); List_Add(View->TT, &yyvsp[-9].d); - List_Add(View->TT, &yyvsp[-3].d); - List_Add(View->TT, &yyvsp[-13].d); List_Add(View->TT, &yyvsp[-7].d); - List_Add(View->TT, &yyvsp[-1].d); - ; - break;} -case 119: -#line 659 "Gmsh.y" -{ - View->NbTT++ ; - ; - break;} -case 120: -#line 666 "Gmsh.y" -{ List_Add(View->SS, &yyvsp[0].d) ; ; - break;} -case 121: -#line 668 "Gmsh.y" -{ List_Add(View->SS, &yyvsp[0].d) ; ; - break;} -case 122: -#line 676 "Gmsh.y" -{ - List_Add(View->SS, &yyvsp[-23].d); List_Add(View->SS, &yyvsp[-17].d); - List_Add(View->SS, &yyvsp[-11].d); List_Add(View->SS, &yyvsp[-5].d); - List_Add(View->SS, &yyvsp[-21].d); List_Add(View->SS, &yyvsp[-15].d); - List_Add(View->SS, &yyvsp[-9].d); List_Add(View->SS, &yyvsp[-3].d); - List_Add(View->SS, &yyvsp[-19].d); List_Add(View->SS, &yyvsp[-13].d); - List_Add(View->SS, &yyvsp[-7].d); List_Add(View->SS, &yyvsp[-1].d); - ; - break;} -case 123: -#line 685 "Gmsh.y" -{ - View->NbSS++ ; - ; - break;} -case 124: -#line 692 "Gmsh.y" -{ List_Add(View->VS, &yyvsp[0].d) ; ; - break;} -case 125: -#line 694 "Gmsh.y" -{ List_Add(View->VS, &yyvsp[0].d) ; ; - break;} -case 126: -#line 702 "Gmsh.y" -{ - List_Add(View->VS, &yyvsp[-23].d); List_Add(View->VS, &yyvsp[-17].d); - List_Add(View->VS, &yyvsp[-11].d); List_Add(View->VS, &yyvsp[-5].d); - List_Add(View->VS, &yyvsp[-21].d); List_Add(View->VS, &yyvsp[-15].d); - List_Add(View->VS, &yyvsp[-9].d); List_Add(View->VS, &yyvsp[-3].d); - List_Add(View->VS, &yyvsp[-19].d); List_Add(View->VS, &yyvsp[-13].d); - List_Add(View->VS, &yyvsp[-7].d); List_Add(View->VS, &yyvsp[-1].d); - ; - break;} -case 127: -#line 711 "Gmsh.y" -{ - View->NbVS++ ; - ; - break;} -case 128: -#line 718 "Gmsh.y" -{ List_Add(View->TS, &yyvsp[0].d) ; ; - break;} -case 129: -#line 720 "Gmsh.y" -{ List_Add(View->TS, &yyvsp[0].d) ; ; - break;} -case 130: -#line 728 "Gmsh.y" -{ - List_Add(View->TS, &yyvsp[-23].d); List_Add(View->TS, &yyvsp[-17].d); - List_Add(View->TS, &yyvsp[-11].d); List_Add(View->TS, &yyvsp[-5].d); - List_Add(View->TS, &yyvsp[-21].d); List_Add(View->TS, &yyvsp[-15].d); - List_Add(View->TS, &yyvsp[-9].d); List_Add(View->TS, &yyvsp[-3].d); - List_Add(View->TS, &yyvsp[-19].d); List_Add(View->TS, &yyvsp[-13].d); - List_Add(View->TS, &yyvsp[-7].d); List_Add(View->TS, &yyvsp[-1].d); - ; - break;} -case 131: -#line 737 "Gmsh.y" -{ - View->NbTS++ ; - ; - break;} -case 132: -#line 749 "Gmsh.y" -{ yyval.i = 0 ; ; - break;} -case 133: -#line 750 "Gmsh.y" -{ yyval.i = 1 ; ; - break;} -case 134: -#line 751 "Gmsh.y" -{ yyval.i = 2 ; ; - break;} -case 135: -#line 752 "Gmsh.y" -{ yyval.i = 3 ; ; - break;} -case 136: -#line 753 "Gmsh.y" -{ yyval.i = 4 ; ; - break;} -case 137: -#line 756 "Gmsh.y" -{ yyval.i = 1 ; ; - break;} -case 138: -#line 757 "Gmsh.y" -{ yyval.i = -1 ; ; - break;} -case 139: -#line 764 "Gmsh.y" -{ - TheSymbol.Name = yyvsp[-3].c; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){ - TheSymbol.val = List_Create(1,1,sizeof(double)); - if(!yyvsp[-2].i){ - List_Put(TheSymbol.val, 0, &yyvsp[-1].d); - List_Add(Symbol_L, &TheSymbol); - } - else - vyyerror("Unknown variable '%s'", yyvsp[-3].c) ; - } - else{ - pd = (double*)List_Pointer_Fast(pSymbol->val, 0) ; - switch(yyvsp[-2].i){ - case 0 : *pd = yyvsp[-1].d; break ; - case 1 : *pd += yyvsp[-1].d ; break ; - case 2 : *pd -= yyvsp[-1].d ; break ; - case 3 : *pd *= yyvsp[-1].d ; break ; - case 4 : - if(yyvsp[-1].d) *pd /= yyvsp[-1].d ; - else vyyerror("Division by zero in '%s /= %g'", yyvsp[-3].c, yyvsp[-1].d); - break; - } - } - ; - break;} -case 140: -#line 791 "Gmsh.y" -{ - TheSymbol.Name = yyvsp[-6].c; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){ - TheSymbol.val = List_Create(5,5,sizeof(double)); - if(!yyvsp[-2].i){ - List_Put(TheSymbol.val, (int)yyvsp[-4].d, &yyvsp[-1].d); - List_Add(Symbol_L, &TheSymbol); - } - else - vyyerror("Unknown variable '%s'", yyvsp[-6].c) ; - } - else{ - if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-4].d))){ - switch(yyvsp[-2].i){ - case 0 : *pd = yyvsp[-1].d; break ; - case 1 : *pd += yyvsp[-1].d ; break ; - case 2 : *pd -= yyvsp[-1].d ; break ; - case 3 : *pd *= yyvsp[-1].d ; break ; - case 4 : - if(yyvsp[-1].d) *pd /= yyvsp[-1].d ; - else vyyerror("Division by zero in '%s[%d] /= %g'", yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-1].d); - break; - } - } - else{ - if(!yyvsp[-2].i) - List_Put(pSymbol->val, (int)yyvsp[-4].d, &yyvsp[-1].d); - else - vyyerror("Uninitialized variable '%s[%d]'", yyvsp[-6].c, (int)yyvsp[-4].d) ; - } - } - ; - break;} -case 141: -#line 825 "Gmsh.y" -{ - if(List_Nbr(yyvsp[-5].l) != List_Nbr(yyvsp[-1].l)) - vyyerror("Incompatible array dimensions in affectation"); - else{ - TheSymbol.Name = yyvsp[-8].c; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){ - TheSymbol.val = List_Create(5,5,sizeof(double)); - if(!yyvsp[-2].i){ - for(i=0 ; i<List_Nbr(yyvsp[-5].l) ; i++){ - List_Put(TheSymbol.val, (int)(*(double*)List_Pointer(yyvsp[-5].l,i)), - (double*)List_Pointer(yyvsp[-1].l,i)); - } - List_Add(Symbol_L, &TheSymbol); - } - else - vyyerror("Unknown variable '%s'", yyvsp[-8].c) ; - } - else{ - for(i=0 ; i<List_Nbr(yyvsp[-5].l) ; i++){ - j = (int)(*(double*)List_Pointer(yyvsp[-5].l,i)) ; - d = *(double*)List_Pointer(yyvsp[-1].l,i) ; - if((pd = (double*)List_Pointer_Test(pSymbol->val, j))){ - switch(yyvsp[-2].i){ - case 0 : *pd = d; break ; - case 1 : *pd += d ; break ; - case 2 : *pd -= d ; break ; - case 3 : *pd *= d ; break ; - case 4 : - if(yyvsp[-1].l) *pd /= d ; - else vyyerror("Division by zero in '%s[%d] /= %g'", yyvsp[-8].c, j, d); - break; - } - } - else{ - if(!yyvsp[-2].i) - List_Put(pSymbol->val, j, &d); - else - vyyerror("Uninitialized variable '%s[%d]'", yyvsp[-8].c, j) ; - } - } - } - } - List_Delete(yyvsp[-5].l); - List_Delete(yyvsp[-1].l); - ; - break;} -case 142: -#line 872 "Gmsh.y" -{ - TheSymbol.Name = yyvsp[-5].c; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){ - TheSymbol.val = List_Create(5,5,sizeof(double)); - List_Copy(yyvsp[-1].l,TheSymbol.val); - List_Add(Symbol_L, &TheSymbol); - } - else{ - List_Reset(pSymbol->val); - List_Copy(yyvsp[-1].l, pSymbol->val); - } - List_Delete(yyvsp[-1].l); - ; - break;} -case 143: -#line 887 "Gmsh.y" -{ - TheSymbol.Name = yyvsp[-2].c; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) - vyyerror("Unknown variable '%s'", yyvsp[-2].c) ; - else - *(double*)List_Pointer_Fast(pSymbol->val, 0) += yyvsp[-1].i; - ; - break;} -case 144: -#line 896 "Gmsh.y" -{ - TheSymbol.Name = yyvsp[-5].c ; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) - vyyerror("Unknown variable '%s'", yyvsp[-5].c) ; - else{ - if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-3].d))) - *pd += yyvsp[-1].i ; - else - vyyerror("Uninitialized variable '%s[%d]'", yyvsp[-5].c, (int)yyvsp[-3].d) ; - } - ; - break;} -case 145: -#line 911 "Gmsh.y" -{ - if(!(pStrCat = Get_StringOptionCategory(yyvsp[-5].c))) - vyyerror("Unknown string option class '%s'", yyvsp[-5].c); - else{ - if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-3].c, pStrCat))) - vyyerror("Unknown string option '%s.%s'", yyvsp[-5].c, yyvsp[-3].c); - else - pStrOpt(0,GMSH_SET|GMSH_GUI,yyvsp[-1].c) ; - } - ; - break;} -case 146: -#line 923 "Gmsh.y" -{ - if(!(pStrCat = Get_StringOptionCategory(yyvsp[-8].c))) - vyyerror("Unknown string option class '%s'", yyvsp[-8].c); - else{ - if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-3].c, pStrCat))) - vyyerror("Unknown string option '%s[%d].%s'", yyvsp[-8].c, (int)yyvsp[-6].d, yyvsp[-3].c); - else - pStrOpt((int)yyvsp[-6].d,GMSH_SET|GMSH_GUI,yyvsp[-1].c) ; - } - ; - break;} -case 147: -#line 937 "Gmsh.y" -{ - if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c))) - vyyerror("Unknown numeric option class '%s'", yyvsp[-5].c); - else{ - if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-3].c, pNumCat))) - vyyerror("Unknown numeric option '%s.%s'", yyvsp[-5].c, yyvsp[-3].c); - else{ - switch(yyvsp[-2].i){ - case 0 : d = yyvsp[-1].d ; break ; - case 1 : d = pNumOpt(0,GMSH_GET,0) + yyvsp[-1].d ; break ; - case 2 : d = pNumOpt(0,GMSH_GET,0) - yyvsp[-1].d ; break ; - case 3 : d = pNumOpt(0,GMSH_GET,0) * yyvsp[-1].d ; break ; - case 4 : - if(yyvsp[-1].d) d = pNumOpt(0,GMSH_GET,0) / yyvsp[-1].d ; - else vyyerror("Division by zero in '%s.%s /= %g'", yyvsp[-5].c, yyvsp[-3].c, yyvsp[-1].d); - break; - } - pNumOpt(0,GMSH_SET|GMSH_GUI, d) ; - } - } - ; - break;} -case 148: -#line 960 "Gmsh.y" -{ - if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-8].c))) - vyyerror("Unknown numeric option class '%s'", yyvsp[-8].c); - else{ - if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-3].c, pNumCat))) - vyyerror("Unknown numeric option '%s[%d].%s'", yyvsp[-8].c, (int)yyvsp[-6].d, yyvsp[-3].c); - else{ - switch(yyvsp[-2].i){ - case 0 : d = yyvsp[-1].d; break ; - case 1 : d = pNumOpt((int)yyvsp[-6].d,GMSH_GET,0) + yyvsp[-1].d ; break ; - case 2 : d = pNumOpt((int)yyvsp[-6].d,GMSH_GET,0) - yyvsp[-1].d ; break ; - case 3 : d = pNumOpt((int)yyvsp[-6].d,GMSH_GET,0) * yyvsp[-1].d ; break ; - case 4 : - if(yyvsp[-1].d) d = pNumOpt((int)yyvsp[-6].d,GMSH_GET,0) / yyvsp[-1].d ; - else vyyerror("Division by zero in '%s[%d].%s /= %g'", - yyvsp[-8].c, (int)yyvsp[-6].d, yyvsp[-3].c, yyvsp[-1].d); - break; - } - pNumOpt((int)yyvsp[-6].d,GMSH_SET|GMSH_GUI,d) ; - } - } - ; - break;} -case 149: -#line 984 "Gmsh.y" -{ - if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-4].c))) - vyyerror("Unknown numeric option class '%s'", yyvsp[-4].c); - else{ - if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-2].c, pNumCat))) - vyyerror("Unknown numeric option '%s.%s'", yyvsp[-4].c, yyvsp[-2].c); - else - pNumOpt(0,GMSH_SET|GMSH_GUI,pNumOpt(0,GMSH_GET,0)+yyvsp[-1].i) ; - } - ; - break;} -case 150: -#line 996 "Gmsh.y" -{ - if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-7].c))) - vyyerror("Unknown numeric option class '%s'", yyvsp[-7].c); - else{ - if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-2].c, pNumCat))) - vyyerror("Unknown numeric option '%s[%d].%s'", yyvsp[-7].c, (int)yyvsp[-5].d, yyvsp[-2].c); - else - pNumOpt((int)yyvsp[-5].d,GMSH_SET|GMSH_GUI,pNumOpt((int)yyvsp[-5].d,GMSH_GET,0)+yyvsp[-1].i) ; - } - ; - break;} -case 151: -#line 1010 "Gmsh.y" -{ - if(!(pColCat = Get_ColorOptionCategory(yyvsp[-7].c))) - vyyerror("Unknown color option class '%s'", yyvsp[-7].c); - else{ - if(!(pColOpt = (unsigned int (*) (int, int, unsigned int))Get_ColorOption(yyvsp[-3].c, pColCat))) - vyyerror("Unknown color option '%s.Color.%s'", yyvsp[-7].c, yyvsp[-3].c); - else - pColOpt(0,GMSH_SET|GMSH_GUI,yyvsp[-1].u) ; - } - ; - break;} -case 152: -#line 1022 "Gmsh.y" -{ - if(!(pColCat = Get_ColorOptionCategory(yyvsp[-10].c))) - vyyerror("Unknown color option class '%s'", yyvsp[-10].c); - else{ - if(!(pColOpt = (unsigned int (*) (int, int, unsigned int))Get_ColorOption(yyvsp[-3].c, pColCat))) - vyyerror("Unknown color option '%s[%d].Color.%s'", yyvsp[-10].c, (int)yyvsp[-8].d, yyvsp[-3].c); - else - pColOpt((int)yyvsp[-8].d,GMSH_SET|GMSH_GUI,yyvsp[-1].u) ; - } - ; - break;} -case 153: -#line 1036 "Gmsh.y" -{ - ColorTable *ct = Get_ColorTable(0); - if(!ct) - vyyerror("View[%d] does not exist", 0); - else{ - ct->size = List_Nbr(yyvsp[-1].l); - if(ct->size > COLORTABLE_NBMAX_COLOR) - vyyerror("Too many (%d>%d) colors in View[%d].ColorTable", - ct->size, COLORTABLE_NBMAX_COLOR, 0); - else - for(i=0 ; i<ct->size ; i++) List_Read(yyvsp[-1].l, i, &ct->table[i]); - } - List_Delete(yyvsp[-1].l); - ; - break;} -case 154: -#line 1052 "Gmsh.y" -{ - ColorTable *ct = Get_ColorTable((int)yyvsp[-6].d); - if(!ct) - vyyerror("View[%d] does not exist", (int)yyvsp[-6].d); - else{ - ct->size = List_Nbr(yyvsp[-1].l); - if(ct->size > COLORTABLE_NBMAX_COLOR) - vyyerror("Too many (%d>%d) colors in View[%d].ColorTable", - ct->size, COLORTABLE_NBMAX_COLOR, (int)yyvsp[-6].d); - else - for(i=0 ; i<ct->size ; i++) List_Read(yyvsp[-1].l, i, &ct->table[i]); - } - List_Delete(yyvsp[-1].l); - ; - break;} -case 155: -#line 1068 "Gmsh.y" -{ -#ifndef _NOPLUGIN - try - { - GMSH_PluginManager::Instance()->SetPluginOption(yyvsp[-6].c,yyvsp[-3].c,yyvsp[-1].d); - } - catch (...) - { - Msg(WARNING,"Unknown option '%s' or plugin '%s'",yyvsp[-3].c,yyvsp[-6].c); - } -#endif - ; - break;} -case 156: -#line 1081 "Gmsh.y" -{ -#ifndef _NOPLUGIN - try - { - GMSH_PluginManager::Instance()->SetPluginOption(yyvsp[-6].c,yyvsp[-3].c,yyvsp[-1].c); - } - catch (...) - { - Msg(WARNING,"Unknown option '%s' or plugin '%s'",yyvsp[-3].c,yyvsp[-6].c); - } -#endif - ; - break;} -case 157: -#line 1105 "Gmsh.y" -{ - Cdbpts101((int)yyvsp[-4].d,yyvsp[-1].v[0],yyvsp[-1].v[1],yyvsp[-1].v[2],yyvsp[-1].v[3],yyvsp[-1].v[4]); - yyval.s.Type = MSH_POINT; - yyval.s.Num = (int)yyvsp[-4].d; - ; - break;} -case 158: -#line 1112 "Gmsh.y" -{ - Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_POINT,0,0,0,0,0,NULL,yyvsp[-1].l,NULL); - yyval.s.Type = MSH_PHYSICAL_POINT; - yyval.s.Num = (int)yyvsp[-4].d; - ; - break;} -case 159: -#line 1118 "Gmsh.y" -{ - Vertex *v; - Attractor *a; - double p; - int ip; - for(int i=0;i<List_Nbr(yyvsp[-9].l);i++){ - List_Read(yyvsp[-9].l,i,&p); - ip = (int)p; - v = FindPoint(ip,THEM); - if(!v) - vyyerror("Unkown Point %d", ip); - else{ - a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, - yyvsp[-6].d,yyvsp[-4].d,yyvsp[-2].d,v,NULL,NULL); - List_Add(THEM->Metric->Attractors,&a); - } - } - ; - break;} -case 160: -#line 1137 "Gmsh.y" -{ - for(i=0;i<List_Nbr(yyvsp[-3].l);i++){ - List_Read(yyvsp[-3].l,i,&d); - Vertex *v = FindPoint((int)d,THEM); - if(!v) - vyyerror("Unkown Point %d", (int)d); - else - v->lc = yyvsp[-1].d; - } - ; - break;} -case 161: -#line 1148 "Gmsh.y" -{ - yyval.s.Type = MSH_POINT; - yyval.s.Num = (int)yyvsp[-2].d; - ; - break;} -case 162: -#line 1156 "Gmsh.y" -{ - Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_LINE,1,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL); - yyval.s.Type = MSH_SEGM_LINE; - yyval.s.Num = (int)yyvsp[-4].d; - ; - break;} -case 163: -#line 1162 "Gmsh.y" -{ - Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_SPLN,3,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL); - yyval.s.Type = MSH_SEGM_SPLN; - yyval.s.Num = (int)yyvsp[-4].d; - ; - break;} -case 164: -#line 1168 "Gmsh.y" -{ - Curve *c; - Attractor *a; - double p; - int ip; - for(int i=0;i<List_Nbr(yyvsp[-9].l);i++){ - List_Read(yyvsp[-9].l,i,&p); - ip = (int)p; - c = FindCurve(ip,THEM); - if(!c) - vyyerror("Unkown Curve %d", ip); - else{ - a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, - yyvsp[-6].d,yyvsp[-4].d,yyvsp[-2].d,NULL,c,NULL); - List_Add(THEM->Metric->Attractors,&a); - } - } - ; - break;} -case 165: -#line 1187 "Gmsh.y" -{ - Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_CIRC,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL); - yyval.s.Type = MSH_SEGM_CIRC ; - yyval.s.Num = (int)yyvsp[-4].d; - ; - break;} -case 166: -#line 1193 "Gmsh.y" -{ - List_T *temp; - int i,j; - double d; - temp = List_Create(List_Nbr(yyvsp[-3].l),1,sizeof(int)); - for(i=0;i<List_Nbr(yyvsp[-3].l);i++){ - List_Read(yyvsp[-3].l,i,&d); - j = (int)d; - List_Add(temp,&j); - } - AddCircleInDataBase ((int) yyvsp[-6].d, MSH_SEGM_CIRC, temp, yyvsp[-1].v); - List_Delete(temp); - yyval.s.Type = MSH_SEGM_CIRC ; - yyval.s.Num = (int)yyvsp[-6].d; - ; - break;} -case 167: -#line 1210 "Gmsh.y" -{ - Cdbseg101((int)yyvsp[-14].d,MSH_SEGM_PARAMETRIC,2,NULL,NULL,-1,-1,yyvsp[-10].d,yyvsp[-8].d,yyvsp[-6].c,yyvsp[-4].c,yyvsp[-2].c); - yyval.s.Type = MSH_SEGM_PARAMETRIC ; - yyval.s.Num = (int)yyvsp[-14].d; - ; - break;} -case 168: -#line 1216 "Gmsh.y" -{ - Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_ELLI,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL); - yyval.s.Type = MSH_SEGM_ELLI ; - yyval.s.Num = (int)yyvsp[-4].d; - ; - break;} -case 169: -#line 1222 "Gmsh.y" -{ - Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_LINE,0,0,0,0,0,NULL,yyvsp[-1].l,NULL); - yyval.s.Type = MSH_PHYSICAL_LINE; - yyval.s.Num = (int)yyvsp[-4].d; - ; - break;} -case 170: -#line 1228 "Gmsh.y" -{ - yyval.s.Type = MSH_SEGM_LOOP; - Cdbz101((int)yyvsp[-4].d,yyval.s.Type,0,0,0,0,0,NULL,yyvsp[-1].l,NULL); - yyval.s.Num = (int)yyvsp[-4].d; - ; - break;} -case 171: -#line 1234 "Gmsh.y" -{ - Cdbseg101((int)yyvsp[-4].d,MSH_SEGM_BSPLN,2,yyvsp[-1].l,NULL,-1,-1,0.,1.,NULL,NULL,NULL); - yyval.s.Type = MSH_SEGM_BSPLN; - yyval.s.Num = (int)yyvsp[-4].d; - ; - break;} -case 172: -#line 1240 "Gmsh.y" -{ - List_T *Temp; - int i; - double d; - if((int)yyvsp[-1].d + 1 + List_Nbr(yyvsp[-5].l) != List_Nbr(yyvsp[-3].l)){ - vyyerror("Wrong definition of Nurbs Curve %d: " - "[Degree]%d + 1 + [NbPts]%d != [NbKnots]%d", - (int)yyvsp[-8].d, (int)yyvsp[-1].d, List_Nbr(yyvsp[-5].l), List_Nbr(yyvsp[-3].l)); - } - Temp = List_Create(List_Nbr(yyvsp[-5].l),1,sizeof(int)); - for(i=0;i<List_Nbr(yyvsp[-5].l);i++) { - List_Read(yyvsp[-5].l,i,&d); - j = (int)d; - List_Add(Temp,&j); - } - AddCurveInDataBase ((int)yyvsp[-8].d,MSH_SEGM_NURBS,(int)yyvsp[-1].d,Temp,yyvsp[-3].l,-1,-1,0.,1.); - List_Delete(Temp); - ; - break;} -case 173: -#line 1259 "Gmsh.y" -{ - yyval.s.Num = (int)yyvsp[-2].d; - Curve *c = FindCurve(yyval.s.Num,THEM); - if(!c) - vyyerror("Unkown Curve %d", yyval.s.Num); - else - yyval.s.Type = c->Typ; - ; - break;} -case 174: -#line 1271 "Gmsh.y" -{ - Cdbz101((int)yyvsp[-4].d,MSH_SURF_PLAN,0,0,0,0,0,NULL,yyvsp[-1].l,NULL); - yyval.s.Type = MSH_SURF_PLAN; - yyval.s.Num = (int)yyvsp[-4].d; - ; - break;} -case 175: -#line 1277 "Gmsh.y" -{ - Surface *s,*support; - support = FindSurface((int)yyvsp[-4].d,THEM); - if(!support) - vyyerror("Unkown Surface %d", (int)yyvsp[-4].d); - else{ - Cdbz101((int)yyvsp[-8].d,MSH_SURF_PLAN,0,0,0,0,0,NULL,yyvsp[-2].l,NULL); - s = FindSurface((int)yyvsp[-8].d,THEM); - if(!s) - vyyerror("Unkown Surface %d", (int)yyvsp[-8].d); - else{ - s->Typ = MSH_SURF_TRIMMED; - s->Support = support; - yyval.s.Type = MSH_SURF_TRIMMED; - yyval.s.Num = (int)yyvsp[-8].d; - } - } - ; - break;} -case 176: -#line 1296 "Gmsh.y" -{ - List_Read(yyvsp[-1].l,0,&d); - i = (int)d; - EdgeLoop *el = FindEdgeLoop(i,THEM); - if(!el) - vyyerror("Unkown Line Loop %d", i); - else{ - j = List_Nbr(el->Curves); - if(j==4) - yyval.s.Type = MSH_SURF_REGL; - else if(j==3) - yyval.s.Type = MSH_SURF_TRIC; - else - vyyerror("Wrong definition of Ruled Surface %d: " - "%d borders instead of 3 or 4", - (int)yyvsp[-4].d, j); - Cdbz101((int)yyvsp[-4].d,yyval.s.Type,0,0,0,0,0,NULL,yyvsp[-1].l,NULL); - yyval.s.Num = (int)yyvsp[-4].d; - } - ; - break;} -case 177: -#line 1319 "Gmsh.y" -{ - CreateNurbsSurface ( (int) yyvsp[-16].d , (int)yyvsp[-4].d , (int)yyvsp[-2].d , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l); - yyval.s.Type = MSH_SURF_NURBS; - yyval.s.Num = (int)yyvsp[-16].d; - ; - break;} -case 178: -#line 1327 "Gmsh.y" -{ - CreateNurbsSurfaceSupport ((int)yyvsp[-16].d, (int) yyvsp[-4].d , (int) yyvsp[-2].d , yyvsp[-13].l, yyvsp[-10].l, yyvsp[-8].l); - ; - break;} -case 179: -#line 1331 "Gmsh.y" -{ - Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_SURFACE,0,0,0,0,0,NULL,yyvsp[-1].l,NULL); - yyval.s.Type = MSH_PHYSICAL_SURFACE; - yyval.s.Num = (int)yyvsp[-4].d; - ; - break;} -case 180: -#line 1337 "Gmsh.y" -{ - Cdbz101((int)yyvsp[-4].d,MSH_SURF_LOOP,0,0,0,0,0,NULL,yyvsp[-1].l,NULL); - yyval.s.Type = MSH_SURF_LOOP; - yyval.s.Num = (int)yyvsp[-4].d; - ; - break;} -case 181: -#line 1343 "Gmsh.y" -{ - yyval.s.Num = (int)yyvsp[-2].d; - Surface *s = FindSurface(yyval.s.Num,THEM); - if(!s) - vyyerror("Unknown Surface %d", yyval.s.Num); - else - yyval.s.Type = s->Typ; - ; - break;} -case 182: -#line 1355 "Gmsh.y" -{ - Cdbz101((int)yyvsp[-4].d,MSH_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL); - yyval.s.Type = MSH_VOLUME; - yyval.s.Num = (int)yyvsp[-4].d; - ; - break;} -case 183: -#line 1361 "Gmsh.y" -{ - Cdbz101((int)yyvsp[-4].d,MSH_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL); - yyval.s.Type = MSH_VOLUME; - yyval.s.Num = (int)yyvsp[-4].d; - ; - break;} -case 184: -#line 1367 "Gmsh.y" -{ - Cdbz101((int)yyvsp[-4].d,MSH_PHYSICAL_VOLUME,0,0,0,0,0,NULL,yyvsp[-1].l,NULL); - yyval.s.Type = MSH_PHYSICAL_VOLUME; - yyval.s.Num = (int)yyvsp[-4].d; - ; - break;} -case 185: -#line 1380 "Gmsh.y" -{ - TranslateShapes (yyvsp[-3].v[0],yyvsp[-3].v[1],yyvsp[-3].v[2],yyvsp[-1].l,1); - yyval.l = yyvsp[-1].l; - ; - break;} -case 186: -#line 1385 "Gmsh.y" -{ - RotateShapes(yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].d,yyvsp[-1].l); - yyval.l = yyvsp[-1].l; - ; - break;} -case 187: -#line 1390 "Gmsh.y" -{ - SymmetryShapes(yyvsp[-3].v[0],yyvsp[-3].v[1],yyvsp[-3].v[2],yyvsp[-3].v[3],yyvsp[-1].l,1); - yyval.l = yyvsp[-1].l; - ; - break;} -case 188: -#line 1395 "Gmsh.y" -{ - DilatShapes(yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].d,yyvsp[-1].l,1); - yyval.l = yyvsp[-1].l; - ; - break;} -case 189: -#line 1402 "Gmsh.y" -{ yyval.l = yyvsp[0].l; ; - break;} -case 190: -#line 1403 "Gmsh.y" -{ yyval.l = yyvsp[0].l; ; - break;} -case 191: -#line 1404 "Gmsh.y" -{ yyval.l = yyvsp[0].l; ; - break;} -case 192: -#line 1409 "Gmsh.y" -{ - yyval.l = List_Create(3,3,sizeof(Shape)); - ; - break;} -case 193: -#line 1413 "Gmsh.y" -{ - List_Add(yyval.l,&yyvsp[0].s); - yyval.l = yyvsp[-1].l; - ; - break;} -case 194: -#line 1425 "Gmsh.y" -{ - yyval.l = List_Create(3,3,sizeof(Shape)); - for(i=0;i<List_Nbr(yyvsp[-1].l);i++){ - List_Read (yyvsp[-1].l,i,&TheShape); - CopyShape(TheShape.Type,TheShape.Num,&j); - TheShape.Num = j; - List_Add(yyval.l,&TheShape); - } - ; - break;} -case 195: -#line 1443 "Gmsh.y" -{ - for(i=0;i<List_Nbr(yyvsp[-1].l);i++){ - List_Read (yyvsp[-1].l,i,&TheShape); - DeleteShape(TheShape.Type,TheShape.Num); - } - ; - break;} -case 196: -#line 1450 "Gmsh.y" -{ - if(!strcmp(yyvsp[-4].c, "View")) - FreeView((int)yyvsp[-2].d); - ; - break;} -case 197: -#line 1455 "Gmsh.y" -{ - Init_Mesh(THEM, 1); - ; - break;} -case 198: -#line 1467 "Gmsh.y" -{ - if(!strcmp(yyvsp[-2].c, "Include")){ - - yyinTab[RecursionLevel++] = yyin; - - strcpy(tmpstring, yyname); - i = strlen(yyname)-1 ; - while(i >= 0 && yyname[i] != '/' && yyname[i] != '\\') i-- ; - tmpstring[i+1] = '\0'; - strcat(tmpstring,yyvsp[-1].c); - - if((yyin = fopen(tmpstring,"r"))){ - Msg(INFO, "Including '%s'", tmpstring); - strcpy(yynameTab[RecursionLevel-1],yyname); - yylinenoTab[RecursionLevel-1]=yylineno; - yylineno=1; - strcpy(yyname,tmpstring); - while(!feof(yyin)){ - yyparse(); - } - // - //Est-ce grave de laisser le stream ouvert? Si on fait le - //fclose, on ne peut pas faire appel a une fonction - //(Function) definie en dehors de son fichier de - //definition... - // - //fclose(yyin); - yyin = yyinTab[--RecursionLevel]; - strcpy(yyname,yynameTab[RecursionLevel]); - yylineno = yylinenoTab[RecursionLevel]; - } - else{ - vyyerror("Unknown file '%s'", tmpstring) ; - yyin = yyinTab[--RecursionLevel]; - } - - } - else if(!strcmp(yyvsp[-2].c, "Print")){ - if(!CTX.batch) CreateOutputFile(yyvsp[-1].c, CTX.print.format); - } - else if(!strcmp(yyvsp[-2].c, "Save")){ - CreateOutputFile(yyvsp[-1].c, CTX.mesh.format); - } - else if(!strcmp(yyvsp[-2].c, "Merge")){ - - FILE *ff = yyin; - MergeProblem(yyvsp[-1].c); - yyin = ff; - - } - else if(!strcmp(yyvsp[-2].c, "Open")){ - - FILE *ff = yyin; - OpenProblem(yyvsp[-1].c); - yyin = ff; - - } - else if(!strcmp(yyvsp[-2].c, "System")){ - - Msg(PARSER_INFO, "Executing system call \"%s\"", yyvsp[-1].c); - system(yyvsp[-1].c); - - } - else - vyyerror("Unknown command '%s'", yyvsp[-2].c); - ; - break;} -case 199: -#line 1534 "Gmsh.y" -{ - if(!strcmp(yyvsp[-2].c, "Sleep")){ - - long sleep_time = GetTime(); - while(1){ - if(GetTime() - sleep_time > (long)(yyvsp[-1].d*1.e6)) break; - } - - } - else if(!strcmp(yyvsp[-2].c, "Mesh")){ - - //Maillage_Dimension_0(THEM); - //mai3d(THEM,(int)$2); - vyyerror("Mesh directives are not (yet) allowed in scripts"); - - } - else - vyyerror("Unknown command '%s'", yyvsp[-2].c); - ; - break;} -case 200: -#line 1554 "Gmsh.y" -{ -#ifndef _NOPLUGIN - GMSH_PluginManager::Instance()->Action(yyvsp[-4].c,yyvsp[-1].c,0); -#endif - ; - break;} -case 201: -#line 1560 "Gmsh.y" -{ - exit(0); - ; - break;} -case 202: -#line 1564 "Gmsh.y" -{ - if(!CTX.batch){ // we're in interactive mode - if(Tree_Nbr(THEM->Points) != Last_NumberOfPoints){ - Last_NumberOfPoints = Tree_Nbr(THEM->Points); - Replot(); - DrawUI(); - } - else{ - Draw(); - DrawUI(); - } - } - ; - break;} -case 203: -#line 1586 "Gmsh.y" -{ - FILE* ff; - if(RecursionLevel) - ff = yyinTab[RecursionLevel-1]; - else - ff = yyin; - // here, we seek remember the position in yyin - LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d ; - LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d ; - LoopControlVariablesTab[ImbricatedLoop][2] = 1.0 ; - LoopControlVariablesNameTab[ImbricatedLoop] = "" ; - fgetpos( ff, &yyposImbricatedLoopsTab[ImbricatedLoop++]); - ; - break;} -case 204: -#line 1600 "Gmsh.y" -{ - FILE* ff; - if(RecursionLevel) - ff = yyinTab[RecursionLevel-1]; - else - ff = yyin; - // here, we seek remember the position in yyin - LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d ; - LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d ; - LoopControlVariablesTab[ImbricatedLoop][2] = yyvsp[-1].d ; - LoopControlVariablesNameTab[ImbricatedLoop] = "" ; - fgetpos( ff, &yyposImbricatedLoopsTab[ImbricatedLoop++]); - ; - break;} -case 205: -#line 1614 "Gmsh.y" -{ - FILE* ff; - if(RecursionLevel) - ff = yyinTab[RecursionLevel-1]; - else - ff = yyin; - // here, we seek remember the position in yyin - LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d ; - LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d ; - LoopControlVariablesTab[ImbricatedLoop][2] = 1.0 ; - LoopControlVariablesNameTab[ImbricatedLoop] = yyvsp[-6].c ; - - TheSymbol.Name = yyvsp[-6].c; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){ - TheSymbol.val = List_Create(1,1,sizeof(double)); - List_Put(TheSymbol.val, 0, &yyvsp[-3].d); - List_Add(Symbol_L, &TheSymbol); - } - else{ - List_Write(pSymbol->val, 0, &yyvsp[-3].d); - } - - fgetpos( ff, &yyposImbricatedLoopsTab[ImbricatedLoop++]); - ; - break;} -case 206: -#line 1639 "Gmsh.y" -{ - FILE* ff; - if(RecursionLevel) - ff = yyinTab[RecursionLevel-1]; - else - ff = yyin; - // here, we seek remember the position in yyin - LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d ; - LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d ; - LoopControlVariablesTab[ImbricatedLoop][2] = yyvsp[-1].d ; - LoopControlVariablesNameTab[ImbricatedLoop] = yyvsp[-8].c ; - - TheSymbol.Name = yyvsp[-8].c; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){ - TheSymbol.val = List_Create(1,1,sizeof(double)); - List_Put(TheSymbol.val, 0, &yyvsp[-5].d); - List_Add(Symbol_L, &TheSymbol); - } - else{ - List_Write(pSymbol->val, 0, &yyvsp[-5].d); - } - - fgetpos( ff, &yyposImbricatedLoopsTab[ImbricatedLoop++]); - ; - break;} -case 207: -#line 1664 "Gmsh.y" -{ - if(LoopControlVariablesTab[ImbricatedLoop-1][1] > - LoopControlVariablesTab[ImbricatedLoop-1][0]){ - FILE* ff; - if(RecursionLevel) - ff = yyinTab[RecursionLevel-1]; - else - ff = yyin; - - LoopControlVariablesTab[ImbricatedLoop-1][0] += - LoopControlVariablesTab[ImbricatedLoop-1][2]; - - if(strlen(LoopControlVariablesNameTab[ImbricatedLoop-1])){ - TheSymbol.Name = LoopControlVariablesNameTab[ImbricatedLoop-1]; - pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols); - *(double*)List_Pointer_Fast(pSymbol->val, 0) += - LoopControlVariablesTab[ImbricatedLoop-1][2] ; - } - - fsetpos( yyin, &yyposImbricatedLoopsTab[ImbricatedLoop-1]); - } - else{ - ImbricatedLoop--; - } - ; - break;} -case 208: -#line 1690 "Gmsh.y" -{ - if(!FunctionManager::Instance()->createFunction(yyvsp[0].c,yyin,yylineno)) - vyyerror("Redefinition of function %s",yyvsp[0].c); - skip_until(NULL, "Return"); - ; - break;} -case 209: -#line 1696 "Gmsh.y" -{ - if(!FunctionManager::Instance()->leaveFunction(&yyin,yylineno)) - vyyerror("Error while exiting function"); - ; - break;} -case 210: -#line 1701 "Gmsh.y" -{ - if(!FunctionManager::Instance()->enterFunction(yyvsp[-1].c,&yyin,yylineno)) - vyyerror("Unknown function %s",yyvsp[-1].c); - ; - break;} -case 211: -#line 1706 "Gmsh.y" -{ - if(!yyvsp[-1].d) skip_until("If", "EndIf"); - ; - break;} -case 212: -#line 1710 "Gmsh.y" -{ - ; - break;} -case 213: -#line 1721 "Gmsh.y" -{ - Curve *pc, *prc; - Extrude_ProtudePoint(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,&pc,&prc,NULL); - ; - break;} -case 214: -#line 1726 "Gmsh.y" -{ - Curve *pc, *prc; - Extrude_ProtudePoint(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d, - &pc,&prc,NULL); - ; - break;} -case 215: -#line 1732 "Gmsh.y" -{ - Extrude_ProtudeCurve(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,NULL); - ; - break;} -case 216: -#line 1736 "Gmsh.y" -{ - Extrude_ProtudeCurve(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,NULL); - ; - break;} -case 217: -#line 1740 "Gmsh.y" -{ - Extrude_ProtudeSurface(1,(int)yyvsp[-4].d,yyvsp[-2].v[0],yyvsp[-2].v[1],yyvsp[-2].v[2],0.,0.,0.,0.,0,NULL); - ; - break;} -case 218: -#line 1744 "Gmsh.y" -{ - Extrude_ProtudeSurface(0,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],yyvsp[-4].v[0],yyvsp[-4].v[1],yyvsp[-4].v[2],yyvsp[-2].d,0,NULL); - ; - break;} -case 219: -#line 1748 "Gmsh.y" -{ - extr.mesh.ExtrudeMesh = false; - extr.mesh.Recombine = false; - ; - break;} -case 220: -#line 1753 "Gmsh.y" -{ - int vol = NEWREG(); - Extrude_ProtudeSurface(1,(int)yyvsp[-8].d,yyvsp[-6].v[0],yyvsp[-6].v[1],yyvsp[-6].v[2],0.,0.,0.,0.,vol,&extr); - ; - break;} -case 221: -#line 1758 "Gmsh.y" -{ - extr.mesh.ExtrudeMesh = false; - extr.mesh.Recombine = false; - ; - break;} -case 222: -#line 1764 "Gmsh.y" -{ - int vol = NEWREG(); - Extrude_ProtudeSurface(0,(int)yyvsp[-12].d,yyvsp[-10].v[0],yyvsp[-10].v[1],yyvsp[-10].v[2],yyvsp[-8].v[0],yyvsp[-8].v[1],yyvsp[-8].v[2],yyvsp[-6].d,vol,&extr); - ; - break;} -case 223: -#line 1772 "Gmsh.y" -{ - ; - break;} -case 224: -#line 1775 "Gmsh.y" -{ - ; - break;} -case 225: -#line 1781 "Gmsh.y" -{ - double d; - int j; - extr.mesh.ExtrudeMesh = true; - extr.mesh.NbLayer = List_Nbr(yyvsp[-6].l); - for(int i=0;i<List_Nbr(yyvsp[-6].l);i++){ - List_Read(yyvsp[-6].l,i,&d); - j = (int)d; - extr.mesh.NbElmLayer[i] = j; - List_Read(yyvsp[-4].l,i,&d); - j = (int)d; - extr.mesh.ZonLayer[i] = j; - List_Read(yyvsp[-2].l,i,&d); - extr.mesh.hLayer[i] = d; - } - List_Delete(yyvsp[-6].l); - List_Delete(yyvsp[-4].l); - List_Delete(yyvsp[-2].l); - ; - break;} -case 226: -#line 1801 "Gmsh.y" -{ - extr.mesh.Recombine = true; - ; - break;} -case 227: -#line 1812 "Gmsh.y" -{ - Curve *c; - for(i=0;i<List_Nbr(yyvsp[-3].l);i++){ - List_Read(yyvsp[-3].l,i,&d); - j = (int)fabs(d); - c = FindCurve(j,THEM); - if(!c) - Msg(WARNING, "Unkown Curve %d", j); - else{ - c->Method = TRANSFINI; - c->ipar[0] = (int)yyvsp[-1].d; - c->ipar[1] = sign(d); - c->dpar[0] = 1.0; - } - } - List_Delete(yyvsp[-3].l); - ; - break;} -case 228: -#line 1830 "Gmsh.y" -{ - Curve *c; - for(i=0;i<List_Nbr(yyvsp[-6].l);i++){ - List_Read(yyvsp[-6].l,i,&d); - j = (int)fabs(d); - c = FindCurve(j,THEM); - if(!c) - Msg(WARNING, "Unkown Curve %d", j); - else{ - c->Method = TRANSFINI; - c->ipar[0] = (int)yyvsp[-4].d; - c->ipar[1] = sign(d); /* Progresion : code 1 ou -1 */ - c->dpar[0] = fabs(yyvsp[-1].d); - } - } - List_Delete(yyvsp[-6].l); - ; - break;} -case 229: -#line 1848 "Gmsh.y" -{ - Curve *c; - for(i=0;i<List_Nbr(yyvsp[-6].l);i++){ - List_Read(yyvsp[-6].l,i,&d); - j = (int)fabs(d); - c = FindCurve(j,THEM); - if(!c) - Msg(WARNING, "Unkown Curve %d", j); - else{ - c->Method = TRANSFINI; - c->ipar[0] = (int)yyvsp[-4].d; - c->ipar[1] = 2*sign(d); /* Bump : code 2 ou -2 */ - c->dpar[0] = fabs(yyvsp[-1].d); - } - } - List_Delete(yyvsp[-6].l); - ; - break;} -case 230: -#line 1866 "Gmsh.y" -{ - Surface *s = FindSurface((int)yyvsp[-4].d,THEM); - if(!s) - Msg(WARNING, "Unkown Surface %d", (int)yyvsp[-4].d); - else{ - s->Method = TRANSFINI; - k = List_Nbr(yyvsp[-1].l); - if(k!=3 && k!=4){ - vyyerror("Wrong definition of Transfinite Surface %d: " - "%d points instead of 3 or 4" , yyvsp[-4].d, k) ; - } - else{ - for(i=0;i<k;i++){ - List_Read(yyvsp[-1].l,i,&d); - j = (int)fabs(d); - s->ipar[i] = j; - } - } - } - List_Delete(yyvsp[-1].l); - ; - break;} -case 231: -#line 1888 "Gmsh.y" -{ - Surface *s = FindSurface((int)yyvsp[-4].d,THEM); - if(!s) - Msg(WARNING, "Unkown Surface %d", (int)yyvsp[-4].d); - else{ - s->Method = ELLIPTIC; - k = List_Nbr(yyvsp[-1].l); - if(k != 4) - vyyerror("Wrong definition of Elliptic Surface %d: " - "%d points instead of 4" , yyvsp[-4].d, k) ; - else{ - for(i=0;i<k;i++){ - List_Read(yyvsp[-1].l,i,&d); - j = (int)fabs(d); - s->ipar[i] = j; - } - } - } - List_Delete(yyvsp[-1].l); - ; - break;} -case 232: -#line 1909 "Gmsh.y" -{ - Volume *v = FindVolume((int)yyvsp[-4].d,THEM); - if(!v) - Msg(WARNING, "Unkown Volume %d", (int)yyvsp[-4].d); - else{ - v->Method = TRANSFINI; - k = List_Nbr(yyvsp[-1].l); - if(k!=6 && k!=8) - vyyerror("Wrong definition of Transfinite Volume %d: " - "%d points instead of 6 or 8" , yyvsp[-4].d, k) ; - else{ - for(i=0;i<k;i++){ - List_Read(yyvsp[-1].l,i,&d); - j = (int)fabs(d); - v->ipar[i] = j; - } - } - } - List_Delete(yyvsp[-1].l); - ; - break;} -case 233: -#line 1930 "Gmsh.y" -{ - Surface *s; - for(i=0;i<List_Nbr(yyvsp[-3].l);i++){ - List_Read(yyvsp[-3].l,i,&d); - j = (int)d; - s = FindSurface(j,THEM); - if(s){ - s->Recombine = 1; - s->RecombineAngle = (yyvsp[-1].d > 0 && yyvsp[-1].d < 90) ? yyvsp[-1].d : 90; - } - } - List_Delete(yyvsp[-3].l); - ; - break;} -case 234: -#line 1944 "Gmsh.y" -{ - Surface *s; - for(i=0;i<List_Nbr(yyvsp[-1].l);i++){ - List_Read(yyvsp[-1].l,i,&d); - j = (int)d; - s = FindSurface(j,THEM); - if(s){ - s->Recombine = 1; - s->RecombineAngle = 30.; - } - } - List_Delete(yyvsp[-1].l); - ; - break;} -case 235: -#line 1966 "Gmsh.y" -{ - Coherence_PS(); - ; - break;} -case 236: -#line 1970 "Gmsh.y" -{ - IntersectAllSegmentsTogether(); - ; - break;} -case 237: -#line 1981 "Gmsh.y" -{yyval.i = 1;; - break;} -case 238: -#line 1982 "Gmsh.y" -{yyval.i = 0;; - break;} -case 239: -#line 1983 "Gmsh.y" -{yyval.i = -1;; - break;} -case 240: -#line 1984 "Gmsh.y" -{yyval.i = -1;; - break;} -case 241: -#line 1985 "Gmsh.y" -{yyval.i = -1;; - break;} -case 242: -#line 1989 "Gmsh.y" -{ yyval.d = yyvsp[0].d; ; - break;} -case 243: -#line 1990 "Gmsh.y" -{ yyval.d = yyvsp[-1].d ; ; - break;} -case 244: -#line 1991 "Gmsh.y" -{ yyval.d = -yyvsp[0].d ; ; - break;} -case 245: -#line 1992 "Gmsh.y" -{ yyval.d = yyvsp[0].d; ; - break;} -case 246: -#line 1993 "Gmsh.y" -{ yyval.d = !yyvsp[0].d ; ; - break;} -case 247: -#line 1994 "Gmsh.y" -{ yyval.d = yyvsp[-2].d - yyvsp[0].d ; ; - break;} -case 248: -#line 1995 "Gmsh.y" -{ yyval.d = yyvsp[-2].d + yyvsp[0].d ; ; - break;} -case 249: -#line 1996 "Gmsh.y" -{ yyval.d = yyvsp[-2].d * yyvsp[0].d ; ; - break;} -case 250: -#line 1998 "Gmsh.y" -{ - if(!yyvsp[0].d) - vyyerror("Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d); - else - yyval.d = yyvsp[-2].d / yyvsp[0].d ; - ; - break;} -case 251: -#line 2004 "Gmsh.y" -{ yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d ; ; - break;} -case 252: -#line 2005 "Gmsh.y" -{ yyval.d = pow(yyvsp[-2].d,yyvsp[0].d) ; ; - break;} -case 253: -#line 2006 "Gmsh.y" -{ yyval.d = yyvsp[-2].d < yyvsp[0].d ; ; - break;} -case 254: -#line 2007 "Gmsh.y" -{ yyval.d = yyvsp[-2].d > yyvsp[0].d ; ; - break;} -case 255: -#line 2008 "Gmsh.y" -{ yyval.d = yyvsp[-2].d <= yyvsp[0].d ; ; - break;} -case 256: -#line 2009 "Gmsh.y" -{ yyval.d = yyvsp[-2].d >= yyvsp[0].d ; ; - break;} -case 257: -#line 2010 "Gmsh.y" -{ yyval.d = yyvsp[-2].d == yyvsp[0].d ; ; - break;} -case 258: -#line 2011 "Gmsh.y" -{ yyval.d = yyvsp[-2].d != yyvsp[0].d ; ; - break;} -case 259: -#line 2012 "Gmsh.y" -{ yyval.d = yyvsp[-2].d && yyvsp[0].d ; ; - break;} -case 260: -#line 2013 "Gmsh.y" -{ yyval.d = yyvsp[-2].d || yyvsp[0].d ; ; - break;} -case 261: -#line 2014 "Gmsh.y" -{ yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d ; ; - break;} -case 262: -#line 2015 "Gmsh.y" -{ yyval.d = exp(yyvsp[-1].d); ; - break;} -case 263: -#line 2016 "Gmsh.y" -{ yyval.d = log(yyvsp[-1].d); ; - break;} -case 264: -#line 2017 "Gmsh.y" -{ yyval.d = log10(yyvsp[-1].d); ; - break;} -case 265: -#line 2018 "Gmsh.y" -{ yyval.d = sqrt(yyvsp[-1].d); ; - break;} -case 266: -#line 2019 "Gmsh.y" -{ yyval.d = sin(yyvsp[-1].d); ; - break;} -case 267: -#line 2020 "Gmsh.y" -{ yyval.d = asin(yyvsp[-1].d); ; - break;} -case 268: -#line 2021 "Gmsh.y" -{ yyval.d = cos(yyvsp[-1].d); ; - break;} -case 269: -#line 2022 "Gmsh.y" -{ yyval.d = acos(yyvsp[-1].d); ; - break;} -case 270: -#line 2023 "Gmsh.y" -{ yyval.d = tan(yyvsp[-1].d); ; - break;} -case 271: -#line 2024 "Gmsh.y" -{ yyval.d = atan(yyvsp[-1].d); ; - break;} -case 272: -#line 2025 "Gmsh.y" -{ yyval.d = atan2(yyvsp[-3].d,yyvsp[-1].d); ; - break;} -case 273: -#line 2026 "Gmsh.y" -{ yyval.d = sinh(yyvsp[-1].d); ; - break;} -case 274: -#line 2027 "Gmsh.y" -{ yyval.d = cosh(yyvsp[-1].d); ; - break;} -case 275: -#line 2028 "Gmsh.y" -{ yyval.d = tanh(yyvsp[-1].d); ; - break;} -case 276: -#line 2029 "Gmsh.y" -{ yyval.d = fabs(yyvsp[-1].d); ; - break;} -case 277: -#line 2030 "Gmsh.y" -{ yyval.d = floor(yyvsp[-1].d); ; - break;} -case 278: -#line 2031 "Gmsh.y" -{ yyval.d = ceil(yyvsp[-1].d); ; - break;} -case 279: -#line 2032 "Gmsh.y" -{ yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d); ; - break;} -case 280: -#line 2033 "Gmsh.y" -{ yyval.d = fmod(yyvsp[-3].d,yyvsp[-1].d); ; - break;} -case 281: -#line 2034 "Gmsh.y" -{ yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ; - break;} -case 282: -#line 2035 "Gmsh.y" -{ yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ; - break;} -case 283: -#line 2044 "Gmsh.y" -{ yyval.d = yyvsp[0].d; ; - break;} -case 284: -#line 2045 "Gmsh.y" -{ yyval.d = 3.141592653589793; ; - break;} -case 285: -#line 2046 "Gmsh.y" -{ yyval.d = ParUtil::Instance()->rank(); ; - break;} -case 286: -#line 2047 "Gmsh.y" -{ yyval.d = ParUtil::Instance()->size(); ; - break;} -case 287: -#line 2052 "Gmsh.y" -{ - TheSymbol.Name = yyvsp[0].c ; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { - vyyerror("Unknown variable '%s'", yyvsp[0].c) ; - yyval.d = 0. ; - } - else - yyval.d = *(double*)List_Pointer_Fast(pSymbol->val, 0) ; - ; - break;} -case 288: -#line 2063 "Gmsh.y" -{ - TheSymbol.Name = yyvsp[-3].c ; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { - vyyerror("Unknown variable '%s'", yyvsp[-3].c) ; - yyval.d = 0. ; - } - else{ - if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-1].d))) - yyval.d = *pd ; - else{ - vyyerror("Uninitialized variable '%s[%d]'", yyvsp[-3].c, (int)yyvsp[-1].d) ; - yyval.d = 0. ; - } - } - ; - break;} -case 289: -#line 2080 "Gmsh.y" -{ - TheSymbol.Name = yyvsp[-1].c ; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { - vyyerror("Unknown variable '%s'", yyvsp[-1].c) ; - yyval.d = 0. ; - } - else - yyval.d = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += yyvsp[0].i) ; - ; - break;} -case 290: -#line 2091 "Gmsh.y" -{ - TheSymbol.Name = yyvsp[-4].c ; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { - vyyerror("Unknown variable '%s'", yyvsp[-4].c) ; - yyval.d = 0. ; - } - else{ - if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)yyvsp[-2].d))) - yyval.d = (*pd += yyvsp[0].i) ; - else{ - vyyerror("Uninitialized variable '%s[%d]'", yyvsp[-4].c, (int)yyvsp[-2].d) ; - yyval.d = 0. ; - } - } - ; - break;} -case 291: -#line 2110 "Gmsh.y" -{ - if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-2].c))){ - vyyerror("Unknown numeric option class '%s'", yyvsp[-2].c); - yyval.d = 0. ; - } - else{ - if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[0].c, pNumCat))){ - vyyerror("Unknown numeric option '%s.%s'", yyvsp[-2].c, yyvsp[0].c); - yyval.d = 0. ; - } - else - yyval.d = pNumOpt(0, GMSH_GET, 0); - } - ; - break;} -case 292: -#line 2126 "Gmsh.y" -{ - if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-5].c))){ - vyyerror("Unknown numeric option class '%s'", yyvsp[-5].c); - yyval.d = 0. ; - } - else{ - if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[0].c, pNumCat))){ - vyyerror("Unknown numeric option '%s[%d].%s'", yyvsp[-5].c, (int)yyvsp[-3].d, yyvsp[0].c); - yyval.d = 0. ; - } - else - yyval.d = pNumOpt((int)yyvsp[-3].d, GMSH_GET, 0); - } - ; - break;} -case 293: -#line 2142 "Gmsh.y" -{ - if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-3].c))){ - vyyerror("Unknown numeric option class '%s'", yyvsp[-3].c); - yyval.d = 0. ; - } - else{ - if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-1].c, pNumCat))){ - vyyerror("Unknown numeric option '%s.%s'", yyvsp[-3].c, yyvsp[-1].c); - yyval.d = 0. ; - } - else - yyval.d = pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+yyvsp[0].i); - } - ; - break;} -case 294: -#line 2158 "Gmsh.y" -{ - if(!(pNumCat = Get_NumberOptionCategory(yyvsp[-6].c))){ - vyyerror("Unknown numeric option class '%s'", yyvsp[-6].c); - yyval.d = 0. ; - } - else{ - if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption(yyvsp[-1].c, pNumCat))){ - vyyerror("Unknown numeric option '%s[%d].%s'", yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-1].c); - yyval.d = 0. ; - } - else - yyval.d = pNumOpt((int)yyvsp[-4].d, GMSH_SET|GMSH_GUI, pNumOpt((int)yyvsp[-4].d, GMSH_GET, 0)+yyvsp[0].i); - } - ; - break;} -case 295: -#line 2176 "Gmsh.y" -{ - memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double)) ; - ; - break;} -case 296: -#line 2180 "Gmsh.y" -{ - for(i=0 ; i<5 ; i++) yyval.v[i] = -yyvsp[0].v[i] ; - ; - break;} -case 297: -#line 2184 "Gmsh.y" -{ - for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[0].v[i]; - ; - break;} -case 298: -#line 2188 "Gmsh.y" -{ - for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i] ; - ; - break;} -case 299: -#line 2192 "Gmsh.y" -{ - for(i=0 ; i<5 ; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i] ; - ; - break;} -case 300: -#line 2198 "Gmsh.y" -{ - yyval.v[0]=yyvsp[-9].d; yyval.v[1]=yyvsp[-7].d; yyval.v[2]=yyvsp[-5].d; yyval.v[3]=yyvsp[-3].d; yyval.v[4]=yyvsp[-1].d; - ; - break;} -case 301: -#line 2202 "Gmsh.y" -{ - yyval.v[0]=yyvsp[-7].d; yyval.v[1]=yyvsp[-5].d; yyval.v[2]=yyvsp[-3].d; yyval.v[3]=yyvsp[-1].d; yyval.v[4]=1.0; - ; - break;} -case 302: -#line 2206 "Gmsh.y" -{ - yyval.v[0]=yyvsp[-5].d; yyval.v[1]=yyvsp[-3].d; yyval.v[2]=yyvsp[-1].d; yyval.v[3]=0.0; yyval.v[4]=1.0; - ; - break;} -case 303: -#line 2210 "Gmsh.y" -{ - yyval.v[0]=yyvsp[-5].d; yyval.v[1]=yyvsp[-3].d; yyval.v[2]=yyvsp[-1].d; yyval.v[3]=0.0; yyval.v[4]=1.0; - ; - break;} -case 304: -#line 2217 "Gmsh.y" -{ - ; - break;} -case 305: -#line 2220 "Gmsh.y" -{ - ; - break;} -case 306: -#line 2226 "Gmsh.y" -{ - ; - break;} -case 307: -#line 2229 "Gmsh.y" -{ - ; - break;} -case 308: -#line 2235 "Gmsh.y" -{ - ; - break;} -case 309: -#line 2238 "Gmsh.y" -{ - yyval.l=yyvsp[-1].l; - ; - break;} -case 310: -#line 2242 "Gmsh.y" -{ - yyval.l=yyvsp[-1].l; - ; - break;} -case 311: -#line 2249 "Gmsh.y" -{ - yyval.l = List_Create(2,1,sizeof(List_T*)) ; - List_Add(yyval.l, &(yyvsp[0].l)) ; - ; - break;} -case 312: -#line 2254 "Gmsh.y" -{ - List_Add(yyval.l, &(yyvsp[0].l)) ; - ; - break;} -case 313: -#line 2262 "Gmsh.y" -{ - yyval.l = List_Create(2,1,sizeof(double)) ; - List_Add(yyval.l, &(yyvsp[0].d)) ; - ; - break;} -case 314: -#line 2267 "Gmsh.y" -{ - yyval.l = yyvsp[0].l ; - ; - break;} -case 315: -#line 2271 "Gmsh.y" -{ - yyval.l=yyvsp[-1].l; - ; - break;} -case 316: -#line 2275 "Gmsh.y" -{ - yyval.l=yyvsp[-1].l; - for(i=0 ; i<List_Nbr(yyval.l) ; i++){ - pd = (double*)List_Pointer(yyval.l, i); - (*pd) = - (*pd); - } - ; - break;} -case 317: -#line 2286 "Gmsh.y" -{ - yyval.l = List_Create(2,1,sizeof(double)) ; - for(d=yyvsp[-2].d ; (yyvsp[-2].d<yyvsp[0].d)?(d<=yyvsp[0].d):(d>=yyvsp[0].d) ; (yyvsp[-2].d<yyvsp[0].d)?(d+=1.):(d-=1.)) - List_Add(yyval.l, &d) ; - ; - break;} -case 318: -#line 2292 "Gmsh.y" -{ - yyval.l = List_Create(2,1,sizeof(double)) ; - if(!yyvsp[0].d || (yyvsp[-4].d<yyvsp[-2].d && yyvsp[0].d<0) || (yyvsp[-4].d>yyvsp[-2].d && yyvsp[0].d>0)){ - vyyerror("Wrong increment in '%g:%g:%g'", yyvsp[-4].d, yyvsp[-2].d, yyvsp[0].d) ; - List_Add(yyval.l, &(yyvsp[-4].d)) ; - } - else - for(d=yyvsp[-4].d ; (yyvsp[0].d>0)?(d<=yyvsp[-2].d):(d>=yyvsp[-2].d) ; d+=yyvsp[0].d) - List_Add(yyval.l, &d) ; - ; - break;} -case 319: -#line 2303 "Gmsh.y" -{ - yyval.l = List_Create(2,1,sizeof(double)) ; - TheSymbol.Name = yyvsp[-2].c ; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { - vyyerror("Unknown variable '%s'", yyvsp[-2].c) ; - d = 0.0 ; - List_Add(yyval.l, &d); - } - else{ - for(i = 0 ; i < List_Nbr(pSymbol->val) ; i++) - List_Add(yyval.l, (double*)List_Pointer_Fast(pSymbol->val, i)) ; - } - ; - break;} -case 320: -#line 2317 "Gmsh.y" -{ - yyval.l = List_Create(2,1,sizeof(double)) ; - TheSymbol.Name = yyvsp[-2].c ; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { - vyyerror("Unknown variable '%s'", yyvsp[-2].c) ; - d = 0.0 ; - List_Add(yyval.l, &d); - } - else{ - for(i = 0 ; i < List_Nbr(pSymbol->val) ; i++){ - d = - *(double*)List_Pointer_Fast(pSymbol->val, i); - List_Add(yyval.l, &d) ; - } - } - ; - break;} -case 321: -#line 2333 "Gmsh.y" -{ - yyval.l = List_Create(2,1,sizeof(double)) ; - TheSymbol.Name = yyvsp[-5].c ; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { - vyyerror("Unknown variable '%s'", yyvsp[-5].c) ; - d = 0.0 ; - List_Add(yyval.l, &d); - } - else{ - for(i = 0 ; i < List_Nbr(yyvsp[-2].l) ; i++){ - j = (int)(*(double*)List_Pointer_Fast(yyvsp[-2].l, i)); - if((pd = (double*)List_Pointer_Test(pSymbol->val, j))) - List_Add(yyval.l, pd) ; - else - vyyerror("Uninitialized variable '%s[%d]'", yyvsp[-5].c, j) ; - } - } - List_Delete(yyvsp[-2].l); - ; - break;} -case 322: -#line 2353 "Gmsh.y" -{ - yyval.l = List_Create(2,1,sizeof(double)) ; - TheSymbol.Name = yyvsp[-5].c ; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { - vyyerror("Unknown variable '%s'", yyvsp[-5].c) ; - d = 0.0 ; - List_Add(yyval.l, &d); - } - else{ - for(i = 0 ; i < List_Nbr(yyvsp[-2].l) ; i++){ - j = (int)(*(double*)List_Pointer_Fast(yyvsp[-2].l, i)); - if((pd = (double*)List_Pointer_Test(pSymbol->val, j))){ - d = - *pd; - List_Add(yyval.l, &d) ; - } - else - vyyerror("Uninitialized variable '%s[%d]'", yyvsp[-5].c, j) ; - } - } - List_Delete(yyvsp[-2].l); - ; - break;} -case 323: -#line 2378 "Gmsh.y" -{ - yyval.l = List_Create(2,1,sizeof(double)) ; - List_Add(yyval.l, &(yyvsp[0].d)) ; - ; - break;} -case 324: -#line 2383 "Gmsh.y" -{ - yyval.l = yyvsp[0].l ; - ; - break;} -case 325: -#line 2387 "Gmsh.y" -{ - List_Add(yyval.l, &(yyvsp[0].d)) ; - ; - break;} -case 326: -#line 2391 "Gmsh.y" -{ - for(i=0 ; i<List_Nbr(yyvsp[0].l) ; i++){ - List_Read(yyvsp[0].l, i, &d) ; - List_Add(yyval.l, &d) ; - } - List_Delete(yyvsp[0].l); - ; - break;} -case 327: -#line 2403 "Gmsh.y" -{ - yyval.u = PACK_COLOR((int)yyvsp[-7].d, (int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d); - ; - break;} -case 328: -#line 2407 "Gmsh.y" -{ - yyval.u = PACK_COLOR((int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d, 255); - ; - break;} -case 329: -#line 2418 "Gmsh.y" -{ - yyval.u = Get_ColorForString(ColorString, -1, yyvsp[0].c, &flag); - if(flag) vyyerror("Unknown color '%s'", yyvsp[0].c); - ; - break;} -case 330: -#line 2423 "Gmsh.y" -{ - if(!(pColCat = Get_ColorOptionCategory(yyvsp[-4].c))){ - vyyerror("Unknown color option class '%s'", yyvsp[-4].c); - yyval.u = 0 ; - } - else{ - if(!(pColOpt = (unsigned int (*) (int, int, unsigned int))Get_ColorOption(yyvsp[0].c, pColCat))){ - vyyerror("Unknown color option '%s.Color.%s'", yyvsp[-4].c, yyvsp[0].c); - yyval.u = 0 ; - } - else{ - yyval.u = pColOpt(0,GMSH_GET,0) ; - } - } - ; - break;} -case 331: -#line 2442 "Gmsh.y" -{ - yyval.l = yyvsp[-1].l; - ; - break;} -case 332: -#line 2446 "Gmsh.y" -{ - yyval.l = List_Create(256,10,sizeof(unsigned int)) ; - ColorTable *ct = Get_ColorTable((int)yyvsp[-3].d); - if(!ct) - vyyerror("View[%d] does not exist", (int)yyvsp[-3].d); - else{ - for(i=0 ; i<ct->size ; i++) - List_Add(yyval.l, &ct->table[i]); - } - ; - break;} -case 333: -#line 2460 "Gmsh.y" -{ - yyval.l = List_Create(256,10,sizeof(unsigned int)) ; - List_Add(yyval.l, &(yyvsp[0].u)) ; - ; - break;} -case 334: -#line 2465 "Gmsh.y" -{ - List_Add(yyval.l, &(yyvsp[0].u)) ; - ; - break;} -case 335: -#line 2472 "Gmsh.y" -{ - yyval.c = yyvsp[0].c; - ; - break;} -case 336: -#line 2476 "Gmsh.y" -{ - yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char)) ; - strcpy(yyval.c, yyvsp[-3].c) ; - strcat(yyval.c, yyvsp[-1].c) ; - Free(yyvsp[-3].c); - Free(yyvsp[-1].c); - ; - break;} -case 337: -#line 2484 "Gmsh.y" -{ - yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char)) ; - for(i=strlen(yyvsp[-1].c)-1; i>=0; i--){ - if(yyvsp[-1].c[i] == '.'){ - strncpy(yyval.c,yyvsp[-1].c,i); - yyval.c[i]='\0'; - break; - } - } - if(i<=0) strcpy(yyval.c,yyvsp[-1].c); - Free(yyvsp[-1].c); - ; - break;} -case 338: -#line 2497 "Gmsh.y" -{ - yyval.c = yyvsp[-1].c; - ; - break;} -case 339: -#line 2501 "Gmsh.y" -{ - for(i = 0 ; i<List_Nbr(yyvsp[-1].l) ; i++){ - if(!i){ - str = strtok(yyvsp[-3].c, "%"); - strcpy(tmpstring, str); - } - str = strtok(NULL, "%"); - if(str){ - strcpy(tmpstring2, "%"); - strcat(tmpstring2, str); - sprintf(tmpstring3, tmpstring2, *(double*)List_Pointer(yyvsp[-1].l,i)); - strcat(tmpstring, tmpstring3); - } - else{ - vyyerror("Missing %d parameter(s) in Sprintf format", - List_Nbr(yyvsp[-1].l)-i); - break ; - } - } - yyval.c = (char*)Malloc((strlen(tmpstring)+1)*sizeof(char)); - strcpy(yyval.c, tmpstring); - List_Delete(yyvsp[-1].l); - Free(yyvsp[-3].c); - ; - break;} -case 340: -#line 2526 "Gmsh.y" -{ - if(!(pStrCat = Get_StringOptionCategory(yyvsp[-3].c))) - vyyerror("Unknown string option class '%s'", yyvsp[-3].c); - else{ - if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-1].c, pStrCat))) - vyyerror("Unknown string option '%s.%s'", yyvsp[-3].c, yyvsp[-1].c); - else{ - str = pStrOpt(0,GMSH_GET,NULL) ; - yyval.c = (char*)Malloc((strlen(str)+1)*sizeof(char)); - strcpy(yyval.c, str); - } - } - ; - break;} -case 341: -#line 2540 "Gmsh.y" -{ - if(!(pStrCat = Get_StringOptionCategory(yyvsp[-6].c))) - vyyerror("Unknown string option class '%s'", yyvsp[-6].c); - else{ - if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption(yyvsp[-1].c, pStrCat))) - vyyerror("Unknown string option '%s[%d].%s'", yyvsp[-6].c, (int)yyvsp[-4].d, yyvsp[-1].c); - else{ - str = pStrOpt((int)yyvsp[-4].d,GMSH_GET,NULL) ; - yyval.c = (char*)Malloc((strlen(str)+1)*sizeof(char)); - strcpy(yyval.c, str); - } - } - ; - break;} -} - /* the action file gets copied in in place of this dollarsign */ -#line 543 "/usr/lib/bison.simple" - - yyvsp -= yylen; - yyssp -= yylen; -#ifdef YYLSP_NEEDED - yylsp -= yylen; -#endif - -#if YYDEBUG != 0 - if (yydebug) - { - short *ssp1 = yyss - 1; - fprintf (stderr, "state stack now"); - while (ssp1 != yyssp) - fprintf (stderr, " %d", *++ssp1); - fprintf (stderr, "\n"); - } -#endif - - *++yyvsp = yyval; - -#ifdef YYLSP_NEEDED - yylsp++; - if (yylen == 0) - { - yylsp->first_line = yylloc.first_line; - yylsp->first_column = yylloc.first_column; - yylsp->last_line = (yylsp-1)->last_line; - yylsp->last_column = (yylsp-1)->last_column; - yylsp->text = 0; - } - else - { - yylsp->last_line = (yylsp+yylen-1)->last_line; - yylsp->last_column = (yylsp+yylen-1)->last_column; - } -#endif - - /* Now "shift" the result of the reduction. - Determine what state that goes to, - based on the state we popped back to - and the rule number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTBASE] + *yyssp; - if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTBASE]; - - goto yynewstate; - -yyerrlab: /* here on detecting error */ - - if (! yyerrstatus) - /* If not already recovering from an error, report this error. */ - { - ++yynerrs; - -#ifdef YYERROR_VERBOSE - yyn = yypact[yystate]; - - if (yyn > YYFLAG && yyn < YYLAST) - { - int size = 0; - char *msg; - int x, count; - - count = 0; - /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ - for (x = (yyn < 0 ? -yyn : 0); - x < (sizeof(yytname) / sizeof(char *)); x++) - if (yycheck[x + yyn] == x) - size += strlen(yytname[x]) + 15, count++; - msg = (char *) malloc(size + 15); - if (msg != 0) - { - strcpy(msg, "parse error"); - - if (count < 5) - { - count = 0; - for (x = (yyn < 0 ? -yyn : 0); - x < (sizeof(yytname) / sizeof(char *)); x++) - if (yycheck[x + yyn] == x) - { - strcat(msg, count == 0 ? ", expecting `" : " or `"); - strcat(msg, yytname[x]); - strcat(msg, "'"); - count++; - } - } - yyerror(msg); - free(msg); - } - else - yyerror ("parse error; also virtual memory exceeded"); - } - else -#endif /* YYERROR_VERBOSE */ - yyerror("parse error"); - } - - goto yyerrlab1; -yyerrlab1: /* here on error raised explicitly by an action */ - - if (yyerrstatus == 3) - { - /* if just tried and failed to reuse lookahead token after an error, discard it. */ - - /* return failure if at end of input */ - if (yychar == YYEOF) - YYABORT; - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); -#endif - - yychar = YYEMPTY; - } - - /* Else will try to reuse lookahead token - after shifting the error token. */ - - yyerrstatus = 3; /* Each real token shifted decrements this */ - - goto yyerrhandle; - -yyerrdefault: /* current state does not do anything special for the error token. */ - -#if 0 - /* This is wrong; only states that explicitly want error tokens - should shift them. */ - yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ - if (yyn) goto yydefault; -#endif - -yyerrpop: /* pop the current state because it cannot handle the error token */ - - if (yyssp == yyss) YYABORT; - yyvsp--; - yystate = *--yyssp; -#ifdef YYLSP_NEEDED - yylsp--; -#endif - -#if YYDEBUG != 0 - if (yydebug) - { - short *ssp1 = yyss - 1; - fprintf (stderr, "Error: state stack now"); - while (ssp1 != yyssp) - fprintf (stderr, " %d", *++ssp1); - fprintf (stderr, "\n"); - } -#endif - -yyerrhandle: - - yyn = yypact[yystate]; - if (yyn == YYFLAG) - goto yyerrdefault; - - yyn += YYTERROR; - if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) - goto yyerrdefault; - - yyn = yytable[yyn]; - if (yyn < 0) - { - if (yyn == YYFLAG) - goto yyerrpop; - yyn = -yyn; - goto yyreduce; - } - else if (yyn == 0) - goto yyerrpop; - - if (yyn == YYFINAL) - YYACCEPT; - -#if YYDEBUG != 0 - if (yydebug) - fprintf(stderr, "Shifting error token, "); -#endif - - *++yyvsp = yylval; -#ifdef YYLSP_NEEDED - *++yylsp = yylloc; -#endif - - yystate = yyn; - goto yynewstate; - - yyacceptlab: - /* YYACCEPT comes here. */ - if (yyfree_stacks) - { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); -#endif - } - return 0; - - yyabortlab: - /* YYABORT comes here. */ - if (yyfree_stacks) - { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); -#endif - } - return 1; -} -#line 2555 "Gmsh.y" - - -void InitSymbols(void){ - if(!Symbol_L) - Symbol_L = List_Create(50,10,sizeof(Symbol)); - else - List_Reset(Symbol_L); -} - -void DeleteSymbols(void){ - int i; - for(i = 0 ; i < List_Nbr(Symbol_L) ; i++) - List_Delete(((Symbol*)List_Pointer_Fast(Symbol_L,i))->val); - List_Delete(Symbol_L); -} - -int CompareSymbols (const void *a, const void *b){ - return(strcmp(((Symbol*)a)->Name,((Symbol*)b)->Name)); -} - -void yyerror(char *s){ - Msg(PARSER_ERROR, "'%s', line %d : %s (%s)",yyname,yylineno-1,s,yytext); - yyerrorstate=1; -} - -void vyyerror(char *fmt, ...){ - va_list args; - char tmp[1024]; - - va_start (args, fmt); - vsprintf (tmp, fmt, args); - va_end (args); - - Msg(PARSER_ERROR, "'%s', line %d : %s", yyname, yylineno-1, tmp); - yyerrorstate=1; -} - - diff --git a/Parser/Gmsh.tab.cpp.h b/Parser/Gmsh.tab.cpp.h deleted file mode 100644 index 5b28b27a9794be0f5da3b362c7a6de8586231242..0000000000000000000000000000000000000000 --- a/Parser/Gmsh.tab.cpp.h +++ /dev/null @@ -1,178 +0,0 @@ -typedef union { - char *c; - int i; - unsigned int u; - double d; - double v[5]; - Shape s; - List_T *l; -} YYSTYPE; -#define tDOUBLE 257 -#define tSTRING 258 -#define tBIGSTR 259 -#define tEND 260 -#define tAFFECT 261 -#define tDOTS 262 -#define tPi 263 -#define tMPI_Rank 264 -#define tMPI_Size 265 -#define tExp 266 -#define tLog 267 -#define tLog10 268 -#define tSqrt 269 -#define tSin 270 -#define tAsin 271 -#define tCos 272 -#define tAcos 273 -#define tTan 274 -#define tRand 275 -#define tAtan 276 -#define tAtan2 277 -#define tSinh 278 -#define tCosh 279 -#define tTanh 280 -#define tFabs 281 -#define tFloor 282 -#define tCeil 283 -#define tFmod 284 -#define tModulo 285 -#define tHypot 286 -#define tPrintf 287 -#define tSprintf 288 -#define tStrCat 289 -#define tStrPrefix 290 -#define tDraw 291 -#define tPoint 292 -#define tCircle 293 -#define tEllipsis 294 -#define tLine 295 -#define tSurface 296 -#define tSpline 297 -#define tVolume 298 -#define tCharacteristic 299 -#define tLength 300 -#define tParametric 301 -#define tElliptic 302 -#define tPlane 303 -#define tRuled 304 -#define tTransfinite 305 -#define tComplex 306 -#define tPhysical 307 -#define tUsing 308 -#define tBump 309 -#define tProgression 310 -#define tPlugin 311 -#define tRotate 312 -#define tTranslate 313 -#define tSymmetry 314 -#define tDilate 315 -#define tExtrude 316 -#define tDuplicata 317 -#define tLoop 318 -#define tRecombine 319 -#define tDelete 320 -#define tCoherence 321 -#define tIntersect 322 -#define tAttractor 323 -#define tLayers 324 -#define tScalarTetrahedron 325 -#define tVectorTetrahedron 326 -#define tTensorTetrahedron 327 -#define tScalarTriangle 328 -#define tVectorTriangle 329 -#define tTensorTriangle 330 -#define tScalarLine 331 -#define tVectorLine 332 -#define tTensorLine 333 -#define tScalarPoint 334 -#define tVectorPoint 335 -#define tTensorPoint 336 -#define tBSpline 337 -#define tNurbs 338 -#define tOrder 339 -#define tWith 340 -#define tBounds 341 -#define tKnots 342 -#define tColor 343 -#define tColorTable 344 -#define tFor 345 -#define tIn 346 -#define tEndFor 347 -#define tIf 348 -#define tEndIf 349 -#define tExit 350 -#define tReturn 351 -#define tCall 352 -#define tFunction 353 -#define tMesh 354 -#define tB_SPLINE_SURFACE_WITH_KNOTS 355 -#define tB_SPLINE_CURVE_WITH_KNOTS 356 -#define tCARTESIAN_POINT 357 -#define tTRUE 358 -#define tFALSE 359 -#define tUNSPECIFIED 360 -#define tU 361 -#define tV 362 -#define tEDGE_CURVE 363 -#define tVERTEX_POINT 364 -#define tORIENTED_EDGE 365 -#define tPLANE 366 -#define tFACE_OUTER_BOUND 367 -#define tEDGE_LOOP 368 -#define tADVANCED_FACE 369 -#define tVECTOR 370 -#define tDIRECTION 371 -#define tAXIS2_PLACEMENT_3D 372 -#define tISO 373 -#define tENDISO 374 -#define tENDSEC 375 -#define tDATA 376 -#define tHEADER 377 -#define tFILE_DESCRIPTION 378 -#define tFILE_SCHEMA 379 -#define tFILE_NAME 380 -#define tMANIFOLD_SOLID_BREP 381 -#define tCLOSED_SHELL 382 -#define tADVANCED_BREP_SHAPE_REPRESENTATION 383 -#define tFACE_BOUND 384 -#define tCYLINDRICAL_SURFACE 385 -#define tCONICAL_SURFACE 386 -#define tCIRCLE 387 -#define tTRIMMED_CURVE 388 -#define tGEOMETRIC_SET 389 -#define tCOMPOSITE_CURVE_SEGMENT 390 -#define tCONTINUOUS 391 -#define tCOMPOSITE_CURVE 392 -#define tTOROIDAL_SURFACE 393 -#define tPRODUCT_DEFINITION 394 -#define tPRODUCT_DEFINITION_SHAPE 395 -#define tSHAPE_DEFINITION_REPRESENTATION 396 -#define tELLIPSE 397 -#define tTrimmed 398 -#define tSolid 399 -#define tEndSolid 400 -#define tVertex 401 -#define tFacet 402 -#define tNormal 403 -#define tOuter 404 -#define tLoopSTL 405 -#define tEndLoop 406 -#define tEndFacet 407 -#define tAFFECTPLUS 408 -#define tAFFECTMINUS 409 -#define tAFFECTTIMES 410 -#define tAFFECTDIVIDE 411 -#define tOR 412 -#define tAND 413 -#define tEQUAL 414 -#define tNOTEQUAL 415 -#define tAPPROXEQUAL 416 -#define tLESSOREQUAL 417 -#define tGREATEROREQUAL 418 -#define tCROSSPRODUCT 419 -#define tPLUSPLUS 420 -#define tMINUSMINUS 421 -#define UNARYPREC 422 - - -extern YYSTYPE yylval; diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y deleted file mode 100644 index ab99f027ef00d2c9dfbe57d6b059707ab71593ee..0000000000000000000000000000000000000000 --- a/Parser/Gmsh.y +++ /dev/null @@ -1,2592 +0,0 @@ -%{ - -// $Id: Gmsh.y,v 1.92 2001-08-12 14:24:50 geuzaine Exp $ - - // - // Generaliser sprintf avec des chaines de caracteres - // - -#include <stdarg.h> -#ifndef _NOPLUGIN -#include "PluginManager.h" -#endif -#include "ParUtil.h" -#include "Gmsh.h" -#include "Numeric.h" -#include "Context.h" -#include "Geo.h" -#include "CAD.h" -#include "DataBase.h" -#include "Mesh.h" -#include "Draw.h" -#include "Create.h" -#include "Views.h" -#include "StepGeomDatabase.h" -#include "Options.h" -#include "Colors.h" -#include "Parser.h" -#include "OpenFile.h" -#include "FunctionManager.h" -#include "ColorTable.h" -#include "Timer.h" -#include "CreateFile.h" -#include "STL.h" - -#ifdef __DECCXX // bug in bison -#include <alloca.h> -#endif - -List_T *Symbol_L=NULL; - -extern Context_T CTX; -extern Mesh *THEM; - -static FILE *yyinTab[MAX_OPEN_FILES]; -static int yylinenoTab[MAX_OPEN_FILES]; -static fpos_t yyposImbricatedLoopsTab[MAX_OPEN_FILES]; -static double LoopControlVariablesTab[MAX_OPEN_FILES][3]; -static char* LoopControlVariablesNameTab[MAX_OPEN_FILES]; -static char yynameTab[MAX_OPEN_FILES][256]; -static char tmpstring[256]; -static char tmpstring2[256], tmpstring3[256]; -static Symbol TheSymbol, *pSymbol; -static Surface *STL_Surf; -static Shape TheShape; -static int i,j,k,flag,RecursionLevel=0,ImbricatedLoop = 0; -static int Last_NumberOfPoints = 0; -static double d, *pd; -static ExtrudeParams extr; -static char *str; -static StringXString *pStrCat; -static StringXNumber *pNumCat; -static StringXColor *pColCat; -static double (*pNumOpt)(int num, int action, double value); -static char* (*pStrOpt)(int num, int action, char *value); -static unsigned int (*pColOpt)(int num, int action, unsigned int value); -static Post_View *View; - -char *strsave(char *ptr); -void yyerror (char *s); -void vyyerror (char *fmt, ...); -void skip_until (char *skip, char *until); -%} - -%union { - char *c; - int i; - unsigned int u; - double d; - double v[5]; - Shape s; - List_T *l; -} - -%token <d> tDOUBLE -%token <c> tSTRING tBIGSTR - -%token tEND tAFFECT tDOTS tPi tMPI_Rank tMPI_Size -%token tExp tLog tLog10 tSqrt tSin tAsin tCos tAcos tTan tRand -%token tAtan tAtan2 tSinh tCosh tTanh tFabs tFloor tCeil -%token tFmod tModulo tHypot tPrintf tSprintf tStrCat tStrPrefix tDraw -%token tPoint tCircle tEllipsis tLine tSurface tSpline tVolume -%token tCharacteristic tLength tParametric tElliptic -%token tPlane tRuled tTransfinite tComplex tPhysical -%token tUsing tBump tProgression tPlugin -%token tRotate tTranslate tSymmetry tDilate tExtrude tDuplicata -%token tLoop tRecombine tDelete tCoherence tIntersect -%token tAttractor tLayers -%token tScalarTetrahedron tVectorTetrahedron tTensorTetrahedron -%token tScalarTriangle tVectorTriangle tTensorTriangle -%token tScalarLine tVectorLine tTensorLine -%token tScalarPoint tVectorPoint tTensorPoint -%token tBSpline tNurbs tOrder tWith tBounds tKnots -%token tColor tColorTable tFor tIn tEndFor tIf tEndIf tExit -%token tReturn tCall tFunction tMesh - -%token tB_SPLINE_SURFACE_WITH_KNOTS -%token tB_SPLINE_CURVE_WITH_KNOTS -%token tCARTESIAN_POINT -%token tTRUE tFALSE tUNSPECIFIED tU tV tEDGE_CURVE tVERTEX_POINT tORIENTED_EDGE tPLANE -%token tFACE_OUTER_BOUND tEDGE_LOOP tADVANCED_FACE tVECTOR tDIRECTION tAXIS2_PLACEMENT_3D -%token tISO tENDISO tENDSEC tDATA tHEADER tFILE_DESCRIPTION tFILE_SCHEMA tFILE_NAME -%token tMANIFOLD_SOLID_BREP tCLOSED_SHELL tADVANCED_BREP_SHAPE_REPRESENTATION -%token tFACE_BOUND tCYLINDRICAL_SURFACE tCONICAL_SURFACE tCIRCLE tTRIMMED_CURVE -%token tGEOMETRIC_SET tCOMPOSITE_CURVE_SEGMENT tCOMPOSITE_CURVE_SEGMENT tCONTINUOUS -%token tCOMPOSITE_CURVE tTOROIDAL_SURFACE tPRODUCT_DEFINITION tPRODUCT_DEFINITION_SHAPE -%token tSHAPE_DEFINITION_REPRESENTATION tELLIPSE tTrimmed - -%token tSolid tEndSolid tVertex tFacet tNormal tOuter tLoopSTL tEndLoop tEndFacet - -%type <d> FExpr FExpr_Single SignedDouble -%type <v> VExpr VExpr_Single -%type <i> BoolExpr NumericAffectation NumericIncrement -%type <u> ColorExpr -%type <c> StringExpr -%type <l> FExpr_Multi ListOfDouble RecursiveListOfDouble -%type <l> ListOfListOfDouble RecursiveListOfListOfDouble -%type <l> ListOfColor RecursiveListOfColor -%type <l> ListOfShapes Duplicata Transform MultipleShape -%type <l> ListOfStrings -%type <s> Shape - -/* ------------------------------------------------------------------ */ -/* Operators (with ascending priority): cf. C language */ -/* */ -/* Notes: - associativity (%left, %right) */ -/* - UNARYPREC is a dummy terminal to resolve ambiguous cases */ -/* for + and - (which exist in both unary and binary form) */ -/* ------------------------------------------------------------------ */ -%right tAFFECT tAFFECTPLUS tAFFECTMINUS tAFFECTTIMES tAFFECTDIVIDE -%right '?' tDOTS -%left tOR -%left tAND -%left tEQUAL tNOTEQUAL tAPPROXEQUAL -%left '<' tLESSOREQUAL '>' tGREATEROREQUAL -%left '+' '-' -%left '*' '/' '%' tCROSSPRODUCT -%right '!' tPLUSPLUS tMINUSMINUS UNARYPREC -%right '^' -%left '(' ')' '[' ']' '.' -/* ------------------------------------------------------------------ */ - -%start All - -%% - -All : - StepFormatItems - | STLFormatItem - | GeomFormatList - | error tEND { yyerrok ; return 1; } -; - -/* ---------------------------------------------------------------------- - S T E R E O L I T H O G R A P H Y ( S T L ) - ---------------------------------------------------------------------- */ - -SignedDouble : - tDOUBLE { $$ = $1; } - | '-' tDOUBLE { $$ = -$2; } -; - -STLFormatItem : - tSolid - { - Msg(PARSER_INFO,"STL file format"); - STL_Surf = Create_Surface(1,MSH_SURF_STL,1); - STL_Surf->STL = new STL_Data; - return 1; - } - | tFacet - tNormal SignedDouble SignedDouble SignedDouble - tOuter tLoopSTL - tVertex SignedDouble SignedDouble SignedDouble - tVertex SignedDouble SignedDouble SignedDouble - tVertex SignedDouble SignedDouble SignedDouble - tEndLoop - tEndFacet - { - STL_Surf->STL->Add_Facet( $9, $10, $11, - $13, $14, $15, - $17, $18, $19); - return 1; - } - | tEndSolid - { - Msg(PARSER_INFO,"STL file format read"); - Tree_Add(THEM->Surfaces, &STL_Surf); - return 1; - } -; - -/* ---------------------------------------------------------------------- - S T E P I S O - 1 0 3 0 3 - 2 1 F I L E F O R M A T - ---------------------------------------------------------------------- */ - -StepFormatItems : - /* nothing */ - | StepFormatItems StepFormatItem -; - -StepFormatItem : - StepSpecial { return 1; } - | StepDataItem { return 1; } - | StepHeaderItem { return 1; } -; - -StepSpecial : - tISO tEND - { - Msg(PARSER_INFO,"Step Iso-10303-21 file format"); - Create_Step_Solid_BRep(); - } - | tENDISO tEND - { - Msg(PARSER_INFO,"Step Iso-10303-21 file format read"); - Resolve_BREP (); - } - | tDATA tEND - | tENDSEC tEND - | tHEADER tEND -; - -StepHeaderItem : - tFILE_DESCRIPTION '(' ListOfStrings ',' tBIGSTR ')' tEND - { - } - | tFILE_SCHEMA '(' ListOfStrings ')' tEND - { - } - | tFILE_NAME '(' tBIGSTR ',' tBIGSTR ',' ListOfStrings ',' - ListOfStrings ',' tBIGSTR ',' tBIGSTR ',' tBIGSTR ')' tEND - { - } -; - -StepDataItem : - tDOUBLE tAFFECT tCARTESIAN_POINT '(' tBIGSTR ',' VExpr ')' tEND - { - Add_Cartesian_Point((int)$1,$5,$7[0],$7[1],$7[2]); - } - | tDOUBLE tAFFECT tB_SPLINE_CURVE_WITH_KNOTS - '(' tBIGSTR ',' FExpr ',' ListOfDouble ',' BoolExpr ',' BoolExpr ',' - BoolExpr ',' ListOfDouble ',' ListOfDouble ',' BoolExpr ')' tEND - { - Add_BSpline_Curve_With_Knots ((int)$1, $5, (int) $7, $9, $17, $19, 0., 1.); - } - | tDOUBLE tAFFECT tB_SPLINE_SURFACE_WITH_KNOTS - '(' tBIGSTR ',' FExpr ',' FExpr ',' ListOfListOfDouble ',' BoolExpr ',' - BoolExpr ',' BoolExpr ',' BoolExpr ',' ListOfDouble ',' ListOfDouble ',' - ListOfDouble ',' ListOfDouble ',' BoolExpr ')' tEND - { - Add_BSpline_Surface_With_Knots ((int)$1, $5, (int) $7, (int) $9, $11, $21, - $23, $25, $27, 0., 1., 0., 1. ); - } - | tDOUBLE tAFFECT tEDGE_CURVE '(' tBIGSTR ',' tDOUBLE ',' tDOUBLE ',' - tDOUBLE ',' BoolExpr ')' tEND - { - Add_Edge_Curve ((int)$1, $5 , (int)$7 , (int)$9, (int)$11); - } - | tDOUBLE tAFFECT tFACE_OUTER_BOUND '(' tBIGSTR ',' tDOUBLE ',' BoolExpr ')' tEND - { - Add_Face_Outer_Bound((int)$1,$5,(int)$7,$9,1); - } - | tDOUBLE tAFFECT tFACE_BOUND '(' tBIGSTR ',' tDOUBLE ',' BoolExpr ')' tEND - { - /* La je dois voir la norme ! Face_Bound : trou externe a la surface ! */ - Msg(PARSER_INFO,"Found a face bound"); - Add_Face_Outer_Bound((int)$1,$5,(int)$7,$9,0); - } - | tDOUBLE tAFFECT tORIENTED_EDGE '(' tBIGSTR ',' '*' ',' '*' ',' FExpr ',' - BoolExpr ')' tEND - { - Add_Oriented_Edge((int)$1,$5,(int)$11,$13); - } - | tDOUBLE tAFFECT tEDGE_LOOP '(' tBIGSTR ',' ListOfDouble ')' tEND - { - Add_Edge_Loop((int)$1,$5,$7); - } - | tDOUBLE tAFFECT tADVANCED_FACE '(' tBIGSTR ',' ListOfDouble ',' - tDOUBLE ',' BoolExpr ')' tEND - { - Add_Advanced_Face((int)$1,$5,$7,(int)$9,$11); - } - | tDOUBLE tAFFECT tVERTEX_POINT '(' tBIGSTR ',' tDOUBLE ')' tEND - { - Add_Vertex_Point((int)$1,$5,(int)$7); - } - | tDOUBLE tAFFECT tVECTOR '(' tBIGSTR ',' tDOUBLE ',' FExpr ')' tEND - { - } - | tDOUBLE tAFFECT tAXIS2_PLACEMENT_3D '(' tBIGSTR ',' tDOUBLE ',' - tDOUBLE ',' tDOUBLE ')' tEND - { - Add_Axis2_Placement3D ( (int)$1, (int)$9, (int)$11, (int)$7); - } - | tDOUBLE tAFFECT tDIRECTION '(' tBIGSTR ',' VExpr ')' tEND - { - Add_Direction((int)$1 , $5, $7[0], $7[1], $7[2]); - } - | tDOUBLE tAFFECT tPLANE '(' tBIGSTR ',' tDOUBLE ')' tEND - { - Add_Plane((int)$1,$5,(int)$7); - } - | tDOUBLE tAFFECT tLine '(' tBIGSTR ',' tDOUBLE ',' tDOUBLE ')' tEND - { - Add_Line ((int)$1, $5 , (int) $7, (int)$9); - } - | tDOUBLE tAFFECT tCLOSED_SHELL '(' tBIGSTR ',' ListOfDouble ')' tEND - { - Msg(PARSER_INFO,"Found a closed shell"); - Add_Closed_Shell((int)$1, $5 , $7); - } - | tDOUBLE tAFFECT tADVANCED_BREP_SHAPE_REPRESENTATION - '(' tBIGSTR ',' ListOfDouble ',' tDOUBLE')' tEND - { - } - | tDOUBLE tAFFECT tMANIFOLD_SOLID_BREP '(' tBIGSTR ',' tDOUBLE ')' tEND - { - } - | tDOUBLE tAFFECT tCYLINDRICAL_SURFACE '(' tBIGSTR ',' tDOUBLE ',' FExpr ')' tEND - { - Add_Cylinder ((int)$1, $5 , (int)$7, $9); - } - | tDOUBLE tAFFECT tCONICAL_SURFACE '(' tBIGSTR ',' tDOUBLE ',' FExpr ',' FExpr ')' tEND - { - Add_Cone ((int)$1, $5 , (int)$7, $9,$11); - } - | tDOUBLE tAFFECT tTOROIDAL_SURFACE '(' tBIGSTR ',' tDOUBLE ',' FExpr ',' FExpr ')' tEND - { - Add_Torus ((int)$1, $5 , (int)$7, $9,$11); - } - | tDOUBLE tAFFECT tCIRCLE '(' tBIGSTR ',' tDOUBLE ',' FExpr ')' tEND - { - Add_Circle((int) $1, $5, (int) $7, $9); - } - | tDOUBLE tAFFECT tELLIPSE '(' tBIGSTR ',' tDOUBLE ',' FExpr ',' FExpr ')' tEND - { - Add_Ellipsis((int) $1, $5, (int) $7, $9, $11); - } - | tDOUBLE tAFFECT tTRIMMED_CURVE '(' tBIGSTR ',' tDOUBLE ',' - ListOfDouble ',' ListOfDouble ',' BoolExpr ',' BoolExpr ')' tEND - { - } - | tDOUBLE tAFFECT tGEOMETRIC_SET '(' tBIGSTR ',' ListOfDouble')' tEND - { - } - | tDOUBLE tAFFECT tCOMPOSITE_CURVE_SEGMENT - '(' tCONTINUOUS ',' BoolExpr ',' tDOUBLE ')' tEND - { - } - | tDOUBLE tAFFECT tCOMPOSITE_CURVE '(' tBIGSTR ',' ListOfDouble ',' BoolExpr ')' tEND - { - } - | tDOUBLE tAFFECT tPRODUCT_DEFINITION - '(' tBIGSTR ',' tBIGSTR ',' tDOUBLE',' tDOUBLE ')' tEND - { - } - | tDOUBLE tAFFECT tPRODUCT_DEFINITION_SHAPE '(' tBIGSTR ',' tBIGSTR ',' tDOUBLE ')' tEND - { - } - | tDOUBLE tAFFECT tSHAPE_DEFINITION_REPRESENTATION '(' tDOUBLE ',' tDOUBLE ')' tEND - { - } -; - -/* ---------------------------------------------------------------------- - G E O F I L E F O R M A T - ---------------------------------------------------------------------- */ - -GeomFormatList : - /* none*/ - { - } - | GeomFormatList GeomFormat - { - Msg(PARSER_INFO,"Gmsh file format read"); - } -; - -GeomFormat : - View { return 1; } - | Printf { return 1; } - | Affectation { return 1; } - | Shape { return 1; } - | Transform { return 1; } - | Duplicata { return 1; } - | Delete { return 1; } - | Extrude { return 1; } - | Transfini { return 1; } - | Coherence { return 1; } - | Loop { return 1; } - | Command { return 1; } -; - -Printf : - tPrintf '(' tBIGSTR ')' tEND - { - Msg(DIRECT, $3); - } - | tPrintf '(' tBIGSTR ',' RecursiveListOfDouble ')' tEND - { - for(i = 0 ; i<List_Nbr($5) ; i++){ - if(!i){ - str = strtok($3, "%"); - strcpy(tmpstring, str); - } - str = strtok(NULL, "%"); - if(str){ - strcpy(tmpstring2, "%"); - strcat(tmpstring2, str); - sprintf(tmpstring3, tmpstring2, *(double*)List_Pointer($5,i)); - strcat(tmpstring, tmpstring3); - } - else{ - vyyerror("Missing %d parameter(s) in Printf format", - List_Nbr($5)-i); - break ; - } - } - Msg(DIRECT, tmpstring); - List_Delete($5); - } -; - -/* ------------ - V I E W - ------------ */ - -View : - tSTRING tBIGSTR '{' Views '}' tEND - { - if(!strcmp($1, "View")) EndView(View, 1, yyname, $2); - } - | tSTRING tBIGSTR tSTRING VExpr '{' Views '}' tEND - { - if(!strcmp($1, "View")) EndView(View, 1, yyname, $2); - } -; - -Views : - /* none */ - { - View = BeginView(1); - } - | Views ScalarPoint - | Views VectorPoint - | Views TensorPoint - | Views ScalarLine - | Views VectorLine - | Views TensorLine - | Views ScalarTriangle - | Views VectorTriangle - | Views TensorTriangle - | Views ScalarTetrahedron - | Views VectorTetrahedron - | Views TensorTetrahedron -; - -ScalarPointValues : - FExpr - { List_Add(View->SP, &$1) ; } - | ScalarPointValues ',' FExpr - { List_Add(View->SP, &$3) ; } - ; - -ScalarPoint : - tScalarPoint '(' FExpr ',' FExpr ',' FExpr ')' - { - List_Add(View->SP, &$3); List_Add(View->SP, &$5); - List_Add(View->SP, &$7); - } - '{' ScalarPointValues '}' tEND - { - View->NbSP++ ; - } -; - -VectorPointValues : - FExpr - { List_Add(View->VP, &$1) ; } - | VectorPointValues ',' FExpr - { List_Add(View->VP, &$3) ; } - ; - -VectorPoint : - tVectorPoint '(' FExpr ',' FExpr ',' FExpr ')' - { - List_Add(View->VP, &$3); List_Add(View->VP, &$5); - List_Add(View->VP, &$7); - } - '{' VectorPointValues '}' tEND - { - View->NbVP++ ; - } -; - -TensorPointValues : - FExpr - { List_Add(View->TP, &$1) ; } - | TensorPointValues ',' FExpr - { List_Add(View->TP, &$3) ; } - ; - -TensorPoint : - tTensorPoint '(' FExpr ',' FExpr ',' FExpr ')' - { - List_Add(View->TP, &$3); List_Add(View->TP, &$5); - List_Add(View->TP, &$7); - } - '{' TensorPointValues '}' tEND - { - View->NbTP++ ; - } -; - -ScalarLineValues : - FExpr - { List_Add(View->SL, &$1) ; } - | ScalarLineValues ',' FExpr - { List_Add(View->SL, &$3) ; } - ; - -ScalarLine : - tScalarLine '(' FExpr ',' FExpr ',' FExpr ',' - FExpr ',' FExpr ',' FExpr ')' - { - List_Add(View->SL, &$3); List_Add(View->SL, &$9); - List_Add(View->SL, &$5); List_Add(View->SL, &$11); - List_Add(View->SL, &$7); List_Add(View->SL, &$13); - } - '{' ScalarLineValues '}' tEND - { - View->NbSL++ ; - } -; - -VectorLineValues : - FExpr - { List_Add(View->VL, &$1) ; } - | VectorLineValues ',' FExpr - { List_Add(View->VL, &$3) ; } - ; - -VectorLine : - tVectorLine '(' FExpr ',' FExpr ',' FExpr ',' - FExpr ',' FExpr ',' FExpr ')' - { - List_Add(View->VL, &$3); List_Add(View->VL, &$9); - List_Add(View->VL, &$5); List_Add(View->VL, &$11); - List_Add(View->VL, &$7); List_Add(View->VL, &$13); - } - '{' VectorLineValues '}' tEND - { - View->NbVL++ ; - } -; - -TensorLineValues : - FExpr - { List_Add(View->TL, &$1) ; } - | TensorLineValues ',' FExpr - { List_Add(View->TL, &$3) ; } - ; - -TensorLine : - tTensorLine '(' FExpr ',' FExpr ',' FExpr ',' - FExpr ',' FExpr ',' FExpr ')' - { - List_Add(View->TL, &$3); List_Add(View->TL, &$9); - List_Add(View->TL, &$5); List_Add(View->TL, &$11); - List_Add(View->TL, &$7); List_Add(View->TL, &$13); - } - '{' TensorLineValues '}' tEND - { - View->NbTL++ ; - } -; - -ScalarTriangleValues : - FExpr - { List_Add(View->ST, &$1) ; } - | ScalarTriangleValues ',' FExpr - { List_Add(View->ST, &$3) ; } - ; - -ScalarTriangle : - tScalarTriangle '(' FExpr ',' FExpr ',' FExpr ',' - FExpr ',' FExpr ',' FExpr ',' - FExpr ',' FExpr ',' FExpr ')' - { - List_Add(View->ST, &$3); List_Add(View->ST, &$9); - List_Add(View->ST, &$15); - List_Add(View->ST, &$5); List_Add(View->ST, &$11); - List_Add(View->ST, &$17); - List_Add(View->ST, &$7); List_Add(View->ST, &$13); - List_Add(View->ST, &$19); - } - '{' ScalarTriangleValues '}' tEND - { - View->NbST++ ; - } -; - -VectorTriangleValues : - FExpr - { List_Add(View->VT, &$1) ; } - | VectorTriangleValues ',' FExpr - { List_Add(View->VT, &$3) ; } - ; - -VectorTriangle : - tVectorTriangle '(' FExpr ',' FExpr ',' FExpr ',' - FExpr ',' FExpr ',' FExpr ',' - FExpr ',' FExpr ',' FExpr ')' - { - List_Add(View->VT, &$3); List_Add(View->VT, &$9); - List_Add(View->VT, &$15); - List_Add(View->VT, &$5); List_Add(View->VT, &$11); - List_Add(View->VT, &$17); - List_Add(View->VT, &$7); List_Add(View->VT, &$13); - List_Add(View->VT, &$19); - } - '{' VectorTriangleValues '}' tEND - { - View->NbVT++ ; - } -; - -TensorTriangleValues : - FExpr - { List_Add(View->TT, &$1) ; } - | TensorTriangleValues ',' FExpr - { List_Add(View->TT, &$3) ; } - ; - -TensorTriangle : - tTensorTriangle '(' FExpr ',' FExpr ',' FExpr ',' - FExpr ',' FExpr ',' FExpr ',' - FExpr ',' FExpr ',' FExpr ')' - { - List_Add(View->TT, &$3); List_Add(View->TT, &$9); - List_Add(View->TT, &$15); - List_Add(View->TT, &$5); List_Add(View->TT, &$11); - List_Add(View->TT, &$17); - List_Add(View->TT, &$7); List_Add(View->TT, &$13); - List_Add(View->TT, &$19); - } - '{' TensorTriangleValues '}' tEND - { - View->NbTT++ ; - } -; - -ScalarTetrahedronValues : - FExpr - { List_Add(View->SS, &$1) ; } - | ScalarTetrahedronValues ',' FExpr - { List_Add(View->SS, &$3) ; } - ; - -ScalarTetrahedron : - tScalarTetrahedron '(' FExpr ',' FExpr ',' FExpr ',' - FExpr ',' FExpr ',' FExpr ',' - FExpr ',' FExpr ',' FExpr ',' - FExpr ',' FExpr ',' FExpr ')' - { - List_Add(View->SS, &$3); List_Add(View->SS, &$9); - List_Add(View->SS, &$15); List_Add(View->SS, &$21); - List_Add(View->SS, &$5); List_Add(View->SS, &$11); - List_Add(View->SS, &$17); List_Add(View->SS, &$23); - List_Add(View->SS, &$7); List_Add(View->SS, &$13); - List_Add(View->SS, &$19); List_Add(View->SS, &$25); - } - '{' ScalarTetrahedronValues '}' tEND - { - View->NbSS++ ; - } -; - -VectorTetrahedronValues : - FExpr - { List_Add(View->VS, &$1) ; } - | VectorTetrahedronValues ',' FExpr - { List_Add(View->VS, &$3) ; } - ; - -VectorTetrahedron : - tVectorTetrahedron '(' FExpr ',' FExpr ',' FExpr ',' - FExpr ',' FExpr ',' FExpr ',' - FExpr ',' FExpr ',' FExpr ',' - FExpr ',' FExpr ',' FExpr ')' - { - List_Add(View->VS, &$3); List_Add(View->VS, &$9); - List_Add(View->VS, &$15); List_Add(View->VS, &$21); - List_Add(View->VS, &$5); List_Add(View->VS, &$11); - List_Add(View->VS, &$17); List_Add(View->VS, &$23); - List_Add(View->VS, &$7); List_Add(View->VS, &$13); - List_Add(View->VS, &$19); List_Add(View->VS, &$25); - } - '{' VectorTetrahedronValues '}' tEND - { - View->NbVS++ ; - } -; - -TensorTetrahedronValues : - FExpr - { List_Add(View->TS, &$1) ; } - | TensorTetrahedronValues ',' FExpr - { List_Add(View->TS, &$3) ; } - ; - -TensorTetrahedron : - tTensorTetrahedron '(' FExpr ',' FExpr ',' FExpr ',' - FExpr ',' FExpr ',' FExpr ',' - FExpr ',' FExpr ',' FExpr ',' - FExpr ',' FExpr ',' FExpr ')' - { - List_Add(View->TS, &$3); List_Add(View->TS, &$9); - List_Add(View->TS, &$15); List_Add(View->TS, &$21); - List_Add(View->TS, &$5); List_Add(View->TS, &$11); - List_Add(View->TS, &$17); List_Add(View->TS, &$23); - List_Add(View->TS, &$7); List_Add(View->TS, &$13); - List_Add(View->TS, &$19); List_Add(View->TS, &$25); - } - '{' TensorTetrahedronValues '}' tEND - { - View->NbTS++ ; - } -; - - - -/* ----------------------- - A F F E C T A T I O N - ----------------------- */ - -NumericAffectation : - tAFFECT { $$ = 0 ; } - | tAFFECTPLUS { $$ = 1 ; } - | tAFFECTMINUS { $$ = 2 ; } - | tAFFECTTIMES { $$ = 3 ; } - | tAFFECTDIVIDE { $$ = 4 ; } - -NumericIncrement : - tPLUSPLUS { $$ = 1 ; } - | tMINUSMINUS { $$ = -1 ; } - -Affectation : - - /* -------- Variables -------- */ - - tSTRING NumericAffectation FExpr tEND - { - TheSymbol.Name = $1; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){ - TheSymbol.val = List_Create(1,1,sizeof(double)); - if(!$2){ - List_Put(TheSymbol.val, 0, &$3); - List_Add(Symbol_L, &TheSymbol); - } - else - vyyerror("Unknown variable '%s'", $1) ; - } - else{ - pd = (double*)List_Pointer_Fast(pSymbol->val, 0) ; - switch($2){ - case 0 : *pd = $3; break ; - case 1 : *pd += $3 ; break ; - case 2 : *pd -= $3 ; break ; - case 3 : *pd *= $3 ; break ; - case 4 : - if($3) *pd /= $3 ; - else vyyerror("Division by zero in '%s /= %g'", $1, $3); - break; - } - } - } - - | tSTRING '[' FExpr ']' NumericAffectation FExpr tEND - { - TheSymbol.Name = $1; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){ - TheSymbol.val = List_Create(5,5,sizeof(double)); - if(!$5){ - List_Put(TheSymbol.val, (int)$3, &$6); - List_Add(Symbol_L, &TheSymbol); - } - else - vyyerror("Unknown variable '%s'", $1) ; - } - else{ - if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3))){ - switch($5){ - case 0 : *pd = $6; break ; - case 1 : *pd += $6 ; break ; - case 2 : *pd -= $6 ; break ; - case 3 : *pd *= $6 ; break ; - case 4 : - if($6) *pd /= $6 ; - else vyyerror("Division by zero in '%s[%d] /= %g'", $1, (int)$3, $6); - break; - } - } - else{ - if(!$5) - List_Put(pSymbol->val, (int)$3, &$6); - else - vyyerror("Uninitialized variable '%s[%d]'", $1, (int)$3) ; - } - } - } - - | tSTRING '[' '{' RecursiveListOfDouble '}' ']' NumericAffectation ListOfDouble tEND - { - if(List_Nbr($4) != List_Nbr($8)) - vyyerror("Incompatible array dimensions in affectation"); - else{ - TheSymbol.Name = $1; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){ - TheSymbol.val = List_Create(5,5,sizeof(double)); - if(!$7){ - for(i=0 ; i<List_Nbr($4) ; i++){ - List_Put(TheSymbol.val, (int)(*(double*)List_Pointer($4,i)), - (double*)List_Pointer($8,i)); - } - List_Add(Symbol_L, &TheSymbol); - } - else - vyyerror("Unknown variable '%s'", $1) ; - } - else{ - for(i=0 ; i<List_Nbr($4) ; i++){ - j = (int)(*(double*)List_Pointer($4,i)) ; - d = *(double*)List_Pointer($8,i) ; - if((pd = (double*)List_Pointer_Test(pSymbol->val, j))){ - switch($7){ - case 0 : *pd = d; break ; - case 1 : *pd += d ; break ; - case 2 : *pd -= d ; break ; - case 3 : *pd *= d ; break ; - case 4 : - if($8) *pd /= d ; - else vyyerror("Division by zero in '%s[%d] /= %g'", $1, j, d); - break; - } - } - else{ - if(!$7) - List_Put(pSymbol->val, j, &d); - else - vyyerror("Uninitialized variable '%s[%d]'", $1, j) ; - } - } - } - } - List_Delete($4); - List_Delete($8); - } - - | tSTRING '[' ']' tAFFECT ListOfDouble tEND - { - TheSymbol.Name = $1; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){ - TheSymbol.val = List_Create(5,5,sizeof(double)); - List_Copy($5,TheSymbol.val); - List_Add(Symbol_L, &TheSymbol); - } - else{ - List_Reset(pSymbol->val); - List_Copy($5, pSymbol->val); - } - List_Delete($5); - } - - | tSTRING NumericIncrement tEND - { - TheSymbol.Name = $1; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) - vyyerror("Unknown variable '%s'", $1) ; - else - *(double*)List_Pointer_Fast(pSymbol->val, 0) += $2; - } - - | tSTRING '[' FExpr ']' NumericIncrement tEND - { - TheSymbol.Name = $1 ; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) - vyyerror("Unknown variable '%s'", $1) ; - else{ - if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3))) - *pd += $5 ; - else - vyyerror("Uninitialized variable '%s[%d]'", $1, (int)$3) ; - } - } - - /* -------- Option Strings -------- */ - - | tSTRING '.' tSTRING tAFFECT StringExpr tEND - { - if(!(pStrCat = Get_StringOptionCategory($1))) - vyyerror("Unknown string option class '%s'", $1); - else{ - if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption($3, pStrCat))) - vyyerror("Unknown string option '%s.%s'", $1, $3); - else - pStrOpt(0,GMSH_SET|GMSH_GUI,$5) ; - } - } - - | tSTRING '[' FExpr ']' '.' tSTRING tAFFECT StringExpr tEND - { - if(!(pStrCat = Get_StringOptionCategory($1))) - vyyerror("Unknown string option class '%s'", $1); - else{ - if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption($6, pStrCat))) - vyyerror("Unknown string option '%s[%d].%s'", $1, (int)$3, $6); - else - pStrOpt((int)$3,GMSH_SET|GMSH_GUI,$8) ; - } - } - - /* -------- Option Numbers -------- */ - - | tSTRING '.' tSTRING NumericAffectation FExpr tEND - { - if(!(pNumCat = Get_NumberOptionCategory($1))) - vyyerror("Unknown numeric option class '%s'", $1); - else{ - if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($3, pNumCat))) - vyyerror("Unknown numeric option '%s.%s'", $1, $3); - else{ - switch($4){ - case 0 : d = $5 ; break ; - case 1 : d = pNumOpt(0,GMSH_GET,0) + $5 ; break ; - case 2 : d = pNumOpt(0,GMSH_GET,0) - $5 ; break ; - case 3 : d = pNumOpt(0,GMSH_GET,0) * $5 ; break ; - case 4 : - if($5) d = pNumOpt(0,GMSH_GET,0) / $5 ; - else vyyerror("Division by zero in '%s.%s /= %g'", $1, $3, $5); - break; - } - pNumOpt(0,GMSH_SET|GMSH_GUI, d) ; - } - } - } - - | tSTRING '[' FExpr ']' '.' tSTRING NumericAffectation FExpr tEND - { - if(!(pNumCat = Get_NumberOptionCategory($1))) - vyyerror("Unknown numeric option class '%s'", $1); - else{ - if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($6, pNumCat))) - vyyerror("Unknown numeric option '%s[%d].%s'", $1, (int)$3, $6); - else{ - switch($7){ - case 0 : d = $8; break ; - case 1 : d = pNumOpt((int)$3,GMSH_GET,0) + $8 ; break ; - case 2 : d = pNumOpt((int)$3,GMSH_GET,0) - $8 ; break ; - case 3 : d = pNumOpt((int)$3,GMSH_GET,0) * $8 ; break ; - case 4 : - if($8) d = pNumOpt((int)$3,GMSH_GET,0) / $8 ; - else vyyerror("Division by zero in '%s[%d].%s /= %g'", - $1, (int)$3, $6, $8); - break; - } - pNumOpt((int)$3,GMSH_SET|GMSH_GUI,d) ; - } - } - } - - | tSTRING '.' tSTRING NumericIncrement tEND - { - if(!(pNumCat = Get_NumberOptionCategory($1))) - vyyerror("Unknown numeric option class '%s'", $1); - else{ - if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($3, pNumCat))) - vyyerror("Unknown numeric option '%s.%s'", $1, $3); - else - pNumOpt(0,GMSH_SET|GMSH_GUI,pNumOpt(0,GMSH_GET,0)+$4) ; - } - } - - | tSTRING '[' FExpr ']' '.' tSTRING NumericIncrement tEND - { - if(!(pNumCat = Get_NumberOptionCategory($1))) - vyyerror("Unknown numeric option class '%s'", $1); - else{ - if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($6, pNumCat))) - vyyerror("Unknown numeric option '%s[%d].%s'", $1, (int)$3, $6); - else - pNumOpt((int)$3,GMSH_SET|GMSH_GUI,pNumOpt((int)$3,GMSH_GET,0)+$7) ; - } - } - - /* -------- Option Colors -------- */ - - | tSTRING '.' tColor '.' tSTRING tAFFECT ColorExpr tEND - { - if(!(pColCat = Get_ColorOptionCategory($1))) - vyyerror("Unknown color option class '%s'", $1); - else{ - if(!(pColOpt = (unsigned int (*) (int, int, unsigned int))Get_ColorOption($5, pColCat))) - vyyerror("Unknown color option '%s.Color.%s'", $1, $5); - else - pColOpt(0,GMSH_SET|GMSH_GUI,$7) ; - } - } - - | tSTRING '[' FExpr ']' '.' tColor '.' tSTRING tAFFECT ColorExpr tEND - { - if(!(pColCat = Get_ColorOptionCategory($1))) - vyyerror("Unknown color option class '%s'", $1); - else{ - if(!(pColOpt = (unsigned int (*) (int, int, unsigned int))Get_ColorOption($8, pColCat))) - vyyerror("Unknown color option '%s[%d].Color.%s'", $1, (int)$3, $8); - else - pColOpt((int)$3,GMSH_SET|GMSH_GUI,$10) ; - } - } - - /* -------- ColorTable -------- */ - - | tSTRING '.' tColorTable tAFFECT ListOfColor tEND - { - ColorTable *ct = Get_ColorTable(0); - if(!ct) - vyyerror("View[%d] does not exist", 0); - else{ - ct->size = List_Nbr($5); - if(ct->size > COLORTABLE_NBMAX_COLOR) - vyyerror("Too many (%d>%d) colors in View[%d].ColorTable", - ct->size, COLORTABLE_NBMAX_COLOR, 0); - else - for(i=0 ; i<ct->size ; i++) List_Read($5, i, &ct->table[i]); - } - List_Delete($5); - } - - | tSTRING '[' FExpr ']' '.' tColorTable tAFFECT ListOfColor tEND - { - ColorTable *ct = Get_ColorTable((int)$3); - if(!ct) - vyyerror("View[%d] does not exist", (int)$3); - else{ - ct->size = List_Nbr($8); - if(ct->size > COLORTABLE_NBMAX_COLOR) - vyyerror("Too many (%d>%d) colors in View[%d].ColorTable", - ct->size, COLORTABLE_NBMAX_COLOR, (int)$3); - else - for(i=0 ; i<ct->size ; i++) List_Read($8, i, &ct->table[i]); - } - List_Delete($8); - } - // P l u g i n s ... - | tPlugin '(' tSTRING ')' '.' tSTRING tAFFECT FExpr tEND - { -#ifndef _NOPLUGIN - try - { - GMSH_PluginManager::Instance()->SetPluginOption($3,$6,$8); - } - catch (...) - { - Msg(WARNING,"Unknown option '%s' or plugin '%s'",$6,$3); - } -#endif - } - | tPlugin '(' tSTRING ')' '.' tSTRING tAFFECT StringExpr tEND - { -#ifndef _NOPLUGIN - try - { - GMSH_PluginManager::Instance()->SetPluginOption($3,$6,$8); - } - catch (...) - { - Msg(WARNING,"Unknown option '%s' or plugin '%s'",$6,$3); - } -#endif - } -; - - -/* ----------- - S H A P E - ----------- */ - -Shape : - - /* -------- Points -------- */ - - tPoint '(' FExpr ')' tAFFECT VExpr tEND - { - Cdbpts101((int)$3,$6[0],$6[1],$6[2],$6[3],$6[4]); - $$.Type = MSH_POINT; - $$.Num = (int)$3; - } - - | tPhysical tPoint '(' FExpr ')' tAFFECT ListOfDouble tEND - { - Cdbz101((int)$4,MSH_PHYSICAL_POINT,0,0,0,0,0,NULL,$7,NULL); - $$.Type = MSH_PHYSICAL_POINT; - $$.Num = (int)$4; - } - | tAttractor tPoint ListOfDouble tAFFECT '{' FExpr ',' FExpr ',' FExpr '}' tEND - { - Vertex *v; - Attractor *a; - double p; - int ip; - for(int i=0;i<List_Nbr($3);i++){ - List_Read($3,i,&p); - ip = (int)p; - v = FindPoint(ip,THEM); - if(!v) - vyyerror("Unkown Point %d", ip); - else{ - a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, - $6,$8,$10,v,NULL,NULL); - List_Add(THEM->Metric->Attractors,&a); - } - } - } - | tCharacteristic tLength ListOfDouble tAFFECT FExpr tEND - { - for(i=0;i<List_Nbr($3);i++){ - List_Read($3,i,&d); - Vertex *v = FindPoint((int)d,THEM); - if(!v) - vyyerror("Unkown Point %d", (int)d); - else - v->lc = $5; - } - } - | tPoint '{' FExpr '}' tEND - { - $$.Type = MSH_POINT; - $$.Num = (int)$3; - } - - /* -------- Lines -------- */ - - | tLine '(' FExpr ')' tAFFECT ListOfDouble tEND - { - Cdbseg101((int)$3,MSH_SEGM_LINE,1,$6,NULL,-1,-1,0.,1.,NULL,NULL,NULL); - $$.Type = MSH_SEGM_LINE; - $$.Num = (int)$3; - } - | tSpline '(' FExpr ')' tAFFECT ListOfDouble tEND - { - Cdbseg101((int)$3,MSH_SEGM_SPLN,3,$6,NULL,-1,-1,0.,1.,NULL,NULL,NULL); - $$.Type = MSH_SEGM_SPLN; - $$.Num = (int)$3; - } - | tAttractor tLine ListOfDouble tAFFECT '{' FExpr ',' FExpr ',' FExpr '}' tEND - { - Curve *c; - Attractor *a; - double p; - int ip; - for(int i=0;i<List_Nbr($3);i++){ - List_Read($3,i,&p); - ip = (int)p; - c = FindCurve(ip,THEM); - if(!c) - vyyerror("Unkown Curve %d", ip); - else{ - a = Create_Attractor(List_Nbr(THEM->Metric->Attractors)+1, - $6,$8,$10,NULL,c,NULL); - List_Add(THEM->Metric->Attractors,&a); - } - } - } - | tCircle '(' FExpr ')' tAFFECT ListOfDouble tEND - { - Cdbseg101((int)$3,MSH_SEGM_CIRC,2,$6,NULL,-1,-1,0.,1.,NULL,NULL,NULL); - $$.Type = MSH_SEGM_CIRC ; - $$.Num = (int)$3; - } - | tCircle '(' FExpr ')' tAFFECT ListOfDouble tPlane VExpr tEND - { - List_T *temp; - int i,j; - double d; - temp = List_Create(List_Nbr($6),1,sizeof(int)); - for(i=0;i<List_Nbr($6);i++){ - List_Read($6,i,&d); - j = (int)d; - List_Add(temp,&j); - } - AddCircleInDataBase ((int) $3, MSH_SEGM_CIRC, temp, $8); - List_Delete(temp); - $$.Type = MSH_SEGM_CIRC ; - $$.Num = (int)$3; - } - | tParametric '(' FExpr ')' tAFFECT - '{' FExpr ',' FExpr ',' tBIGSTR ',' tBIGSTR ',' tBIGSTR '}' tEND - { - Cdbseg101((int)$3,MSH_SEGM_PARAMETRIC,2,NULL,NULL,-1,-1,$7,$9,$11,$13,$15); - $$.Type = MSH_SEGM_PARAMETRIC ; - $$.Num = (int)$3; - } - | tEllipsis '(' FExpr ')' tAFFECT ListOfDouble tEND - { - Cdbseg101((int)$3,MSH_SEGM_ELLI,2,$6,NULL,-1,-1,0.,1.,NULL,NULL,NULL); - $$.Type = MSH_SEGM_ELLI ; - $$.Num = (int)$3; - } - | tPhysical tLine '(' FExpr ')' tAFFECT ListOfDouble tEND - { - Cdbz101((int)$4,MSH_PHYSICAL_LINE,0,0,0,0,0,NULL,$7,NULL); - $$.Type = MSH_PHYSICAL_LINE; - $$.Num = (int)$4; - } - | tLine tLoop '(' FExpr ')' tAFFECT ListOfDouble tEND - { - $$.Type = MSH_SEGM_LOOP; - Cdbz101((int)$4,$$.Type,0,0,0,0,0,NULL,$7,NULL); - $$.Num = (int)$4; - } - | tBSpline '(' FExpr ')' tAFFECT ListOfDouble tEND - { - Cdbseg101((int)$3,MSH_SEGM_BSPLN,2,$6,NULL,-1,-1,0.,1.,NULL,NULL,NULL); - $$.Type = MSH_SEGM_BSPLN; - $$.Num = (int)$3; - } - | tNurbs '(' FExpr ')' tAFFECT ListOfDouble tKnots ListOfDouble tOrder FExpr tEND - { - List_T *Temp; - int i; - double d; - if((int)$10 + 1 + List_Nbr($6) != List_Nbr($8)){ - vyyerror("Wrong definition of Nurbs Curve %d: " - "[Degree]%d + 1 + [NbPts]%d != [NbKnots]%d", - (int)$3, (int)$10, List_Nbr($6), List_Nbr($8)); - } - Temp = List_Create(List_Nbr($6),1,sizeof(int)); - for(i=0;i<List_Nbr($6);i++) { - List_Read($6,i,&d); - j = (int)d; - List_Add(Temp,&j); - } - AddCurveInDataBase ((int)$3,MSH_SEGM_NURBS,(int)$10,Temp,$8,-1,-1,0.,1.); - List_Delete(Temp); - } - | tLine '{' FExpr '}' tEND - { - $$.Num = (int)$3; - Curve *c = FindCurve($$.Num,THEM); - if(!c) - vyyerror("Unkown Curve %d", $$.Num); - else - $$.Type = c->Typ; - } - - /* -------- Surfaces -------- */ - - | tPlane tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND - { - Cdbz101((int)$4,MSH_SURF_PLAN,0,0,0,0,0,NULL,$7,NULL); - $$.Type = MSH_SURF_PLAN; - $$.Num = (int)$4; - } - | tTrimmed tSurface '(' FExpr ')' tAFFECT '{' FExpr ',' ListOfDouble '}' tEND - { - Surface *s,*support; - support = FindSurface((int)$8,THEM); - if(!support) - vyyerror("Unkown Surface %d", (int)$8); - else{ - Cdbz101((int)$4,MSH_SURF_PLAN,0,0,0,0,0,NULL,$10,NULL); - s = FindSurface((int)$4,THEM); - if(!s) - vyyerror("Unkown Surface %d", (int)$4); - else{ - s->Typ = MSH_SURF_TRIMMED; - s->Support = support; - $$.Type = MSH_SURF_TRIMMED; - $$.Num = (int)$4; - } - } - } - | tRuled tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND - { - List_Read($7,0,&d); - i = (int)d; - EdgeLoop *el = FindEdgeLoop(i,THEM); - if(!el) - vyyerror("Unkown Line Loop %d", i); - else{ - j = List_Nbr(el->Curves); - if(j==4) - $$.Type = MSH_SURF_REGL; - else if(j==3) - $$.Type = MSH_SURF_TRIC; - else - vyyerror("Wrong definition of Ruled Surface %d: " - "%d borders instead of 3 or 4", - (int)$4, j); - Cdbz101((int)$4,$$.Type,0,0,0,0,0,NULL,$7,NULL); - $$.Num = (int)$4; - } - } - | tNurbs tSurface tWith tBounds '(' FExpr ')' tAFFECT - ListOfListOfDouble tKnots '{' ListOfDouble ',' ListOfDouble '}' - tOrder '{' FExpr ',' FExpr '}' tEND - { - CreateNurbsSurface ( (int) $6 , (int)$18 , (int)$20 , $9, $12, $14); - $$.Type = MSH_SURF_NURBS; - $$.Num = (int)$6; - } - | tNurbs tSurface '(' FExpr ')' tAFFECT - ListOfListOfDouble tKnots '{' ListOfDouble ',' ListOfDouble '}' - tOrder '{' FExpr ',' FExpr '}' tEND - { - CreateNurbsSurfaceSupport ((int)$4, (int) $16 , (int) $18 , $7, $10, $12); - } - | tPhysical tSurface '(' FExpr ')' tAFFECT ListOfDouble tEND - { - Cdbz101((int)$4,MSH_PHYSICAL_SURFACE,0,0,0,0,0,NULL,$7,NULL); - $$.Type = MSH_PHYSICAL_SURFACE; - $$.Num = (int)$4; - } - | tSurface tLoop '(' FExpr ')' tAFFECT ListOfDouble tEND - { - Cdbz101((int)$4,MSH_SURF_LOOP,0,0,0,0,0,NULL,$7,NULL); - $$.Type = MSH_SURF_LOOP; - $$.Num = (int)$4; - } - | tSurface '{' FExpr '}' tEND - { - $$.Num = (int)$3; - Surface *s = FindSurface($$.Num,THEM); - if(!s) - vyyerror("Unknown Surface %d", $$.Num); - else - $$.Type = s->Typ; - } - - /* -------- Volumes -------- */ - - | tComplex tVolume '(' FExpr ')' tAFFECT ListOfDouble tEND - { - Cdbz101((int)$4,MSH_VOLUME,0,0,0,0,0,NULL,$7,NULL); - $$.Type = MSH_VOLUME; - $$.Num = (int)$4; - } - | tVolume '(' FExpr ')' tAFFECT ListOfDouble tEND - { - Cdbz101((int)$3,MSH_VOLUME,0,0,0,0,0,NULL,$6,NULL); - $$.Type = MSH_VOLUME; - $$.Num = (int)$3; - } - | tPhysical tVolume '(' FExpr ')' tAFFECT ListOfDouble tEND - { - Cdbz101((int)$4,MSH_PHYSICAL_VOLUME,0,0,0,0,0,NULL,$7,NULL); - $$.Type = MSH_PHYSICAL_VOLUME; - $$.Num = (int)$4; - } -; - -/* ------------------- - T R A N S F O R M - ------------------- */ - -Transform : - tTranslate VExpr '{' MultipleShape '}' - { - TranslateShapes ($2[0],$2[1],$2[2],$4,1); - $$ = $4; - } - | tRotate '{' VExpr ',' VExpr ',' FExpr '}' '{' MultipleShape '}' - { - RotateShapes($3[0],$3[1],$3[2],$5[0],$5[1],$5[2],$7,$10); - $$ = $10; - } - | tSymmetry VExpr '{' MultipleShape '}' - { - SymmetryShapes($2[0],$2[1],$2[2],$2[3],$4,1); - $$ = $4; - } - | tDilate '{' VExpr ',' FExpr '}' '{' MultipleShape '}' - { - DilatShapes($3[0],$3[1],$3[2],$5,$8,1); - $$ = $8; - } -; - -MultipleShape : - Duplicata { $$ = $1; } - | ListOfShapes { $$ = $1; } - | Transform { $$ = $1; } -; - -ListOfShapes : - /* none */ - { - $$ = List_Create(3,3,sizeof(Shape)); - } - | ListOfShapes Shape - { - List_Add($$,&$2); - $$ = $1; - } -; - -/* ------------------- - D U P L I C A T A - ------------------- */ - -Duplicata : - tDuplicata '{' ListOfShapes '}' - { - $$ = List_Create(3,3,sizeof(Shape)); - for(i=0;i<List_Nbr($3);i++){ - List_Read ($3,i,&TheShape); - CopyShape(TheShape.Type,TheShape.Num,&j); - TheShape.Num = j; - List_Add($$,&TheShape); - } - } -; - - -/* ------------- - D E L E T E - ------------- */ - -Delete : - tDelete '{' ListOfShapes '}' - { - for(i=0;i<List_Nbr($3);i++){ - List_Read ($3,i,&TheShape); - DeleteShape(TheShape.Type,TheShape.Num); - } - } - | tDelete tSTRING '[' FExpr ']' tEND - { - if(!strcmp($2, "View")) - FreeView((int)$4); - } - | tDelete tMesh tEND - { - Init_Mesh(THEM, 1); - } -; - - -/* ----------------- - C O M M A N D - ----------------- */ - -Command : - tSTRING StringExpr tEND - { - if(!strcmp($1, "Include")){ - - yyinTab[RecursionLevel++] = yyin; - - strcpy(tmpstring, yyname); - i = strlen(yyname)-1 ; - while(i >= 0 && yyname[i] != '/' && yyname[i] != '\\') i-- ; - tmpstring[i+1] = '\0'; - strcat(tmpstring,$2); - - if((yyin = fopen(tmpstring,"r"))){ - Msg(INFO, "Including '%s'", tmpstring); - strcpy(yynameTab[RecursionLevel-1],yyname); - yylinenoTab[RecursionLevel-1]=yylineno; - yylineno=1; - strcpy(yyname,tmpstring); - while(!feof(yyin)){ - yyparse(); - } - // - //Est-ce grave de laisser le stream ouvert? Si on fait le - //fclose, on ne peut pas faire appel a une fonction - //(Function) definie en dehors de son fichier de - //definition... - // - //fclose(yyin); - yyin = yyinTab[--RecursionLevel]; - strcpy(yyname,yynameTab[RecursionLevel]); - yylineno = yylinenoTab[RecursionLevel]; - } - else{ - vyyerror("Unknown file '%s'", tmpstring) ; - yyin = yyinTab[--RecursionLevel]; - } - - } - else if(!strcmp($1, "Print")){ - if(!CTX.batch) CreateOutputFile($2, CTX.print.format); - } - else if(!strcmp($1, "Save")){ - CreateOutputFile($2, CTX.mesh.format); - } - else if(!strcmp($1, "Merge")){ - - FILE *ff = yyin; - MergeProblem($2); - yyin = ff; - - } - else if(!strcmp($1, "Open")){ - - FILE *ff = yyin; - OpenProblem($2); - yyin = ff; - - } - else if(!strcmp($1, "System")){ - - Msg(PARSER_INFO, "Executing system call \"%s\"", $2); - system($2); - - } - else - vyyerror("Unknown command '%s'", $1); - } - | tSTRING FExpr tEND - { - if(!strcmp($1, "Sleep")){ - - long sleep_time = GetTime(); - while(1){ - if(GetTime() - sleep_time > (long)($2*1.e6)) break; - } - - } - else if(!strcmp($1, "Mesh")){ - - //Maillage_Dimension_0(THEM); - //mai3d(THEM,(int)$2); - vyyerror("Mesh directives are not (yet) allowed in scripts"); - - } - else - vyyerror("Unknown command '%s'", $1); - } - | tPlugin '(' tSTRING ')' '.' tSTRING tEND - { -#ifndef _NOPLUGIN - GMSH_PluginManager::Instance()->Action($3,$6,0); -#endif - } - | tExit tEND - { - exit(0); - } - | tDraw tEND - { - if(!CTX.batch){ // we're in interactive mode - if(Tree_Nbr(THEM->Points) != Last_NumberOfPoints){ - Last_NumberOfPoints = Tree_Nbr(THEM->Points); - Replot(); - DrawUI(); - } - else{ - Draw(); - DrawUI(); - } - } - } -; - -/* --------------- - L O O P - --------------- */ - -Loop : - - tFor '(' FExpr tDOTS FExpr ')' - { - FILE* ff; - if(RecursionLevel) - ff = yyinTab[RecursionLevel-1]; - else - ff = yyin; - // here, we seek remember the position in yyin - LoopControlVariablesTab[ImbricatedLoop][0] = $3 ; - LoopControlVariablesTab[ImbricatedLoop][1] = $5 ; - LoopControlVariablesTab[ImbricatedLoop][2] = 1.0 ; - LoopControlVariablesNameTab[ImbricatedLoop] = "" ; - fgetpos( ff, &yyposImbricatedLoopsTab[ImbricatedLoop++]); - } - | tFor '(' FExpr tDOTS FExpr tDOTS FExpr ')' - { - FILE* ff; - if(RecursionLevel) - ff = yyinTab[RecursionLevel-1]; - else - ff = yyin; - // here, we seek remember the position in yyin - LoopControlVariablesTab[ImbricatedLoop][0] = $3 ; - LoopControlVariablesTab[ImbricatedLoop][1] = $5 ; - LoopControlVariablesTab[ImbricatedLoop][2] = $7 ; - LoopControlVariablesNameTab[ImbricatedLoop] = "" ; - fgetpos( ff, &yyposImbricatedLoopsTab[ImbricatedLoop++]); - } - | tFor tSTRING tIn '{' FExpr tDOTS FExpr '}' - { - FILE* ff; - if(RecursionLevel) - ff = yyinTab[RecursionLevel-1]; - else - ff = yyin; - // here, we seek remember the position in yyin - LoopControlVariablesTab[ImbricatedLoop][0] = $5 ; - LoopControlVariablesTab[ImbricatedLoop][1] = $7 ; - LoopControlVariablesTab[ImbricatedLoop][2] = 1.0 ; - LoopControlVariablesNameTab[ImbricatedLoop] = $2 ; - - TheSymbol.Name = $2; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){ - TheSymbol.val = List_Create(1,1,sizeof(double)); - List_Put(TheSymbol.val, 0, &$5); - List_Add(Symbol_L, &TheSymbol); - } - else{ - List_Write(pSymbol->val, 0, &$5); - } - - fgetpos( ff, &yyposImbricatedLoopsTab[ImbricatedLoop++]); - } - | tFor tSTRING tIn '{' FExpr tDOTS FExpr tDOTS FExpr '}' - { - FILE* ff; - if(RecursionLevel) - ff = yyinTab[RecursionLevel-1]; - else - ff = yyin; - // here, we seek remember the position in yyin - LoopControlVariablesTab[ImbricatedLoop][0] = $5 ; - LoopControlVariablesTab[ImbricatedLoop][1] = $7 ; - LoopControlVariablesTab[ImbricatedLoop][2] = $9 ; - LoopControlVariablesNameTab[ImbricatedLoop] = $2 ; - - TheSymbol.Name = $2; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))){ - TheSymbol.val = List_Create(1,1,sizeof(double)); - List_Put(TheSymbol.val, 0, &$5); - List_Add(Symbol_L, &TheSymbol); - } - else{ - List_Write(pSymbol->val, 0, &$5); - } - - fgetpos( ff, &yyposImbricatedLoopsTab[ImbricatedLoop++]); - } - | tEndFor - { - if(LoopControlVariablesTab[ImbricatedLoop-1][1] > - LoopControlVariablesTab[ImbricatedLoop-1][0]){ - FILE* ff; - if(RecursionLevel) - ff = yyinTab[RecursionLevel-1]; - else - ff = yyin; - - LoopControlVariablesTab[ImbricatedLoop-1][0] += - LoopControlVariablesTab[ImbricatedLoop-1][2]; - - if(strlen(LoopControlVariablesNameTab[ImbricatedLoop-1])){ - TheSymbol.Name = LoopControlVariablesNameTab[ImbricatedLoop-1]; - pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols); - *(double*)List_Pointer_Fast(pSymbol->val, 0) += - LoopControlVariablesTab[ImbricatedLoop-1][2] ; - } - - fsetpos( yyin, &yyposImbricatedLoopsTab[ImbricatedLoop-1]); - } - else{ - ImbricatedLoop--; - } - } - | tFunction tSTRING - { - if(!FunctionManager::Instance()->createFunction($2,yyin,yylineno)) - vyyerror("Redefinition of function %s",$2); - skip_until(NULL, "Return"); - } - | tReturn - { - if(!FunctionManager::Instance()->leaveFunction(&yyin,yylineno)) - vyyerror("Error while exiting function"); - } - | tCall tSTRING tEND - { - if(!FunctionManager::Instance()->enterFunction($2,&yyin,yylineno)) - vyyerror("Unknown function %s",$2); - } - | tIf '(' FExpr ')' - { - if(!$3) skip_until("If", "EndIf"); - } - | tEndIf - { - } -; - - -/* --------------- - E X T R U D E - --------------- */ - -Extrude : - tExtrude tPoint '{' FExpr ',' VExpr '}' tEND - { - Curve *pc, *prc; - Extrude_ProtudePoint(1,(int)$4,$6[0],$6[1],$6[2],0.,0.,0.,0.,&pc,&prc,NULL); - } - | tExtrude tPoint '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND - { - Curve *pc, *prc; - Extrude_ProtudePoint(0,(int)$4,$6[0],$6[1],$6[2],$8[0],$8[1],$8[2],$10, - &pc,&prc,NULL); - } - | tExtrude tLine'{' FExpr ',' VExpr '}' tEND - { - Extrude_ProtudeCurve(1,(int)$4,$6[0],$6[1],$6[2],0.,0.,0.,0.,NULL); - } - | tExtrude tLine'{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND - { - Extrude_ProtudeCurve(0,(int)$4,$6[0],$6[1],$6[2],$8[0],$8[1],$8[2],$10,NULL); - } - | tExtrude tSurface '{' FExpr ',' VExpr '}' tEND - { - Extrude_ProtudeSurface(1,(int)$4,$6[0],$6[1],$6[2],0.,0.,0.,0.,0,NULL); - } - | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' tEND - { - Extrude_ProtudeSurface(0,(int)$4,$6[0],$6[1],$6[2],$8[0],$8[1],$8[2],$10,0,NULL); - } - | tExtrude tSurface '{' FExpr ',' VExpr '}' - { - extr.mesh.ExtrudeMesh = false; - extr.mesh.Recombine = false; - } - '{' ExtrudeParameters '}' tEND - { - int vol = NEWREG(); - Extrude_ProtudeSurface(1,(int)$4,$6[0],$6[1],$6[2],0.,0.,0.,0.,vol,&extr); - } - | tExtrude tSurface '{' FExpr ',' VExpr ',' VExpr ',' FExpr '}' - { - extr.mesh.ExtrudeMesh = false; - extr.mesh.Recombine = false; - } - - '{' ExtrudeParameters '}'tEND - { - int vol = NEWREG(); - Extrude_ProtudeSurface(0,(int)$4,$6[0],$6[1],$6[2],$8[0],$8[1],$8[2],$10,vol,&extr); - } -; - -ExtrudeParameters : - ExtrudeParameter - { - } - | ExtrudeParameters ExtrudeParameter - { - } -; - -ExtrudeParameter : - tLayers '{' ListOfDouble ',' ListOfDouble ',' ListOfDouble '}' tEND - { - double d; - int j; - extr.mesh.ExtrudeMesh = true; - extr.mesh.NbLayer = List_Nbr($3); - for(int i=0;i<List_Nbr($3);i++){ - List_Read($3,i,&d); - j = (int)d; - extr.mesh.NbElmLayer[i] = j; - List_Read($5,i,&d); - j = (int)d; - extr.mesh.ZonLayer[i] = j; - List_Read($7,i,&d); - extr.mesh.hLayer[i] = d; - } - List_Delete($3); - List_Delete($5); - List_Delete($7); - } - | tRecombine tEND - { - extr.mesh.Recombine = true; - } -; - -/* ------------------- - T R A N S F I N I - ------------------- */ - -Transfini : - tTransfinite tLine ListOfDouble tAFFECT FExpr tEND - { - Curve *c; - for(i=0;i<List_Nbr($3);i++){ - List_Read($3,i,&d); - j = (int)fabs(d); - c = FindCurve(j,THEM); - if(!c) - Msg(WARNING, "Unkown Curve %d", j); - else{ - c->Method = TRANSFINI; - c->ipar[0] = (int)$5; - c->ipar[1] = sign(d); - c->dpar[0] = 1.0; - } - } - List_Delete($3); - } - | tTransfinite tLine ListOfDouble tAFFECT FExpr tUsing tProgression FExpr tEND - { - Curve *c; - for(i=0;i<List_Nbr($3);i++){ - List_Read($3,i,&d); - j = (int)fabs(d); - c = FindCurve(j,THEM); - if(!c) - Msg(WARNING, "Unkown Curve %d", j); - else{ - c->Method = TRANSFINI; - c->ipar[0] = (int)$5; - c->ipar[1] = sign(d); /* Progresion : code 1 ou -1 */ - c->dpar[0] = fabs($8); - } - } - List_Delete($3); - } - | tTransfinite tLine ListOfDouble tAFFECT FExpr tUsing tBump FExpr tEND - { - Curve *c; - for(i=0;i<List_Nbr($3);i++){ - List_Read($3,i,&d); - j = (int)fabs(d); - c = FindCurve(j,THEM); - if(!c) - Msg(WARNING, "Unkown Curve %d", j); - else{ - c->Method = TRANSFINI; - c->ipar[0] = (int)$5; - c->ipar[1] = 2*sign(d); /* Bump : code 2 ou -2 */ - c->dpar[0] = fabs($8); - } - } - List_Delete($3); - } - | tTransfinite tSurface '{' FExpr '}' tAFFECT ListOfDouble tEND - { - Surface *s = FindSurface((int)$4,THEM); - if(!s) - Msg(WARNING, "Unkown Surface %d", (int)$4); - else{ - s->Method = TRANSFINI; - k = List_Nbr($7); - if(k!=3 && k!=4){ - vyyerror("Wrong definition of Transfinite Surface %d: " - "%d points instead of 3 or 4" , $4, k) ; - } - else{ - for(i=0;i<k;i++){ - List_Read($7,i,&d); - j = (int)fabs(d); - s->ipar[i] = j; - } - } - } - List_Delete($7); - } - | tElliptic tSurface '{' FExpr '}' tAFFECT ListOfDouble tEND - { - Surface *s = FindSurface((int)$4,THEM); - if(!s) - Msg(WARNING, "Unkown Surface %d", (int)$4); - else{ - s->Method = ELLIPTIC; - k = List_Nbr($7); - if(k != 4) - vyyerror("Wrong definition of Elliptic Surface %d: " - "%d points instead of 4" , $4, k) ; - else{ - for(i=0;i<k;i++){ - List_Read($7,i,&d); - j = (int)fabs(d); - s->ipar[i] = j; - } - } - } - List_Delete($7); - } - | tTransfinite tVolume '{' FExpr '}' tAFFECT ListOfDouble tEND - { - Volume *v = FindVolume((int)$4,THEM); - if(!v) - Msg(WARNING, "Unkown Volume %d", (int)$4); - else{ - v->Method = TRANSFINI; - k = List_Nbr($7); - if(k!=6 && k!=8) - vyyerror("Wrong definition of Transfinite Volume %d: " - "%d points instead of 6 or 8" , $4, k) ; - else{ - for(i=0;i<k;i++){ - List_Read($7,i,&d); - j = (int)fabs(d); - v->ipar[i] = j; - } - } - } - List_Delete($7); - } - | tRecombine tSurface ListOfDouble tAFFECT FExpr tEND - { - Surface *s; - for(i=0;i<List_Nbr($3);i++){ - List_Read($3,i,&d); - j = (int)d; - s = FindSurface(j,THEM); - if(s){ - s->Recombine = 1; - s->RecombineAngle = ($5 > 0 && $5 < 90) ? $5 : 90; - } - } - List_Delete($3); - } - | tRecombine tSurface ListOfDouble tEND - { - Surface *s; - for(i=0;i<List_Nbr($3);i++){ - List_Read($3,i,&d); - j = (int)d; - s = FindSurface(j,THEM); - if(s){ - s->Recombine = 1; - s->RecombineAngle = 30.; - } - } - List_Delete($3); - } -; - - -/* ------------------- - C O H E R E N C E - ------------------- */ - -Coherence : - tCoherence tEND - { - Coherence_PS(); - } - | tIntersect tEND - { - IntersectAllSegmentsTogether(); - } -; - - -/* --------------- - G E N E R A L - --------------- */ - -BoolExpr : - tTRUE {$$ = 1;} - | tFALSE {$$ = 0;} - | tUNSPECIFIED {$$ = -1;} - | tU {$$ = -1;} - | tV {$$ = -1;} - ; - -FExpr : - FExpr_Single { $$ = $1; } - | '(' FExpr ')' { $$ = $2 ; } - | '-' FExpr %prec UNARYPREC { $$ = -$2 ; } - | '+' FExpr %prec UNARYPREC { $$ = $2; } - | '!' FExpr { $$ = !$2 ; } - | FExpr '-' FExpr { $$ = $1 - $3 ; } - | FExpr '+' FExpr { $$ = $1 + $3 ; } - | FExpr '*' FExpr { $$ = $1 * $3 ; } - | FExpr '/' FExpr - { - if(!$3) - vyyerror("Division by zero in '%g / %g'", $1, $3); - else - $$ = $1 / $3 ; - } - | FExpr '%' FExpr { $$ = (int)$1 % (int)$3 ; } - | FExpr '^' FExpr { $$ = pow($1,$3) ; } - | FExpr '<' FExpr { $$ = $1 < $3 ; } - | FExpr '>' FExpr { $$ = $1 > $3 ; } - | FExpr tLESSOREQUAL FExpr { $$ = $1 <= $3 ; } - | FExpr tGREATEROREQUAL FExpr { $$ = $1 >= $3 ; } - | FExpr tEQUAL FExpr { $$ = $1 == $3 ; } - | FExpr tNOTEQUAL FExpr { $$ = $1 != $3 ; } - | FExpr tAND FExpr { $$ = $1 && $3 ; } - | FExpr tOR FExpr { $$ = $1 || $3 ; } - | FExpr '?' FExpr tDOTS FExpr { $$ = $1? $3 : $5 ; } - | tExp '(' FExpr ')' { $$ = exp($3); } - | tLog '(' FExpr ')' { $$ = log($3); } - | tLog10 '(' FExpr ')' { $$ = log10($3); } - | tSqrt '(' FExpr ')' { $$ = sqrt($3); } - | tSin '(' FExpr ')' { $$ = sin($3); } - | tAsin '(' FExpr ')' { $$ = asin($3); } - | tCos '(' FExpr ')' { $$ = cos($3); } - | tAcos '(' FExpr ')' { $$ = acos($3); } - | tTan '(' FExpr ')' { $$ = tan($3); } - | tAtan '(' FExpr ')' { $$ = atan($3); } - | tAtan2 '(' FExpr ',' FExpr ')' { $$ = atan2($3,$5); } - | tSinh '(' FExpr ')' { $$ = sinh($3); } - | tCosh '(' FExpr ')' { $$ = cosh($3); } - | tTanh '(' FExpr ')' { $$ = tanh($3); } - | tFabs '(' FExpr ')' { $$ = fabs($3); } - | tFloor '(' FExpr ')' { $$ = floor($3); } - | tCeil '(' FExpr ')' { $$ = ceil($3); } - | tFmod '(' FExpr ',' FExpr ')' { $$ = fmod($3,$5); } - | tModulo '(' FExpr ',' FExpr ')' { $$ = fmod($3,$5); } - | tHypot '(' FExpr ',' FExpr ')' { $$ = sqrt($3*$3+$5*$5); } - | tRand '(' FExpr ')' { $$ = $3*(double)rand()/(double)RAND_MAX; } -; - -/* Pour etre vraiment complet, il faudrait encore ajouter +=, -=, *= et /= */ - -FExpr_Single : - - /* -------- Constants -------- */ - - tDOUBLE { $$ = $1; } - | tPi { $$ = 3.141592653589793; } - | tMPI_Rank { $$ = ParUtil::Instance()->rank(); } - | tMPI_Size { $$ = ParUtil::Instance()->size(); } - - /* -------- Variables -------- */ - - | tSTRING - { - TheSymbol.Name = $1 ; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { - vyyerror("Unknown variable '%s'", $1) ; - $$ = 0. ; - } - else - $$ = *(double*)List_Pointer_Fast(pSymbol->val, 0) ; - } - - | tSTRING '[' FExpr ']' - { - TheSymbol.Name = $1 ; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { - vyyerror("Unknown variable '%s'", $1) ; - $$ = 0. ; - } - else{ - if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3))) - $$ = *pd ; - else{ - vyyerror("Uninitialized variable '%s[%d]'", $1, (int)$3) ; - $$ = 0. ; - } - } - } - - | tSTRING NumericIncrement - { - TheSymbol.Name = $1 ; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { - vyyerror("Unknown variable '%s'", $1) ; - $$ = 0. ; - } - else - $$ = (*(double*)List_Pointer_Fast(pSymbol->val, 0) += $2) ; - } - - | tSTRING '[' FExpr ']' NumericIncrement - { - TheSymbol.Name = $1 ; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { - vyyerror("Unknown variable '%s'", $1) ; - $$ = 0. ; - } - else{ - if((pd = (double*)List_Pointer_Test(pSymbol->val, (int)$3))) - $$ = (*pd += $5) ; - else{ - vyyerror("Uninitialized variable '%s[%d]'", $1, (int)$3) ; - $$ = 0. ; - } - } - } - - /* -------- Option Strings -------- */ - - | tSTRING '.' tSTRING - { - if(!(pNumCat = Get_NumberOptionCategory($1))){ - vyyerror("Unknown numeric option class '%s'", $1); - $$ = 0. ; - } - else{ - if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($3, pNumCat))){ - vyyerror("Unknown numeric option '%s.%s'", $1, $3); - $$ = 0. ; - } - else - $$ = pNumOpt(0, GMSH_GET, 0); - } - } - - | tSTRING '[' FExpr ']' '.' tSTRING - { - if(!(pNumCat = Get_NumberOptionCategory($1))){ - vyyerror("Unknown numeric option class '%s'", $1); - $$ = 0. ; - } - else{ - if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($6, pNumCat))){ - vyyerror("Unknown numeric option '%s[%d].%s'", $1, (int)$3, $6); - $$ = 0. ; - } - else - $$ = pNumOpt((int)$3, GMSH_GET, 0); - } - } - - | tSTRING '.' tSTRING NumericIncrement - { - if(!(pNumCat = Get_NumberOptionCategory($1))){ - vyyerror("Unknown numeric option class '%s'", $1); - $$ = 0. ; - } - else{ - if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($3, pNumCat))){ - vyyerror("Unknown numeric option '%s.%s'", $1, $3); - $$ = 0. ; - } - else - $$ = pNumOpt(0, GMSH_SET|GMSH_GUI, pNumOpt(0, GMSH_GET, 0)+$4); - } - } - - | tSTRING '[' FExpr ']' '.' tSTRING NumericIncrement - { - if(!(pNumCat = Get_NumberOptionCategory($1))){ - vyyerror("Unknown numeric option class '%s'", $1); - $$ = 0. ; - } - else{ - if(!(pNumOpt = (double (*) (int, int, double))Get_NumberOption($6, pNumCat))){ - vyyerror("Unknown numeric option '%s[%d].%s'", $1, (int)$3, $6); - $$ = 0. ; - } - else - $$ = pNumOpt((int)$3, GMSH_SET|GMSH_GUI, pNumOpt((int)$3, GMSH_GET, 0)+$7); - } - } -; - -VExpr : - VExpr_Single - { - memcpy($$, $1, 5*sizeof(double)) ; - } - | '-' VExpr %prec UNARYPREC - { - for(i=0 ; i<5 ; i++) $$[i] = -$2[i] ; - } - | '+' VExpr %prec UNARYPREC - { - for(i=0 ; i<5 ; i++) $$[i] = $2[i]; - } - | VExpr '-' VExpr - { - for(i=0 ; i<5 ; i++) $$[i] = $1[i] - $3[i] ; - } - | VExpr '+' VExpr - { - for(i=0 ; i<5 ; i++) $$[i] = $1[i] + $3[i] ; - } - -VExpr_Single : - '{' FExpr ',' FExpr ',' FExpr ',' FExpr ',' FExpr '}' - { - $$[0]=$2; $$[1]=$4; $$[2]=$6; $$[3]=$8; $$[4]=$10; - } - | '{' FExpr ',' FExpr ',' FExpr ',' FExpr '}' - { - $$[0]=$2; $$[1]=$4; $$[2]=$6; $$[3]=$8; $$[4]=1.0; - } - | '{' FExpr ',' FExpr ',' FExpr '}' - { - $$[0]=$2; $$[1]=$4; $$[2]=$6; $$[3]=0.0; $$[4]=1.0; - } - | '(' FExpr ',' FExpr ',' FExpr ')' - { - $$[0]=$2; $$[1]=$4; $$[2]=$6; $$[3]=0.0; $$[4]=1.0; - } -; - -ListOfStrings : - /* none */ - { - } - | '(' RecursiveListOfStrings ')' - { - } -; - -RecursiveListOfStrings : - tBIGSTR - { - } - | RecursiveListOfStrings ',' tBIGSTR - { - } -; - -ListOfListOfDouble : - /* none */ - { - } - | '{' RecursiveListOfListOfDouble '}' - { - $$=$2; - } - | '(' RecursiveListOfListOfDouble ')' - { - $$=$2; - } -; - -RecursiveListOfListOfDouble : - ListOfDouble - { - $$ = List_Create(2,1,sizeof(List_T*)) ; - List_Add($$, &($1)) ; - } - | RecursiveListOfListOfDouble ',' ListOfDouble - { - List_Add($$, &($3)) ; - } -; - - -ListOfDouble : - FExpr - { - $$ = List_Create(2,1,sizeof(double)) ; - List_Add($$, &($1)) ; - } - | FExpr_Multi - { - $$ = $1 ; - } - | '{' RecursiveListOfDouble '}' - { - $$=$2; - } - | '-' '{' RecursiveListOfDouble '}' - { - $$=$3; - for(i=0 ; i<List_Nbr($$) ; i++){ - pd = (double*)List_Pointer($$, i); - (*pd) = - (*pd); - } - } -; - -FExpr_Multi : - FExpr tDOTS FExpr - { - $$ = List_Create(2,1,sizeof(double)) ; - for(d=$1 ; ($1<$3)?(d<=$3):(d>=$3) ; ($1<$3)?(d+=1.):(d-=1.)) - List_Add($$, &d) ; - } - | FExpr tDOTS FExpr tDOTS FExpr - { - $$ = List_Create(2,1,sizeof(double)) ; - if(!$5 || ($1<$3 && $5<0) || ($1>$3 && $5>0)){ - vyyerror("Wrong increment in '%g:%g:%g'", $1, $3, $5) ; - List_Add($$, &($1)) ; - } - else - for(d=$1 ; ($5>0)?(d<=$3):(d>=$3) ; d+=$5) - List_Add($$, &d) ; - } - | tSTRING '[' ']' - { - $$ = List_Create(2,1,sizeof(double)) ; - TheSymbol.Name = $1 ; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { - vyyerror("Unknown variable '%s'", $1) ; - d = 0.0 ; - List_Add($$, &d); - } - else{ - for(i = 0 ; i < List_Nbr(pSymbol->val) ; i++) - List_Add($$, (double*)List_Pointer_Fast(pSymbol->val, i)) ; - } - } - | '-' tSTRING '[' ']' - { - $$ = List_Create(2,1,sizeof(double)) ; - TheSymbol.Name = $2 ; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { - vyyerror("Unknown variable '%s'", $2) ; - d = 0.0 ; - List_Add($$, &d); - } - else{ - for(i = 0 ; i < List_Nbr(pSymbol->val) ; i++){ - d = - *(double*)List_Pointer_Fast(pSymbol->val, i); - List_Add($$, &d) ; - } - } - } - | tSTRING '[' '{' RecursiveListOfDouble '}' ']' - { - $$ = List_Create(2,1,sizeof(double)) ; - TheSymbol.Name = $1 ; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { - vyyerror("Unknown variable '%s'", $1) ; - d = 0.0 ; - List_Add($$, &d); - } - else{ - for(i = 0 ; i < List_Nbr($4) ; i++){ - j = (int)(*(double*)List_Pointer_Fast($4, i)); - if((pd = (double*)List_Pointer_Test(pSymbol->val, j))) - List_Add($$, pd) ; - else - vyyerror("Uninitialized variable '%s[%d]'", $1, j) ; - } - } - List_Delete($4); - } - | '-' tSTRING '[' '{' RecursiveListOfDouble '}' ']' - { - $$ = List_Create(2,1,sizeof(double)) ; - TheSymbol.Name = $2 ; - if (!(pSymbol = (Symbol*)List_PQuery(Symbol_L, &TheSymbol, CompareSymbols))) { - vyyerror("Unknown variable '%s'", $2) ; - d = 0.0 ; - List_Add($$, &d); - } - else{ - for(i = 0 ; i < List_Nbr($5) ; i++){ - j = (int)(*(double*)List_Pointer_Fast($5, i)); - if((pd = (double*)List_Pointer_Test(pSymbol->val, j))){ - d = - *pd; - List_Add($$, &d) ; - } - else - vyyerror("Uninitialized variable '%s[%d]'", $2, j) ; - } - } - List_Delete($5); - } -; - -RecursiveListOfDouble : - FExpr - { - $$ = List_Create(2,1,sizeof(double)) ; - List_Add($$, &($1)) ; - } - | FExpr_Multi - { - $$ = $1 ; - } - | RecursiveListOfDouble ',' FExpr - { - List_Add($$, &($3)) ; - } - | RecursiveListOfDouble ',' FExpr_Multi - { - for(i=0 ; i<List_Nbr($3) ; i++){ - List_Read($3, i, &d) ; - List_Add($$, &d) ; - } - List_Delete($3); - } -; - - -ColorExpr : - '{' FExpr ',' FExpr ',' FExpr ',' FExpr '}' - { - $$ = PACK_COLOR((int)$2, (int)$4, (int)$6, (int)$8); - } - | '{' FExpr ',' FExpr ',' FExpr '}' - { - $$ = PACK_COLOR((int)$2, (int)$4, (int)$6, 255); - } -/* shift/reduce conflict - | '{' tSTRING ',' FExpr '}' - { - $$ = Get_ColorForString(ColorString, (int)$4, $2, &flag); - if(flag) vyyerror("Unknown color '%s'", $2); - } -*/ - | tSTRING - { - $$ = Get_ColorForString(ColorString, -1, $1, &flag); - if(flag) vyyerror("Unknown color '%s'", $1); - } - | tSTRING '.' tColor '.' tSTRING - { - if(!(pColCat = Get_ColorOptionCategory($1))){ - vyyerror("Unknown color option class '%s'", $1); - $$ = 0 ; - } - else{ - if(!(pColOpt = (unsigned int (*) (int, int, unsigned int))Get_ColorOption($5, pColCat))){ - vyyerror("Unknown color option '%s.Color.%s'", $1, $5); - $$ = 0 ; - } - else{ - $$ = pColOpt(0,GMSH_GET,0) ; - } - } - } -; - -ListOfColor : - '{' RecursiveListOfColor '}' - { - $$ = $2; - } - | tSTRING '[' FExpr ']' '.' tColorTable - { - $$ = List_Create(256,10,sizeof(unsigned int)) ; - ColorTable *ct = Get_ColorTable((int)$3); - if(!ct) - vyyerror("View[%d] does not exist", (int)$3); - else{ - for(i=0 ; i<ct->size ; i++) - List_Add($$, &ct->table[i]); - } - } -; - -RecursiveListOfColor : - ColorExpr - { - $$ = List_Create(256,10,sizeof(unsigned int)) ; - List_Add($$, &($1)) ; - } - | RecursiveListOfColor ',' ColorExpr - { - List_Add($$, &($3)) ; - } -; - -StringExpr : - tBIGSTR - { - $$ = $1; - } - | tStrCat '(' StringExpr ',' StringExpr ')' - { - $$ = (char *)Malloc((strlen($3)+strlen($5)+1)*sizeof(char)) ; - strcpy($$, $3) ; - strcat($$, $5) ; - Free($3); - Free($5); - } - | tStrPrefix '(' StringExpr ')' - { - $$ = (char *)Malloc((strlen($3)+1)*sizeof(char)) ; - for(i=strlen($3)-1; i>=0; i--){ - if($3[i] == '.'){ - strncpy($$,$3,i); - $$[i]='\0'; - break; - } - } - if(i<=0) strcpy($$,$3); - Free($3); - } - | tSprintf '(' StringExpr ')' - { - $$ = $3; - } - | tSprintf '(' StringExpr ',' RecursiveListOfDouble ')' - { - for(i = 0 ; i<List_Nbr($5) ; i++){ - if(!i){ - str = strtok($3, "%"); - strcpy(tmpstring, str); - } - str = strtok(NULL, "%"); - if(str){ - strcpy(tmpstring2, "%"); - strcat(tmpstring2, str); - sprintf(tmpstring3, tmpstring2, *(double*)List_Pointer($5,i)); - strcat(tmpstring, tmpstring3); - } - else{ - vyyerror("Missing %d parameter(s) in Sprintf format", - List_Nbr($5)-i); - break ; - } - } - $$ = (char*)Malloc((strlen(tmpstring)+1)*sizeof(char)); - strcpy($$, tmpstring); - List_Delete($5); - Free($3); - } - | tSprintf '(' tSTRING '.' tSTRING ')' - { - if(!(pStrCat = Get_StringOptionCategory($3))) - vyyerror("Unknown string option class '%s'", $3); - else{ - if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption($5, pStrCat))) - vyyerror("Unknown string option '%s.%s'", $3, $5); - else{ - str = pStrOpt(0,GMSH_GET,NULL) ; - $$ = (char*)Malloc((strlen(str)+1)*sizeof(char)); - strcpy($$, str); - } - } - } - | tSprintf '(' tSTRING '[' FExpr ']' '.' tSTRING ')' - { - if(!(pStrCat = Get_StringOptionCategory($3))) - vyyerror("Unknown string option class '%s'", $3); - else{ - if(!(pStrOpt = (char *(*) (int, int, char *))Get_StringOption($8, pStrCat))) - vyyerror("Unknown string option '%s[%d].%s'", $3, (int)$5, $8); - else{ - str = pStrOpt((int)$5,GMSH_GET,NULL) ; - $$ = (char*)Malloc((strlen(str)+1)*sizeof(char)); - strcpy($$, str); - } - } - } -; - -%% - -void InitSymbols(void){ - if(!Symbol_L) - Symbol_L = List_Create(50,10,sizeof(Symbol)); - else - List_Reset(Symbol_L); -} - -void DeleteSymbols(void){ - int i; - for(i = 0 ; i < List_Nbr(Symbol_L) ; i++) - List_Delete(((Symbol*)List_Pointer_Fast(Symbol_L,i))->val); - List_Delete(Symbol_L); -} - -int CompareSymbols (const void *a, const void *b){ - return(strcmp(((Symbol*)a)->Name,((Symbol*)b)->Name)); -} - -void yyerror(char *s){ - Msg(PARSER_ERROR, "'%s', line %d : %s (%s)",yyname,yylineno-1,s,yytext); - yyerrorstate=1; -} - -void vyyerror(char *fmt, ...){ - va_list args; - char tmp[1024]; - - va_start (args, fmt); - vsprintf (tmp, fmt, args); - va_end (args); - - Msg(PARSER_ERROR, "'%s', line %d : %s", yyname, yylineno-1, tmp); - yyerrorstate=1; -} - - diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp deleted file mode 100644 index c7bee26d07fd8b019eaa073f6232acb0d7028cad..0000000000000000000000000000000000000000 --- a/Parser/Gmsh.yy.cpp +++ /dev/null @@ -1,3172 +0,0 @@ -#line 2 "Gmsh.yy.cpp" -/* A lexical scanner generated by flex */ - -/* Scanner skeleton version: - * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.106 2001-08-12 14:24:51 geuzaine Exp $ - */ - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 - -#include <stdio.h> -#include <unistd.h> - - -/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */ -#ifdef c_plusplus -#ifndef __cplusplus -#define __cplusplus -#endif -#endif - - -#ifdef __cplusplus - -#include <stdlib.h> - -/* Use prototypes in function declarations. */ -#define YY_USE_PROTOS - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -#if __STDC__ - -#define YY_USE_PROTOS -#define YY_USE_CONST - -#endif /* __STDC__ */ -#endif /* ! __cplusplus */ - -#ifdef __TURBOC__ - #pragma warn -rch - #pragma warn -use -#include <io.h> -#include <stdlib.h> -#define YY_USE_CONST -#define YY_USE_PROTOS -#endif - -#ifdef YY_USE_CONST -#define yyconst const -#else -#define yyconst -#endif - - -#ifdef YY_USE_PROTOS -#define YY_PROTO(proto) proto -#else -#define YY_PROTO(proto) () -#endif - -/* Returned upon end-of-file. */ -#define YY_NULL 0 - -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. - */ -#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) - -/* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ -#define BEGIN yy_start = 1 + 2 * - -/* Translate the current start state into a value that can be later handed - * to BEGIN to return to the state. The YYSTATE alias is for lex - * compatibility. - */ -#define YY_START ((yy_start - 1) / 2) -#define YYSTATE YY_START - -/* Action number for EOF rule of a given start state. */ -#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) - -/* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE yyrestart( yyin ) - -#define YY_END_OF_BUFFER_CHAR 0 - -/* Size of default input buffer. */ -#define YY_BUF_SIZE 16384 - -typedef struct yy_buffer_state *YY_BUFFER_STATE; - -extern int yyleng; -extern FILE *yyin, *yyout; - -#define EOB_ACT_CONTINUE_SCAN 0 -#define EOB_ACT_END_OF_FILE 1 -#define EOB_ACT_LAST_MATCH 2 - -/* The funky do-while in the following #define is used to turn the definition - * int a single C statement (which needs a semi-colon terminator). This - * avoids problems with code like: - * - * if ( condition_holds ) - * yyless( 5 ); - * else - * do_something_else(); - * - * Prior to using the do-while the compiler would get upset at the - * "else" because it interpreted the "if" statement as being all - * done when it reached the ';' after the yyless() call. - */ - -/* Return all but the first 'n' matched characters back to the input stream. */ - -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - *yy_cp = yy_hold_char; \ - YY_RESTORE_YY_MORE_OFFSET \ - yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up yytext again */ \ - } \ - while ( 0 ) - -#define unput(c) yyunput( c, yytext_ptr ) - -/* The following is because we cannot portably get our hands on size_t - * (without autoconf's help, which isn't available because we want - * flex-generated scanners to compile on their own). - */ -typedef unsigned int yy_size_t; - - -struct yy_buffer_state - { - FILE *yy_input_file; - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - yy_size_t yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - int yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; -#define YY_BUFFER_NEW 0 -#define YY_BUFFER_NORMAL 1 - /* When an EOF's been seen but there's still some text to process - * then we mark the buffer as YY_EOF_PENDING, to indicate that we - * shouldn't try reading from the input source any more. We might - * still have a bunch of tokens to match, though, because of - * possible backing-up. - * - * When we actually see the EOF, we change the status to "new" - * (via yyrestart()), so that the user can continue scanning by - * just pointing yyin at a new input file. - */ -#define YY_BUFFER_EOF_PENDING 2 - }; - -static YY_BUFFER_STATE yy_current_buffer = 0; - -/* We provide macros for accessing buffer states in case in the - * future we want to put the buffer states in a more general - * "scanner state". - */ -#define YY_CURRENT_BUFFER yy_current_buffer - - -/* yy_hold_char holds the character lost when yytext is formed. */ -static char yy_hold_char; - -static int yy_n_chars; /* number of characters read into yy_ch_buf */ - - -int yyleng; - -/* Points to current character in buffer. */ -static char *yy_c_buf_p = (char *) 0; -static int yy_init = 1; /* whether we need to initialize */ -static int yy_start = 0; /* start state number */ - -/* Flag which is used to allow yywrap()'s to do buffer switches - * instead of setting up a fresh yyin. A bit of a hack ... - */ -static int yy_did_buffer_switch_on_eof; - -void yyrestart YY_PROTO(( FILE *input_file )); - -void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer )); -void yy_load_buffer_state YY_PROTO(( void )); -YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size )); -void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b )); -void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file )); -void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b )); -#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer ) - -YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size )); -YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str )); -YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len )); - -static void *yy_flex_alloc YY_PROTO(( yy_size_t )); -static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )); -static void yy_flex_free YY_PROTO(( void * )); - -#define yy_new_buffer yy_create_buffer - -#define yy_set_interactive(is_interactive) \ - { \ - if ( ! yy_current_buffer ) \ - yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ - yy_current_buffer->yy_is_interactive = is_interactive; \ - } - -#define yy_set_bol(at_bol) \ - { \ - if ( ! yy_current_buffer ) \ - yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ - yy_current_buffer->yy_at_bol = at_bol; \ - } - -#define YY_AT_BOL() (yy_current_buffer->yy_at_bol) - -typedef unsigned char YY_CHAR; -FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; -typedef int yy_state_type; -extern char *yytext; -#define yytext_ptr yytext - -static yy_state_type yy_get_previous_state YY_PROTO(( void )); -static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state )); -static int yy_get_next_buffer YY_PROTO(( void )); -static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); - -/* Done after the current pattern has been matched and before the - * corresponding action - sets up yytext. - */ -#define YY_DO_BEFORE_ACTION \ - yytext_ptr = yy_bp; \ - yyleng = (int) (yy_cp - yy_bp); \ - yy_hold_char = *yy_cp; \ - *yy_cp = '\0'; \ - yy_c_buf_p = yy_cp; - -#define YY_NUM_RULES 185 -#define YY_END_OF_BUFFER 186 -static yyconst short int yy_accept[1009] = - { 0, - 0, 0, 186, 184, 1, 1, 184, 5, 178, 184, - 6, 184, 184, 184, 184, 184, 179, 14, 2, 184, - 9, 184, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 184, 184, 0, 0, 22, 178, 18, 12, 19, - 10, 20, 11, 0, 181, 0, 0, 0, 0, 3, - 4, 13, 16, 180, 179, 0, 24, 21, 25, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 68, 67, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 84, 183, 183, 183, 183, 183, - 183, 183, 183, 120, 123, 114, 117, 183, 183, 183, - 183, 183, 183, 122, 183, 125, 183, 116, 119, 183, - 183, 183, 183, 121, 124, 115, 118, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 17, 23, 0, - 0, 15, 0, 131, 132, 133, 134, 180, 0, 0, - - 182, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 40, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 53, 183, 183, 183, 183, 183, 183, 64, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 74, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 98, 183, 183, 183, 183, - 183, 183, 183, 183, 109, 183, 183, 183, 183, 183, - - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 0, 0, 0, 181, 0, 0, 180, 183, 183, 183, - 183, 26, 183, 183, 183, 28, 30, 183, 183, 183, - 183, 35, 183, 183, 183, 183, 183, 183, 48, 183, - 38, 183, 183, 183, 183, 183, 39, 148, 183, 183, - 183, 52, 183, 183, 183, 0, 183, 183, 183, 183, - 60, 183, 183, 183, 61, 183, 63, 183, 183, 183, - 183, 0, 183, 183, 142, 183, 183, 72, 183, 73, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 95, 183, 183, - - 183, 183, 183, 99, 183, 183, 97, 183, 183, 183, - 183, 183, 183, 108, 183, 183, 183, 183, 183, 183, - 113, 183, 183, 183, 183, 173, 8, 183, 183, 183, - 183, 183, 0, 0, 0, 180, 183, 183, 183, 183, - 183, 183, 183, 32, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 45, 183, - 183, 183, 183, 183, 183, 183, 0, 183, 183, 183, - 59, 183, 183, 183, 62, 183, 183, 183, 66, 0, - 183, 70, 183, 183, 75, 183, 183, 183, 183, 183, - 81, 183, 82, 146, 183, 183, 183, 85, 183, 86, - - 87, 183, 183, 183, 183, 183, 94, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 111, 183, - 183, 183, 183, 183, 183, 170, 183, 183, 172, 177, - 183, 0, 0, 183, 183, 183, 183, 27, 29, 31, - 183, 183, 183, 37, 183, 161, 183, 183, 183, 183, - 183, 183, 42, 183, 183, 183, 183, 49, 50, 183, - 183, 183, 183, 0, 154, 183, 183, 58, 183, 183, - 183, 183, 183, 183, 183, 183, 147, 0, 183, 76, - 71, 183, 183, 183, 78, 77, 183, 183, 183, 183, - 91, 90, 183, 183, 96, 93, 183, 100, 183, 104, - - 183, 183, 183, 183, 183, 183, 183, 183, 143, 183, - 112, 183, 183, 183, 7, 171, 169, 0, 0, 183, - 183, 183, 183, 33, 183, 36, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 44, 183, 183, 183, - 183, 57, 0, 183, 183, 55, 183, 183, 183, 183, - 183, 183, 183, 0, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 103, 183, 101, 183, 183, - 183, 183, 183, 110, 183, 183, 174, 183, 0, 0, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 0, - - 54, 56, 183, 183, 183, 183, 183, 65, 183, 0, - 183, 183, 79, 80, 183, 183, 183, 83, 183, 183, - 183, 183, 102, 183, 183, 183, 183, 183, 175, 176, - 0, 0, 183, 183, 183, 183, 34, 183, 183, 183, - 183, 183, 183, 183, 183, 43, 183, 144, 51, 183, - 137, 0, 183, 183, 183, 150, 183, 183, 0, 69, - 183, 183, 183, 183, 183, 92, 183, 105, 183, 183, - 183, 107, 183, 0, 0, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 47, 183, 46, - 136, 0, 140, 183, 183, 183, 183, 0, 183, 183, - - 183, 89, 183, 183, 183, 183, 183, 183, 0, 0, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 0, 183, 183, 149, 183, 0, 183, - 183, 183, 88, 183, 183, 183, 106, 183, 130, 0, - 130, 183, 183, 183, 183, 183, 183, 183, 155, 183, - 183, 183, 183, 0, 183, 183, 183, 152, 183, 183, - 183, 183, 183, 183, 138, 129, 183, 141, 129, 183, - 183, 183, 183, 183, 183, 183, 183, 0, 183, 183, - 163, 183, 135, 183, 183, 183, 162, 183, 183, 183, - 183, 183, 183, 183, 183, 41, 0, 183, 183, 183, - - 183, 183, 183, 183, 183, 183, 183, 126, 165, 159, - 183, 0, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 153, 139, 151, 183, 183, 183, - 160, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 145, 183, 183, 183, 183, 183, 166, 183, 183, - 183, 183, 183, 158, 157, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 164, 183, - 183, 183, 183, 183, 167, 183, 183, 128, 183, 183, - 183, 183, 183, 183, 127, 183, 183, 183, 183, 183, - - 183, 183, 183, 168, 183, 183, 156, 0 - } ; - -static yyconst int yy_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 4, 5, 6, 1, 1, 7, 8, 1, - 1, 9, 10, 1, 11, 12, 13, 14, 15, 16, - 17, 18, 18, 18, 18, 18, 18, 19, 20, 21, - 22, 23, 1, 1, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 33, 40, 41, 42, 43, 44, 45, 46, 47, 33, - 1, 48, 1, 1, 49, 1, 50, 51, 52, 53, - - 54, 55, 56, 57, 58, 33, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 1, 75, 1, 76, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1 - } ; - -static yyconst int yy_meta[77] = - { 0, - 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 3, 3, 3, 3, 1, 1, - 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 1, 1 - } ; - -static yyconst short int yy_base[1014] = - { 0, - 0, 0, 1272, 51, 52, 1273, 57, 54, 70, 75, - 55, 67, 80, 81, 113, 95, 132, 73, 79, 89, - 111, 119, 125, 133, 179, 140, 181, 189, 135, 161, - 204, 83, 158, 214, 230, 110, 222, 252, 253, 297, - 307, 184, 278, 154, 212, 255, 237, 271, 268, 300, - 325, 256, 147, 1233, 1233, 1273, 360, 1273, 1273, 1273, - 1273, 1273, 1273, 1257, 366, 1256, 1255, 128, 1254, 1273, - 1273, 1273, 1273, 371, 386, 395, 1273, 1273, 1273, 0, - 1227, 1220, 1226, 1230, 1198, 1208, 1201, 117, 1194, 1216, - 1187, 1194, 1214, 1213, 1214, 83, 1216, 163, 1192, 1199, - - 1182, 361, 1205, 1206, 1185, 1184, 1193, 1178, 1211, 1205, - 1212, 1178, 1184, 203, 1210, 1200, 1183, 1170, 1169, 1165, - 1168, 1191, 1204, 1163, 1188, 0, 1157, 1161, 1186, 1149, - 1159, 1158, 125, 1182, 1186, 1150, 1163, 1149, 1182, 1160, - 1188, 1173, 1144, 1136, 0, 150, 212, 227, 1146, 176, - 1139, 1146, 1181, 0, 0, 0, 0, 1142, 264, 1137, - 1136, 1135, 1139, 0, 1159, 0, 1166, 0, 0, 1135, - 277, 1138, 249, 0, 0, 0, 0, 1135, 1126, 1140, - 1140, 1128, 1119, 1123, 1120, 1127, 1120, 1273, 1273, 1148, - 1143, 1273, 416, 1273, 1273, 1273, 1273, 421, 436, 427, - - 441, 1146, 1158, 1140, 1139, 1112, 318, 1116, 1115, 1110, - 1115, 1135, 1111, 1108, 1129, 1144, 1128, 1129, 1135, 1134, - 1105, 1103, 1103, 1096, 1109, 1106, 1096, 1094, 1100, 1132, - 1127, 1100, 1103, 1081, 1091, 1122, 1117, 184, 1090, 324, - 1079, 0, 1080, 1117, 1116, 1076, 1079, 1088, 0, 1088, - 1103, 1111, 1074, 1125, 1081, 1066, 1105, 1078, 1075, 1076, - 1114, 1064, 1095, 1077, 1068, 1055, 1072, 1094, 1067, 1083, - 1092, 1068, 1050, 1054, 1059, 1052, 1059, 1050, 1055, 1057, - 1046, 1039, 1057, 1052, 1066, 1047, 1045, 1044, 1033, 328, - 1045, 1038, 1060, 1061, 1039, 1033, 1033, 1031, 1050, 1049, - - 1021, 1032, 405, 1034, 1023, 48, 1025, 1031, 1026, 1015, - 1040, 1042, 452, 462, 471, 476, 481, 1038, 1042, 1039, - 1061, 0, 1013, 1017, 1024, 0, 1057, 1022, 1013, 1035, - 1016, 0, 1040, 1032, 1038, 1027, 1038, 1026, 0, 993, - 0, 1011, 1000, 993, 992, 997, 0, 0, 1030, 987, - 986, 0, 995, 1003, 1012, 1018, 1021, 984, 984, 991, - 0, 976, 995, 994, 0, 976, 0, 973, 1012, 1011, - 970, 1022, 970, 968, 0, 968, 965, 0, 1018, 0, - 1002, 94, 976, 969, 961, 990, 960, 997, 981, 962, - 964, 967, 962, 951, 952, 949, 950, 0, 954, 948, - - 945, 959, 983, 0, 948, 947, 0, 958, 941, 956, - 951, 972, 967, 0, 935, 940, 944, 961, 970, 936, - 0, 946, 932, 931, 925, 0, 0, 938, 941, 924, - 936, 934, 955, 958, 486, 491, 953, 958, 955, 933, - 914, 918, 917, 0, 926, 915, 944, 908, 933, 945, - 945, 930, 946, 942, 908, 915, 912, 911, 922, 909, - 920, 907, 906, 907, 381, 917, 916, 930, 304, 889, - 0, 901, 370, 483, 0, 895, 910, 911, 0, 936, - 882, 0, 881, 890, 0, 908, 895, 886, 876, 879, - 0, 899, 0, 0, 914, 885, 886, 0, 875, 0, - - 0, 881, 881, 883, 871, 878, 0, 882, 876, 861, - 860, 873, 874, 857, 897, 895, 231, 868, 0, 881, - 874, 865, 866, 854, 856, 0, 859, 854, 0, 0, - 841, 875, 885, 873, 881, 882, 868, 0, 0, 890, - 837, 850, 866, 0, 870, 0, 852, 868, 864, 858, - 837, 828, 0, 833, 844, 821, 860, 0, 0, 841, - 847, 851, 860, 849, 0, 828, 827, 0, 830, 845, - 839, 853, 856, 853, 815, 837, 0, 859, 821, 0, - 0, 839, 811, 798, 0, 0, 843, 828, 801, 818, - 0, 0, 800, 808, 0, 0, 838, 0, 809, 0, - - 808, 808, 795, 836, 832, 800, 807, 803, 0, 806, - 0, 800, 789, 794, 0, 0, 0, 808, 818, 806, - 821, 815, 811, 0, 782, 0, 816, 819, 801, 799, - 791, 807, 798, 783, 784, 784, 0, 796, 765, 792, - 793, 0, 819, 762, 776, 0, 784, 784, 784, 788, - 792, 760, 789, 806, 767, 791, 758, 762, 788, 765, - 747, 752, 744, 748, 781, 0, 750, 0, 734, 771, - 756, 742, 735, 0, 763, 733, 0, 747, 761, 769, - 759, 747, 766, 770, 727, 743, 754, 759, 761, 747, - 761, 723, 719, 730, 723, 745, 731, 736, 740, 763, - - 0, 0, 739, 745, 744, 739, 63, 0, 144, 182, - 167, 211, 0, 0, 227, 274, 250, 0, 271, 298, - 329, 292, 0, 320, 364, 333, 338, 355, 0, 0, - 353, 365, 372, 394, 385, 398, 0, 422, 380, 433, - 413, 421, 447, 412, 416, 0, 429, 0, 0, 456, - 0, 497, 485, 473, 474, 0, 479, 467, 506, 0, - 477, 491, 493, 470, 460, 0, 493, 0, 485, 484, - 460, 0, 497, 489, 503, 491, 493, 510, 507, 508, - 494, 495, 500, 505, 515, 502, 508, 0, 477, 0, - 0, 528, 0, 497, 515, 524, 508, 534, 513, 525, - - 524, 0, 492, 518, 513, 517, 504, 522, 0, 533, - 560, 535, 548, 548, 540, 537, 538, 546, 550, 543, - 558, 539, 521, 576, 566, 553, 0, 565, 579, 560, - 566, 565, 0, 566, 559, 556, 0, 559, 1273, 0, - 0, 563, 575, 636, 576, 561, 577, 575, 0, 569, - 586, 570, 554, 596, 576, 573, 574, 1273, 585, 590, - 582, 578, 592, 594, 0, 1273, 574, 0, 0, 587, - 597, 602, 590, 584, 603, 587, 579, 621, 590, 602, - 0, 612, 0, 618, 619, 628, 0, 612, 612, 611, - 635, 620, 635, 636, 625, 0, 650, 630, 630, 620, - - 628, 633, 646, 642, 625, 630, 648, 0, 628, 0, - 649, 664, 653, 644, 657, 651, 648, 658, 663, 671, - 657, 641, 650, 668, 1273, 0, 0, 653, 656, 646, - 0, 657, 670, 656, 654, 672, 675, 674, 666, 664, - 677, 0, 675, 675, 678, 681, 671, 664, 686, 666, - 667, 675, 682, 0, 0, 678, 681, 681, 688, 692, - 696, 694, 686, 699, 691, 680, 693, 707, 704, 694, - 696, 701, 694, 698, 697, 699, 698, 704, 0, 714, - 715, 716, 704, 708, 0, 710, 707, 0, 707, 708, - 723, 711, 729, 717, 0, 713, 714, 725, 734, 721, - - 718, 724, 730, 0, 725, 727, 0, 1273, 762, 765, - 768, 771, 774 - } ; - -static yyconst short int yy_def[1014] = - { 0, - 1008, 1, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - - 1008, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1008, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1008, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1008, 1008, 1008, 1008, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1008, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1008, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1008, 1008, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1008, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1008, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1008, 1008, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1008, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1008, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1008, 1008, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1008, - - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1008, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1008, 1008, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1008, 1009, 1009, 1009, 1009, 1009, 1009, 1008, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1008, 1008, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1008, 1009, 1009, 1009, 1009, 1009, 1008, 1009, 1009, - - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1010, 1008, - 1011, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1008, 1009, 1009, 1009, 1009, 1008, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1008, 1012, - 1009, 1009, 1009, 1013, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1008, 1009, 1009, 1009, 1008, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1008, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1008, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1008, 1009, 1009, 1009, - - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1008, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1008, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - - 1009, 1009, 1009, 1009, 1009, 1009, 1009, 0, 1008, 1008, - 1008, 1008, 1008 - } ; - -static yyconst short int yy_nxt[1350] = - { 0, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 17, 17, 17, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 32, 32, 4, 32, 32, - 32, 32, 32, 45, 46, 32, 32, 32, 32, 47, - 32, 48, 49, 32, 32, 32, 50, 32, 32, 51, - 32, 32, 32, 32, 52, 53, 54, 54, 56, 54, - 54, 58, 54, 57, 57, 57, 57, 57, 59, 60, - 757, 62, 54, 55, 55, 54, 55, 55, 54, 55, - - 54, 61, 63, 70, 54, 54, 54, 71, 81, 55, - 77, 427, 55, 428, 54, 55, 72, 55, 218, 219, - 54, 55, 55, 55, 64, 83, 65, 65, 65, 65, - 65, 55, 78, 487, 488, 81, 54, 55, 54, 196, - 79, 66, 73, 74, 54, 75, 75, 75, 75, 75, - 81, 82, 83, 55, 67, 68, 69, 54, 81, 76, - 81, 55, 122, 103, 191, 81, 209, 83, 189, 758, - 84, 104, 54, 89, 55, 83, 85, 83, 138, 81, - 261, 90, 83, 81, 210, 76, 81, 262, 123, 55, - 86, 87, 88, 105, 356, 91, 83, 106, 759, 274, - - 83, 92, 93, 83, 81, 107, 81, 109, 108, 81, - 94, 179, 115, 95, 81, 110, 96, 111, 275, 128, - 116, 83, 221, 83, 357, 97, 83, 281, 98, 81, - 222, 83, 99, 124, 760, 100, 101, 81, 117, 81, - 112, 102, 113, 282, 125, 129, 83, 81, 118, 119, - 172, 120, 114, 134, 83, 81, 83, 121, 126, 761, - 241, 139, 81, 130, 83, 127, 242, 131, 135, 276, - 243, 132, 83, 180, 299, 762, 133, 81, 81, 83, - 81, 54, 277, 136, 278, 606, 141, 140, 300, 279, - 607, 142, 137, 81, 83, 83, 81, 83, 55, 182, - - 763, 143, 149, 81, 181, 173, 150, 764, 144, 145, - 83, 146, 174, 83, 147, 151, 175, 148, 176, 177, - 83, 152, 81, 287, 183, 81, 296, 153, 765, 288, - 188, 154, 81, 184, 297, 155, 185, 156, 157, 83, - 178, 164, 83, 323, 165, 166, 167, 168, 169, 83, - 81, 766, 359, 408, 158, 360, 170, 767, 324, 325, - 159, 160, 186, 768, 161, 162, 409, 83, 769, 163, - 566, 567, 171, 57, 57, 57, 57, 57, 187, 65, - 65, 65, 65, 65, 198, 198, 198, 198, 198, 770, - 771, 772, 773, 193, 570, 774, 775, 74, 199, 75, - - 75, 75, 75, 75, 200, 200, 561, 571, 201, 201, - 201, 201, 201, 76, 776, 562, 779, 226, 777, 193, - 227, 228, 778, 780, 199, 313, 313, 229, 783, 314, - 314, 314, 314, 314, 198, 198, 198, 198, 198, 76, - 201, 201, 201, 201, 201, 316, 316, 781, 315, 317, - 317, 317, 317, 317, 201, 201, 201, 201, 201, 422, - 784, 785, 782, 786, 423, 314, 314, 314, 314, 314, - 787, 424, 788, 789, 315, 314, 314, 314, 314, 314, - 435, 435, 790, 791, 436, 436, 436, 436, 436, 317, - 317, 317, 317, 317, 317, 317, 317, 317, 317, 436, - - 436, 436, 436, 436, 436, 436, 436, 436, 436, 572, - 792, 793, 794, 795, 796, 797, 798, 799, 800, 573, - 801, 802, 803, 574, 804, 805, 806, 807, 808, 809, - 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, - 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, - 830, 831, 832, 833, 834, 835, 836, 837, 838, 840, - 839, 839, 842, 839, 839, 839, 839, 839, 839, 839, - 839, 839, 839, 843, 844, 845, 846, 847, 839, 839, - 839, 839, 839, 848, 849, 850, 851, 852, 853, 854, - 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, - - 865, 867, 868, 870, 871, 872, 873, 839, 874, 875, - 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, - 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, - 896, 897, 898, 899, 839, 839, 866, 866, 900, 866, - 866, 866, 866, 866, 866, 866, 866, 866, 866, 901, - 902, 903, 904, 905, 866, 866, 866, 866, 866, 906, - 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, - 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, - 927, 928, 929, 866, 930, 931, 932, 933, 934, 935, - 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, - - 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, - 866, 866, 956, 957, 958, 959, 960, 961, 962, 963, - 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, - 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, - 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, - 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, - 1004, 1005, 1006, 1007, 80, 839, 756, 839, 841, 755, - 841, 866, 754, 866, 869, 753, 869, 752, 751, 750, - 749, 748, 747, 746, 745, 744, 743, 742, 741, 740, - 739, 738, 737, 736, 735, 734, 733, 732, 731, 730, - - 729, 728, 727, 726, 725, 724, 723, 722, 721, 720, - 719, 718, 717, 716, 715, 714, 713, 712, 711, 710, - 709, 708, 707, 706, 705, 704, 703, 702, 701, 700, - 699, 698, 697, 696, 695, 694, 693, 692, 691, 690, - 689, 688, 687, 686, 685, 684, 683, 682, 681, 680, - 679, 678, 677, 676, 675, 674, 673, 672, 671, 670, - 669, 668, 667, 666, 665, 664, 663, 662, 661, 660, - 659, 658, 657, 656, 655, 654, 653, 652, 651, 650, - 649, 648, 647, 646, 645, 644, 643, 642, 641, 640, - 639, 638, 637, 636, 635, 634, 633, 632, 631, 630, - - 629, 628, 627, 626, 625, 624, 623, 622, 621, 620, - 619, 618, 617, 616, 615, 614, 613, 612, 611, 610, - 609, 608, 605, 604, 603, 602, 601, 600, 599, 598, - 597, 596, 595, 594, 593, 592, 591, 590, 589, 588, - 587, 586, 585, 584, 583, 582, 581, 580, 579, 578, - 577, 576, 575, 569, 568, 565, 564, 563, 560, 559, - 558, 557, 556, 555, 554, 553, 552, 551, 550, 549, - 548, 547, 546, 545, 544, 543, 542, 541, 540, 539, - 538, 537, 536, 535, 534, 533, 532, 531, 530, 529, - 528, 527, 526, 525, 524, 523, 522, 521, 520, 519, - - 518, 517, 516, 515, 514, 513, 512, 511, 510, 509, - 508, 507, 506, 505, 504, 503, 502, 501, 500, 499, - 498, 497, 496, 495, 494, 493, 492, 491, 490, 489, - 486, 485, 484, 483, 482, 481, 480, 479, 478, 477, - 476, 475, 474, 473, 472, 471, 470, 469, 468, 467, - 466, 465, 464, 463, 462, 461, 460, 459, 458, 457, - 456, 455, 454, 453, 452, 451, 450, 449, 448, 447, - 446, 445, 444, 443, 442, 441, 440, 439, 438, 437, - 434, 433, 432, 431, 430, 429, 426, 425, 421, 420, - 419, 418, 417, 416, 415, 414, 413, 412, 411, 410, - - 407, 406, 405, 404, 403, 402, 401, 400, 399, 398, - 397, 396, 395, 394, 393, 392, 391, 390, 389, 388, - 387, 386, 385, 384, 383, 382, 381, 380, 379, 378, - 377, 376, 375, 374, 373, 372, 371, 370, 369, 368, - 367, 366, 365, 364, 363, 362, 361, 358, 355, 354, - 353, 352, 351, 350, 349, 348, 347, 346, 345, 344, - 343, 342, 341, 340, 339, 338, 337, 336, 335, 334, - 333, 332, 331, 330, 329, 328, 327, 326, 322, 321, - 320, 319, 318, 312, 311, 310, 309, 308, 307, 306, - 305, 304, 303, 302, 301, 298, 295, 294, 293, 292, - - 291, 290, 289, 286, 285, 284, 283, 280, 273, 272, - 271, 270, 269, 268, 267, 266, 265, 264, 263, 260, - 259, 258, 257, 256, 255, 254, 253, 252, 251, 250, - 249, 248, 247, 246, 245, 244, 240, 239, 238, 237, - 236, 235, 234, 233, 232, 231, 230, 225, 224, 223, - 220, 217, 216, 215, 214, 213, 212, 211, 208, 207, - 206, 205, 204, 203, 202, 197, 195, 194, 192, 191, - 190, 1008, 3, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008 - } ; - -static yyconst short int yy_chk[1350] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 4, 5, 7, 8, - 11, 10, 7, 9, 9, 9, 9, 9, 12, 13, - 707, 14, 12, 4, 5, 9, 8, 11, 18, 7, - - 10, 13, 14, 16, 19, 13, 14, 16, 32, 12, - 20, 306, 9, 306, 20, 18, 16, 10, 96, 96, - 16, 19, 13, 14, 15, 32, 15, 15, 15, 15, - 15, 20, 21, 382, 382, 36, 21, 16, 15, 68, - 22, 15, 16, 17, 22, 17, 17, 17, 17, 17, - 23, 23, 36, 21, 15, 15, 15, 17, 24, 17, - 29, 22, 29, 26, 68, 26, 88, 23, 53, 709, - 23, 26, 53, 24, 17, 24, 23, 29, 36, 44, - 133, 24, 26, 33, 88, 17, 30, 133, 30, 53, - 23, 23, 23, 26, 238, 24, 44, 26, 710, 146, - - 33, 24, 25, 30, 25, 26, 27, 27, 26, 42, - 25, 44, 28, 25, 28, 27, 25, 27, 146, 33, - 28, 25, 98, 27, 238, 25, 42, 150, 25, 31, - 98, 28, 25, 30, 711, 25, 25, 45, 28, 34, - 27, 25, 27, 150, 31, 34, 31, 37, 28, 28, - 42, 28, 27, 35, 45, 35, 34, 28, 31, 712, - 114, 37, 47, 34, 37, 31, 114, 34, 35, 147, - 114, 34, 35, 45, 173, 715, 34, 38, 39, 47, - 46, 52, 147, 35, 148, 517, 38, 37, 173, 148, - 517, 38, 35, 49, 38, 39, 48, 46, 52, 47, - - 716, 38, 39, 43, 46, 43, 39, 717, 38, 38, - 49, 38, 43, 48, 38, 39, 43, 38, 43, 43, - 43, 39, 40, 159, 48, 50, 171, 40, 719, 159, - 52, 40, 41, 48, 171, 40, 49, 40, 40, 40, - 43, 41, 50, 207, 41, 41, 41, 41, 41, 41, - 51, 720, 240, 290, 40, 240, 41, 721, 207, 207, - 40, 40, 50, 722, 40, 40, 290, 51, 724, 40, - 469, 469, 41, 57, 57, 57, 57, 57, 51, 65, - 65, 65, 65, 65, 74, 74, 74, 74, 74, 725, - 726, 727, 728, 65, 473, 731, 732, 75, 74, 75, - - 75, 75, 75, 75, 76, 76, 465, 473, 76, 76, - 76, 76, 76, 75, 733, 465, 735, 102, 734, 65, - 102, 102, 734, 736, 74, 193, 193, 102, 739, 193, - 193, 193, 193, 193, 198, 198, 198, 198, 198, 75, - 200, 200, 200, 200, 200, 199, 199, 738, 198, 199, - 199, 199, 199, 199, 201, 201, 201, 201, 201, 303, - 740, 741, 738, 742, 303, 313, 313, 313, 313, 313, - 743, 303, 744, 745, 198, 314, 314, 314, 314, 314, - 315, 315, 747, 750, 315, 315, 315, 315, 315, 316, - 316, 316, 316, 316, 317, 317, 317, 317, 317, 435, - - 435, 435, 435, 435, 436, 436, 436, 436, 436, 474, - 752, 753, 754, 755, 757, 758, 759, 761, 762, 474, - 763, 764, 765, 474, 767, 769, 770, 771, 773, 774, - 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, - 785, 786, 787, 789, 792, 794, 795, 796, 797, 798, - 799, 800, 801, 803, 804, 805, 806, 807, 808, 810, - 811, 811, 812, 811, 811, 811, 811, 811, 811, 811, - 811, 811, 811, 813, 814, 815, 816, 817, 811, 811, - 811, 811, 811, 818, 819, 820, 821, 822, 823, 824, - 825, 826, 828, 829, 830, 831, 832, 834, 835, 836, - - 838, 842, 843, 845, 846, 847, 848, 811, 850, 851, - 852, 853, 854, 855, 856, 857, 859, 860, 861, 862, - 863, 864, 867, 870, 871, 872, 873, 874, 875, 876, - 877, 878, 879, 880, 811, 811, 844, 844, 882, 844, - 844, 844, 844, 844, 844, 844, 844, 844, 844, 884, - 885, 886, 888, 889, 844, 844, 844, 844, 844, 890, - 891, 892, 893, 894, 895, 897, 898, 899, 900, 901, - 902, 903, 904, 905, 906, 907, 909, 911, 912, 913, - 914, 915, 916, 844, 917, 918, 919, 920, 921, 922, - 923, 924, 928, 929, 930, 932, 933, 934, 935, 936, - - 937, 938, 939, 940, 941, 943, 944, 945, 946, 947, - 844, 844, 948, 949, 950, 951, 952, 953, 956, 957, - 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, - 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, - 978, 980, 981, 982, 983, 984, 986, 987, 989, 990, - 991, 992, 993, 994, 996, 997, 998, 999, 1000, 1001, - 1002, 1003, 1005, 1006, 1009, 1010, 706, 1010, 1011, 705, - 1011, 1012, 704, 1012, 1013, 703, 1013, 700, 699, 698, - 697, 696, 695, 694, 693, 692, 691, 690, 689, 688, - 687, 686, 685, 684, 683, 682, 681, 680, 679, 678, - - 676, 675, 673, 672, 671, 670, 669, 667, 665, 664, - 663, 662, 661, 660, 659, 658, 657, 656, 655, 654, - 653, 652, 651, 650, 649, 648, 647, 645, 644, 643, - 641, 640, 639, 638, 636, 635, 634, 633, 632, 631, - 630, 629, 628, 627, 625, 623, 622, 621, 620, 619, - 618, 614, 613, 612, 610, 608, 607, 606, 605, 604, - 603, 602, 601, 599, 597, 594, 593, 590, 589, 588, - 587, 584, 583, 582, 579, 578, 576, 575, 574, 573, - 572, 571, 570, 569, 567, 566, 564, 563, 562, 561, - 560, 557, 556, 555, 554, 552, 551, 550, 549, 548, - - 547, 545, 543, 542, 541, 540, 537, 536, 535, 534, - 533, 532, 531, 528, 527, 525, 524, 523, 522, 521, - 520, 518, 516, 515, 514, 513, 512, 511, 510, 509, - 508, 506, 505, 504, 503, 502, 499, 497, 496, 495, - 492, 490, 489, 488, 487, 486, 484, 483, 481, 480, - 478, 477, 476, 472, 470, 468, 467, 466, 464, 463, - 462, 461, 460, 459, 458, 457, 456, 455, 454, 453, - 452, 451, 450, 449, 448, 447, 446, 445, 443, 442, - 441, 440, 439, 438, 437, 434, 433, 432, 431, 430, - 429, 428, 425, 424, 423, 422, 420, 419, 418, 417, - - 416, 415, 413, 412, 411, 410, 409, 408, 406, 405, - 403, 402, 401, 400, 399, 397, 396, 395, 394, 393, - 392, 391, 390, 389, 388, 387, 386, 385, 384, 383, - 381, 379, 377, 376, 374, 373, 372, 371, 370, 369, - 368, 366, 364, 363, 362, 360, 359, 358, 357, 356, - 355, 354, 353, 351, 350, 349, 346, 345, 344, 343, - 342, 340, 338, 337, 336, 335, 334, 333, 331, 330, - 329, 328, 327, 325, 324, 323, 321, 320, 319, 318, - 312, 311, 310, 309, 308, 307, 305, 304, 302, 301, - 300, 299, 298, 297, 296, 295, 294, 293, 292, 291, - - 289, 288, 287, 286, 285, 284, 283, 282, 281, 280, - 279, 278, 277, 276, 275, 274, 273, 272, 271, 270, - 269, 268, 267, 266, 265, 264, 263, 262, 261, 260, - 259, 258, 257, 256, 255, 254, 253, 252, 251, 250, - 248, 247, 246, 245, 244, 243, 241, 239, 237, 236, - 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, - 225, 224, 223, 222, 221, 220, 219, 218, 217, 216, - 215, 214, 213, 212, 211, 210, 209, 208, 206, 205, - 204, 203, 202, 191, 190, 187, 186, 185, 184, 183, - 182, 181, 180, 179, 178, 172, 170, 167, 165, 163, - - 162, 161, 160, 158, 153, 152, 151, 149, 144, 143, - 142, 141, 140, 139, 138, 137, 136, 135, 134, 132, - 131, 130, 129, 128, 127, 125, 124, 123, 122, 121, - 120, 119, 118, 117, 116, 115, 113, 112, 111, 110, - 109, 108, 107, 106, 105, 104, 103, 101, 100, 99, - 97, 95, 94, 93, 92, 91, 90, 89, 87, 86, - 85, 84, 83, 82, 81, 69, 67, 66, 64, 55, - 54, 3, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008 - } ; - -static yy_state_type yy_last_accepting_state; -static char *yy_last_accepting_cpos; - -/* The intent behind this definition is that it'll catch - * any uses of REJECT which flex missed. - */ -#define REJECT reject_used_but_not_detected -#define yymore() yymore_used_but_not_detected -#define YY_MORE_ADJ 0 -#define YY_RESTORE_YY_MORE_OFFSET -char *yytext; -#line 1 "Gmsh.l" -#define INITIAL 0 -#line 2 "Gmsh.l" - -// $Id: Gmsh.yy.cpp,v 1.106 2001-08-12 14:24:51 geuzaine Exp $ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <math.h> - -#include "Gmsh.h" -#include "Numeric.h" -#include "Geo.h" -#include "CAD.h" -#include "Gmsh.tab.cpp.h" - -char TmpString[1024]; -int yywhere = INFILE; -int yylineno = 1; - -void parsestring(char endchar); -char *strsave(char *ptr); -void skipcomments(void); -void skipline(void); - -#define YY_ALWAYS_INTERACTIVE 1 - -#define YY_INPUT(buf,result,max_size) \ - if ( yy_current_buffer->yy_is_interactive ) \ - { \ - int c = '*', n; \ - for ( n = 0; n < max_size && \ - (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ){ \ - buf[n++] = (char) c; \ - yylineno++; \ - } \ - if ( c == EOF && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \ - && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); - -#line 1042 "Gmsh.yy.cpp" - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int yywrap YY_PROTO(( void )); -#else -extern int yywrap YY_PROTO(( void )); -#endif -#endif - -#ifndef YY_NO_UNPUT -static void yyunput YY_PROTO(( int c, char *buf_ptr )); -#endif - -#ifndef yytext_ptr -static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int )); -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen YY_PROTO(( yyconst char * )); -#endif - -#ifndef YY_NO_INPUT -#ifdef __cplusplus -static int yyinput YY_PROTO(( void )); -#else -static int input YY_PROTO(( void )); -#endif -#endif - -#if YY_STACK_USED -static int yy_start_stack_ptr = 0; -static int yy_start_stack_depth = 0; -static int *yy_start_stack = 0; -#ifndef YY_NO_PUSH_STATE -static void yy_push_state YY_PROTO(( int new_state )); -#endif -#ifndef YY_NO_POP_STATE -static void yy_pop_state YY_PROTO(( void )); -#endif -#ifndef YY_NO_TOP_STATE -static int yy_top_state YY_PROTO(( void )); -#endif - -#else -#define YY_NO_PUSH_STATE 1 -#define YY_NO_POP_STATE 1 -#define YY_NO_TOP_STATE 1 -#endif - -#ifdef YY_MALLOC_DECL -YY_MALLOC_DECL -#else -#if __STDC__ -#ifndef __cplusplus -#include <stdlib.h> -#endif -#else -/* Just try to get by without declaring the routines. This will fail - * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int) - * or sizeof(void*) != sizeof(int). - */ -#endif -#endif - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#define YY_READ_BUF_SIZE 8192 -#endif - -/* Copy whatever the last rule matched to the standard output. */ - -#ifndef ECHO -/* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ -#define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) -#endif - -/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, - * is returned in "result". - */ -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - if ( yy_current_buffer->yy_is_interactive ) \ - { \ - int c = '*', n; \ - for ( n = 0; n < max_size && \ - (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ) \ - buf[n++] = (char) c; \ - if ( c == EOF && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \ - && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); -#endif - -/* No semi-colon after return; correct usage is to write "yyterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ -#ifndef yyterminate -#define yyterminate() return YY_NULL -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Report a fatal error. */ -#ifndef YY_FATAL_ERROR -#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) -#endif - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL int yylex YY_PROTO(( void )) -#endif - -/* Code executed at the beginning of each rule, after yytext and yyleng - * have been set up. - */ -#ifndef YY_USER_ACTION -#define YY_USER_ACTION -#endif - -/* Code executed at the end of each rule. */ -#ifndef YY_BREAK -#define YY_BREAK break; -#endif - -#define YY_RULE_SETUP \ - YY_USER_ACTION - -YY_DECL - { - register yy_state_type yy_current_state; - register char *yy_cp = NULL, *yy_bp = NULL; - register int yy_act; - -#line 63 "Gmsh.l" - - -#line 1196 "Gmsh.yy.cpp" - - if ( yy_init ) - { - yy_init = 0; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - if ( ! yy_start ) - yy_start = 1; /* first start state */ - - if ( ! yyin ) - yyin = stdin; - - if ( ! yyout ) - yyout = stdout; - - if ( ! yy_current_buffer ) - yy_current_buffer = - yy_create_buffer( yyin, YY_BUF_SIZE ); - - yy_load_buffer_state(); - } - - while ( 1 ) /* loops until end-of-file is reached */ - { - yy_cp = yy_c_buf_p; - - /* Support of yytext. */ - *yy_cp = yy_hold_char; - - /* yy_bp points to the position in yy_ch_buf of the start of - * the current run. - */ - yy_bp = yy_cp; - - yy_current_state = yy_start; -yy_match: - do - { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; - if ( yy_accept[yy_current_state] ) - { - yy_last_accepting_state = yy_current_state; - yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1009 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - ++yy_cp; - } - while ( yy_base[yy_current_state] != 1273 ); - -yy_find_action: - yy_act = yy_accept[yy_current_state]; - if ( yy_act == 0 ) - { /* have to back up */ - yy_cp = yy_last_accepting_cpos; - yy_current_state = yy_last_accepting_state; - yy_act = yy_accept[yy_current_state]; - } - - YY_DO_BEFORE_ACTION; - - -do_action: /* This label is used only to access EOF actions. */ - - - switch ( yy_act ) - { /* beginning of action switch */ - case 0: /* must back up */ - /* undo the effects of YY_DO_BEFORE_ACTION */ - *yy_cp = yy_hold_char; - yy_cp = yy_last_accepting_cpos; - yy_current_state = yy_last_accepting_state; - goto yy_find_action; - -case 1: -YY_RULE_SETUP -#line 65 "Gmsh.l" -/* none */ ; - YY_BREAK -case 2: -YY_RULE_SETUP -#line 66 "Gmsh.l" -return tEND; - YY_BREAK -case 3: -YY_RULE_SETUP -#line 67 "Gmsh.l" -skipcomments(); - YY_BREAK -case 4: -YY_RULE_SETUP -#line 68 "Gmsh.l" -skipline(); - YY_BREAK -case 5: -YY_RULE_SETUP -#line 69 "Gmsh.l" -{parsestring('\"'); return tBIGSTR;} - YY_BREAK -case 6: -YY_RULE_SETUP -#line 70 "Gmsh.l" -{parsestring('\''); return tBIGSTR;} - YY_BREAK -case 7: -YY_RULE_SETUP -#line 71 "Gmsh.l" -{yylval.d = NEWREG(); return tDOUBLE;} - YY_BREAK -case 8: -YY_RULE_SETUP -#line 72 "Gmsh.l" -{yylval.d = NEWPOINT(); return tDOUBLE;} - YY_BREAK -case 9: -YY_RULE_SETUP -#line 73 "Gmsh.l" -return tAFFECT; - YY_BREAK -case 10: -YY_RULE_SETUP -#line 74 "Gmsh.l" -return tAFFECTPLUS ; - YY_BREAK -case 11: -YY_RULE_SETUP -#line 75 "Gmsh.l" -return tAFFECTMINUS ; - YY_BREAK -case 12: -YY_RULE_SETUP -#line 76 "Gmsh.l" -return tAFFECTTIMES ; - YY_BREAK -case 13: -YY_RULE_SETUP -#line 77 "Gmsh.l" -return tAFFECTDIVIDE ; - YY_BREAK -case 14: -YY_RULE_SETUP -#line 78 "Gmsh.l" -return tDOTS; - YY_BREAK -case 15: -YY_RULE_SETUP -#line 79 "Gmsh.l" -return tDOTS; - YY_BREAK -case 16: -YY_RULE_SETUP -#line 80 "Gmsh.l" -return tCROSSPRODUCT ; - YY_BREAK -case 17: -YY_RULE_SETUP -#line 81 "Gmsh.l" -return tOR ; - YY_BREAK -case 18: -YY_RULE_SETUP -#line 82 "Gmsh.l" -return tAND ; - YY_BREAK -case 19: -YY_RULE_SETUP -#line 83 "Gmsh.l" -return tPLUSPLUS ; - YY_BREAK -case 20: -YY_RULE_SETUP -#line 84 "Gmsh.l" -return tMINUSMINUS ; - YY_BREAK -case 21: -YY_RULE_SETUP -#line 85 "Gmsh.l" -return tEQUAL ; - YY_BREAK -case 22: -YY_RULE_SETUP -#line 86 "Gmsh.l" -return tNOTEQUAL ; - YY_BREAK -case 23: -YY_RULE_SETUP -#line 87 "Gmsh.l" -return tAPPROXEQUAL ; - YY_BREAK -case 24: -YY_RULE_SETUP -#line 88 "Gmsh.l" -return tLESSOREQUAL ; - YY_BREAK -case 25: -YY_RULE_SETUP -#line 89 "Gmsh.l" -return tGREATEROREQUAL ; - YY_BREAK -case 26: -YY_RULE_SETUP -#line 91 "Gmsh.l" -return tAcos ; - YY_BREAK -case 27: -YY_RULE_SETUP -#line 92 "Gmsh.l" -return tAcos ; - YY_BREAK -case 28: -YY_RULE_SETUP -#line 93 "Gmsh.l" -return tAsin; - YY_BREAK -case 29: -YY_RULE_SETUP -#line 94 "Gmsh.l" -return tAsin; - YY_BREAK -case 30: -YY_RULE_SETUP -#line 95 "Gmsh.l" -return tAtan ; - YY_BREAK -case 31: -YY_RULE_SETUP -#line 96 "Gmsh.l" -return tAtan ; - YY_BREAK -case 32: -YY_RULE_SETUP -#line 97 "Gmsh.l" -return tAtan2 ; - YY_BREAK -case 33: -YY_RULE_SETUP -#line 98 "Gmsh.l" -return tAtan2 ; - YY_BREAK -case 34: -YY_RULE_SETUP -#line 99 "Gmsh.l" -return tAttractor; - YY_BREAK -case 35: -YY_RULE_SETUP -#line 101 "Gmsh.l" -return tBump; - YY_BREAK -case 36: -YY_RULE_SETUP -#line 102 "Gmsh.l" -return tBSpline; - YY_BREAK -case 37: -YY_RULE_SETUP -#line 103 "Gmsh.l" -return tBounds; - YY_BREAK -case 38: -YY_RULE_SETUP -#line 105 "Gmsh.l" -return tCeil ; - YY_BREAK -case 39: -YY_RULE_SETUP -#line 106 "Gmsh.l" -return tCosh ; - YY_BREAK -case 40: -YY_RULE_SETUP -#line 107 "Gmsh.l" -return tCos ; - YY_BREAK -case 41: -YY_RULE_SETUP -#line 108 "Gmsh.l" -return tCharacteristic; - YY_BREAK -case 42: -YY_RULE_SETUP -#line 109 "Gmsh.l" -return tCircle; - YY_BREAK -case 43: -YY_RULE_SETUP -#line 110 "Gmsh.l" -return tCoherence; - YY_BREAK -case 44: -YY_RULE_SETUP -#line 111 "Gmsh.l" -return tComplex; - YY_BREAK -case 45: -YY_RULE_SETUP -#line 112 "Gmsh.l" -return tColor; - YY_BREAK -case 46: -YY_RULE_SETUP -#line 113 "Gmsh.l" -return tColorTable; - YY_BREAK -case 47: -YY_RULE_SETUP -#line 114 "Gmsh.l" -return tSpline; - YY_BREAK -case 48: -YY_RULE_SETUP -#line 115 "Gmsh.l" -return tCall; - YY_BREAK -case 49: -YY_RULE_SETUP -#line 117 "Gmsh.l" -return tDelete; - YY_BREAK -case 50: -YY_RULE_SETUP -#line 118 "Gmsh.l" -return tDilate; - YY_BREAK -case 51: -YY_RULE_SETUP -#line 119 "Gmsh.l" -return tDuplicata; - YY_BREAK -case 52: -YY_RULE_SETUP -#line 120 "Gmsh.l" -return tDraw; - YY_BREAK -case 53: -YY_RULE_SETUP -#line 122 "Gmsh.l" -return tExp ; - YY_BREAK -case 54: -YY_RULE_SETUP -#line 123 "Gmsh.l" -return tEllipsis; - YY_BREAK -case 55: -YY_RULE_SETUP -#line 124 "Gmsh.l" -return tExtrude; - YY_BREAK -case 56: -YY_RULE_SETUP -#line 125 "Gmsh.l" -return tElliptic; - YY_BREAK -case 57: -YY_RULE_SETUP -#line 126 "Gmsh.l" -return tELLIPSE; - YY_BREAK -case 58: -YY_RULE_SETUP -#line 127 "Gmsh.l" -return tEndFor; - YY_BREAK -case 59: -YY_RULE_SETUP -#line 128 "Gmsh.l" -return tEndIf; - YY_BREAK -case 60: -YY_RULE_SETUP -#line 129 "Gmsh.l" -return tExit; - YY_BREAK -case 61: -YY_RULE_SETUP -#line 131 "Gmsh.l" -return tFabs ; - YY_BREAK -case 62: -YY_RULE_SETUP -#line 132 "Gmsh.l" -return tFloor ; - YY_BREAK -case 63: -YY_RULE_SETUP -#line 133 "Gmsh.l" -return tFmod ; - YY_BREAK -case 64: -YY_RULE_SETUP -#line 134 "Gmsh.l" -return tFor; - YY_BREAK -case 65: -YY_RULE_SETUP -#line 135 "Gmsh.l" -return tFunction; - YY_BREAK -case 66: -YY_RULE_SETUP -#line 137 "Gmsh.l" -return tHypot ; - YY_BREAK -case 67: -YY_RULE_SETUP -#line 139 "Gmsh.l" -return tIn; - YY_BREAK -case 68: -YY_RULE_SETUP -#line 140 "Gmsh.l" -return tIf; - YY_BREAK -case 69: -YY_RULE_SETUP -#line 141 "Gmsh.l" -return tIntersect; - YY_BREAK -case 70: -YY_RULE_SETUP -#line 143 "Gmsh.l" -return tKnots; - YY_BREAK -case 71: -YY_RULE_SETUP -#line 145 "Gmsh.l" -return tLength; - YY_BREAK -case 72: -YY_RULE_SETUP -#line 146 "Gmsh.l" -return tLine; - YY_BREAK -case 73: -YY_RULE_SETUP -#line 147 "Gmsh.l" -return tLoop; - YY_BREAK -case 74: -YY_RULE_SETUP -#line 148 "Gmsh.l" -return tLog ; - YY_BREAK -case 75: -YY_RULE_SETUP -#line 149 "Gmsh.l" -return tLog10 ; - YY_BREAK -case 76: -YY_RULE_SETUP -#line 150 "Gmsh.l" -return tLayers; - YY_BREAK -case 77: -YY_RULE_SETUP -#line 152 "Gmsh.l" -return tModulo ; - YY_BREAK -case 78: -YY_RULE_SETUP -#line 153 "Gmsh.l" -return tMesh; - YY_BREAK -case 79: -YY_RULE_SETUP -#line 154 "Gmsh.l" -return tMPI_Rank; - YY_BREAK -case 80: -YY_RULE_SETUP -#line 155 "Gmsh.l" -return tMPI_Size; - YY_BREAK -case 81: -YY_RULE_SETUP -#line 157 "Gmsh.l" -return tNurbs; - YY_BREAK -case 82: -YY_RULE_SETUP -#line 159 "Gmsh.l" -return tOrder; - YY_BREAK -case 83: -YY_RULE_SETUP -#line 161 "Gmsh.l" -return tPhysical; - YY_BREAK -case 84: -YY_RULE_SETUP -#line 162 "Gmsh.l" -return tPi; - YY_BREAK -case 85: -YY_RULE_SETUP -#line 163 "Gmsh.l" -return tPlane; - YY_BREAK -case 86: -YY_RULE_SETUP -#line 164 "Gmsh.l" -return tPoint; - YY_BREAK -case 87: -YY_RULE_SETUP -#line 165 "Gmsh.l" -return tProgression; - YY_BREAK -case 88: -YY_RULE_SETUP -#line 166 "Gmsh.l" -return tProgression; - YY_BREAK -case 89: -YY_RULE_SETUP -#line 167 "Gmsh.l" -return tParametric; - YY_BREAK -case 90: -YY_RULE_SETUP -#line 168 "Gmsh.l" -return tPrintf; - YY_BREAK -case 91: -YY_RULE_SETUP -#line 169 "Gmsh.l" -return tPlugin; - YY_BREAK -case 92: -YY_RULE_SETUP -#line 171 "Gmsh.l" -return tRecombine; - YY_BREAK -case 93: -YY_RULE_SETUP -#line 172 "Gmsh.l" -return tRotate; - YY_BREAK -case 94: -YY_RULE_SETUP -#line 173 "Gmsh.l" -return tRuled; - YY_BREAK -case 95: -YY_RULE_SETUP -#line 174 "Gmsh.l" -return tRand; - YY_BREAK -case 96: -YY_RULE_SETUP -#line 175 "Gmsh.l" -return tReturn; - YY_BREAK -case 97: -YY_RULE_SETUP -#line 177 "Gmsh.l" -return tSqrt ; - YY_BREAK -case 98: -YY_RULE_SETUP -#line 178 "Gmsh.l" -return tSin ; - YY_BREAK -case 99: -YY_RULE_SETUP -#line 179 "Gmsh.l" -return tSinh ; - YY_BREAK -case 100: -YY_RULE_SETUP -#line 180 "Gmsh.l" -return tSpline; - YY_BREAK -case 101: -YY_RULE_SETUP -#line 181 "Gmsh.l" -return tSurface; - YY_BREAK -case 102: -YY_RULE_SETUP -#line 182 "Gmsh.l" -return tSymmetry; - YY_BREAK -case 103: -YY_RULE_SETUP -#line 183 "Gmsh.l" -return tSprintf ; - YY_BREAK -case 104: -YY_RULE_SETUP -#line 184 "Gmsh.l" -return tStrCat ; - YY_BREAK -case 105: -YY_RULE_SETUP -#line 185 "Gmsh.l" -return tStrPrefix ; - YY_BREAK -case 106: -YY_RULE_SETUP -#line 187 "Gmsh.l" -return tTransfinite; - YY_BREAK -case 107: -YY_RULE_SETUP -#line 188 "Gmsh.l" -return tTranslate; - YY_BREAK -case 108: -YY_RULE_SETUP -#line 189 "Gmsh.l" -return tTanh ; - YY_BREAK -case 109: -YY_RULE_SETUP -#line 190 "Gmsh.l" -return tTan; - YY_BREAK -case 110: -YY_RULE_SETUP -#line 191 "Gmsh.l" -return tTrimmed; - YY_BREAK -case 111: -YY_RULE_SETUP -#line 193 "Gmsh.l" -return tUsing; - YY_BREAK -case 112: -YY_RULE_SETUP -#line 195 "Gmsh.l" -return tVolume; - YY_BREAK -case 113: -YY_RULE_SETUP -#line 197 "Gmsh.l" -return tWith; - YY_BREAK -case 114: -YY_RULE_SETUP -#line 199 "Gmsh.l" -return tScalarTetrahedron; - YY_BREAK -case 115: -YY_RULE_SETUP -#line 200 "Gmsh.l" -return tVectorTetrahedron; - YY_BREAK -case 116: -YY_RULE_SETUP -#line 201 "Gmsh.l" -return tTensorTetrahedron; - YY_BREAK -case 117: -YY_RULE_SETUP -#line 202 "Gmsh.l" -return tScalarTriangle; - YY_BREAK -case 118: -YY_RULE_SETUP -#line 203 "Gmsh.l" -return tVectorTriangle; - YY_BREAK -case 119: -YY_RULE_SETUP -#line 204 "Gmsh.l" -return tTensorTriangle; - YY_BREAK -case 120: -YY_RULE_SETUP -#line 205 "Gmsh.l" -return tScalarLine; - YY_BREAK -case 121: -YY_RULE_SETUP -#line 206 "Gmsh.l" -return tVectorLine; - YY_BREAK -case 122: -YY_RULE_SETUP -#line 207 "Gmsh.l" -return tTensorLine; - YY_BREAK -case 123: -YY_RULE_SETUP -#line 208 "Gmsh.l" -return tScalarPoint; - YY_BREAK -case 124: -YY_RULE_SETUP -#line 209 "Gmsh.l" -return tVectorPoint; - YY_BREAK -case 125: -YY_RULE_SETUP -#line 210 "Gmsh.l" -return tTensorPoint; - YY_BREAK -case 126: -YY_RULE_SETUP -#line 213 "Gmsh.l" -return tCARTESIAN_POINT; - YY_BREAK -case 127: -YY_RULE_SETUP -#line 214 "Gmsh.l" -return tB_SPLINE_SURFACE_WITH_KNOTS; - YY_BREAK -case 128: -YY_RULE_SETUP -#line 215 "Gmsh.l" -return tB_SPLINE_CURVE_WITH_KNOTS; - YY_BREAK -case 129: -YY_RULE_SETUP -#line 216 "Gmsh.l" -return tUNSPECIFIED; - YY_BREAK -case 130: -YY_RULE_SETUP -#line 217 "Gmsh.l" -return tCONTINUOUS; - YY_BREAK -case 131: -YY_RULE_SETUP -#line 218 "Gmsh.l" -return tFALSE; - YY_BREAK -case 132: -YY_RULE_SETUP -#line 219 "Gmsh.l" -return tTRUE; - YY_BREAK -case 133: -YY_RULE_SETUP -#line 220 "Gmsh.l" -return tU; - YY_BREAK -case 134: -YY_RULE_SETUP -#line 221 "Gmsh.l" -return tV; - YY_BREAK -case 135: -YY_RULE_SETUP -#line 222 "Gmsh.l" -return tORIENTED_EDGE; - YY_BREAK -case 136: -YY_RULE_SETUP -#line 223 "Gmsh.l" -return tEDGE_CURVE; - YY_BREAK -case 137: -YY_RULE_SETUP -#line 224 "Gmsh.l" -return tEDGE_LOOP; - YY_BREAK -case 138: -YY_RULE_SETUP -#line 225 "Gmsh.l" -return tVERTEX_POINT; - YY_BREAK -case 139: -YY_RULE_SETUP -#line 226 "Gmsh.l" -return tFACE_OUTER_BOUND; - YY_BREAK -case 140: -YY_RULE_SETUP -#line 227 "Gmsh.l" -return tFACE_BOUND; - YY_BREAK -case 141: -YY_RULE_SETUP -#line 228 "Gmsh.l" -return tADVANCED_FACE; - YY_BREAK -case 142: -YY_RULE_SETUP -#line 229 "Gmsh.l" -return tLine; - YY_BREAK -case 143: -YY_RULE_SETUP -#line 230 "Gmsh.l" -return tVECTOR; - YY_BREAK -case 144: -YY_RULE_SETUP -#line 231 "Gmsh.l" -return tDIRECTION; - YY_BREAK -case 145: -YY_RULE_SETUP -#line 232 "Gmsh.l" -return tAXIS2_PLACEMENT_3D; - YY_BREAK -case 146: -YY_RULE_SETUP -#line 233 "Gmsh.l" -return tPLANE; - YY_BREAK -case 147: -YY_RULE_SETUP -#line 234 "Gmsh.l" -return tHEADER; - YY_BREAK -case 148: -YY_RULE_SETUP -#line 235 "Gmsh.l" -return tDATA; - YY_BREAK -case 149: -YY_RULE_SETUP -#line 236 "Gmsh.l" -return tFILE_SCHEMA; - YY_BREAK -case 150: -YY_RULE_SETUP -#line 237 "Gmsh.l" -return tFILE_NAME; - YY_BREAK -case 151: -YY_RULE_SETUP -#line 238 "Gmsh.l" -return tFILE_DESCRIPTION; - YY_BREAK -case 152: -YY_RULE_SETUP -#line 239 "Gmsh.l" -return tISO; - YY_BREAK -case 153: -YY_RULE_SETUP -#line 240 "Gmsh.l" -return tENDISO; - YY_BREAK -case 154: -YY_RULE_SETUP -#line 241 "Gmsh.l" -return tENDSEC; - YY_BREAK -case 155: -YY_RULE_SETUP -#line 242 "Gmsh.l" -return tCLOSED_SHELL; - YY_BREAK -case 156: -YY_RULE_SETUP -#line 243 "Gmsh.l" -return tADVANCED_BREP_SHAPE_REPRESENTATION; - YY_BREAK -case 157: -YY_RULE_SETUP -#line 244 "Gmsh.l" -return tMANIFOLD_SOLID_BREP; - YY_BREAK -case 158: -YY_RULE_SETUP -#line 245 "Gmsh.l" -return tCYLINDRICAL_SURFACE; - YY_BREAK -case 159: -YY_RULE_SETUP -#line 246 "Gmsh.l" -return tCONICAL_SURFACE; - YY_BREAK -case 160: -YY_RULE_SETUP -#line 247 "Gmsh.l" -return tTOROIDAL_SURFACE; - YY_BREAK -case 161: -YY_RULE_SETUP -#line 248 "Gmsh.l" -return tCIRCLE; - YY_BREAK -case 162: -YY_RULE_SETUP -#line 249 "Gmsh.l" -return tTRIMMED_CURVE; - YY_BREAK -case 163: -YY_RULE_SETUP -#line 250 "Gmsh.l" -return tGEOMETRIC_SET; - YY_BREAK -case 164: -YY_RULE_SETUP -#line 251 "Gmsh.l" -return tCOMPOSITE_CURVE_SEGMENT; - YY_BREAK -case 165: -YY_RULE_SETUP -#line 252 "Gmsh.l" -return tCOMPOSITE_CURVE; - YY_BREAK -case 166: -YY_RULE_SETUP -#line 253 "Gmsh.l" -return tPRODUCT_DEFINITION; - YY_BREAK -case 167: -YY_RULE_SETUP -#line 254 "Gmsh.l" -return tPRODUCT_DEFINITION_SHAPE; - YY_BREAK -case 168: -YY_RULE_SETUP -#line 255 "Gmsh.l" -return tSHAPE_DEFINITION_REPRESENTATION; - YY_BREAK -case 169: -YY_RULE_SETUP -#line 257 "Gmsh.l" -return tVertex; - YY_BREAK -case 170: -YY_RULE_SETUP -#line 258 "Gmsh.l" -return tFacet; - YY_BREAK -case 171: -YY_RULE_SETUP -#line 259 "Gmsh.l" -return tNormal; - YY_BREAK -case 172: -YY_RULE_SETUP -#line 260 "Gmsh.l" -return tOuter; - YY_BREAK -case 173: -YY_RULE_SETUP -#line 261 "Gmsh.l" -return tLoopSTL; - YY_BREAK -case 174: -YY_RULE_SETUP -#line 262 "Gmsh.l" -return tEndLoop; - YY_BREAK -case 175: -YY_RULE_SETUP -#line 263 "Gmsh.l" -return tEndFacet; - YY_BREAK -case 176: -YY_RULE_SETUP -#line 264 "Gmsh.l" -{skipline();return tEndSolid;} - YY_BREAK -case 177: -YY_RULE_SETUP -#line 265 "Gmsh.l" -{skipline();return tSolid;} - YY_BREAK -case 178: -YY_RULE_SETUP -#line 267 "Gmsh.l" -{yylval.d = (double)atoi((char*)(yytext+1)); return tDOUBLE;} - YY_BREAK -case 179: -#line 270 "Gmsh.l" -case 180: -#line 271 "Gmsh.l" -case 181: -#line 272 "Gmsh.l" -case 182: -YY_RULE_SETUP -#line 272 "Gmsh.l" -{yylval.d = atof((char *)yytext); return tDOUBLE;} - YY_BREAK -case 183: -YY_RULE_SETUP -#line 274 "Gmsh.l" -{yylval.c = strsave((char*)yytext); return tSTRING;} - YY_BREAK -case 184: -YY_RULE_SETUP -#line 276 "Gmsh.l" -return yytext[0]; - YY_BREAK -case 185: -YY_RULE_SETUP -#line 278 "Gmsh.l" -ECHO; - YY_BREAK -#line 2195 "Gmsh.yy.cpp" -case YY_STATE_EOF(INITIAL): - yyterminate(); - - case YY_END_OF_BUFFER: - { - /* Amount of text matched not including the EOB char. */ - int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1; - - /* Undo the effects of YY_DO_BEFORE_ACTION. */ - *yy_cp = yy_hold_char; - YY_RESTORE_YY_MORE_OFFSET - - if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW ) - { - /* We're scanning a new file or input source. It's - * possible that this happened because the user - * just pointed yyin at a new source and called - * yylex(). If so, then we have to assure - * consistency between yy_current_buffer and our - * globals. Here is the right place to do so, because - * this is the first action (other than possibly a - * back-up) that will match for the new input source. - */ - yy_n_chars = yy_current_buffer->yy_n_chars; - yy_current_buffer->yy_input_file = yyin; - yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL; - } - - /* Note that here we test for yy_c_buf_p "<=" to the position - * of the first EOB in the buffer, since yy_c_buf_p will - * already have been incremented past the NUL character - * (since all states make transitions on EOB to the - * end-of-buffer state). Contrast this with the test - * in input(). - */ - if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] ) - { /* This was really a NUL. */ - yy_state_type yy_next_state; - - yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state(); - - /* Okay, we're now positioned to make the NUL - * transition. We couldn't have - * yy_get_previous_state() go ahead and do it - * for us because it doesn't know how to deal - * with the possibility of jamming (and we don't - * want to build jamming into it because then it - * will run more slowly). - */ - - yy_next_state = yy_try_NUL_trans( yy_current_state ); - - yy_bp = yytext_ptr + YY_MORE_ADJ; - - if ( yy_next_state ) - { - /* Consume the NUL. */ - yy_cp = ++yy_c_buf_p; - yy_current_state = yy_next_state; - goto yy_match; - } - - else - { - yy_cp = yy_c_buf_p; - goto yy_find_action; - } - } - - else switch ( yy_get_next_buffer() ) - { - case EOB_ACT_END_OF_FILE: - { - yy_did_buffer_switch_on_eof = 0; - - if ( yywrap() ) - { - /* Note: because we've taken care in - * yy_get_next_buffer() to have set up - * yytext, we can now set up - * yy_c_buf_p so that if some total - * hoser (like flex itself) wants to - * call the scanner after we return the - * YY_NULL, it'll still work - another - * YY_NULL will get returned. - */ - yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; - - yy_act = YY_STATE_EOF(YY_START); - goto do_action; - } - - else - { - if ( ! yy_did_buffer_switch_on_eof ) - YY_NEW_FILE; - } - break; - } - - case EOB_ACT_CONTINUE_SCAN: - yy_c_buf_p = - yytext_ptr + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state(); - - yy_cp = yy_c_buf_p; - yy_bp = yytext_ptr + YY_MORE_ADJ; - goto yy_match; - - case EOB_ACT_LAST_MATCH: - yy_c_buf_p = - &yy_current_buffer->yy_ch_buf[yy_n_chars]; - - yy_current_state = yy_get_previous_state(); - - yy_cp = yy_c_buf_p; - yy_bp = yytext_ptr + YY_MORE_ADJ; - goto yy_find_action; - } - break; - } - - default: - YY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ - } /* end of yylex */ - - -/* yy_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: - * EOB_ACT_LAST_MATCH - - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position - * EOB_ACT_END_OF_FILE - end of file - */ - -static int yy_get_next_buffer() - { - register char *dest = yy_current_buffer->yy_ch_buf; - register char *source = yytext_ptr; - register int number_to_move, i; - int ret_val; - - if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] ) - YY_FATAL_ERROR( - "fatal flex scanner internal error--end of buffer missed" ); - - if ( yy_current_buffer->yy_fill_buffer == 0 ) - { /* Don't try to fill the buffer, so this is an EOF. */ - if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 ) - { - /* We matched a single character, the EOB, so - * treat this as a final EOF. - */ - return EOB_ACT_END_OF_FILE; - } - - else - { - /* We matched some text prior to the EOB, first - * process it. - */ - return EOB_ACT_LAST_MATCH; - } - } - - /* Try to read more data. */ - - /* First move last chars to start of buffer. */ - number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1; - - for ( i = 0; i < number_to_move; ++i ) - *(dest++) = *(source++); - - if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - yy_current_buffer->yy_n_chars = yy_n_chars = 0; - - else - { - int num_to_read = - yy_current_buffer->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ -#ifdef YY_USES_REJECT - YY_FATAL_ERROR( -"input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); -#else - - /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = yy_current_buffer; - - int yy_c_buf_p_offset = - (int) (yy_c_buf_p - b->yy_ch_buf); - - if ( b->yy_is_our_buffer ) - { - int new_size = b->yy_buf_size * 2; - - if ( new_size <= 0 ) - b->yy_buf_size += b->yy_buf_size / 8; - else - b->yy_buf_size *= 2; - - b->yy_ch_buf = (char *) - /* Include room in for 2 EOB chars. */ - yy_flex_realloc( (void *) b->yy_ch_buf, - b->yy_buf_size + 2 ); - } - else - /* Can't grow it, we don't own it. */ - b->yy_ch_buf = 0; - - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( - "fatal error - scanner input buffer overflow" ); - - yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; - - num_to_read = yy_current_buffer->yy_buf_size - - number_to_move - 1; -#endif - } - - if ( num_to_read > YY_READ_BUF_SIZE ) - num_to_read = YY_READ_BUF_SIZE; - - /* Read in more data. */ - YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]), - yy_n_chars, num_to_read ); - - yy_current_buffer->yy_n_chars = yy_n_chars; - } - - if ( yy_n_chars == 0 ) - { - if ( number_to_move == YY_MORE_ADJ ) - { - ret_val = EOB_ACT_END_OF_FILE; - yyrestart( yyin ); - } - - else - { - ret_val = EOB_ACT_LAST_MATCH; - yy_current_buffer->yy_buffer_status = - YY_BUFFER_EOF_PENDING; - } - } - - else - ret_val = EOB_ACT_CONTINUE_SCAN; - - yy_n_chars += number_to_move; - yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR; - yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; - - yytext_ptr = &yy_current_buffer->yy_ch_buf[0]; - - return ret_val; - } - - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - -static yy_state_type yy_get_previous_state() - { - register yy_state_type yy_current_state; - register char *yy_cp; - - yy_current_state = yy_start; - - for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp ) - { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); - if ( yy_accept[yy_current_state] ) - { - yy_last_accepting_state = yy_current_state; - yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1009 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - } - - return yy_current_state; - } - - -/* yy_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis - * next_state = yy_try_NUL_trans( current_state ); - */ - -#ifdef YY_USE_PROTOS -static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state ) -#else -static yy_state_type yy_try_NUL_trans( yy_current_state ) -yy_state_type yy_current_state; -#endif - { - register int yy_is_jam; - register char *yy_cp = yy_c_buf_p; - - register YY_CHAR yy_c = 1; - if ( yy_accept[yy_current_state] ) - { - yy_last_accepting_state = yy_current_state; - yy_last_accepting_cpos = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1009 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 1008); - - return yy_is_jam ? 0 : yy_current_state; - } - - -#ifndef YY_NO_UNPUT -#ifdef YY_USE_PROTOS -static void yyunput( int c, register char *yy_bp ) -#else -static void yyunput( c, yy_bp ) -int c; -register char *yy_bp; -#endif - { - register char *yy_cp = yy_c_buf_p; - - /* undo effects of setting up yytext */ - *yy_cp = yy_hold_char; - - if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) - { /* need to shift things up to make room */ - /* +2 for EOB chars. */ - register int number_to_move = yy_n_chars + 2; - register char *dest = &yy_current_buffer->yy_ch_buf[ - yy_current_buffer->yy_buf_size + 2]; - register char *source = - &yy_current_buffer->yy_ch_buf[number_to_move]; - - while ( source > yy_current_buffer->yy_ch_buf ) - *--dest = *--source; - - yy_cp += (int) (dest - source); - yy_bp += (int) (dest - source); - yy_current_buffer->yy_n_chars = - yy_n_chars = yy_current_buffer->yy_buf_size; - - if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) - YY_FATAL_ERROR( "flex scanner push-back overflow" ); - } - - *--yy_cp = (char) c; - - - yytext_ptr = yy_bp; - yy_hold_char = *yy_cp; - yy_c_buf_p = yy_cp; - } -#endif /* ifndef YY_NO_UNPUT */ - - -#ifdef __cplusplus -static int yyinput() -#else -static int input() -#endif - { - int c; - - *yy_c_buf_p = yy_hold_char; - - if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) - { - /* yy_c_buf_p now points to the character we want to return. - * If this occurs *before* the EOB characters, then it's a - * valid NUL; if not, then we've hit the end of the buffer. - */ - if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] ) - /* This was really a NUL. */ - *yy_c_buf_p = '\0'; - - else - { /* need more input */ - int offset = yy_c_buf_p - yytext_ptr; - ++yy_c_buf_p; - - switch ( yy_get_next_buffer() ) - { - case EOB_ACT_LAST_MATCH: - /* This happens because yy_g_n_b() - * sees that we've accumulated a - * token and flags that we need to - * try matching the token before - * proceeding. But for input(), - * there's no matching to consider. - * So convert the EOB_ACT_LAST_MATCH - * to EOB_ACT_END_OF_FILE. - */ - - /* Reset buffer status. */ - yyrestart( yyin ); - - /* fall through */ - - case EOB_ACT_END_OF_FILE: - { - if ( yywrap() ) - return EOF; - - if ( ! yy_did_buffer_switch_on_eof ) - YY_NEW_FILE; -#ifdef __cplusplus - return yyinput(); -#else - return input(); -#endif - } - - case EOB_ACT_CONTINUE_SCAN: - yy_c_buf_p = yytext_ptr + offset; - break; - } - } - } - - c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */ - *yy_c_buf_p = '\0'; /* preserve yytext */ - yy_hold_char = *++yy_c_buf_p; - - - return c; - } - - -#ifdef YY_USE_PROTOS -void yyrestart( FILE *input_file ) -#else -void yyrestart( input_file ) -FILE *input_file; -#endif - { - if ( ! yy_current_buffer ) - yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); - - yy_init_buffer( yy_current_buffer, input_file ); - yy_load_buffer_state(); - } - - -#ifdef YY_USE_PROTOS -void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) -#else -void yy_switch_to_buffer( new_buffer ) -YY_BUFFER_STATE new_buffer; -#endif - { - if ( yy_current_buffer == new_buffer ) - return; - - if ( yy_current_buffer ) - { - /* Flush out information for old buffer. */ - *yy_c_buf_p = yy_hold_char; - yy_current_buffer->yy_buf_pos = yy_c_buf_p; - yy_current_buffer->yy_n_chars = yy_n_chars; - } - - yy_current_buffer = new_buffer; - yy_load_buffer_state(); - - /* We don't actually know whether we did this switch during - * EOF (yywrap()) processing, but the only time this flag - * is looked at is after yywrap() is called, so it's safe - * to go ahead and always set it. - */ - yy_did_buffer_switch_on_eof = 1; - } - - -#ifdef YY_USE_PROTOS -void yy_load_buffer_state( void ) -#else -void yy_load_buffer_state() -#endif - { - yy_n_chars = yy_current_buffer->yy_n_chars; - yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos; - yyin = yy_current_buffer->yy_input_file; - yy_hold_char = *yy_c_buf_p; - } - - -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_create_buffer( FILE *file, int size ) -#else -YY_BUFFER_STATE yy_create_buffer( file, size ) -FILE *file; -int size; -#endif - { - YY_BUFFER_STATE b; - - b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_buf_size = size; - - /* yy_ch_buf has to be 2 characters longer than the size given because - * we need to put in 2 end-of-buffer characters. - */ - b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 ); - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_is_our_buffer = 1; - - yy_init_buffer( b, file ); - - return b; - } - - -#ifdef YY_USE_PROTOS -void yy_delete_buffer( YY_BUFFER_STATE b ) -#else -void yy_delete_buffer( b ) -YY_BUFFER_STATE b; -#endif - { - if ( ! b ) - return; - - if ( b == yy_current_buffer ) - yy_current_buffer = (YY_BUFFER_STATE) 0; - - if ( b->yy_is_our_buffer ) - yy_flex_free( (void *) b->yy_ch_buf ); - - yy_flex_free( (void *) b ); - } - - - -#ifdef YY_USE_PROTOS -void yy_init_buffer( YY_BUFFER_STATE b, FILE *file ) -#else -void yy_init_buffer( b, file ) -YY_BUFFER_STATE b; -FILE *file; -#endif - - - { - yy_flush_buffer( b ); - - b->yy_input_file = file; - b->yy_fill_buffer = 1; - -#if YY_ALWAYS_INTERACTIVE - b->yy_is_interactive = 1; -#else -#if YY_NEVER_INTERACTIVE - b->yy_is_interactive = 0; -#else - b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; -#endif -#endif - } - - -#ifdef YY_USE_PROTOS -void yy_flush_buffer( YY_BUFFER_STATE b ) -#else -void yy_flush_buffer( b ) -YY_BUFFER_STATE b; -#endif - - { - if ( ! b ) - return; - - b->yy_n_chars = 0; - - /* We always need two end-of-buffer characters. The first causes - * a transition to the end-of-buffer state. The second causes - * a jam in that state. - */ - b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; - b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; - - b->yy_buf_pos = &b->yy_ch_buf[0]; - - b->yy_at_bol = 1; - b->yy_buffer_status = YY_BUFFER_NEW; - - if ( b == yy_current_buffer ) - yy_load_buffer_state(); - } - - -#ifndef YY_NO_SCAN_BUFFER -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size ) -#else -YY_BUFFER_STATE yy_scan_buffer( base, size ) -char *base; -yy_size_t size; -#endif - { - YY_BUFFER_STATE b; - - if ( size < 2 || - base[size-2] != YY_END_OF_BUFFER_CHAR || - base[size-1] != YY_END_OF_BUFFER_CHAR ) - /* They forgot to leave room for the EOB's. */ - return 0; - - b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); - - b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ - b->yy_buf_pos = b->yy_ch_buf = base; - b->yy_is_our_buffer = 0; - b->yy_input_file = 0; - b->yy_n_chars = b->yy_buf_size; - b->yy_is_interactive = 0; - b->yy_at_bol = 1; - b->yy_fill_buffer = 0; - b->yy_buffer_status = YY_BUFFER_NEW; - - yy_switch_to_buffer( b ); - - return b; - } -#endif - - -#ifndef YY_NO_SCAN_STRING -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str ) -#else -YY_BUFFER_STATE yy_scan_string( yy_str ) -yyconst char *yy_str; -#endif - { - int len; - for ( len = 0; yy_str[len]; ++len ) - ; - - return yy_scan_bytes( yy_str, len ); - } -#endif - - -#ifndef YY_NO_SCAN_BYTES -#ifdef YY_USE_PROTOS -YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len ) -#else -YY_BUFFER_STATE yy_scan_bytes( bytes, len ) -yyconst char *bytes; -int len; -#endif - { - YY_BUFFER_STATE b; - char *buf; - yy_size_t n; - int i; - - /* Get memory for full buffer, including space for trailing EOB's. */ - n = len + 2; - buf = (char *) yy_flex_alloc( n ); - if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); - - for ( i = 0; i < len; ++i ) - buf[i] = bytes[i]; - - buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; - - b = yy_scan_buffer( buf, n ); - if ( ! b ) - YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); - - /* It's okay to grow etc. this buffer, and we should throw it - * away when we're done. - */ - b->yy_is_our_buffer = 1; - - return b; - } -#endif - - -#ifndef YY_NO_PUSH_STATE -#ifdef YY_USE_PROTOS -static void yy_push_state( int new_state ) -#else -static void yy_push_state( new_state ) -int new_state; -#endif - { - if ( yy_start_stack_ptr >= yy_start_stack_depth ) - { - yy_size_t new_size; - - yy_start_stack_depth += YY_START_STACK_INCR; - new_size = yy_start_stack_depth * sizeof( int ); - - if ( ! yy_start_stack ) - yy_start_stack = (int *) yy_flex_alloc( new_size ); - - else - yy_start_stack = (int *) yy_flex_realloc( - (void *) yy_start_stack, new_size ); - - if ( ! yy_start_stack ) - YY_FATAL_ERROR( - "out of memory expanding start-condition stack" ); - } - - yy_start_stack[yy_start_stack_ptr++] = YY_START; - - BEGIN(new_state); - } -#endif - - -#ifndef YY_NO_POP_STATE -static void yy_pop_state() - { - if ( --yy_start_stack_ptr < 0 ) - YY_FATAL_ERROR( "start-condition stack underflow" ); - - BEGIN(yy_start_stack[yy_start_stack_ptr]); - } -#endif - - -#ifndef YY_NO_TOP_STATE -static int yy_top_state() - { - return yy_start_stack[yy_start_stack_ptr - 1]; - } -#endif - -#ifndef YY_EXIT_FAILURE -#define YY_EXIT_FAILURE 2 -#endif - -#ifdef YY_USE_PROTOS -static void yy_fatal_error( yyconst char msg[] ) -#else -static void yy_fatal_error( msg ) -char msg[]; -#endif - { - (void) fprintf( stderr, "%s\n", msg ); - exit( YY_EXIT_FAILURE ); - } - - - -/* Redefine yyless() so it works in section 3 code. */ - -#undef yyless -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - yytext[yyleng] = yy_hold_char; \ - yy_c_buf_p = yytext + n; \ - yy_hold_char = *yy_c_buf_p; \ - *yy_c_buf_p = '\0'; \ - yyleng = n; \ - } \ - while ( 0 ) - - -/* Internal utility routines. */ - -#ifndef yytext_ptr -#ifdef YY_USE_PROTOS -static void yy_flex_strncpy( char *s1, yyconst char *s2, int n ) -#else -static void yy_flex_strncpy( s1, s2, n ) -char *s1; -yyconst char *s2; -int n; -#endif - { - register int i; - for ( i = 0; i < n; ++i ) - s1[i] = s2[i]; - } -#endif - -#ifdef YY_NEED_STRLEN -#ifdef YY_USE_PROTOS -static int yy_flex_strlen( yyconst char *s ) -#else -static int yy_flex_strlen( s ) -yyconst char *s; -#endif - { - register int n; - for ( n = 0; s[n]; ++n ) - ; - - return n; - } -#endif - - -#ifdef YY_USE_PROTOS -static void *yy_flex_alloc( yy_size_t size ) -#else -static void *yy_flex_alloc( size ) -yy_size_t size; -#endif - { - return (void *) malloc( size ); - } - -#ifdef YY_USE_PROTOS -static void *yy_flex_realloc( void *ptr, yy_size_t size ) -#else -static void *yy_flex_realloc( ptr, size ) -void *ptr; -yy_size_t size; -#endif - { - /* The cast to (char *) in the following accommodates both - * implementations that use char* generic pointers, and those - * that use void* generic pointers. It works with the latter - * because both ANSI C and C++ allow castless assignment from - * any pointer type to void*, and deal with argument conversions - * as though doing an assignment. - */ - return (void *) realloc( (char *) ptr, size ); - } - -#ifdef YY_USE_PROTOS -static void yy_flex_free( void *ptr ) -#else -static void yy_flex_free( ptr ) -void *ptr; -#endif - { - free( ptr ); - } - -#if YY_MAIN -int main() - { - yylex(); - return 0; - } -#endif -#line 278 "Gmsh.l" - - -#undef yywrap - -int yywrap() {return 1;} - -void skipcomments(void) { - int c; - - while (1) { - while ((c=yyinput()) != '*'){ - if(c == EOF){ - Msg(GERROR, "End of file in commented region") ; - return; - } - } - if ((c = yyinput()) == '/') - return; - unput(c); - } -} - -void parsestring(char endchar){ - int c, i; - - c = yyinput(); - i = 0; - while (c != endchar) { - TmpString[i++] = c; - c = yyinput(); - } - TmpString[i++] = '\0'; - yylval.c = strsave(TmpString); -} - -char *strsave(char *ptr){ - return((char*)strcpy((char*)malloc(strlen(ptr)+1),ptr)); -} - -void skipline(void){ - while (yyinput() != '\n') ; -} - -void skip_until(char *skip, char *until){ - int i, nb_skip; - int l, l_skip, l_until; - char chars[256]; - - nb_skip = 0 ; - - if(skip) - l_skip = strlen(skip); - else - l_skip = 0 ; - - l_until = strlen(until); - - while(1){ - while (1){ - chars[0] = yyinput(); - if(chars[0] == (char)EOF){ - Msg(GERROR, "Unexpected end of file") ; - return; - } - if(chars[0] == until[0]) break; - if(skip && chars[0] == skip[0]) break; - } - - l = MAX(l_skip,l_until) ; - for(i=1 ; i<l ; i++){ - chars[i] = yyinput(); - if(chars[i] == (char)EOF){ - l = i; - break; - } - } - - if(!strncmp(chars,until,l_until)){ - if(!nb_skip){ - return; - } - else{ - nb_skip--; - } - } - else if(skip && !strncmp(chars,skip,l_skip)){ - nb_skip++; - } - else{ - for(i=1;i<l-1;i++){ - unput(chars[l-i]); - } - } - - } -} - diff --git a/Parser/Makefile b/Parser/Makefile deleted file mode 100644 index 1d7d37352a5441f522820d8189949de87540ec8d..0000000000000000000000000000000000000000 --- a/Parser/Makefile +++ /dev/null @@ -1,91 +0,0 @@ -# $Id: Makefile,v 1.29 2001-08-11 23:32:24 geuzaine Exp $ -# -# Makefile for "libParser.a" -# - -.IGNORE: - -CC = c++ -AR = ar ruvs -RANLIB = ranlib -RM = rm -YACC = bison -LEX = flex - -LIB = ../lib/libParser.a -INCLUDE = -I../includes -I../Common -I../DataStr -I../Geo -I../Graphics\ - -I../Mesh -I../Motif -I../Fltk -I../Plugin -I../Parallel - -C_FLAGS = -g -Wall -OS_FLAGS = -D_LITTLE_ENDIAN -VERSION_FLAGS = -D_XMOTIF - -GL_INCLUDE = -I$(HOME)/SOURCES/Mesa-3.1/include\ - -I$(HOME)/SOURCES/Mesa-3.1/include/GL -GUI_INCLUDE = -I/usr/X11R6/LessTif/Motif1.2/include - -RMFLAGS = -f -CFLAGS = $(C_FLAGS) $(OS_FLAGS) $(VERSION_FLAGS) $(INCLUDE)\ - $(GL_INCLUDE) $(GUI_INCLUDE) - -SRC = Gmsh.yy.cpp \ - Gmsh.tab.cpp\ - OpenFile.cpp\ - FunctionManager.cpp - -OBJ = $(SRC:.cpp=.o) - -.SUFFIXES: .o .cpp - -$(LIB): $(OBJ) - $(AR) $(LIB) $(OBJ) - $(RANLIB) $(LIB) - -.cpp.o: - $(CC) $(CFLAGS) -c $< - -parser: - $(YACC) --output Gmsh.tab.cpp -d Gmsh.y - $(LEX) -oGmsh.yy.cpp Gmsh.l - -clean: - $(RM) $(RMFLAGS) *.o - -lint: - $(LINT) $(CFLAGS) $(SRC) - -depend: - (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ - $(CC) -MM $(CFLAGS) ${SRC} \ - ) >Makefile.new - cp Makefile Makefile.bak - cp Makefile.new Makefile - $(RM) $(RMFLAGS) Makefile.new - -# DO NOT DELETE THIS LINE -Gmsh.yy.o: Gmsh.yy.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h ../Geo/Geo.h \ - ../Geo/CAD.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h Gmsh.tab.cpp.h -Gmsh.tab.o: Gmsh.tab.cpp ../Plugin/PluginManager.h \ - ../Parallel/ParUtil.h ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h \ - ../Common/Context.h ../Geo/Geo.h ../Geo/CAD.h ../Mesh/Mesh.h \ - ../Mesh/Vertex.h ../Mesh/Simplex.h ../Mesh/Edge.h \ - ../Geo/ExtrudeParams.h ../Mesh/Metric.h ../Geo/DataBase.h \ - ../Graphics/Draw.h ../Common/Views.h ../Common/ColorTable.h \ - ../Mesh/Create.h ../Geo/StepGeomDatabase.h ../Common/Options.h \ - ../Common/Colors.h Parser.h OpenFile.h FunctionManager.h \ - ../Common/Timer.h ../Graphics/CreateFile.h ../Mesh/STL.h -OpenFile.o: OpenFile.cpp ../Common/Gmsh.h ../Common/Message.h \ - ../DataStr/Malloc.h ../DataStr/List.h ../DataStr/Tree.h \ - ../DataStr/avl.h ../DataStr/Tools.h ../Common/Numeric.h \ - ../Common/Context.h Parser.h OpenFile.h ../Common/GetOptions.h \ - ../Geo/Geo.h ../Mesh/Mesh.h ../Mesh/Vertex.h ../Mesh/Simplex.h \ - ../Mesh/Edge.h ../Geo/ExtrudeParams.h ../Mesh/Metric.h \ - ../Common/Views.h ../Common/ColorTable.h ../Geo/MinMax.h \ - ../Geo/Visibility.h ../Common/GmshUI.h ../Graphics/Draw.h \ - ../Motif/Widgets.h -FunctionManager.o: FunctionManager.cpp FunctionManager.h diff --git a/Parser/OpenFile.cpp b/Parser/OpenFile.cpp deleted file mode 100644 index 416be12b59be1781f5bbc641215d5c9c9ff4901e..0000000000000000000000000000000000000000 --- a/Parser/OpenFile.cpp +++ /dev/null @@ -1,177 +0,0 @@ -// $Id: OpenFile.cpp,v 1.19 2001-08-11 23:28:34 geuzaine Exp $ - -#include "Gmsh.h" -#include "Numeric.h" -#include "Context.h" -#include "Parser.h" -#include "OpenFile.h" -#include "GetOptions.h" -#include "Geo.h" -#include "Mesh.h" -#include "Views.h" -#include "MinMax.h" -#include "Visibility.h" - -#ifndef _BLACKBOX -#include "GmshUI.h" -#include "Draw.h" -#endif - -#if _XMOTIF -#include "Widgets.h" -extern Widgets_T WID; -#elif _FLTK -#include "GUI.h" -extern GUI *WID; -#endif - -extern Mesh *THEM, M; -extern Context_T CTX; - -int ParseFile(char *f){ - char String[256]; - int status; - - strncpy(yyname,f,255); - yyerrorstate=0; - yylineno=1; - - if(!(yyin = fopen(yyname,"r"))) - return 0; - - Msg(STATUS2, "Loading '%s'", yyname); - - fpos_t position; - fgetpos(yyin, &position); - fgets(String, sizeof(String), yyin) ; - fsetpos(yyin, &position); - - if(!strncmp(String, "$PTS", 4) || - !strncmp(String, "$NO", 3) || - !strncmp(String, "$ELM", 4)){ - if(THEM->status < 0) mai3d(THEM, 0); - Read_Mesh(THEM, yyin, FORMAT_MSH); - status = THEM->status; - } - else if(!strncmp(String, "sms", 3)) - { - if(THEM->status < 0) mai3d(THEM, 0); - Read_Mesh(THEM, yyin, FORMAT_SMS); - status = THEM->status; - } - else if(!strncmp(String, "$PostFormat", 11) || - !strncmp(String, "$View", 5)){ - Read_View(yyin, yyname); - status = 0; - } - else{ - while(!feof(yyin)) yyparse(); - status = 0; - } - fclose(yyin); - - Msg(STATUS2, "Loaded '%s'", yyname); - return status; -} - - -void ParseString(char *str){ - FILE *f; - if(!str)return; - if((f = fopen(CTX.tmp_filename,"w"))){ - fprintf(f,"%s\n", str); - fclose(f); - ParseFile(CTX.tmp_filename); - } -} - -void MergeProblem(char *name){ - - ParseFile(name); - if (yyerrorstate) return; - -#ifndef _BLACKBOX - if (!EntitesVisibles) { - RemplirEntitesVisibles(1); - SHOW_ALL_ENTITIES = 1; - } -#endif -} - -void OpenProblem(char *name){ - char ext[6]; - int status; - - if(CTX.threads_lock){ - Msg(INFO, "I'm busy! Ask me that later..."); - return; - } - CTX.threads_lock = 1; - - InitSymbols(); - Init_Mesh(&M, 1); - - ParseString(TheOptString); - - strncpy(CTX.filename,name,255); - strncpy(CTX.base_filename,name,255); - - strcpy(ext,name+(strlen(name)-4)); - if(!strcmp(ext,".geo") || !strcmp(ext,".GEO") || - !strcmp(ext,".msh") || !strcmp(ext,".MSH") || - !strcmp(ext,".stl") || !strcmp(ext,".STL") || - !strcmp(ext,".sms") || !strcmp(ext,".SMS") || - !strcmp(ext,".pos") || !strcmp(ext,".POS")){ - CTX.base_filename[strlen(name)-4] = '\0'; - } - else{ - strcat(CTX.filename,".geo"); - } - - strncpy(THEM->name, CTX.base_filename,255); - - if(!CTX.batch){ -#if _XMOTIF - XtVaSetValues(WID.G.shell, - XmNtitle, CTX.filename, - XmNiconName, CTX.base_filename, - NULL); -#elif _FLTK - WID->set_title(CTX.filename); -#endif - } - - int nb = List_Nbr(Post_ViewList); - - status = ParseFile(CTX.filename); - - ApplyLcFactor(THEM); - - CTX.threads_lock = 0; - - if(!status){ - mai3d(THEM,0); - Maillage_Dimension_0(&M); - } - -#ifndef _BLACKBOX - ZeroHighlight(&M); -#endif - - if(List_Nbr(Post_ViewList) > nb) - CalculateMinMax(NULL, ((Post_View*)List_Pointer - (Post_ViewList,List_Nbr(Post_ViewList)-1))->BBox); - else if(!status) - CalculateMinMax(THEM->Points,NULL); - else - CalculateMinMax(THEM->Vertices,NULL); - -#ifndef _BLACKBOX - if (!EntitesVisibles) { - RemplirEntitesVisibles(1); - SHOW_ALL_ENTITIES = 1; - } -#endif - -} - diff --git a/Parser/OpenFile.h b/Parser/OpenFile.h deleted file mode 100644 index 179f66e3bb5b3e4eea5ec6acbbb84541f68d2b5e..0000000000000000000000000000000000000000 --- a/Parser/OpenFile.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef _OPENFILE_H_ -#define _OPENFILE_H_ - -#define MAX_OPEN_FILES 256 - -int ParseFile(char *filename); -void ParseString(char *str); -void OpenProblem(char *filename); -void MergeProblem(char *filename); - -#endif diff --git a/Parser/Parser.h b/Parser/Parser.h deleted file mode 100644 index 8e387f1561ff83f1cf3d965025c4e7ca7487137e..0000000000000000000000000000000000000000 --- a/Parser/Parser.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef _PARSER_H_ -#define _PARSER_H_ - -typedef struct { - char *Name; - List_T *val; -} Symbol; - -void InitSymbols (void); -void DeleteSymbols(void); -int CompareSymbols (const void *a, const void *b); - -extern List_T *Symbol_L; - -int yyparse (void); -int yylex (); - -extern FILE *yyin; -extern int yylineno; -extern char yyname[256]; -extern char *yytext; -extern int yyerrorstate; - - -#endif diff --git a/Plugin/CutMap.cpp b/Plugin/CutMap.cpp deleted file mode 100644 index 83d9bf971efe06d98f12b7491dc9052be10877aa..0000000000000000000000000000000000000000 --- a/Plugin/CutMap.cpp +++ /dev/null @@ -1,85 +0,0 @@ -// $Id: CutMap.cpp,v 1.22 2001-08-11 23:25:50 geuzaine Exp $ - -#include "CutMap.h" -#include "List.h" - -StringXNumber CutMapOptions_Number[] = { - { GMSH_FULLRC, "A" , NULL , 1. }, - { GMSH_FULLRC, "iView" , NULL , -1. }, - { GMSH_FULLRC, "iField" , NULL , 0. } -}; - -extern "C" -{ - GMSH_Plugin *GMSH_RegisterCutMapPlugin () - { - return new GMSH_CutMapPlugin (); - } -} - - -GMSH_CutMapPlugin::GMSH_CutMapPlugin() -{ -} - -void GMSH_CutMapPlugin::getName(char *name) const -{ - strcpy(name,"Cut Map"); -} - -void GMSH_CutMapPlugin::getInfos(char *author, char *copyright, char *help_text) const -{ - strcpy(author, "J.-F. Remacle (remacle@scorec.rpi.edu)"); - strcpy(copyright, "DGR (www.multiphysics.com)"); - strcpy(help_text, - "Extracts the isovalue surface of value A from a\n" - "3D scalar map and draw ith component of the field on the iso.\n" - "Script name: Plugin(CutMap)."); -} - -int GMSH_CutMapPlugin::getNbOptions() const -{ - return sizeof(CutMapOptions_Number)/sizeof(StringXNumber); -} - -StringXNumber *GMSH_CutMapPlugin:: GetOption (int iopt) -{ - return &CutMapOptions_Number[iopt]; -} - -void GMSH_CutMapPlugin::CatchErrorMessage (char *errorMessage) const -{ - strcpy(errorMessage,"CutMap failed..."); -} - -double GMSH_CutMapPlugin :: levelset (double x, double y, double z, double val) const -{ - // we must look into the map for A - Map(x,y,z) - // this is the case when the map is the same as the view, - // the result is the extraction of isovalue A - return CutMapOptions_Number[0].def - val; -} - -extern List_T *Post_ViewList; - -Post_View *GMSH_CutMapPlugin::execute (Post_View *v) -{ - Post_View *vv; - - int iView = (int)CutMapOptions_Number[1].def; - _ith_field_to_draw_on_the_iso = (int)CutMapOptions_Number[2].def; - _orientation = ORIENT_MAP; - - if(v && iView < 0) - vv = v; - else{ - if(!v && iView < 0) iView = 0; - if(!(vv = (Post_View*)List_Pointer_Test(Post_ViewList,iView))){ - Msg(WARNING,"View[%d] does not exist",iView); - return 0; - } - } - - return GMSH_LevelsetPlugin::execute(vv); -} - diff --git a/Plugin/CutMap.h b/Plugin/CutMap.h deleted file mode 100644 index 75565549a11d22384eb8f8175b6ae553a0b44b66..0000000000000000000000000000000000000000 --- a/Plugin/CutMap.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef _CUTMAP_H_ -#define _CUTMAP_H -#include "LevelsetPlugin.h" -extern "C" -{ - GMSH_Plugin *GMSH_RegisterCutMapPlugin (); -} - -class GMSH_CutMapPlugin : public GMSH_LevelsetPlugin -{ - virtual double levelset (double x, double y, double z, double val) const; -public: - GMSH_CutMapPlugin(); - virtual void getName (char *name) const; - virtual void getInfos (char *author, - char *copyright, - char *help_text) const; - virtual void CatchErrorMessage (char *errorMessage) const; - virtual int getNbOptions() const; - virtual StringXNumber* GetOption (int iopt); - virtual Post_View *execute (Post_View *); -}; - -#endif diff --git a/Plugin/CutPlane.cpp b/Plugin/CutPlane.cpp deleted file mode 100644 index 468231196ca777a5c132eb9380cb38b25903d367..0000000000000000000000000000000000000000 --- a/Plugin/CutPlane.cpp +++ /dev/null @@ -1,89 +0,0 @@ -// $Id: CutPlane.cpp,v 1.18 2001-08-11 23:25:50 geuzaine Exp $ - -#include "CutPlane.h" -#include "List.h" - -StringXNumber CutPlaneOptions_Number[] = { - { GMSH_FULLRC, "A" , NULL , 1. }, - { GMSH_FULLRC, "B" , NULL , 0. }, - { GMSH_FULLRC, "C" , NULL , 0. }, - { GMSH_FULLRC, "D" , NULL , 0.01 }, - { GMSH_FULLRC, "iView" , NULL , -1. } -}; - -extern "C" -{ - GMSH_Plugin *GMSH_RegisterCutPlanePlugin () - { - return new GMSH_CutPlanePlugin (); - } -} - - -GMSH_CutPlanePlugin::GMSH_CutPlanePlugin() -{ -} - -void GMSH_CutPlanePlugin::getName(char *name) const -{ - strcpy(name,"Cut Plane"); -} - -void GMSH_CutPlanePlugin::getInfos(char *author, char *copyright, char *help_text) const -{ - strcpy(author,"J.-F. Remacle (remacle@scorec.rpi.edu)"); - strcpy(copyright,"DGR (www.multiphysics.com)"); - strcpy(help_text, - "Cuts a 3D scalar view with the plane\n" - "A*X + B*Y + C*Z + D = 0.\n" - "Script name: Plugin(CutPlane)."); -} - -int GMSH_CutPlanePlugin::getNbOptions() const -{ - return sizeof(CutPlaneOptions_Number)/sizeof(StringXNumber); -} - -StringXNumber* GMSH_CutPlanePlugin:: GetOption (int iopt) -{ - return &CutPlaneOptions_Number[iopt]; -} - -void GMSH_CutPlanePlugin::CatchErrorMessage (char *errorMessage) const -{ - strcpy(errorMessage,"CutPlane failed..."); -} - -double GMSH_CutPlanePlugin :: levelset (double x, double y, double z, double val) const -{ - return CutPlaneOptions_Number[0].def * x + - CutPlaneOptions_Number[1].def * y + - CutPlaneOptions_Number[2].def * z + - CutPlaneOptions_Number[3].def ; -} - -extern List_T *Post_ViewList; - -Post_View *GMSH_CutPlanePlugin::execute (Post_View *v) -{ - Post_View *vv; - - int iView = (int)CutPlaneOptions_Number[4].def; - _orientation = ORIENT_PLANE; - _ref[0] = CutPlaneOptions_Number[0].def; - _ref[1] = CutPlaneOptions_Number[1].def; - _ref[2] = CutPlaneOptions_Number[2].def; - - if(v && iView < 0) - vv = v; - else{ - if(!v && iView < 0) iView = 0; - if(!(vv = (Post_View*)List_Pointer_Test(Post_ViewList,iView))){ - Msg(WARNING,"View[%d] does not exist",iView); - return 0; - } - } - - return GMSH_LevelsetPlugin::execute(vv); -} - diff --git a/Plugin/CutPlane.h b/Plugin/CutPlane.h deleted file mode 100644 index 3d88bd048d62fd3bc5759fab24cd1c1dc82f2115..0000000000000000000000000000000000000000 --- a/Plugin/CutPlane.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef _CUTPLANE_H_ -#define _CUTPLANE_H - -#include "LevelsetPlugin.h" - -extern "C" -{ - GMSH_Plugin *GMSH_RegisterCutPlanePlugin (); -} - -class GMSH_CutPlanePlugin : public GMSH_LevelsetPlugin -{ - virtual double levelset (double x, double y, double z, double val) const; -public: - GMSH_CutPlanePlugin(); - virtual void getName (char *name) const; - virtual void getInfos (char *author, - char *copyright, - char *help_text) const; - virtual void CatchErrorMessage (char *errorMessage) const; - virtual int getNbOptions() const; - virtual StringXNumber *GetOption (int iopt); - virtual Post_View *execute (Post_View *); -}; - -#endif diff --git a/Plugin/CutSphere.cpp b/Plugin/CutSphere.cpp deleted file mode 100644 index 493b3c186a969f6ad28f39678964000b45d13113..0000000000000000000000000000000000000000 --- a/Plugin/CutSphere.cpp +++ /dev/null @@ -1,91 +0,0 @@ -// $Id: CutSphere.cpp,v 1.17 2001-08-11 23:25:50 geuzaine Exp $ - -#include <string.h> -#include "CutSphere.h" -#include "List.h" - -StringXNumber CutSphereOptions_Number[] = { - { GMSH_FULLRC, "Xc" , NULL , 0. }, - { GMSH_FULLRC, "Yc" , NULL , 0. }, - { GMSH_FULLRC, "Zc" , NULL , 0. }, - { GMSH_FULLRC, "R" , NULL , 0.25 }, - { GMSH_FULLRC, "iView" , NULL , -1. } -}; - -extern "C" -{ - GMSH_Plugin *GMSH_RegisterCutSpherePlugin () - { - return new GMSH_CutSpherePlugin (); - } -} - - -GMSH_CutSpherePlugin::GMSH_CutSpherePlugin() -{ -} - -void GMSH_CutSpherePlugin::getName(char *name) const -{ - strcpy(name,"Cut Sphere"); -} - -void GMSH_CutSpherePlugin::getInfos(char *author, char *copyright, char *help_text) const -{ - strcpy(author,"J.-F. Remacle (remacle@scorec.rpi.edu)"); - strcpy(copyright,"DGR (www.multiphysics.com)"); - strcpy(help_text, - "Cuts a 3D scalar view with the sphere\n" - "(X-Xc)^2 + (Y-Yc)^2 + (Z-Zc)^2 = R^2.\n" - "Script name: Plugin(CutSphere)."); -} - -int GMSH_CutSpherePlugin::getNbOptions() const -{ - return sizeof(CutSphereOptions_Number)/sizeof(StringXNumber); -} - -StringXNumber* GMSH_CutSpherePlugin:: GetOption (int iopt) -{ - return &CutSphereOptions_Number[iopt]; -} - -void GMSH_CutSpherePlugin::CatchErrorMessage (char *errorMessage) const -{ - strcpy(errorMessage,"CutSphere failed..."); -} - -double GMSH_CutSpherePlugin :: levelset (double x, double y, double z, double val) const -{ - double a = CutSphereOptions_Number[0].def; - double b = CutSphereOptions_Number[1].def; - double c = CutSphereOptions_Number[2].def; - double r = CutSphereOptions_Number[3].def; - return (x-a)*(x-a) + (y-b)*(y-b) + (z-c)*(z-c) - r*r; -} - -extern List_T *Post_ViewList; - -Post_View *GMSH_CutSpherePlugin::execute (Post_View *v) -{ - Post_View *vv; - - int iView = (int)CutSphereOptions_Number[4].def; - _orientation = ORIENT_SPHERE; - _ref[0] = CutSphereOptions_Number[0].def; - _ref[1] = CutSphereOptions_Number[1].def; - _ref[2] = CutSphereOptions_Number[2].def; - - if(v && iView < 0) - vv = v; - else{ - if(!v && iView < 0) iView = 0; - if(!(vv = (Post_View*)List_Pointer_Test(Post_ViewList,iView))){ - Msg(WARNING,"View[%d] does not exist",iView); - return 0; - } - } - - return GMSH_LevelsetPlugin::execute(vv); -} - diff --git a/Plugin/CutSphere.h b/Plugin/CutSphere.h deleted file mode 100644 index 26b2e3a167a35b49ccb208d2a3e04a46c7bfd6d0..0000000000000000000000000000000000000000 --- a/Plugin/CutSphere.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef _CUTSPHERE_H_ -#define _CUTSPHERE_H - -#include "LevelsetPlugin.h" - -extern "C" -{ - GMSH_Plugin *GMSH_RegisterCutSpherePlugin (); -} - -class GMSH_CutSpherePlugin : public GMSH_LevelsetPlugin -{ - virtual double levelset (double x, double y, double z, double val) const; -public: - GMSH_CutSpherePlugin(); - virtual void getName (char *name) const; - virtual void getInfos (char *author, - char *copyright, - char *help_text) const; - virtual void CatchErrorMessage (char *errorMessage) const; - virtual int getNbOptions() const; - virtual StringXNumber* GetOption (int iopt); - virtual Post_View *execute (Post_View *); -}; - -#endif diff --git a/Plugin/LevelsetPlugin.cpp b/Plugin/LevelsetPlugin.cpp deleted file mode 100644 index 4ab3ed72370604cf5350a42af337cd09fbf02569..0000000000000000000000000000000000000000 --- a/Plugin/LevelsetPlugin.cpp +++ /dev/null @@ -1,169 +0,0 @@ -// $Id: LevelsetPlugin.cpp,v 1.19 2001-08-13 06:59:52 geuzaine Exp $ - -#include "LevelsetPlugin.h" -#include "List.h" -#include "Views.h" -#include "Iso.h" -#include "Numeric.h" - -GMSH_LevelsetPlugin::GMSH_LevelsetPlugin() -{ - processed = 0; - _ith_field_to_draw_on_the_iso = 0; - _orientation = ORIENT_NONE; - _ref[0] = _ref[1] = _ref[2] = 0.; - strcpy (OutputFileName,"levelset.pos"); -} - -void GMSH_LevelsetPlugin::Save () -{ - if(processed){ - Msg(INFO, "Writing file '%s'", OutputFileName); - Write_View(0, processed, OutputFileName); - Msg(INFO, "Levelset ouput complete '%s'", OutputFileName); - Msg(STATUS2, "Wrote '%s'", OutputFileName); - } -} - -void GMSH_LevelsetPlugin::Run () -{ - execute (0); -} - -Post_View *GMSH_LevelsetPlugin::execute (Post_View *v) -{ - /* - This plugin creates a new view which is the result of - a cut of the actual view with a levelset. - */ - int k,i,j,nb,edtet[6][2] = {{0,1},{0,2},{0,3},{1,2},{1,3},{2,3}}; - double *X, *Y, *Z, *Vals, levels[6], coef; - double Xp[6], Yp[6], Zp[6], myVals[6]; - double Xpi[6], Ypi[6], Zpi[6], myValsi[6]; - Post_View *View; - - // for all scalar tets - - if(v->NbSS){ - View = BeginView(1); - nb = List_Nbr(v->SS) / v->NbSS ; - for(i=0 ; i<List_Nbr(v->SS) ; i+=nb){ - X = (double*)List_Pointer_Fast(v->SS,i); - Y = (double*)List_Pointer_Fast(v->SS,i+4); - Z = (double*)List_Pointer_Fast(v->SS,i+8); - Vals = (double*)List_Pointer_Fast(v->SS,i+12); - for(j=0 ; j<4 ; j++) - levels[j] = levelset(X[j],Y[j],Z[j],Vals[j]); - int nx = 0; - for(k=0 ; k<6 ; k++){ - if(levels[edtet[k][0]] * levels[edtet[k][1]] <= 0.0){ - coef = InterpolateIso(X,Y,Z,levels,0.0, - edtet[k][0],edtet[k][1], - &Xp[nx],&Yp[nx],&Zp[nx]); - myVals[nx] = what_to_draw (Xp[nx],Yp[nx],Zp[nx], - edtet[k][0],edtet[k][1],coef,Vals); - nx++; - } - } - - if(nx == 4){ - double xx = Xp[3]; - double yy = Yp[3]; - double zz = Zp[3]; - double vv = myVals[3]; - Xp[3] = Xp[2]; - Yp[3] = Yp[2]; - Zp[3] = Zp[2]; - myVals[3] = myVals[2]; - Xp[2] = xx; - Yp[2] = yy; - Zp[2] = zz; - myVals[2] = vv; - } - - double v1[3] = {Xp[2]-Xp[0],Yp[2]-Yp[0],Zp[2]-Zp[0]}; - double v2[3] = {Xp[1]-Xp[0],Yp[1]-Yp[0],Zp[1]-Zp[0]}; - double gr[3]; - double n[3],test; - prodve(v1,v2,n); - - switch(_orientation){ - case ORIENT_MAP: - gradSimplex(X,Y,Z,Vals,gr); - prosca(gr,n,&test); - break; - case ORIENT_PLANE: - prosca(n,_ref,&test); - break; - case ORIENT_SPHERE: - gr[0] = Xp[0]-_ref[0]; - gr[1] = Yp[0]-_ref[1]; - gr[2] = Zp[0]-_ref[2]; - prosca(gr,n,&test); - break; - default: - test = 0.; - break; - } - - if(test>0){ - for(k=0;k<nx;k++){ - Xpi[k] = Xp[k]; - Ypi[k] = Yp[k]; - Zpi[k] = Zp[k]; - myValsi[k] = myVals[k]; - } - for(k=0;k<nx;k++){ - Xp[k] = Xpi[nx-k-1]; - Yp[k] = Ypi[nx-k-1]; - Zp[k] = Zpi[nx-k-1]; - myVals[k] = myValsi[nx-k-1]; - } - } - - if(nx == 3 || nx == 4){ - for(k=0 ; k<3 ; k++) List_Add(View->ST, &Xp[k]); - for(k=0 ; k<3 ; k++) List_Add(View->ST, &Yp[k]); - for(k=0 ; k<3 ; k++) List_Add(View->ST, &Zp[k]); - for(k=0 ; k<3 ; k++) List_Add(View->ST, &myVals[k]); - View->NbST++; - } - if(nx == 4){ - for(k=2 ; k<5 ; k++) List_Add(View->ST, &Xp[k % 4]); - for(k=2 ; k<5 ; k++) List_Add(View->ST, &Yp[k % 4]); - for(k=2 ; k<5 ; k++) List_Add(View->ST, &Zp[k % 4]); - for(k=2 ; k<5 ; k++) List_Add(View->ST, &myVals[k % 4]); - View->NbST++; - } - } - - char name[1024],filename[1024]; - sprintf(name,"cut-%s",v->Name); - sprintf(filename,"cut-%s",v->FileName); - EndView(View, 1, filename, name); - - Msg(INFO, "Created view '%s' (%d triangles)", name, View->NbST); - processed = View; - return View; - } - - return 0; -} - -double GMSH_LevelsetPlugin::what_to_draw (double x, double y, double z, - int p1, int p2, - double coef, double *Vals) const -{ - int offset = _ith_field_to_draw_on_the_iso * 4; - // TEST JF, this would draw y coord on the iso - // return y; - p2 += offset; - p1 += offset; - return coef * (Vals[p2] - Vals[p1]) + Vals[p1]; -} - - - - - - diff --git a/Plugin/LevelsetPlugin.h b/Plugin/LevelsetPlugin.h deleted file mode 100644 index b2f5f16322f9eae6ddc5d93f68ff344f37642535..0000000000000000000000000000000000000000 --- a/Plugin/LevelsetPlugin.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef _LEVELSETPLUGIN_H_ -#define _LEVELSETPLUGIN_H_ -#include "Plugin.h" - -#define ORIENT_NONE 0 -#define ORIENT_MAP 1 -#define ORIENT_PLANE 2 -#define ORIENT_SPHERE 3 - -class GMSH_LevelsetPlugin : public GMSH_Post_Plugin -{ -protected: - int _ith_field_to_draw_on_the_iso; - int _orientation; - double _ref[3]; -private: - virtual double levelset (double x, double y, double z, double val) const = 0; - virtual double what_to_draw (double x, double y, double z, - int p1, int p2, double coef, double *val) const; -public: - GMSH_LevelsetPlugin(); - virtual Post_View *execute (Post_View *); - virtual void Run(); - virtual void Save(); -}; -#endif diff --git a/Plugin/Makefile b/Plugin/Makefile deleted file mode 100644 index 6ee76137bbf21f2f0d4ec4e93549d6d7fb1920ae..0000000000000000000000000000000000000000 --- a/Plugin/Makefile +++ /dev/null @@ -1,77 +0,0 @@ -# $Id: Makefile,v 1.16 2001-08-11 23:32:25 geuzaine Exp $ -# -# Makefile for "libAdapt.a" -# - -.IGNORE: - -CC = c++ -AR = ar ruvs -RM = rm -RANLIB = ranlib - -LIB = ../lib/libPlugin.a -INCLUDE = -I../Common -I../Graphics -I../DataStr -I../Mesh - -C_FLAGS = -g -Wall -OS_FLAGS = -VERSION_FLAGS = - -RMFLAGS = -f -CFLAGS = $(C_FLAGS) $(OS_FLAGS) $(VERSION_FLAGS) $(INCLUDE) $(GUI_INCLUDE) - -SRC = Plugin.cpp\ - LevelsetPlugin.cpp\ - CutPlane.cpp CutSphere.cpp CutMap.cpp\ - Smooth.cpp\ - Transform.cpp\ - Skin.cpp - -OBJ = $(SRC:.cpp=.o) - -.SUFFIXES: .o .cpp - -$(LIB): $(OBJ) - $(AR) $(LIB) $(OBJ) - $(RANLIB) $(LIB) - -.cpp.o: - $(CC) $(CFLAGS) -c $< - -clean: - $(RM) $(RMFLAGS) *.o - -lint: - $(LINT) $(CFLAGS) $(SRC) - -depend: - (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ - $(CC) -MM $(CFLAGS) ${SRC} \ - ) >Makefile.new - cp Makefile Makefile.bak - cp Makefile.new Makefile - $(RM) $(RMFLAGS) Makefile.new - -# DO NOT DELETE THIS LINE -Plugin.o: Plugin.cpp Plugin.h ../Common/Options.h ../Common/Message.h \ - PluginManager.h CutMap.h LevelsetPlugin.h CutPlane.h CutSphere.h \ - Skin.h Smooth.h Transform.h -LevelsetPlugin.o: LevelsetPlugin.cpp LevelsetPlugin.h Plugin.h \ - ../Common/Options.h ../Common/Message.h ../DataStr/List.h \ - ../Common/Views.h ../Common/ColorTable.h ../Common/Iso.h \ - ../Common/Numeric.h -CutPlane.o: CutPlane.cpp CutPlane.h LevelsetPlugin.h Plugin.h \ - ../Common/Options.h ../Common/Message.h ../DataStr/List.h -CutSphere.o: CutSphere.cpp CutSphere.h LevelsetPlugin.h Plugin.h \ - ../Common/Options.h ../Common/Message.h ../DataStr/List.h -CutMap.o: CutMap.cpp CutMap.h LevelsetPlugin.h Plugin.h \ - ../Common/Options.h ../Common/Message.h ../DataStr/List.h -Smooth.o: Smooth.cpp Plugin.h ../Common/Options.h ../Common/Message.h \ - Smooth.h ../DataStr/List.h ../Common/Views.h ../Common/ColorTable.h -Transform.o: Transform.cpp Plugin.h ../Common/Options.h \ - ../Common/Message.h Transform.h ../DataStr/List.h ../Common/Views.h \ - ../Common/ColorTable.h -Skin.o: Skin.cpp Plugin.h ../Common/Options.h ../Common/Message.h \ - Skin.h ../DataStr/List.h ../DataStr/Tree.h ../DataStr/avl.h \ - ../Common/Views.h ../Common/ColorTable.h ../Common/Context.h \ - ../DataStr/Malloc.h diff --git a/Plugin/Plugin.cpp b/Plugin/Plugin.cpp deleted file mode 100644 index 4c904909912535f7af274970810e184a944d0c72..0000000000000000000000000000000000000000 --- a/Plugin/Plugin.cpp +++ /dev/null @@ -1,186 +0,0 @@ -// $Id: Plugin.cpp,v 1.20 2001-08-07 21:00:10 remacle Exp $ - -#ifndef _NODLL -#include <dlfcn.h> -#endif - -#include <map> - -#ifdef _FLTK -#include <FL/filename.H> -#endif - -#include "Plugin.h" -#include "PluginManager.h" - -#include "CutMap.h" -#include "CutPlane.h" -#include "CutSphere.h" -#include "Skin.h" -#include "Smooth.h" -#include "Transform.h" - -using namespace std; - -const char *GMSH_PluginEntry = "GMSH_RegisterPlugin"; - -#if defined(WIN32) && !defined(__CYGWIN__) -#define SLASH "\\" -#else -#define SLASH "/" -#endif - - -GMSH_PluginManager *GMSH_PluginManager::instance = 0; - -GMSH_PluginManager::GMSH_PluginManager(){ -} - -GMSH_PluginManager::~GMSH_PluginManager(){ - for(iter it = allPlugins.begin(); - it != allPlugins.end(); - ++it) delete (*it).second; -} - -GMSH_Plugin* GMSH_PluginManager::find (char *pluginName){ - iter it = allPlugins.find(pluginName); - if (it == allPlugins.end()) return 0; - return (*it).second; -} - -void GMSH_PluginManager::Action( char *pluginName, char *action, void *data){ - GMSH_Plugin * plugin = find(pluginName); - if(!plugin){ - throw 1; - } - if(!strcmp(action,"Run")){ - plugin->Run(); - } - else if(!strcmp(action,"Save")){ - plugin->Save(); - } - else{ - throw 1; - } -} - -void GMSH_PluginManager::SetPluginOption (char *pluginName, char *option, char *value){ - GMSH_Plugin *plugin = find(pluginName); - - if(!plugin) throw "Unknown plugin name" ; - - if(!strcmp(option,"OutputFileName")) - strcpy(plugin->OutputFileName,value); - else if(!strcmp(option,"InputFileName")) - strcpy(plugin->InputFileName,value); - else - throw "Unknown plugin option name"; -} - -void GMSH_PluginManager::SetPluginOption (char *pluginName, char *option, double value){ - GMSH_Plugin *plugin = find(pluginName); - - if(!plugin) throw "Unknown plugin name"; - - for(int i=0 ; i<plugin->getNbOptions();i++){ - StringXNumber *sxn; - // get the ith option of the plugin - sxn = plugin->GetOption(i); - // look if it's the good option name - if(!strcmp (sxn->str,option)){ - sxn->def = value; - return; - } - } - throw "Unknown plugin option name"; -} - -GMSH_PluginManager* GMSH_PluginManager::Instance(){ - if(!instance){ - instance = new GMSH_PluginManager; - } - return instance; -} - -void GMSH_PluginManager::RegisterDefaultPlugins(){ - struct dirent **list; - char ext[6]; - - allPlugins.insert(std::pair<char*,GMSH_Plugin*>("CutMap", - GMSH_RegisterCutMapPlugin())); - allPlugins.insert(std::pair<char*,GMSH_Plugin*>("CutPlane", - GMSH_RegisterCutPlanePlugin())); - allPlugins.insert(std::pair<char*,GMSH_Plugin*>("CutSphere", - GMSH_RegisterCutSpherePlugin())); - allPlugins.insert(std::pair<char*,GMSH_Plugin*>("Skin", - GMSH_RegisterSkinPlugin())); - allPlugins.insert(std::pair<char*,GMSH_Plugin*>("Smooth", - GMSH_RegisterSmoothPlugin())); - allPlugins.insert(std::pair<char*,GMSH_Plugin*>("Transform", - GMSH_RegisterTransformPlugin())); - -#ifdef _FLTK - char *homeplugins = getenv ("GMSHPLUGINSHOME"); - if(!homeplugins)return; - int nbFiles = filename_list(homeplugins,&list); - if(nbFiles <= 0) return; - for(int i=0;i<nbFiles;i++){ - char *name = list[i]->d_name; - if(strlen(name) > 3){ - strcpy(ext,name+(strlen(name)-3)); - if(!strcmp(ext,".so") || !strcmp(ext,"dll")){ - AddPlugin(homeplugins,name); - } - } - } - for(int i=0;i<nbFiles;i++)free(list[i]); - free (list); -#endif -} - -void GMSH_PluginManager::AddPlugin( char *dirName, char *pluginName){ - -#if ( defined(WIN32) && !defined(__CYGWIN__) ) || defined(_NODLL) || !defined(_FLTK) - Msg(WARNING,"No dynamic plugin loading on this platform"); - return; -#else - char dynamic_lib[1024]; - char plugin_name[256]; - char plugin_author[256]; - char plugin_copyright[256]; - char plugin_help[256]; - class GMSH_Plugin* (*RegisterPlugin)(void); - sprintf(dynamic_lib,"%s%s%s",dirName,SLASH,pluginName); - Msg(INFO,"Opening Plugin '%s'",dynamic_lib); - void *hlib = dlopen (dynamic_lib,RTLD_NOW); - char *err = dlerror(); - if(hlib == NULL){ - Msg(WARNING,"Error in opening %s (dlerror = %s)",dynamic_lib,err); - return; - } - RegisterPlugin = (class GMSH_Plugin* (*)(void)) dlsym(hlib,GMSH_PluginEntry); - err = dlerror(); - if(err != NULL){ - Msg(WARNING,"Symbol '%s' missing in plugin '%s' (dlerror = %s)", - GMSH_PluginEntry,pluginName,err); - return; - } - - GMSH_Plugin *p = RegisterPlugin(); - p->hlib = hlib; - p->getName(plugin_name); - p->getInfos(plugin_author,plugin_copyright,plugin_help); - if(allPlugins.find(plugin_name) != allPlugins.end()){ - Msg(WARNING,"Plugin '%s' multiply defined",pluginName); - return; - } - allPlugins.insert(std::pair<char*,GMSH_Plugin*>(plugin_name,p)); - Msg(INFO,"Plugin name : %s",plugin_name); - Msg(INFO,"Plugin author : %s",plugin_author); - Msg(INFO,"Plugin copyright : %s",plugin_copyright); - Msg(INFO,"Plugin help : %s",plugin_help); -#endif -} - - - diff --git a/Plugin/Plugin.h b/Plugin/Plugin.h deleted file mode 100644 index aa5ab41705570f4a6c64edc45473aaff5f0e5796..0000000000000000000000000000000000000000 --- a/Plugin/Plugin.h +++ /dev/null @@ -1,77 +0,0 @@ -#ifndef _PLUGIN_H_ -#define _PLUGIN_H_ -/* - The one who intend to create a plugin for gmsh have to - -) Create a dynamin lib (.so) containing 1 symbols - GMSH_Plugin * GMSH_RegisterPlugin (); - -) When there is an unacceptable error in the plugin, - just throw this, the plugin manager will be able to - catch the exception. - - Some Plugins are default gmsh plugins and are insterted - directly in the executable. I think that it's a good - way to start. -*/ - -#include <string.h> -#include <stdio.h> -#include "Options.h" -#include "Message.h" - - -class PluginDialogBox; -class Post_View; -class GMSH_Plugin -{ -public : - /*output file name*/ - char OutputFileName[256]; - /*input file name*/ - char InputFileName[256]; - /* a dialog box for user interface */ - PluginDialogBox *dialogBox; - /*this is there for internal use, this variable will be - used by the PluginManager, just forget it*/ - void *hlib; - /* 3 kind of plugins, one for cad, one for mesh, one for postpro*/ - typedef enum GMSH_PLUGIN_TYPE {GMSH_CAD_PLUGIN, - GMSH_MESH_PLUGIN, - GMSH_POST_PLUGIN, - GMSH_SOLVE_PLUGIN}; - /* returns the type of plugin for downcasting GMSH_Plugin into - GMSH_CAD_Plugin, GMSH_Mesh_Plugin and GMSH_Post_Plugin */ - virtual GMSH_PLUGIN_TYPE getType() const = 0; - virtual void getName (char *name) const = 0; - virtual void getInfos (char *author, - char *copyright, - char *help_text) const = 0; - /* When an error is thrown by the plugin, the plugin manager - will show the message and hopefully continue */ - virtual void CatchErrorMessage (char *errorMessage) const = 0; - /* gmsh style option, ca be loaded, saved and set*/ - virtual int getNbOptions() const = 0; - virtual StringXNumber *GetOption (int iopt) = 0; - virtual void Save() = 0; - virtual void Run() = 0; -}; - -/* Base class for Post-Processing Plugins - The user can either modify or duplicate - a Post_View */ -class GMSH_Post_Plugin : public GMSH_Plugin -{ - protected: - Post_View *processed; -public: - inline GMSH_PLUGIN_TYPE getType() const - {return GMSH_Plugin::GMSH_POST_PLUGIN;} - /* If returned pointer is the same as the argument, then view is simply modified, - else, a new view is added in the view list */ - virtual Post_View *execute (Post_View *) = 0; -}; - -#endif - - - - diff --git a/Plugin/PluginManager.h b/Plugin/PluginManager.h deleted file mode 100644 index 1565d683e3710f38a50a783b7b327b8c9ca7bf02..0000000000000000000000000000000000000000 --- a/Plugin/PluginManager.h +++ /dev/null @@ -1,67 +0,0 @@ -#ifndef _PLUGINMANAGER_H_ -#define _PLUGINMANAGER_H_ -/* - The one who intend to create a plugin for gmsh have to - -) Create a dynamin lib (.so) containing 1 symbols - GMSH_Plugin * GMSH_RegisterPlugin (); - -) When there is an unacceptable error in the plugin, - just throw this, the plugin manager will be able to - catch the exception. -*/ - -#include <map> -#include <iosfwd> - -class GMSH_Plugin; -struct ltstrpg -{ - bool operator()(const char* s1, const char* s2) const - { - return strcmp(s1, s2) < 0; - } -}; - -class GMSH_PluginManager -{ - GMSH_PluginManager(); - static GMSH_PluginManager *instance; - std::map<const char*,GMSH_Plugin*,ltstrpg> allPlugins; -public : - virtual ~GMSH_PluginManager(); - typedef std::map<const char*,GMSH_Plugin*,ltstrpg>::iterator iter; -/** - Registering all default plugins that are in $(GMSHPLUGINSHOME) - In fact, we will load all .so files in dir $(GMSHPLUGINSHOME) - - In fact, loading a .so (or a .o) is not what is usually called a - 'plugin'. This is a 'module'. A plugin is an _executable_, but - can only be executed from inside another program... CG - */ - void RegisterDefaultPlugins(); - static GMSH_PluginManager *Instance(); - /** Dynamically add a plugin pluginName.so in dirName*/ - void AddPlugin(char *dirName, char *pluginName); - // uninstall a given plugin - void UninstallPlugin (char *pluginName); - // set an option to a value in plugin named pluginName - void SetPluginOption (char *pluginName, char *option, double value); - void SetPluginOption (char *pluginName, char *option, char * value); - // iterator on plugins - inline iter begin() {return allPlugins.begin();} - inline iter end() {return allPlugins.end();} - // find a plugin named pluginName - GMSH_Plugin *find(char *pluginName); - // perform an action on the plugin - // default action are Run and Save - // other plugins may perform other actions - void Action (char *pluginMane , char *action , void *data); -}; -#endif - - - - - - - - diff --git a/Plugin/Skin.cpp b/Plugin/Skin.cpp deleted file mode 100644 index 045def54c6c03abf5b5619b61c3930ba777fe305..0000000000000000000000000000000000000000 --- a/Plugin/Skin.cpp +++ /dev/null @@ -1,195 +0,0 @@ -// $Id: Skin.cpp,v 1.8 2001-08-11 23:25:50 geuzaine Exp $ - -#include "Plugin.h" -#include "Skin.h" -#include "List.h" -#include "Tree.h" -#include "Views.h" -#include "Context.h" -#include "Malloc.h" - -extern Context_T CTX; - -StringXNumber SkinOptions_Number[] = { - { GMSH_FULLRC, "iView" , NULL , -1. } -}; - -extern "C" -{ - GMSH_Plugin *GMSH_RegisterSkinPlugin () - { - return new GMSH_SkinPlugin(); - } -} - -GMSH_SkinPlugin::GMSH_SkinPlugin() -{ -} - -void GMSH_SkinPlugin::getName(char *name) const -{ - strcpy(name,"Skin"); -} - -void GMSH_SkinPlugin::getInfos(char *author, char *copyright, char *help_text) const -{ - strcpy(author, "C. Geuzaine (geuz@geuz.org)"); - strcpy(copyright, "DGR (www.multiphysics.com)"); - strcpy(help_text, - "Gets the skin (i.e. the boundary) of a view,\n" - "eliminating all interior drawing).\n" - "Script name: Plugin(Skin).\n"); -} - -int GMSH_SkinPlugin::getNbOptions() const -{ - return sizeof(SkinOptions_Number)/sizeof(StringXNumber); -} - -StringXNumber *GMSH_SkinPlugin:: GetOption (int iopt) -{ - return &SkinOptions_Number[iopt]; -} - -void GMSH_SkinPlugin::CatchErrorMessage (char *errorMessage) const -{ - strcpy(errorMessage,"Skin failed..."); -} - - -static List_T * List; -static int * NbList, NbNod, NbComp, NbTime; - -typedef struct{ - double Coord[9]; - double *Val; -} Elm; - -static int fcmpElm(const void *a, const void *b){ - Elm *e1=(Elm*)a, *e2=(Elm*)b; - double s1, s2, TOL=CTX.lc*1.e-6; - int i; - - s1 = s2 = 0.0 ; - for(i=0;i<NbNod-1;i++){ s1 += e1->Coord[i]; s2 += e2->Coord[i]; } - if(s1-s2 > TOL) return 1; else if(s1-s2 < -TOL) return -1; - s1 = s2 = 0.0 ; - for(i=0;i<NbNod-1;i++){ s1 += e1->Coord[NbNod-1+i]; s2 += e2->Coord[NbNod-1+i]; } - if(s1-s2 > TOL) return 1; else if(s1-s2 < -TOL) return -1; - s1 = s2 = 0.0 ; - for(i=0;i<NbNod-1;i++){ s1 += e1->Coord[2*(NbNod-1)+i]; s2 += e2->Coord[2*(NbNod-1)+i]; } - if(s1-s2 > TOL) return 1; else if(s1-s2 < -TOL) return -1; - - return 0; -} - -static void getElm(int *Nod, double *Coord, double *Val, Elm *Elm){ - int i, j, k; - Elm->Val = (double*)Malloc((NbNod-1)*NbComp*NbTime*sizeof(double)); - for(i=0; i<NbNod-1; i++) Elm->Coord[i] = Coord[Nod[i]]; //x - for(i=0; i<NbNod-1; i++) Elm->Coord[NbNod-1+i] = Coord[NbNod + Nod[i]]; //y - for(i=0; i<NbNod-1; i++) Elm->Coord[2*(NbNod-1)+i] = Coord[2*NbNod + Nod[i]]; //z - for(i=0; i<NbTime; i++) - for(j=0; j<NbNod-1; j++) - for(k=0; k<NbComp; k++) - Elm->Val[(NbNod-1)*NbComp*i+NbComp*j+k] = - Val[NbNod*NbComp*i+NbComp*Nod[j]+k]; -} - -static void addInView(void *a, void *b){ - int i, k; - Elm *e = (Elm*)a; - for(i=0; i<3*(NbNod-1); i++) List_Add(List, &e->Coord[i]); - for(i=0; i<NbTime; i++) - for(k=0;k<(NbNod-1)*NbComp;k++) - List_Add(List, &e->Val[(NbNod-1)*NbComp*i+k]); - Free(e->Val); - (*NbList)++; -} - -static void skinSimplex(List_T *Simp, int NbSimp){ - double *Coords, *Vals; - int i, j; - int FacesTet[4][3] = {{0,1,2},{0,1,3},{0,2,3},{1,2,3}}; - int EdgesTri[3][2] = {{0,1},{1,2},{2,0}}; - Elm e, *pe; - - Tree_T * Skin = Tree_Create(sizeof(Elm), fcmpElm); - for(i = 0 ; i < List_Nbr(Simp) ; i+=NbSimp){ - Coords = (double*)List_Pointer_Fast(Simp,i); - Vals = (double*)List_Pointer_Fast(Simp,i+3*NbNod); - for(j=0 ; j<NbNod ; j++){ - getElm(NbNod == 4 ? FacesTet[j] : EdgesTri[j],Coords,Vals,&e); - if(!(pe=(Elm*)Tree_PQuery(Skin, &e))) - Tree_Add(Skin, &e); - else{ - Free(pe->Val); - Free(e.Val); - Tree_Suppress(Skin, &e); - } - } - } - Tree_Action(Skin, addInView); - Tree_Delete(Skin); -} - -extern List_T * Post_ViewList; - -Post_View *GMSH_SkinPlugin::execute (Post_View *v) -{ - Post_View *vv, *View; - - int iView = (int)SkinOptions_Number[0].def; - - if(v && iView < 0) - vv = v; - else{ - if(!v && iView < 0) iView = 0; - if(!(vv = (Post_View*)List_Pointer_Test(Post_ViewList,iView))){ - Msg(WARNING,"View[%d] does not exist",iView); - return 0; - } - } - - if(vv->NbSS || vv->NbVS || vv->NbST || vv->NbVT){ - View = BeginView(1); - NbTime = vv->NbTimeStep; - if(vv->NbSS){ - List = View->ST; NbList = &View->NbST; NbNod = 4; NbComp = 1; - skinSimplex(vv->SS, List_Nbr(vv->SS) / vv->NbSS); - } - if(vv->NbVS){ - List = View->VT; NbList = &View->NbVT; NbNod = 4; NbComp = 3; - skinSimplex(vv->VS, List_Nbr(vv->VS) / vv->NbVS) ; - } - if(vv->NbST){ - List = View->SL; NbList = &View->NbSL; NbNod = 3; NbComp = 1; - skinSimplex(vv->ST, List_Nbr(vv->ST) / vv->NbST); - } - if(vv->NbVT){ - List = View->VL; NbList = &View->NbVL; NbNod = 3; NbComp = 3; - skinSimplex(vv->VT, List_Nbr(vv->VT) / vv->NbVT) ; - } - if(View->NbST || View->NbVT || View->NbSL || View->NbVL){ - char name[1024], filename[1024]; - sprintf(name,"skin-%s",vv->Name); - sprintf(filename,"skin-%s",vv->FileName); - EndView(View, 1, filename, name); - Msg(INFO, "Created view '%s'", name); - return View; - } - else - FreeView(View->Index); - } - - return 0; -} - -void GMSH_SkinPlugin::Run () -{ - execute(0); -} - -void GMSH_SkinPlugin::Save () -{ -} diff --git a/Plugin/Skin.h b/Plugin/Skin.h deleted file mode 100644 index 9f9368d175c9e290a36bfc2736d20c3175a1529a..0000000000000000000000000000000000000000 --- a/Plugin/Skin.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef _SKIN_H_ -#define _SKIN_H - -extern "C" -{ - GMSH_Plugin *GMSH_RegisterSkinPlugin (); -} - -class GMSH_SkinPlugin : public GMSH_Post_Plugin -{ -public: - GMSH_SkinPlugin(); - virtual void Run(); - virtual void Save(); - virtual void getName (char *name) const; - virtual void getInfos (char *author, - char *copyright, - char *help_text) const; - virtual void CatchErrorMessage (char *errorMessage) const; - virtual int getNbOptions() const; - virtual StringXNumber* GetOption (int iopt); - virtual Post_View *execute (Post_View *); -}; -#endif diff --git a/Plugin/Smooth.cpp b/Plugin/Smooth.cpp deleted file mode 100644 index 442f8f92f7ea8b9d3a05298c4b42b22639029bfd..0000000000000000000000000000000000000000 --- a/Plugin/Smooth.cpp +++ /dev/null @@ -1,82 +0,0 @@ -// $Id: Smooth.cpp,v 1.6 2001-08-06 11:39:22 geuzaine Exp $ - -#include "Plugin.h" -#include "Smooth.h" -#include "List.h" -#include "Views.h" - -StringXNumber SmoothOptions_Number[] = { - { GMSH_FULLRC, "iView" , NULL , -1. } -}; - -extern "C" -{ - GMSH_Plugin *GMSH_RegisterSmoothPlugin () - { - return new GMSH_SmoothPlugin(); - } -} - - -GMSH_SmoothPlugin::GMSH_SmoothPlugin() -{ -} - -void GMSH_SmoothPlugin::getName(char *name) const -{ - strcpy(name,"Smooth"); -} - -void GMSH_SmoothPlugin::getInfos(char *author, char *copyright, char *help_text) const -{ - strcpy(author, "C. Geuzaine (geuz@geuz.org)"); - strcpy(copyright, "DGR (www.multiphysics.com)"); - strcpy(help_text, - "Smoothes a discontinuous view by averaging all the values at each node.\n" - "Script name: Plugin(Smooth)."); -} - -int GMSH_SmoothPlugin::getNbOptions() const -{ - return sizeof(SmoothOptions_Number)/sizeof(StringXNumber); -} - -StringXNumber *GMSH_SmoothPlugin:: GetOption (int iopt) -{ - return &SmoothOptions_Number[iopt]; -} - -void GMSH_SmoothPlugin::CatchErrorMessage (char *errorMessage) const -{ - strcpy(errorMessage,"Smooth failed..."); -} - -extern List_T *Post_ViewList; - -Post_View *GMSH_SmoothPlugin::execute (Post_View *v) -{ - Post_View *vv; - int iView = (int)SmoothOptions_Number[0].def; - - if(v && iView < 0) - vv = v; - else{ - if(!v && iView < 0) iView = 0; - if(!(vv = (Post_View*)List_Pointer_Test(Post_ViewList,iView))){ - Msg(WARNING,"View[%d] does not exist",iView); - return 0; - } - } - - vv->smooth(); - return vv; -} - -void GMSH_SmoothPlugin::Run () -{ - execute(0); -} - -void GMSH_SmoothPlugin::Save () -{ -} diff --git a/Plugin/Smooth.h b/Plugin/Smooth.h deleted file mode 100644 index 647656d2c9cc47c4235735cabca9c58c1bb7d702..0000000000000000000000000000000000000000 --- a/Plugin/Smooth.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef _SMOOTH_H_ -#define _SMOOTH_H - -extern "C" -{ - GMSH_Plugin *GMSH_RegisterSmoothPlugin (); -} - -class GMSH_SmoothPlugin : public GMSH_Post_Plugin -{ -public: - GMSH_SmoothPlugin(); - virtual void Run(); - virtual void Save(); - virtual void getName (char *name) const; - virtual void getInfos (char *author, - char *copyright, - char *help_text) const; - virtual void CatchErrorMessage (char *errorMessage) const; - virtual int getNbOptions() const; - virtual StringXNumber* GetOption (int iopt); - virtual Post_View *execute (Post_View *); -}; -#endif diff --git a/Plugin/Transform.cpp b/Plugin/Transform.cpp deleted file mode 100644 index dbaeec60b3808f6718681fef63f797d1ac254b0d..0000000000000000000000000000000000000000 --- a/Plugin/Transform.cpp +++ /dev/null @@ -1,103 +0,0 @@ -// $Id: Transform.cpp,v 1.7 2001-08-09 20:53:23 geuzaine Exp $ - -#include "Plugin.h" -#include "Transform.h" -#include "List.h" -#include "Views.h" - -StringXNumber TransformOptions_Number[] = { - { GMSH_FULLRC, "A11" , NULL , 1. }, - { GMSH_FULLRC, "A12" , NULL , 0. }, - { GMSH_FULLRC, "A13" , NULL , 0. }, - { GMSH_FULLRC, "A21" , NULL , 0. }, - { GMSH_FULLRC, "A22" , NULL , 1. }, - { GMSH_FULLRC, "A23" , NULL , 0. }, - { GMSH_FULLRC, "A31" , NULL , 0. }, - { GMSH_FULLRC, "A32" , NULL , 0. }, - { GMSH_FULLRC, "A33" , NULL , 1. }, - { GMSH_FULLRC, "iView" , NULL , -1. } -}; - -extern "C" -{ - GMSH_Plugin *GMSH_RegisterTransformPlugin () - { - return new GMSH_TransformPlugin (); - } -} - - -GMSH_TransformPlugin::GMSH_TransformPlugin() -{ -} - -void GMSH_TransformPlugin::getName(char *name) const -{ - strcpy(name,"Transform"); -} - -void GMSH_TransformPlugin::getInfos(char *author, char *copyright, char *help_text) const -{ - strcpy(author, "C. Geuzaine (geuz@geuz.org)"); - strcpy(copyright, "DGR (www.multiphysics.com)"); - strcpy(help_text, - "Transforms a view by the matrix [ [A11 A12 A13] [A21 A22 A23] [A31 A32 A33] ].\n" - "Script name: Plugin(Transform)."); -} - -int GMSH_TransformPlugin::getNbOptions() const -{ - return sizeof(TransformOptions_Number)/sizeof(StringXNumber); -} - -StringXNumber *GMSH_TransformPlugin:: GetOption (int iopt) -{ - return &TransformOptions_Number[iopt]; -} - -void GMSH_TransformPlugin::CatchErrorMessage (char *errorMessage) const -{ - strcpy(errorMessage,"Transform failed..."); -} - -extern List_T *Post_ViewList; - -Post_View *GMSH_TransformPlugin::execute (Post_View *v) -{ - Post_View *vv; - double mat[3][3]; - - mat[0][0] = TransformOptions_Number[0].def; - mat[0][1] = TransformOptions_Number[1].def; - mat[0][2] = TransformOptions_Number[2].def; - mat[1][0] = TransformOptions_Number[3].def; - mat[1][1] = TransformOptions_Number[4].def; - mat[1][2] = TransformOptions_Number[5].def; - mat[2][0] = TransformOptions_Number[6].def; - mat[2][1] = TransformOptions_Number[7].def; - mat[2][2] = TransformOptions_Number[8].def; - - int iView = (int)TransformOptions_Number[9].def; - - if(v && iView < 0) - vv = v; - else{ - if(!v && iView < 0) iView = 0; - if(!(vv = (Post_View*)List_Pointer_Test(Post_ViewList,iView))){ - Msg(WARNING,"View[%d] does not exist",iView); - return 0; - } - } - - vv->transform(mat); - return vv; -} - -void GMSH_TransformPlugin::Run () -{ - execute(0); -} - -void GMSH_TransformPlugin::Save () -{ -} diff --git a/Plugin/Transform.h b/Plugin/Transform.h deleted file mode 100644 index 7bfcb589c2178e24617005f72dc20975803d22f2..0000000000000000000000000000000000000000 --- a/Plugin/Transform.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef _TRANSFORM_H_ -#define _TRANSFORM_H - -extern "C" -{ - GMSH_Plugin *GMSH_RegisterTransformPlugin (); -} - -class GMSH_TransformPlugin : public GMSH_Post_Plugin -{ -public: - GMSH_TransformPlugin(); - virtual void Run(); - virtual void Save(); - virtual void getName (char *name) const; - virtual void getInfos (char *author, - char *copyright, - char *help_text) const; - virtual void CatchErrorMessage (char *errorMessage) const; - virtual int getNbOptions() const; - virtual StringXNumber* GetOption (int iopt); - virtual Post_View *execute (Post_View *); -}; -#endif diff --git a/Plugin/ideas_for_new_plugins b/Plugin/ideas_for_new_plugins deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/archives/Makefile b/archives/Makefile deleted file mode 100644 index 67980b35b0a6870d3df3ae8509c3177c9e37a859..0000000000000000000000000000000000000000 --- a/archives/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -# $Id: Makefile,v 1.2 2000-11-25 15:26:12 geuzaine Exp $ - -purge: - $(RM) $(RMFLAGS) *~ - diff --git a/benchmarks/1d/ligne.geo b/benchmarks/1d/ligne.geo deleted file mode 100644 index a3f4b3bc95db336b61cc751152228925eac2a4e8..0000000000000000000000000000000000000000 --- a/benchmarks/1d/ligne.geo +++ /dev/null @@ -1,3 +0,0 @@ -Point(1) = {0.0,0.0,0.0,.1}; -Point(2) = {1,0.0,0.0,.1}; -Line(1) = {1,2}; diff --git a/benchmarks/2d/Square-01.geo b/benchmarks/2d/Square-01.geo deleted file mode 100644 index 4f234fc01ac972173fc7c9de2e23a2e7923c3d25..0000000000000000000000000000000000000000 --- a/benchmarks/2d/Square-01.geo +++ /dev/null @@ -1,16 +0,0 @@ -/****************************** -Square uniformly meshed -******************************/ -lc = .49999; -Point(1) = {0.0,0.0,0,lc}; -Point(2) = {1,0.0,0,lc}; -Point(3) = {1,1,0,lc}; -Point(4) = {0,1,0,lc}; -Line(1) = {3,2}; -Line(2) = {2,1}; -Line(3) = {1,4}; -Line(4) = {4,3}; -Line Loop(5) = {1,2,3,4}; -Plane Surface(6) = {5}; -Attractor Point{2} = {0.05,0.05,2}; -Mesh.Algorithm = 2; diff --git a/benchmarks/2d/Square-02.geo b/benchmarks/2d/Square-02.geo deleted file mode 100644 index d1b5976cd62d242edd90ac51429d77eaa67ebda9..0000000000000000000000000000000000000000 --- a/benchmarks/2d/Square-02.geo +++ /dev/null @@ -1,15 +0,0 @@ -/****************************** -Square non uniformly -meshed -******************************/ -lc = .1; -Point(1) = {0.0,0.0,0,lc*.1}; -Point(2) = {1,0.0,0,lc}; -Point(3) = {1,1,0,lc}; -Point(4) = {0,1,0,lc}; -Line(1) = {3,2}; -Line(2) = {2,1}; -Line(3) = {1,4}; -Line(4) = {4,3}; -Line Loop(5) = {1,2,3,4}; -Plane Surface(6) = {5}; diff --git a/benchmarks/2d/Square-03.geo b/benchmarks/2d/Square-03.geo deleted file mode 100644 index b303fff71b5032ba2f4dfbfbb591ec18f1e7ef78..0000000000000000000000000000000000000000 --- a/benchmarks/2d/Square-03.geo +++ /dev/null @@ -1,16 +0,0 @@ -/****************************** -Square uniformly meshed -******************************/ -lc = .49999; -Point(1) = {0.0,0.0,0,lc}; -Point(2) = {1,0.0,0,lc}; -Point(3) = {1,1,0,lc}; -Point(4) = {0,1,0,lc}; -Point(5) = {0,2,0,lc}; -Line(1) = {3,2}; -Line(2) = {2,1}; -Line(3) = {1,4}; -Line(4) = {4,3}; -Line Loop(5) = {1,2,3,4}; -Plane Surface(6) = {5}; -Line(7) = {4,5}; diff --git a/benchmarks/2d/Square-Attr1.geo b/benchmarks/2d/Square-Attr1.geo deleted file mode 100644 index 60882900118181db67f1223df2559234fca66282..0000000000000000000000000000000000000000 --- a/benchmarks/2d/Square-Attr1.geo +++ /dev/null @@ -1,19 +0,0 @@ -/****************************** -Square uniformly meshed -******************************/ -lc = .1; -Point(1) = {0.0,0.0,0,lc}; -Point(2) = {1,0.0,0,lc}; -Point(3) = {1,1,0,lc}; -Point(4) = {0,1,0,lc}; -Line(1) = {3,2}; -Line(2) = {2,1}; -Line(3) = {1,4}; -Line(4) = {4,3}; -Line Loop(5) = {1,2,3,4}; -Plane Surface(6) = {5}; -Point(11) = {0.5,0.5,-1,lc}; -Point(22) = {0.5,0.5,1,lc}; -Line(5) = {11,22}; -Attractor Line{5} = {1,0.1,7}; -Mesh.Algorithm = 2; diff --git a/benchmarks/2d/Square-Attr2.geo b/benchmarks/2d/Square-Attr2.geo deleted file mode 100644 index 31609c461c19c30080a3bb81cfa868be10f2d811..0000000000000000000000000000000000000000 --- a/benchmarks/2d/Square-Attr2.geo +++ /dev/null @@ -1,36 +0,0 @@ -/****************************** -Square uniformly meshed -******************************/ -lc = .1; -Point(1) = {0.0,0.0,0,lc}; -Point(2) = {1,0.0,0,lc}; -Point(3) = {1,1,0,lc}; -Point(4) = {0,1,0,lc}; -Line(1) = {3,2}; -Line(2) = {2,1}; -Line(3) = {1,4}; -Line(4) = {4,3}; -Line Loop(5) = {1,2,3,4}; -Plane Surface(6) = {5}; -e = .03; -Point(11) = {-.2,.5,0,lc}; -Point(12) = {.2,.5,0,lc}; -Point(13) = {.5,.8-e,0,lc}; -Point(14) = { (.8)-(2*e),.5,0,lc}; -Point(15) = { .5,(.2)+(3*e),0,lc}; -Point(16) = {.2+(4*e),.5,0,lc}; -Point(17) = {.5,.8-(5*e),0,lc}; -Point(18) = { .8-(6*e),.5,0,lc}; -Point(19) = { .5,.2+(7*e),0,lc}; -Point(20) = {.2+(8*e),.5,0,lc}; -Line(7) = {11,12}; -Line(8) = {12,13}; -Line(9) = {13,14}; -Line(10) = {14,15}; -Line(11) = {15,16}; -Line(12) = {16,17}; -Line(13) = {17,18}; -Line(14) = {18,19}; -Line(15) = {19,20}; -Attractor Line{7,8,9,10,11,12,13,14,15} = {.1,0.01,10} ; -Mesh.Algorithm = 2; diff --git a/benchmarks/2d/Square-Attr3.geo b/benchmarks/2d/Square-Attr3.geo deleted file mode 100644 index a71a2146de840f5100ad4377cfe075bdb53cdfaf..0000000000000000000000000000000000000000 --- a/benchmarks/2d/Square-Attr3.geo +++ /dev/null @@ -1,18 +0,0 @@ -/****************************** -Square uniformly meshed -******************************/ -lc = .1; -Point(1) = {0.0,0.0,0,lc}; -Point(2) = {1,0.0,0,lc}; -Point(3) = {1,1,0,lc}; -Point(4) = {0,1,0,lc}; -Line(1) = {3,2}; -Line(2) = {2,1}; -Line(3) = {1,4}; -Line(4) = {4,3}; -Line Loop(5) = {1,2,3,4}; -Plane Surface(6) = {5}; -Line(5) = {3,1}; -Attractor Line{5} = {1,0.01,3}; -Mesh.Algorithm = 2; - diff --git a/benchmarks/2d/Square-Attr4.geo b/benchmarks/2d/Square-Attr4.geo deleted file mode 100644 index e15277cc7318b8a048b6929fcc5ee66e98b9ab63..0000000000000000000000000000000000000000 --- a/benchmarks/2d/Square-Attr4.geo +++ /dev/null @@ -1,18 +0,0 @@ -/****************************** -Square uniformly meshed -******************************/ -lc = .149999; -Point(1) = {0.0,0.0,0,lc}; -Point(2) = {1,0.0,0,lc}; -Point(3) = {1,1,0,lc}; -Point(4) = {0,1,0,lc}; -Line(1) = {3,2}; -Line(2) = {2,1}; -Line(3) = {1,4}; -Line(4) = {4,3}; -Point(55) = {0.2,.5,0,lc}; -Line Loop(5) = {1,2,3,4}; -Plane Surface(6) = {5}; -Attractor Point {55} = {.01,.1,3.0}; -Mesh.Algorithm = 2; - diff --git a/benchmarks/2d/conge.geo b/benchmarks/2d/conge.geo deleted file mode 100644 index b7cb6024f36a6b422c713ffc6f31abac2ceb52ac..0000000000000000000000000000000000000000 --- a/benchmarks/2d/conge.geo +++ /dev/null @@ -1,80 +0,0 @@ -unit = 1.0e-02 ; - -e1 = 4.5 * unit ; -e2 = 6.0 * unit / 2.0 ; -e3 = 5.0 * unit / 2.0 ; -h1 = 5.0 * unit ; -h2 = 10.0 * unit ; -h3 = 5.0 * unit ; -h4 = 2.0 * unit ; -h5 = 4.5 * unit ; -R1 = 1.0 * unit ; -R2 = 1.5 * unit ; -r = 1.0 * unit ; -ccos = (-h5*R1+e2* (h5*h5+e2*e2-R1*R1)^0.5) / (h5*h5+e2*e2) ; -ssin = ( 1.0 - ccos*ccos )^0.5 ; - -Lc1 = 0.01 ; -Lc2 = 0.003 ; - -Point(1) = { -e1-e2, 0.0 , 0.0 , Lc1}; -Point(2) = { -e1-e2, h1 , 0.0 , Lc1}; -Point(3) = { -e3-r , h1 , 0.0 , Lc2}; -Point(4) = { -e3-r , h1+r , 0.0 , Lc2}; -Point(5) = { -e3 , h1+r , 0.0 , Lc2}; -Point(6) = { -e3 , h1+h2, 0.0 , Lc1}; -Point(7) = { e3 , h1+h2, 0.0 , Lc1}; -Point(8) = { e3 , h1+r , 0.0 , Lc2}; -Point(9) = { e3+r , h1+r , 0.0 , Lc2}; -Point(10)= { e3+r , h1 , 0.0 , Lc2}; -Point(11)= { e1+e2, h1 , 0.0 , Lc1}; -Point(12)= { e1+e2, 0.0 , 0.0 , Lc1}; -Point(13)= { e2 , 0.0 , 0.0 , Lc1}; - -Point(14)= { R1 / ssin , h5+R1*ccos, 0.0 , Lc2}; -Point(15)= { 0.0 , h5 , 0.0 , Lc2}; -Point(16)= { -R1 / ssin , h5+R1*ccos, 0.0 , Lc2}; -Point(17)= { -e2 , 0.0 , 0.0 , Lc1}; - -Point(18)= { -R2 , h1+h3 , 0.0 , Lc2}; -Point(19)= { -R2 , h1+h3+h4, 0.0 , Lc2}; -Point(20)= { 0.0 , h1+h3+h4, 0.0 , Lc2}; -Point(21)= { R2 , h1+h3+h4, 0.0 , Lc2}; -Point(22)= { R2 , h1+h3 , 0.0 , Lc2}; -Point(23)= { 0.0 , h1+h3 , 0.0 , Lc2}; - -Point(24)= { 0 , h1+h3+h4+R2, 0.0 , Lc2}; -Point(25)= { 0 , h1+h3-R2, 0.0 , Lc2}; - -Line(1) = {1 ,17}; /* ux=uy=0 */ -Line(2) = {17,16}; -Circle(3) = {14,15,16}; -Line(4) = {14,13}; -Line(5) = {13,12}; /* ux=uy=0 */ -Line(6) = {12,11}; -Line(7) = {11,10}; -Circle(8) = { 8, 9,10}; -Line(9) = { 8, 7}; -Line(10) = { 7, 6}; /* T=10000 N */ -Line(11) = { 6, 5}; -Circle(12) = { 3, 4, 5}; -Line(13) = { 3, 2}; -Line(14) = { 2, 1}; - -Line(15) = {18,19}; -Circle(16) = {21,20,24}; -Circle(17) = {24,20,19}; -Circle(18) = {18,23,25}; -Circle(19) = {25,23,22}; -Line(20) = {21,22}; - -Line Loop(21) = {17,-15,18,19,-20,16}; -Plane Surface(22) = {21}; -Line Loop(23) = {11,-12,13,14,1,2,-3,4,5,6,7,-8,9,10}; -Plane Surface(24) = {23,21}; - - - - - - diff --git a/benchmarks/2d/fissure.geo b/benchmarks/2d/fissure.geo deleted file mode 100644 index 1b33e91c18129d5210ca91f18319cb14a0ac2ea1..0000000000000000000000000000000000000000 --- a/benchmarks/2d/fissure.geo +++ /dev/null @@ -1,18 +0,0 @@ -eps = 1.e-3 ; - -Point(1) = {-1,-1,0,.1} ; -Point(2) = {-1,1,0,.1} ; -Point(3) = {1,-1,0,.1} ; -Point(4) = {1,1,0,.1} ; -Point(5) = {-1,0,0,.06} ; -Point(6) = {0,0,0,.03} ; -Point(7) = {-1,0+eps,0,.06} ; -Line(1) = {5,1}; -Line(2) = {1,3}; -Line(3) = {3,4}; -Line(4) = {4,2}; -Line(5) = {2,7}; -Line(6) = {7,6}; -Line(7) = {6,5}; -Line Loop(8) = {5,6,7,1,2,3,4}; -Plane Surface(9) = {8}; diff --git a/benchmarks/2d/function.geo b/benchmarks/2d/function.geo deleted file mode 100644 index 54ce6fe371ebc182eabebc44a88473947e50c5e3..0000000000000000000000000000000000000000 --- a/benchmarks/2d/function.geo +++ /dev/null @@ -1,59 +0,0 @@ -x = 0; -y = 0; -r = 1; -theloop = 0; - -Function myCircle - p1 = newp; - Point (p1) = {x,y,0,0.2}; - p2 = newp; - Point (p2) = {r+x,y,0,0.2}; - p3 = newp; - Point (p3) = {x,r+y,0,0.2}; - p4 = newp; - Point (p4) = {-r+x,y,0,0.2}; - p5 = newp; - Point (p5) = {x,-r+y,0,0.2}; - c1 = newreg; - Circle (c1) = {p2,p1,p3}; - c2 = newreg; - Circle (c2) = {p3,p1,p4}; - c3 = newreg; - Circle (c3) = {p4,p1,p5}; - c4 = newreg; - Circle (c4) = {p5,p1,p2}; - theloop = newreg; - Line Loop (theloop) = {c1,c2,c3,c4}; -Return - -x = 2; -y = 2; -Call myCircle; -/*loop,x,y and r should be parameters*/ -loop1 = theloop; -x = -2; -y = 2; -Call myCircle; -loop2 = theloop; -x = 2; -y = -2; -Call myCircle; -loop3 = theloop; -x = -2; -y = -2; -Call myCircle; -loop4 = theloop; - -r = 5; -x = 0; -y = 0; -Call myCircle; -loop5 = theloop; - -Plane Surface(newreg) = {loop5,loop4,loop3,loop2,loop1}; -Line(10000) = {6,11}; -Attractor Line {10000} = {1,.03,1}; - -Mesh.Algorithm = 2 ; // This is the new 2D anisotropic algorithm - - diff --git a/benchmarks/2d/runner_simple_2d.geo b/benchmarks/2d/runner_simple_2d.geo deleted file mode 100644 index 4eaf6f51b1eb8685fe4fbcf37c5d0d7a005559d6..0000000000000000000000000000000000000000 --- a/benchmarks/2d/runner_simple_2d.geo +++ /dev/null @@ -1,119 +0,0 @@ -/*simple runner for 3d-studies; 07.07.1999/hm*/ - - -/*variables*/ -r=0.004; -a=0.005; -b=0.005; -m=0.010; -mh=0.020; - -h1=0.005; -h2=0.005; -h3=0.005; -h4=0.005; -hl = 0.012; -f =0.015; -l =0.040; - -lc1 = 0.001; - -/*points*/ - -Point(1) = {-r,0.0,0.0,lc1}; - -Point(2) = {0,0.0,0.0,lc1}; - -Point(3) = {+r,0.0,0.0,lc1}; -Point(4) = {r+a,0.0,0.0,lc1}; -Point(5) = {r+a+b,0.0,0.0,lc1}; -Point(6) = {r+a+b,-h4,0.0,lc1}; - -Point(11) = {-r,h1,0.0,lc1}; - -Point(13) = {+r,h1,0.0,lc1}; -Point(14) = {r+a,h2,0.0,lc1}; -Point(15) = {r+a+b,h3,0.0,lc1}; - -/*flange*/ - -Point(25) = {r+a+b+f,0,0.0,lc1}; -Point(26) = {r+a+b+f,h3,0.0,lc1}; -Point(27) = {r+a+b+f,-h4,0.0,lc1}; -Point(28) = {r+a+b+f,-hl,0.0,lc1}; - -/*laminate*/ - -Point(30) = {r+a+b+f+l,0.0,0.0,lc1}; -Point(31) = {r+a+b+f+l,h3,0.0,lc1}; -Point(32) = {r+a+b+f+l,-h4,0.0,lc1}; -Point(33) = {r+a+b+f+l,-hl,0.0,lc1}; - -/*lines*/ - -Circle(100) = {1,2,3}; - -Line(101) = {1,11}; -Line(102) = {11,13}; -Line(103) = {13,14}; -Line(104) = {14,15}; -Line(105) = {3,13}; -Line(106) = {3,4}; -Line(107) = {4,14}; -Line(108) = {4,5}; -Line(109) = {5,15}; - - - -Line(110) = {15,26}; -Line(111) = {5,25}; -Line(112) = {6,27}; -Line(113) = {5,6}; -Line(114) = {26,25}; -Line(115) = {25,27}; -Line(116) = {26,31}; -Line(117) = {25,30}; -Line(118) = {27,32}; -Line(119) = {31,30}; -Line(120) = {30,32}; - -Line(121) = {27,28}; -Line(122) = {28,33}; -Line(123) = {32,33}; - -Line Loop(300) = {-102,-101,100,105}; -Plane Surface(301) = {300}; -Line Loop(400) = {107,-103,-105,106}; -Plane Surface(401) = {400}; -Line Loop(402) = {109,-104,-107,108}; -Plane Surface(403) = {402}; - - -Line Loop(404) = {-114,-110,-109,111}; -Plane Surface(405) = {404}; -Line Loop(406) = {-112,-113,111,115}; -Plane Surface(407) = {406}; -Line Loop(408) = {117,-119,-116,114}; -Plane Surface(409) = {408}; -Line Loop(410) = {118,-120,-117,115}; -Plane Surface(411) = {410}; -Line Loop(412) = {118,123,-122,-121}; -Plane Surface(413) = {412}; - -/*mould*/ - -Point(511) = {-m,h1,0.0,lc1}; -Point(512) = {-m,h1-mh,0.0,lc1}; -Point(533) = {r+a+b+f+l,h1-mh,0.0,lc1}; - -Line(614) = {511,512}; -Line(615) = {511,11}; -Line(616) = {512,533}; -Line(617) = {533,33}; -/* -Line Loop(618) = {-617,-616,-614,615,-101,100,106,108,113,112,121,122,-617,-616,-614,615,-101,100,106,108,113,112};*/ - -Line Loop(618) = {-617,-616,-614,615,-101,100,106,108,113,112,121,122}; -Plane Surface(619) = {618}; - - diff --git a/benchmarks/2d/transfinite.geo b/benchmarks/2d/transfinite.geo deleted file mode 100644 index a3a0e36fada48474f3755b1ac29a21557697d41b..0000000000000000000000000000000000000000 --- a/benchmarks/2d/transfinite.geo +++ /dev/null @@ -1,34 +0,0 @@ - -// buggy with old mesh algo! - -l = .3; -l2 = .03; -Point(1) = {-2,-1,0,l}; -Point(2) = {-2,1,0,l2}; -Point(3) = {0,-1,0,l}; -Point(4) = {0,1,0,l}; -Point(5) = {-3,-2,0,l}; -Point(6) = {-3,2,0,l2}; -Point(7) = {1,-2,0,l}; -Point(8) = {1,2,0,l}; - -Line(1) = {6,8}; -Line(2) = {8,7}; -Line(3) = {7,5}; -Line(4) = {5,6}; -Line(5) = {2,1}; -Line(6) = {1,3}; -Line(7) = {3,4}; -Line(8) = {4,2}; - -Line Loop(9) = {5,6,7,8}; -Plane Surface(10) = {9}; - -Line Loop(11) = {2,3,4,1}; -Plane Surface(12) = {11,9}; - -Transfinite Line {5:8} = 10 Using Progression 5; - -Transfinite Surface{10} = {1,3,4,2}; -Recombine Surface {10} = 30; - diff --git a/benchmarks/2d/wing.geo b/benchmarks/2d/wing.geo deleted file mode 100644 index a255c6694556f2e7a807cafc69810dd82695b0f0..0000000000000000000000000000000000000000 --- a/benchmarks/2d/wing.geo +++ /dev/null @@ -1,1081 +0,0 @@ -scale = 1 ; - -lc1 = 5.e-3 *scale ; -lc2 = 1.e-2 *scale ; -lc3 = 10 *scale ; - -/* l'aile */ -Point(3895) = {1.177410e-02*scale,-2.768003e-03*scale,0*scale,lc1}; -Point(3897) = {1.081196e-02*scale,-3.794565e-03*scale,0*scale,lc1}; -Point(3896) = {1.040081e-02*scale,-4.225326e-03*scale,0*scale,lc1}; -Point(3968) = {9.501183e-03*scale,-5.167856e-03*scale,0*scale,lc1}; -Point(3995) = {8.172335e-03*scale,-6.541147e-03*scale,0*scale,lc1}; -Point(4003) = {6.820756e-03*scale,-7.914438e-03*scale,0*scale,lc1}; -Point(3857) = {5.454371e-03*scale,-9.287729e-03*scale,0*scale,lc1}; -Point(3856) = {3.534352e-03*scale,-1.119762e-02*scale,0*scale,lc1}; -Point(3860) = {7.877699e-04*scale,-1.389559e-02*scale,0*scale,lc1}; -Point(3861) = {-1.958812e-03*scale,-1.658843e-02*scale,0*scale,lc1}; -Point(3863) = {-4.705394e-03*scale,-1.930092e-02*scale,0*scale,lc1}; -Point(3864) = {-7.451976e-03*scale,-2.206110e-02*scale,0*scale,lc1}; -Point(3865) = {-1.019856e-02*scale,-2.490134e-02*scale,0*scale,lc1}; -Point(3866) = {-1.294514e-02*scale,-2.785668e-02*scale,0*scale,lc1}; -Point(3867) = {-1.569172e-02*scale,-3.097311e-02*scale,0*scale,lc1}; -Point(3868) = {-1.819787e-02*scale,-3.400697e-02*scale,0*scale,lc1}; -Point(3869) = {-1.843830e-02*scale,-3.430929e-02*scale,0*scale,lc1}; -Point(3870) = {-2.032098e-02*scale,-3.675355e-02*scale,0*scale,lc1}; -Point(3871) = {-2.233602e-02*scale,-3.950013e-02*scale,0*scale,lc1}; -Point(3872) = {-2.428062e-02*scale,-4.224671e-02*scale,0*scale,lc1}; -Point(3977) = {-2.615522e-02*scale,-4.499330e-02*scale,0*scale,lc1}; -Point(3877) = {-2.795526e-02*scale,-4.773988e-02*scale,0*scale,lc1}; -Point(3876) = {-2.966457e-02*scale,-5.048646e-02*scale,0*scale,lc1}; -Point(3878) = {-3.128951e-02*scale,-5.323304e-02*scale,0*scale,lc1}; -Point(3934) = {-3.282722e-02*scale,-5.597962e-02*scale,0*scale,lc1}; -Point(3873) = {-3.427526e-02*scale,-5.872621e-02*scale,0*scale,lc1}; -Point(3874) = {-3.563187e-02*scale,-6.147279e-02*scale,0*scale,lc1}; -Point(3875) = {-3.689577e-02*scale,-6.421937e-02*scale,0*scale,lc1}; -Point(3935) = {-3.803475e-02*scale,-6.696595e-02*scale,0*scale,lc1}; -Point(3880) = {-3.906585e-02*scale,-6.971253e-02*scale,0*scale,lc1}; -Point(3879) = {-3.999980e-02*scale,-7.245912e-02*scale,0*scale,lc1}; -Point(3881) = {-4.084348e-02*scale,-7.520570e-02*scale,0*scale,lc1}; -Point(3936) = {-4.159737e-02*scale,-7.795228e-02*scale,0*scale,lc1}; -Point(3882) = {-4.219350e-02*scale,-8.069886e-02*scale,0*scale,lc1}; -Point(3883) = {-4.268262e-02*scale,-8.344544e-02*scale,0*scale,lc1}; -Point(3885) = {-4.302180e-02*scale,-8.619203e-02*scale,0*scale,lc1}; -Point(3884) = {-4.315754e-02*scale,-8.815942e-02*scale,0*scale,lc1}; -Point(1218) = {-4.315754e-02*scale,-8.893861e-02*scale,0*scale,lc1}; -Point(3933) = {-4.315754e-02*scale,-8.955185e-02*scale,0*scale,lc1}; -Point(3996) = {-4.314894e-02*scale,-9.031190e-02*scale,0*scale,lc1}; -Point(3989) = {-4.310538e-02*scale,-9.168519e-02*scale,0*scale,lc1}; -Point(3990) = {-4.298693e-02*scale,-9.305848e-02*scale,0*scale,lc1}; -Point(3978) = {-4.281442e-02*scale,-9.443177e-02*scale,0*scale,lc1}; -Point(3979) = {-4.254831e-02*scale,-9.580506e-02*scale,0*scale,lc1}; -Point(3974) = {-4.215142e-02*scale,-9.717835e-02*scale,0*scale,lc1}; -Point(3973) = {-4.166490e-02*scale,-9.855164e-02*scale,0*scale,lc1}; -Point(3963) = {-4.107412e-02*scale,-9.992494e-02*scale,0*scale,lc1}; -Point(3947) = {-4.041096e-02*scale,-1.011964e-01*scale,0*scale,lc1}; -Point(3948) = {-4.035707e-02*scale,-1.012982e-01*scale,0*scale,lc1}; -Point(3904) = {-3.903767e-02*scale,-1.033356e-01*scale,0*scale,lc1}; -Point(3903) = {-3.766438e-02*scale,-1.048133e-01*scale,0*scale,lc1}; -Point(3946) = {-3.629109e-02*scale,-1.058804e-01*scale,0*scale,lc1}; -Point(3902) = {-3.491780e-02*scale,-1.066897e-01*scale,0*scale,lc1}; -Point(3901) = {-3.354451e-02*scale,-1.073184e-01*scale,0*scale,lc1}; -Point(3900) = {-3.217121e-02*scale,-1.078168e-01*scale,0*scale,lc1}; -Point(3908) = {-3.079792e-02*scale,-1.081973e-01*scale,0*scale,lc1}; -Point(3907) = {-2.942463e-02*scale,-1.084688e-01*scale,0*scale,lc1}; -Point(3951) = {-2.805134e-02*scale,-1.086029e-01*scale,0*scale,lc1}; -Point(3950) = {-2.667805e-02*scale,-1.086423e-01*scale,0*scale,lc1}; -Point(3847) = {-2.580700e-02*scale,-1.086440e-01*scale,0*scale,lc1}; -Point(3949) = {-2.667805e-02*scale,-1.088853e-01*scale,0*scale,lc1}; -Point(3952) = {-2.805134e-02*scale,-1.092658e-01*scale,0*scale,lc1}; -Point(3905) = {-2.942463e-02*scale,-1.096463e-01*scale,0*scale,lc1}; -Point(3906) = {-3.079792e-02*scale,-1.100268e-01*scale,0*scale,lc1}; -Point(3909) = {-3.217121e-02*scale,-1.104020e-01*scale,0*scale,lc1}; -Point(3969) = {-3.354451e-02*scale,-1.107749e-01*scale,0*scale,lc1}; -Point(3970) = {-3.491780e-02*scale,-1.111477e-01*scale,0*scale,lc1}; -Point(3997) = {-3.629109e-02*scale,-1.115205e-01*scale,0*scale,lc1}; -Point(3998) = {-3.766438e-02*scale,-1.118690e-01*scale,0*scale,lc1}; -Point(4004) = {-3.903767e-02*scale,-1.122095e-01*scale,0*scale,lc1}; -Point(3959) = {-4.041096e-02*scale,-1.125499e-01*scale,0*scale,lc1}; -Point(3960) = {-4.315754e-02*scale,-1.131897e-01*scale,0*scale,lc1}; -Point(3972) = {-4.590412e-02*scale,-1.137699e-01*scale,0*scale,lc1}; -Point(3984) = {-4.865071e-02*scale,-1.143079e-01*scale,0*scale,lc1}; -Point(3988) = {-5.139729e-02*scale,-1.147970e-01*scale,0*scale,lc1}; -Point(3961) = {-5.414387e-02*scale,-1.152035e-01*scale,0*scale,lc1}; -Point(3962) = {-5.689045e-02*scale,-1.155501e-01*scale,0*scale,lc1}; -Point(3937) = {-5.963703e-02*scale,-1.157358e-01*scale,0*scale,lc1}; -Point(3938) = {-6.238362e-02*scale,-1.158519e-01*scale,0*scale,lc1}; -Point(3886) = {-6.513020e-02*scale,-1.158332e-01*scale,0*scale,lc1}; -Point(3887) = {-6.787678e-02*scale,-1.156607e-01*scale,0*scale,lc1}; -Point(3888) = {-7.062336e-02*scale,-1.152790e-01*scale,0*scale,lc1}; -Point(3993) = {-7.199665e-02*scale,-1.150098e-01*scale,0*scale,lc1}; -Point(3994) = {-7.336994e-02*scale,-1.146075e-01*scale,0*scale,lc1}; -Point(3971) = {-7.474324e-02*scale,-1.141776e-01*scale,0*scale,lc1}; -Point(3918) = {-7.611653e-02*scale,-1.135965e-01*scale,0*scale,lc1}; -Point(3919) = {-7.748982e-02*scale,-1.129165e-01*scale,0*scale,lc1}; -Point(3920) = {-7.886311e-02*scale,-1.121014e-01*scale,0*scale,lc1}; -Point(3956) = {-8.023640e-02*scale,-1.111186e-01*scale,0*scale,lc1}; -Point(3955) = {-8.047561e-02*scale,-1.109113e-01*scale,0*scale,lc1}; -Point(3965) = {-8.160969e-02*scale,-1.098434e-01*scale,0*scale,lc1}; -Point(3966) = {-8.189452e-02*scale,-1.095380e-01*scale,0*scale,lc1}; -Point(3910) = {-8.297356e-02*scale,-1.081647e-01*scale,0*scale,lc1}; -Point(3913) = {-8.376570e-02*scale,-1.067914e-01*scale,0*scale,lc1}; -Point(3912) = {-8.435627e-02*scale,-1.054263e-01*scale,0*scale,lc1}; -Point(3911) = {-8.435982e-02*scale,-1.054181e-01*scale,0*scale,lc1}; -Point(3914) = {-8.478803e-02*scale,-1.040448e-01*scale,0*scale,lc1}; -Point(3915) = {-8.503641e-02*scale,-1.026715e-01*scale,0*scale,lc1}; -Point(3916) = {-8.516945e-02*scale,-1.012982e-01*scale,0*scale,lc1}; -Point(3917) = {-8.522183e-02*scale,-9.992494e-02*scale,0*scale,lc1}; -Point(3953) = {-8.512327e-02*scale,-9.855164e-02*scale,0*scale,lc1}; -Point(3954) = {-8.495463e-02*scale,-9.717835e-02*scale,0*scale,lc1}; -Point(3964) = {-8.467545e-02*scale,-9.580506e-02*scale,0*scale,lc1}; -Point(3975) = {-8.433113e-02*scale,-9.443177e-02*scale,0*scale,lc1}; -Point(3992) = {-8.387660e-02*scale,-9.305848e-02*scale,0*scale,lc1}; -Point(3991) = {-8.341194e-02*scale,-9.168519e-02*scale,0*scale,lc1}; -Point(3999) = {-8.280629e-02*scale,-9.031190e-02*scale,0*scale,lc1}; -Point(3939) = {-8.220063e-02*scale,-8.893861e-02*scale,0*scale,lc1}; -Point(3967) = {-8.076693e-02*scale,-8.619203e-02*scale,0*scale,lc1}; -Point(3987) = {-7.916546e-02*scale,-8.344544e-02*scale,0*scale,lc1}; -Point(3985) = {-7.886311e-02*scale,-8.298081e-02*scale,0*scale,lc1}; -Point(3986) = {-7.737820e-02*scale,-8.069886e-02*scale,0*scale,lc1}; -Point(4002) = {-7.542111e-02*scale,-7.795228e-02*scale,0*scale,lc1}; -Point(3922) = {-7.335979e-02*scale,-7.520570e-02*scale,0*scale,lc1}; -Point(4005) = {-7.112105e-02*scale,-7.245912e-02*scale,0*scale,lc1}; -Point(3851) = {-6.873828e-02*scale,-6.971253e-02*scale,0*scale,lc1}; -Point(3850) = {-6.372231e-02*scale,-6.421937e-02*scale,0*scale,lc1}; -Point(3853) = {-5.963703e-02*scale,-6.001430e-02*scale,0*scale,lc1}; -Point(3852) = {-5.414387e-02*scale,-5.469298e-02*scale,0*scale,lc1}; -Point(3849) = {-4.865071e-02*scale,-4.961204e-02*scale,0*scale,lc1}; -Point(3848) = {-4.315754e-02*scale,-4.465740e-02*scale,0*scale,lc1}; -Point(3921) = {-3.766438e-02*scale,-3.985542e-02*scale,0*scale,lc1}; -Point(3983) = {-3.491780e-02*scale,-3.750843e-02*scale,0*scale,lc1}; -Point(3982) = {-3.217121e-02*scale,-3.519259e-02*scale,0*scale,lc1}; -Point(3976) = {-2.942463e-02*scale,-3.289435e-02*scale,0*scale,lc1}; -Point(3929) = {-2.744807e-02*scale,-3.126039e-02*scale,0*scale,lc1}; -Point(3958) = {-2.667805e-02*scale,-3.062383e-02*scale,0*scale,lc1}; -Point(3928) = {-2.411032e-02*scale,-2.851380e-02*scale,0*scale,lc1}; -Point(3957) = {-2.393147e-02*scale,-2.836765e-02*scale,0*scale,lc1}; -Point(3927) = {-2.118489e-02*scale,-2.612321e-02*scale,0*scale,lc1}; -Point(3926) = {-1.843830e-02*scale,-2.390843e-02*scale,0*scale,lc1}; -Point(3925) = {-1.569172e-02*scale,-2.170681e-02*scale,0*scale,lc1}; -Point(3924) = {-1.294514e-02*scale,-1.952576e-02*scale,0*scale,lc1}; -Point(3932) = {-1.040573e-02*scale,-1.752748e-02*scale,0*scale,lc1}; -Point(3931) = {-1.019856e-02*scale,-1.736495e-02*scale,0*scale,lc1}; -Point(3930) = {-7.451976e-03*scale,-1.521330e-02*scale,0*scale,lc1}; -Point(3923) = {-4.705394e-03*scale,-1.307794e-02*scale,0*scale,lc1}; -Point(3862) = {-1.958812e-03*scale,-1.095092e-02*scale,0*scale,lc1}; -Point(3859) = {1.960946e-04*scale,-9.287729e-03*scale,0*scale,lc1}; -Point(3858) = {7.877699e-04*scale,-8.831063e-03*scale,0*scale,lc1}; -Point(3855) = {3.534352e-03*scale,-6.728705e-03*scale,0*scale,lc1}; -Point(3854) = {6.280934e-03*scale,-4.633175e-03*scale,0*scale,lc1}; -Point(3945) = {7.386845e-03*scale,-3.794565e-03*scale,0*scale,lc1}; -Point(3944) = {7.654225e-03*scale,-3.591811e-03*scale,0*scale,lc1}; -Point(3899) = {9.027516e-03*scale,-2.550448e-03*scale,0*scale,lc1}; -Point(3898) = {1.040081e-02*scale,-1.509310e-03*scale,0*scale,lc1}; -Point(3894) = {1.177410e-02*scale,-4.686545e-04*scale,0*scale,lc1}; -Point(3890) = {1.282184e-02*scale,3.253082e-04*scale,0*scale,lc1}; -Point(3893) = {1.314739e-02*scale,5.720012e-04*scale,0*scale,lc1}; -Point(3941) = {1.463351e-02*scale,1.698599e-03*scale,0*scale,lc1}; -Point(4000) = {1.644012e-02*scale,3.071890e-03*scale,0*scale,lc1}; -Point(3980) = {1.824674e-02*scale,4.445181e-03*scale,0*scale,lc1}; -Point(3846) = {1.892400e-02*scale,4.960000e-03*scale,0*scale,lc1}; -Point(3981) = {1.843389e-02*scale,4.445181e-03*scale,0*scale,lc1}; -Point(4001) = {1.712649e-02*scale,3.071890e-03*scale,0*scale,lc1}; -Point(3942) = {1.584524e-02*scale,1.698599e-03*scale,0*scale,lc1}; -Point(3940) = {1.460138e-02*scale,3.253082e-04*scale,0*scale,lc1}; -Point(3889) = {1.452068e-02*scale,2.362167e-04*scale,0*scale,lc1}; -Point(3892) = {1.335131e-02*scale,-1.047983e-03*scale,0*scale,lc1}; -Point(3891) = {1.314739e-02*scale,-1.270371e-03*scale,0*scale,lc1}; -Point(3943) = {1.209204e-02*scale,-2.421274e-03*scale,0*scale,lc1}; -Point(4063) = {4.498368e-02*scale,-9.287729e-03*scale,0*scale,lc1}; -Point(4062) = {4.610574e-02*scale,-6.541147e-03*scale,0*scale,lc1}; -Point(4061) = {4.755089e-02*scale,-3.794565e-03*scale,0*scale,lc1}; -Point(4114) = {4.934166e-02*scale,-1.047983e-03*scale,0*scale,lc1}; -Point(4153) = {5.143154e-02*scale,1.698599e-03*scale,0*scale,lc1}; -Point(4178) = {5.390637e-02*scale,4.445181e-03*scale,0*scale,lc1}; -Point(4179) = {5.571941e-02*scale,6.252892e-03*scale,0*scale,lc1}; -Point(4191) = {5.846599e-02*scale,8.699713e-03*scale,0*scale,lc1}; -Point(4203) = {6.121257e-02*scale,1.103796e-02*scale,0*scale,lc1}; -Point(4109) = {6.350284e-02*scale,1.268493e-02*scale,0*scale,lc1}; -Point(4202) = {6.670574e-02*scale,1.498818e-02*scale,0*scale,lc1}; -Point(4199) = {7.170787e-02*scale,1.817809e-02*scale,0*scale,lc1}; -Point(4201) = {7.219890e-02*scale,1.846566e-02*scale,0*scale,lc1}; -Point(4200) = {7.769207e-02*scale,2.168274e-02*scale,0*scale,lc1}; -Point(4100) = {8.318523e-02*scale,2.447113e-02*scale,0*scale,lc1}; -Point(4099) = {9.417156e-02*scale,2.953992e-02*scale,0*scale,lc1}; -Point(4045) = {1.051579e-01*scale,3.374477e-02*scale,0*scale,lc1}; -Point(4044) = {1.161442e-01*scale,3.745387e-02*scale,0*scale,lc1}; -Point(4043) = {1.271305e-01*scale,4.084705e-02*scale,0*scale,lc1}; -Point(4147) = {1.381169e-01*scale,4.362166e-02*scale,0*scale,lc1}; -Point(4146) = {1.491032e-01*scale,4.590535e-02*scale,0*scale,lc1}; -Point(4180) = {1.600895e-01*scale,4.775547e-02*scale,0*scale,lc1}; -Point(4167) = {1.710759e-01*scale,4.909090e-02*scale,0*scale,lc1}; -Point(4166) = {1.820622e-01*scale,5.028654e-02*scale,0*scale,lc1}; -Point(4134) = {1.930485e-01*scale,5.118303e-02*scale,0*scale,lc1}; -Point(4133) = {2.040348e-01*scale,5.209637e-02*scale,0*scale,lc1}; -Point(4098) = {2.150212e-01*scale,5.304431e-02*scale,0*scale,lc1}; -Point(4097) = {2.260075e-01*scale,5.389186e-02*scale,0*scale,lc1}; -Point(4042) = {2.369938e-01*scale,5.466596e-02*scale,0*scale,lc1}; -Point(4041) = {2.479802e-01*scale,5.535583e-02*scale,0*scale,lc1}; -Point(4040) = {2.589665e-01*scale,5.602171e-02*scale,0*scale,lc1}; -Point(4095) = {2.699528e-01*scale,5.660820e-02*scale,0*scale,lc1}; -Point(4096) = {2.809391e-01*scale,5.717080e-02*scale,0*scale,lc1}; -Point(4132) = {2.919255e-01*scale,5.768210e-02*scale,0*scale,lc1}; -Point(4131) = {3.029118e-01*scale,5.816077e-02*scale,0*scale,lc1}; -Point(4165) = {3.138981e-01*scale,5.861410e-02*scale,0*scale,lc1}; -Point(4164) = {3.248844e-01*scale,5.902748e-02*scale,0*scale,lc1}; -Point(4163) = {3.358708e-01*scale,5.942876e-02*scale,0*scale,lc1}; -Point(4130) = {3.468571e-01*scale,5.978313e-02*scale,0*scale,lc1}; -Point(4129) = {3.578434e-01*scale,6.012088e-02*scale,0*scale,lc1}; -Point(4094) = {3.688298e-01*scale,6.041918e-02*scale,0*scale,lc1}; -Point(4093) = {3.798161e-01*scale,6.068571e-02*scale,0*scale,lc1}; -Point(4039) = {3.908024e-01*scale,6.092523e-02*scale,0*scale,lc1}; -Point(4038) = {4.017887e-01*scale,6.111444e-02*scale,0*scale,lc1}; -Point(4037) = {4.127751e-01*scale,6.128792e-02*scale,0*scale,lc1}; -Point(4092) = {4.237614e-01*scale,6.139510e-02*scale,0*scale,lc1}; -Point(4091) = {4.347477e-01*scale,6.148330e-02*scale,0*scale,lc1}; -Point(4128) = {4.457341e-01*scale,6.152051e-02*scale,0*scale,lc1}; -Point(4127) = {4.567204e-01*scale,6.152534e-02*scale,0*scale,lc1}; -Point(4162) = {4.677067e-01*scale,6.149964e-02*scale,0*scale,lc1}; -Point(4161) = {4.786930e-01*scale,6.143130e-02*scale,0*scale,lc1}; -Point(4183) = {4.896794e-01*scale,6.134928e-02*scale,0*scale,lc1}; -Point(4160) = {5.006657e-01*scale,6.120560e-02*scale,0*scale,lc1}; -Point(4159) = {5.116520e-01*scale,6.104561e-02*scale,0*scale,lc1}; -Point(4126) = {5.226384e-01*scale,6.083535e-02*scale,0*scale,lc1}; -Point(4125) = {5.336247e-01*scale,6.058889e-02*scale,0*scale,lc1}; -Point(4088) = {5.446110e-01*scale,6.030455e-02*scale,0*scale,lc1}; -Point(4087) = {5.555973e-01*scale,5.996460e-02*scale,0*scale,lc1}; -Point(4033) = {5.665837e-01*scale,5.960434e-02*scale,0*scale,lc1}; -Point(4032) = {5.775700e-01*scale,5.915575e-02*scale,0*scale,lc1}; -Point(4031) = {5.885563e-01*scale,5.867545e-02*scale,0*scale,lc1}; -Point(4086) = {5.995427e-01*scale,5.809113e-02*scale,0*scale,lc1}; -Point(4085) = {6.105290e-01*scale,5.746759e-02*scale,0*scale,lc1}; -Point(4124) = {6.215153e-01*scale,5.679937e-02*scale,0*scale,lc1}; -Point(4123) = {6.325016e-01*scale,5.616104e-02*scale,0*scale,lc1}; -Point(4158) = {6.434880e-01*scale,5.553466e-02*scale,0*scale,lc1}; -Point(4157) = {6.544743e-01*scale,5.490460e-02*scale,0*scale,lc1}; -Point(4156) = {6.654606e-01*scale,5.425221e-02*scale,0*scale,lc1}; -Point(4122) = {6.764469e-01*scale,5.351456e-02*scale,0*scale,lc1}; -Point(4121) = {6.874333e-01*scale,5.273401e-02*scale,0*scale,lc1}; -Point(4081) = {6.984196e-01*scale,5.190181e-02*scale,0*scale,lc1}; -Point(4080) = {7.094059e-01*scale,5.101347e-02*scale,0*scale,lc1}; -Point(4020) = {7.203923e-01*scale,5.010133e-02*scale,0*scale,lc1}; -Point(4019) = {7.313786e-01*scale,4.909498e-02*scale,0*scale,lc1}; -Point(4018) = {7.423649e-01*scale,4.806316e-02*scale,0*scale,lc1}; -Point(4143) = {7.533512e-01*scale,4.694984e-02*scale,0*scale,lc1}; -Point(4118) = {7.643376e-01*scale,4.579371e-02*scale,0*scale,lc1}; -Point(4022) = {7.753239e-01*scale,4.458624e-02*scale,0*scale,lc1}; -Point(4016) = {7.863102e-01*scale,4.330843e-02*scale,0*scale,lc1}; -Point(4015) = {7.972966e-01*scale,4.200167e-02*scale,0*scale,lc1}; -Point(4011) = {8.082829e-01*scale,4.058146e-02*scale,0*scale,lc1}; -Point(4010) = {8.192692e-01*scale,3.912968e-02*scale,0*scale,lc1}; -Point(4009) = {8.302555e-01*scale,3.758209e-02*scale,0*scale,lc1}; -Point(4219) = {8.357487e-01*scale,3.680830e-02*scale,0*scale,lc1}; -Point(4177) = {8.412419e-01*scale,3.598390e-02*scale,0*scale,lc1}; -Point(4176) = {8.467350e-01*scale,3.515767e-02*scale,0*scale,lc1}; -Point(4149) = {8.494816e-01*scale,3.474456e-02*scale,0*scale,lc1}; -Point(4059) = {8.522282e-01*scale,3.433145e-02*scale,0*scale,lc1}; -Point(4058) = {8.549748e-01*scale,3.391833e-02*scale,0*scale,lc1}; -Point(4055) = {8.577214e-01*scale,3.349214e-02*scale,0*scale,lc1}; -Point(4113) = {8.604679e-01*scale,3.306571e-02*scale,0*scale,lc1}; -Point(4110) = {8.632145e-01*scale,3.263928e-02*scale,0*scale,lc1}; -Point(4213) = {8.659611e-01*scale,3.221285e-02*scale,0*scale,lc1}; -Point(4210) = {8.687077e-01*scale,3.178643e-02*scale,0*scale,lc1}; -Point(4217) = {8.714543e-01*scale,3.136000e-02*scale,0*scale,lc1}; -Point(4006) = {8.740950e-01*scale,3.095000e-02*scale,0*scale,lc1}; -Point(4218) = {8.714543e-01*scale,3.095677e-02*scale,0*scale,lc1}; -Point(4211) = {8.687077e-01*scale,3.096380e-02*scale,0*scale,lc1}; -Point(4212) = {8.659611e-01*scale,3.097084e-02*scale,0*scale,lc1}; -Point(4111) = {8.632145e-01*scale,3.097787e-02*scale,0*scale,lc1}; -Point(4112) = {8.604679e-01*scale,3.098491e-02*scale,0*scale,lc1}; -Point(4056) = {8.577214e-01*scale,3.099195e-02*scale,0*scale,lc1}; -Point(4057) = {8.549748e-01*scale,3.099898e-02*scale,0*scale,lc1}; -Point(4060) = {8.522282e-01*scale,3.100602e-02*scale,0*scale,lc1}; -Point(4148) = {8.494816e-01*scale,3.101305e-02*scale,0*scale,lc1}; -Point(4150) = {8.467350e-01*scale,3.102009e-02*scale,0*scale,lc1}; -Point(4208) = {8.439885e-01*scale,3.102712e-02*scale,0*scale,lc1}; -Point(4209) = {8.412419e-01*scale,3.103416e-02*scale,0*scale,lc1}; -Point(4215) = {8.357487e-01*scale,3.104823e-02*scale,0*scale,lc1}; -Point(4216) = {8.302555e-01*scale,3.106230e-02*scale,0*scale,lc1}; -Point(4220) = {8.247624e-01*scale,3.107638e-02*scale,0*scale,lc1}; -Point(4012) = {8.192692e-01*scale,3.109045e-02*scale,0*scale,lc1}; -Point(4013) = {8.082829e-01*scale,3.111859e-02*scale,0*scale,lc1}; -Point(4014) = {7.972966e-01*scale,3.114674e-02*scale,0*scale,lc1}; -Point(4017) = {7.863102e-01*scale,3.117488e-02*scale,0*scale,lc1}; -Point(4021) = {7.753239e-01*scale,3.120302e-02*scale,0*scale,lc1}; -Point(4023) = {7.643376e-01*scale,3.123117e-02*scale,0*scale,lc1}; -Point(4117) = {7.533512e-01*scale,3.125931e-02*scale,0*scale,lc1}; -Point(4082) = {7.423649e-01*scale,3.128745e-02*scale,0*scale,lc1}; -Point(4083) = {7.313786e-01*scale,3.131560e-02*scale,0*scale,lc1}; -Point(4024) = {7.203923e-01*scale,3.134374e-02*scale,0*scale,lc1}; -Point(4025) = {7.094059e-01*scale,3.137188e-02*scale,0*scale,lc1}; -Point(4007) = {6.999910e-01*scale,3.139600e-02*scale,0*scale,lc1}; -Point(4026) = {6.999910e-01*scale,2.367126e-02*scale,0*scale,lc1}; -Point(4027) = {6.999910e-01*scale,1.268493e-02*scale,0*scale,lc1}; -Point(4028) = {6.999910e-01*scale,1.698599e-03*scale,0*scale,lc1}; -Point(4029) = {6.999910e-01*scale,-9.287729e-03*scale,0*scale,lc1}; -Point(4008) = {6.999910e-01*scale,-1.722400e-02*scale,0*scale,lc1}; -Point(4030) = {6.984196e-01*scale,-1.751626e-02*scale,0*scale,lc1}; -Point(4084) = {6.874333e-01*scale,-1.955960e-02*scale,0*scale,lc1}; -Point(4194) = {6.764469e-01*scale,-2.159776e-02*scale,0*scale,lc1}; -Point(4195) = {6.654606e-01*scale,-2.362865e-02*scale,0*scale,lc1}; -Point(4154) = {6.544743e-01*scale,-2.588904e-02*scale,0*scale,lc1}; -Point(4155) = {6.434880e-01*scale,-2.825320e-02*scale,0*scale,lc1}; -Point(4119) = {6.325016e-01*scale,-3.016078e-02*scale,0*scale,lc1}; -Point(4120) = {6.215153e-01*scale,-3.200586e-02*scale,0*scale,lc1}; -Point(4089) = {6.105290e-01*scale,-3.369569e-02*scale,0*scale,lc1}; -Point(4090) = {5.995427e-01*scale,-3.534073e-02*scale,0*scale,lc1}; -Point(4034) = {5.885563e-01*scale,-3.694183e-02*scale,0*scale,lc1}; -Point(4035) = {5.775700e-01*scale,-3.852074e-02*scale,0*scale,lc1}; -Point(4036) = {5.665837e-01*scale,-4.009157e-02*scale,0*scale,lc1}; -Point(4144) = {5.555973e-01*scale,-4.161619e-02*scale,0*scale,lc1}; -Point(4192) = {5.446110e-01*scale,-4.311363e-02*scale,0*scale,lc1}; -Point(4193) = {5.336247e-01*scale,-4.454372e-02*scale,0*scale,lc1}; -Point(4184) = {5.226384e-01*scale,-4.589904e-02*scale,0*scale,lc1}; -Point(4185) = {5.116520e-01*scale,-4.719211e-02*scale,0*scale,lc1}; -Point(4168) = {5.006657e-01*scale,-4.834107e-02*scale,0*scale,lc1}; -Point(4169) = {4.896794e-01*scale,-4.944199e-02*scale,0*scale,lc1}; -Point(4135) = {4.786930e-01*scale,-5.032590e-02*scale,0*scale,lc1}; -Point(4136) = {4.677067e-01*scale,-5.113121e-02*scale,0*scale,lc1}; -Point(4101) = {4.567204e-01*scale,-5.175527e-02*scale,0*scale,lc1}; -Point(4102) = {4.457341e-01*scale,-5.227269e-02*scale,0*scale,lc1}; -Point(4049) = {4.347477e-01*scale,-5.270239e-02*scale,0*scale,lc1}; -Point(4050) = {4.237614e-01*scale,-5.305741e-02*scale,0*scale,lc1}; -Point(4051) = {4.127751e-01*scale,-5.339040e-02*scale,0*scale,lc1}; -Point(4103) = {4.017887e-01*scale,-5.365720e-02*scale,0*scale,lc1}; -Point(4104) = {3.908024e-01*scale,-5.390137e-02*scale,0*scale,lc1}; -Point(4137) = {3.798161e-01*scale,-5.408775e-02*scale,0*scale,lc1}; -Point(4138) = {3.688298e-01*scale,-5.423035e-02*scale,0*scale,lc1}; -Point(4170) = {3.578434e-01*scale,-5.433335e-02*scale,0*scale,lc1}; -Point(4171) = {3.468571e-01*scale,-5.436941e-02*scale,0*scale,lc1}; -Point(4186) = {3.358708e-01*scale,-5.438425e-02*scale,0*scale,lc1}; -Point(4172) = {3.248844e-01*scale,-5.431051e-02*scale,0*scale,lc1}; -Point(4173) = {3.138981e-01*scale,-5.421116e-02*scale,0*scale,lc1}; -Point(4139) = {3.029118e-01*scale,-5.403703e-02*scale,0*scale,lc1}; -Point(4140) = {2.919255e-01*scale,-5.379680e-02*scale,0*scale,lc1}; -Point(4105) = {2.809391e-01*scale,-5.349015e-02*scale,0*scale,lc1}; -Point(4106) = {2.699528e-01*scale,-5.307623e-02*scale,0*scale,lc1}; -Point(4052) = {2.589665e-01*scale,-5.262516e-02*scale,0*scale,lc1}; -Point(4053) = {2.479802e-01*scale,-5.205332e-02*scale,0*scale,lc1}; -Point(4054) = {2.369938e-01*scale,-5.145659e-02*scale,0*scale,lc1}; -Point(4107) = {2.260075e-01*scale,-5.078306e-02*scale,0*scale,lc1}; -Point(4108) = {2.150212e-01*scale,-5.007146e-02*scale,0*scale,lc1}; -Point(4141) = {2.040348e-01*scale,-4.931867e-02*scale,0*scale,lc1}; -Point(4142) = {1.930485e-01*scale,-4.849150e-02*scale,0*scale,lc1}; -Point(4174) = {1.820622e-01*scale,-4.763665e-02*scale,0*scale,lc1}; -Point(4175) = {1.710759e-01*scale,-4.665625e-02*scale,0*scale,lc1}; -Point(4187) = {1.600895e-01*scale,-4.564614e-02*scale,0*scale,lc1}; -Point(4188) = {1.491032e-01*scale,-4.455428e-02*scale,0*scale,lc1}; -Point(4145) = {1.381169e-01*scale,-4.339482e-02*scale,0*scale,lc1}; -Point(4046) = {1.271305e-01*scale,-4.218155e-02*scale,0*scale,lc1}; -Point(4047) = {1.161442e-01*scale,-4.082776e-02*scale,0*scale,lc1}; -Point(4048) = {1.051579e-01*scale,-3.939290e-02*scale,0*scale,lc1}; -Point(4196) = {9.966472e-02*scale,-3.862964e-02*scale,0*scale,lc1}; -Point(4197) = {9.417156e-02*scale,-3.788513e-02*scale,0*scale,lc1}; -Point(4198) = {8.867839e-02*scale,-3.720163e-02*scale,0*scale,lc1}; -Point(4189) = {8.318523e-02*scale,-3.651554e-02*scale,0*scale,lc1}; -Point(4190) = {7.769207e-02*scale,-3.569174e-02*scale,0*scale,lc1}; -Point(4214) = {7.494548e-02*scale,-3.527985e-02*scale,0*scale,lc1}; -Point(4181) = {7.219890e-02*scale,-3.481687e-02*scale,0*scale,lc1}; -Point(4182) = {6.945232e-02*scale,-3.430639e-02*scale,0*scale,lc1}; -Point(4151) = {6.670574e-02*scale,-3.379591e-02*scale,0*scale,lc1}; -Point(4152) = {6.395916e-02*scale,-3.322033e-02*scale,0*scale,lc1}; -Point(4064) = {6.121257e-02*scale,-3.263264e-02*scale,0*scale,lc1}; -Point(4065) = {5.846599e-02*scale,-3.189105e-02*scale,0*scale,lc1}; -Point(4066) = {5.635416e-02*scale,-3.126039e-02*scale,0*scale,lc1}; -Point(4205) = {5.434612e-02*scale,-3.049426e-02*scale,0*scale,lc1}; -Point(4206) = {5.297283e-02*scale,-2.986940e-02*scale,0*scale,lc1}; -Point(4207) = {5.159954e-02*scale,-2.914883e-02*scale,0*scale,lc1}; -Point(4072) = {5.022625e-02*scale,-2.824438e-02*scale,0*scale,lc1}; -Point(4074) = {4.885296e-02*scale,-2.716087e-02*scale,0*scale,lc1}; -Point(4073) = {4.883074e-02*scale,-2.714051e-02*scale,0*scale,lc1}; -Point(4076) = {4.747966e-02*scale,-2.578824e-02*scale,0*scale,lc1}; -Point(4075) = {4.746129e-02*scale,-2.576722e-02*scale,0*scale,lc1}; -Point(4079) = {4.639274e-02*scale,-2.439393e-02*scale,0*scale,lc1}; -Point(4078) = {4.561283e-02*scale,-2.302064e-02*scale,0*scale,lc1}; -Point(4077) = {4.500573e-02*scale,-2.164735e-02*scale,0*scale,lc1}; -Point(4068) = {4.450243e-02*scale,-2.027406e-02*scale,0*scale,lc1}; -Point(4067) = {4.415104e-02*scale,-1.890077e-02*scale,0*scale,lc1}; -Point(4069) = {4.402927e-02*scale,-1.752748e-02*scale,0*scale,lc1}; -Point(4070) = {4.404617e-02*scale,-1.615418e-02*scale,0*scale,lc1}; -Point(4071) = {4.411753e-02*scale,-1.478089e-02*scale,0*scale,lc1}; -Point(4115) = {4.421802e-02*scale,-1.340760e-02*scale,0*scale,lc1}; -Point(4116) = {4.435615e-02*scale,-1.203431e-02*scale,0*scale,lc1}; -Point(4204) = {4.461695e-02*scale,-1.066102e-02*scale,0*scale,lc1}; - -/* la boite */ - -Point(11) = {4.552264e+01*scale,-2.254225e+01*scale,0*scale,lc3}; -Point(2233) = {4.552264e+01*scale,-1.129225e+01*scale,0*scale,lc3}; -Point(5) = {4.552264e+01*scale,-4.224671e-02*scale,0*scale,lc3}; -Point(2236) = {4.552264e+01*scale,1.120775e+01*scale,0*scale,lc3}; -Point(14) = {4.552264e+01*scale,2.245775e+01*scale,0*scale,lc3}; -Point(2) = {4.552264e+01*scale,4.495775e+01*scale,0*scale,lc3}; -Point(15) = {2.302264e+01*scale,4.495775e+01*scale,0*scale,lc3}; -Point(2301) = {1.177264e+01*scale,4.495775e+01*scale,0*scale,lc3}; -Point(6) = {5.226384e-01*scale,4.495775e+01*scale,0*scale,lc3}; -Point(2304) = {-1.072736e+01*scale,4.495775e+01*scale,0*scale,lc3}; -Point(18) = {-2.197736e+01*scale,4.495775e+01*scale,0*scale,lc3}; -Point(3) = {-4.447736e+01*scale,4.495775e+01*scale,0*scale,lc3}; -Point(19) = {-4.447736e+01*scale,2.245775e+01*scale,0*scale,lc3}; -Point(2240) = {-4.447736e+01*scale,1.120775e+01*scale,0*scale,lc3}; -Point(7) = {-4.447736e+01*scale,-4.224671e-02*scale,0*scale,lc3}; -Point(2243) = {-4.447736e+01*scale,-1.129225e+01*scale,0*scale,lc3}; -Point(22) = {-4.447736e+01*scale,-2.254225e+01*scale,0*scale,lc3}; -Point(4) = {-4.447736e+01*scale,-4.504225e+01*scale,0*scale,lc3}; -Point(23) = {-2.197736e+01*scale,-4.504225e+01*scale,0*scale,lc3}; -Point(2317) = {-1.072736e+01*scale,-4.504225e+01*scale,0*scale,lc3}; -Point(8) = {5.226384e-01*scale,-4.504225e+01*scale,0*scale,lc3}; -Point(2297) = {1.177264e+01*scale,-4.504225e+01*scale,0*scale,lc3}; -Point(10) = {2.302264e+01*scale,-4.504225e+01*scale,0*scale,lc3}; -Point(1) = {4.552264e+01*scale,-4.504225e+01*scale,0*scale,lc3}; - -/* le flap */ - -Point(4298) = {1.125732e+00*scale,-1.356305e-01*scale,0*scale,lc2}; -Point(4297) = {1.128473e+00*scale,-1.383771e-01*scale,0*scale,lc2}; -Point(4222) = {1.130511e+00*scale,-1.404190e-01*scale,0*scale,lc2}; -Point(4250) = {1.130200e+00*scale,-1.411237e-01*scale,0*scale,lc2}; -Point(4252) = {1.128987e+00*scale,-1.438702e-01*scale,0*scale,lc2}; -Point(4221) = {1.128033e+00*scale,-1.460320e-01*scale,0*scale,lc2}; -Point(4251) = {1.126886e+00*scale,-1.450775e-01*scale,0*scale,lc2}; -Point(4299) = {1.124140e+00*scale,-1.427912e-01*scale,0*scale,lc2}; -Point(4335) = {1.121393e+00*scale,-1.405048e-01*scale,0*scale,lc2}; -Point(4337) = {1.118647e+00*scale,-1.382318e-01*scale,0*scale,lc2}; -Point(4267) = {1.115900e+00*scale,-1.359746e-01*scale,0*scale,lc2}; -Point(4294) = {1.115481e+00*scale,-1.356305e-01*scale,0*scale,lc2}; -Point(4269) = {1.110407e+00*scale,-1.315213e-01*scale,0*scale,lc2}; -Point(4233) = {1.104914e+00*scale,-1.272651e-01*scale,0*scale,lc2}; -Point(4234) = {1.099421e+00*scale,-1.231333e-01*scale,0*scale,lc2}; -Point(4273) = {1.093927e+00*scale,-1.190696e-01*scale,0*scale,lc2}; -Point(4293) = {1.088434e+00*scale,-1.150965e-01*scale,0*scale,lc2}; -Point(4314) = {1.082941e+00*scale,-1.112096e-01*scale,0*scale,lc2}; -Point(4317) = {1.077448e+00*scale,-1.073829e-01*scale,0*scale,lc2}; -Point(4318) = {1.071955e+00*scale,-1.037168e-01*scale,0*scale,lc2}; -Point(4274) = {1.066462e+00*scale,-1.001266e-01*scale,0*scale,lc2}; -Point(4235) = {1.060968e+00*scale,-9.664561e-02*scale,0*scale,lc2}; -Point(4236) = {1.055475e+00*scale,-9.329373e-02*scale,0*scale,lc2}; -Point(4237) = {1.049982e+00*scale,-8.999964e-02*scale,0*scale,lc2}; -Point(4301) = {1.044489e+00*scale,-8.685139e-02*scale,0*scale,lc2}; -Point(4319) = {1.038996e+00*scale,-8.375978e-02*scale,0*scale,lc2}; -Point(4321) = {1.033503e+00*scale,-8.073620e-02*scale,0*scale,lc2}; -Point(4320) = {1.033435e+00*scale,-8.069886e-02*scale,0*scale,lc2}; -Point(4322) = {1.028009e+00*scale,-7.778268e-02*scale,0*scale,lc2}; -Point(4347) = {1.022516e+00*scale,-7.485902e-02*scale,0*scale,lc2}; -Point(4323) = {1.017023e+00*scale,-7.206071e-02*scale,0*scale,lc2}; -Point(4324) = {1.011530e+00*scale,-6.928798e-02*scale,0*scale,lc2}; -Point(4325) = {1.006037e+00*scale,-6.656447e-02*scale,0*scale,lc2}; -Point(4276) = {1.000544e+00*scale,-6.390345e-02*scale,0*scale,lc2}; - -Point(4238) = {9.950505e-01*scale,-6.128188e-02*scale,0*scale,lc2}; -Point(4240) = {9.895573e-01*scale,-5.875476e-02*scale,0*scale,lc2}; -Point(4239) = {9.894949e-01*scale,-5.872621e-02*scale,0*scale,lc2}; -Point(4241) = {9.840641e-01*scale,-5.625125e-02*scale,0*scale,lc2}; -Point(4277) = {9.785710e-01*scale,-5.382099e-02*scale,0*scale,lc2}; -Point(4326) = {9.730778e-01*scale,-5.141086e-02*scale,0*scale,lc2}; -Point(4327) = {9.675846e-01*scale,-4.903782e-02*scale,0*scale,lc2}; -Point(4328) = {9.620915e-01*scale,-4.670806e-02*scale,0*scale,lc2}; -Point(4350) = {9.565983e-01*scale,-4.440955e-02*scale,0*scale,lc2}; -Point(4348) = {9.511052e-01*scale,-4.217563e-02*scale,0*scale,lc2}; -Point(4349) = {9.456120e-01*scale,-3.995849e-02*scale,0*scale,lc2}; -Point(4332) = {9.401188e-01*scale,-3.778658e-02*scale,0*scale,lc2}; -Point(4333) = {9.346257e-01*scale,-3.563417e-02*scale,0*scale,lc2}; -Point(4334) = {9.291325e-01*scale,-3.354304e-02*scale,0*scale,lc2}; -Point(4278) = {9.236393e-01*scale,-3.147155e-02*scale,0*scale,lc2}; -Point(4247) = {9.181462e-01*scale,-2.942051e-02*scale,0*scale,lc2}; -Point(4248) = {9.126530e-01*scale,-2.741688e-02*scale,0*scale,lc2}; -Point(4249) = {9.071598e-01*scale,-2.541811e-02*scale,0*scale,lc2}; -Point(4282) = {9.016667e-01*scale,-2.339436e-02*scale,0*scale,lc2}; -Point(4283) = {8.961735e-01*scale,-2.121581e-02*scale,0*scale,lc2}; -Point(4341) = {8.934269e-01*scale,-2.008894e-02*scale,0*scale,lc2}; -Point(4342) = {8.906803e-01*scale,-1.868991e-02*scale,0*scale,lc2}; -Point(4343) = {8.879338e-01*scale,-1.729088e-02*scale,0*scale,lc2}; -Point(4289) = {8.851872e-01*scale,-1.539587e-02*scale,0*scale,lc2}; -Point(4290) = {8.824406e-01*scale,-1.328983e-02*scale,0*scale,lc2}; -Point(4286) = {8.796940e-01*scale,-1.068337e-02*scale,0*scale,lc2}; -Point(4255) = {8.785175e-01*scale,-9.287729e-03*scale,0*scale,lc2}; -Point(4257) = {8.763537e-01*scale,-6.541147e-03*scale,0*scale,lc2}; -Point(4256) = {8.745583e-01*scale,-3.794565e-03*scale,0*scale,lc2}; -Point(4346) = {8.737982e-01*scale,-2.421274e-03*scale,0*scale,lc2}; -Point(4288) = {8.731375e-01*scale,-1.047983e-03*scale,0*scale,lc2}; -Point(4287) = {8.725645e-01*scale,3.253082e-04*scale,0*scale,lc2}; -Point(4260) = {8.721474e-01*scale,1.698599e-03*scale,0*scale,lc2}; -Point(4259) = {8.718264e-01*scale,3.071890e-03*scale,0*scale,lc2}; -Point(4258) = {8.716296e-01*scale,4.445181e-03*scale,0*scale,lc2}; -Point(4262) = {8.715751e-01*scale,5.818472e-03*scale,0*scale,lc2}; -Point(4261) = {8.716587e-01*scale,7.191763e-03*scale,0*scale,lc2}; -Point(4264) = {8.718582e-01*scale,8.565054e-03*scale,0*scale,lc2}; -Point(4263) = {8.721688e-01*scale,9.938345e-03*scale,0*scale,lc2}; -Point(4265) = {8.726207e-01*scale,1.131164e-02*scale,0*scale,lc2}; -Point(4266) = {8.732553e-01*scale,1.268493e-02*scale,0*scale,lc2}; -Point(4303) = {8.741084e-01*scale,1.405822e-02*scale,0*scale,lc2}; -Point(4302) = {8.742009e-01*scale,1.417564e-02*scale,0*scale,lc2}; -Point(4304) = {8.752094e-01*scale,1.543151e-02*scale,0*scale,lc2}; -Point(4305) = {8.755741e-01*scale,1.580615e-02*scale,0*scale,lc2}; -Point(4306) = {8.765464e-01*scale,1.680480e-02*scale,0*scale,lc2}; -Point(4307) = {8.769474e-01*scale,1.712646e-02*scale,0*scale,lc2}; -Point(4308) = {8.783004e-01*scale,1.817809e-02*scale,0*scale,lc2}; -Point(4309) = {8.783207e-01*scale,1.819390e-02*scale,0*scale,lc2}; -Point(4345) = {8.796940e-01*scale,1.898483e-02*scale,0*scale,lc2}; -Point(4344) = {8.810673e-01*scale,1.969096e-02*scale,0*scale,lc2}; -Point(4254) = {8.824406e-01*scale,2.018966e-02*scale,0*scale,lc2}; -Point(4253) = {8.851872e-01*scale,2.092940e-02*scale,0*scale,lc2}; -Point(4285) = {8.879338e-01*scale,2.136484e-02*scale,0*scale,lc2}; -Point(4284) = {8.906803e-01*scale,2.153023e-02*scale,0*scale,lc2}; -Point(4340) = {8.934269e-01*scale,2.149455e-02*scale,0*scale,lc2}; -Point(4339) = {8.961735e-01*scale,2.136105e-02*scale,0*scale,lc2}; -Point(4338) = {8.989201e-01*scale,2.104930e-02*scale,0*scale,lc2}; -Point(4246) = {9.016667e-01*scale,2.064514e-02*scale,0*scale,lc2}; -Point(4245) = {9.071598e-01*scale,1.954695e-02*scale,0*scale,lc2}; -Point(4281) = {9.126530e-01*scale,1.818666e-02*scale,0*scale,lc2}; -Point(4280) = {9.181462e-01*scale,1.648801e-02*scale,0*scale,lc2}; -Point(4279) = {9.236393e-01*scale,1.459116e-02*scale,0*scale,lc2}; -Point(4244) = {9.291325e-01*scale,1.255534e-02*scale,0*scale,lc2}; -Point(4243) = {9.346257e-01*scale,1.024686e-02*scale,0*scale,lc2}; -Point(4242) = {9.401188e-01*scale,7.859173e-03*scale,0*scale,lc2}; -Point(4296) = {9.456120e-01*scale,5.245962e-03*scale,0*scale,lc2}; -Point(4295) = {9.511052e-01*scale,2.515401e-03*scale,0*scale,lc2}; -Point(4300) = {9.565983e-01*scale,-3.522322e-04*scale,0*scale,lc2}; -Point(4330) = {9.620915e-01*scale,-3.368852e-03*scale,0*scale,lc2}; -Point(4331) = {9.628545e-01*scale,-3.794565e-03*scale,0*scale,lc2}; -Point(4329) = {9.675846e-01*scale,-6.447130e-03*scale,0*scale,lc2}; -Point(4232) = {9.730778e-01*scale,-9.700323e-03*scale,0*scale,lc2}; -Point(4231) = {9.840641e-01*scale,-1.646639e-02*scale,0*scale,lc2}; -Point(4230) = {9.950505e-01*scale,-2.366260e-02*scale,0*scale,lc2}; - -Point(4229) = {1.006037e+00*scale,-3.132299e-02*scale,0*scale,lc2}; -Point(4228) = {1.017023e+00*scale,-3.943289e-02*scale,0*scale,lc2}; -Point(4227) = {1.028009e+00*scale,-4.793142e-02*scale,0*scale,lc2}; -Point(4225) = {1.038996e+00*scale,-5.669110e-02*scale,0*scale,lc2}; -Point(4226) = {1.048275e+00*scale,-6.421937e-02*scale,0*scale,lc2}; -Point(4312) = {1.054944e+00*scale,-6.971253e-02*scale,0*scale,lc2}; -Point(4223) = {1.060968e+00*scale,-7.473580e-02*scale,0*scale,lc2}; -Point(4224) = {1.061523e+00*scale,-7.520570e-02*scale,0*scale,lc2}; -Point(4311) = {1.066462e+00*scale,-7.943817e-02*scale,0*scale,lc2}; -Point(4310) = {1.067933e+00*scale,-8.069886e-02*scale,0*scale,lc2}; -Point(4275) = {1.071955e+00*scale,-8.420612e-02*scale,0*scale,lc2}; -Point(4316) = {1.077448e+00*scale,-8.903994e-02*scale,0*scale,lc2}; -Point(4315) = {1.082941e+00*scale,-9.395896e-02*scale,0*scale,lc2}; -Point(4313) = {1.088434e+00*scale,-9.897945e-02*scale,0*scale,lc2}; -Point(4292) = {1.093927e+00*scale,-1.041032e-01*scale,0*scale,lc2}; -Point(4272) = {1.099421e+00*scale,-1.093858e-01*scale,0*scale,lc2}; -Point(4271) = {1.104914e+00*scale,-1.148004e-01*scale,0*scale,lc2}; -Point(4270) = {1.110407e+00*scale,-1.202740e-01*scale,0*scale,lc2}; -Point(4268) = {1.114765e+00*scale,-1.246442e-01*scale,0*scale,lc2}; -Point(4291) = {1.120249e+00*scale,-1.301373e-01*scale,0*scale,lc2}; -Point(4336) = {1.122990e+00*scale,-1.328839e-01*scale,0*scale,lc2}; - -Line(1) = {3895,3897}; -Line(2) = {3897,3896}; -Line(3) = {3896,3968}; -Line(4) = {3968,3995}; -Line(5) = {3995,4003}; -Line(6) = {4003,3857}; -Line(7) = {3857,3856}; -Line(8) = {3856,3860}; -Line(9) = {3860,3861}; -Line(10) = {3861,3863}; -Line(11) = {3863,3864}; -Line(12) = {3864,3865}; -Line(13) = {3865,3866}; -Line(14) = {3866,3867}; -Line(15) = {3867,3868}; -Line(16) = {3868,3869}; -Line(17) = {3869,3870}; -Line(18) = {3870,3871}; -Line(19) = {3871,3872}; -Line(20) = {3872,3977}; -Line(21) = {3977,3877}; -Line(22) = {3877,3876}; -Line(23) = {3876,3878}; -Line(24) = {3878,3934}; -Line(25) = {3934,3873}; -Line(26) = {3873,3874}; -Line(27) = {3874,3875}; -Line(28) = {3875,3935}; -Line(29) = {3935,3880}; -Line(30) = {3880,3879}; -Line(31) = {3879,3881}; -Line(32) = {3881,3936}; -Line(33) = {3936,3882}; -Line(34) = {3882,3883}; -Line(35) = {3883,3885}; -Line(36) = {3885,3884}; -Line(37) = {3884,1218}; -Line(38) = {1218,3933}; -Line(39) = {3933,3996}; -Line(40) = {3996,3989}; -Line(41) = {3989,3990}; -Line(42) = {3990,3978}; -Line(43) = {3978,3979}; -Line(44) = {3979,3974}; -Line(45) = {3974,3973}; -Line(46) = {3973,3963}; -Line(47) = {3963,3947}; -Line(48) = {3947,3948}; -Line(49) = {3948,3904}; -Line(50) = {3904,3903}; -Line(51) = {3903,3946}; -Line(52) = {3946,3902}; -Line(53) = {3902,3901}; -Line(54) = {3901,3900}; -Line(55) = {3900,3908}; -Line(56) = {3908,3907}; -Line(57) = {3907,3951}; -Line(58) = {3951,3950}; -Line(59) = {3950,3847}; -Line(60) = {3847,3949}; -Line(61) = {3949,3952}; -Line(62) = {3952,3905}; -Line(63) = {3905,3906}; -Line(64) = {3906,3909}; -Line(65) = {3909,3969}; -Line(66) = {3969,3970}; -Line(67) = {3970,3997}; -Line(68) = {3997,3998}; -Line(69) = {3998,4004}; -Line(70) = {4004,3959}; -Line(71) = {3959,3960}; -Line(72) = {3960,3972}; -Line(73) = {3972,3984}; -Line(74) = {3984,3988}; -Line(75) = {3988,3961}; -Line(76) = {3961,3962}; -Line(77) = {3962,3937}; -Line(78) = {3937,3938}; -Line(79) = {3938,3886}; -Line(80) = {3886,3887}; -Line(81) = {3887,3888}; -Line(82) = {3888,3993}; -Line(83) = {3993,3994}; -Line(84) = {3994,3971}; -Line(85) = {3971,3918}; -Line(86) = {3918,3919}; -Line(87) = {3919,3920}; -Line(88) = {3920,3956}; -Line(89) = {3956,3955}; -Line(90) = {3955,3965}; -Line(91) = {3965,3966}; -Line(92) = {3966,3910}; -Line(93) = {3910,3913}; -Line(94) = {3913,3912}; -Line(95) = {3912,3911}; -Line(96) = {3911,3914}; -Line(97) = {3914,3915}; -Line(98) = {3915,3916}; -Line(99) = {3916,3917}; -Line(100) = {3917,3953}; -Line(101) = {3953,3954}; -Line(102) = {3954,3964}; -Line(103) = {3964,3975}; -Line(104) = {3975,3992}; -Line(105) = {3992,3991}; -Line(106) = {3991,3999}; -Line(107) = {3999,3939}; -Line(108) = {3939,3967}; -Line(109) = {3967,3987}; -Line(110) = {3987,3985}; -Line(111) = {3985,3986}; -Line(112) = {3986,4002}; -Line(113) = {4002,3922}; -Line(114) = {3922,4005}; -Line(115) = {4005,3851}; -Line(116) = {3851,3850}; -Line(117) = {3850,3853}; -Line(118) = {3853,3852}; -Line(119) = {3852,3849}; -Line(120) = {3849,3848}; -Line(121) = {3848,3921}; -Line(122) = {3921,3983}; -Line(123) = {3983,3982}; -Line(124) = {3982,3976}; -Line(125) = {3976,3929}; -Line(126) = {3929,3958}; -Line(127) = {3958,3928}; -Line(128) = {3928,3957}; -Line(129) = {3957,3927}; -Line(130) = {3927,3926}; -Line(131) = {3926,3925}; -Line(132) = {3925,3924}; -Line(133) = {3924,3932}; -Line(134) = {3932,3931}; -Line(135) = {3931,3930}; -Line(136) = {3930,3923}; -Line(137) = {3923,3862}; -Line(138) = {3862,3859}; -Line(139) = {3859,3858}; -Line(140) = {3858,3855}; -Line(141) = {3855,3854}; -Line(142) = {3854,3945}; -Line(143) = {3945,3944}; -Line(144) = {3944,3899}; -Line(145) = {3899,3898}; -Line(146) = {3898,3894}; -Line(147) = {3894,3890}; -Line(148) = {3890,3893}; -Line(149) = {3893,3941}; -Line(150) = {3941,4000}; -Line(151) = {4000,3980}; -Line(152) = {3980,3846}; -Line(153) = {3846,3981}; -Line(154) = {3981,4001}; -Line(155) = {4001,3942}; -Line(156) = {3942,3940}; -Line(157) = {3940,3889}; -Line(158) = {3889,3892}; -Line(159) = {3892,3891}; -Line(160) = {3891,3943}; -Line(161) = {3943,3895}; -Line(162) = {4063,4062}; -Line(163) = {4062,4061}; -Line(164) = {4061,4114}; -Line(165) = {4114,4153}; -Line(166) = {4153,4178}; -Line(167) = {4178,4179}; -Line(168) = {4179,4191}; -Line(169) = {4191,4203}; -Line(170) = {4203,4109}; -Line(171) = {4109,4202}; -Line(172) = {4202,4199}; -Line(173) = {4199,4201}; -Line(174) = {4201,4200}; -Line(175) = {4200,4100}; -Line(176) = {4100,4099}; -Line(177) = {4099,4045}; -Line(178) = {4045,4044}; -Line(179) = {4044,4043}; -Line(180) = {4043,4147}; -Line(181) = {4147,4146}; -Line(182) = {4146,4180}; -Line(183) = {4180,4167}; -Line(184) = {4167,4166}; -Line(185) = {4166,4134}; -Line(186) = {4134,4133}; -Line(187) = {4133,4098}; -Line(188) = {4098,4097}; -Line(189) = {4097,4042}; -Line(190) = {4042,4041}; -Line(191) = {4041,4040}; -Line(192) = {4040,4095}; -Line(193) = {4095,4096}; -Line(194) = {4096,4132}; -Line(195) = {4132,4131}; -Line(196) = {4131,4165}; -Line(197) = {4165,4164}; -Line(198) = {4164,4163}; -Line(199) = {4163,4130}; -Line(200) = {4130,4129}; -Line(201) = {4129,4094}; -Line(202) = {4094,4093}; -Line(203) = {4093,4039}; -Line(204) = {4039,4038}; -Line(205) = {4038,4037}; -Line(206) = {4037,4092}; -Line(207) = {4092,4091}; -Line(208) = {4091,4128}; -Line(209) = {4128,4127}; -Line(210) = {4127,4162}; -Line(211) = {4162,4161}; -Line(212) = {4161,4183}; -Line(213) = {4183,4160}; -Line(214) = {4160,4159}; -Line(215) = {4159,4126}; -Line(216) = {4126,4125}; -Line(217) = {4125,4088}; -Line(218) = {4088,4087}; -Line(219) = {4087,4033}; -Line(220) = {4033,4032}; -Line(221) = {4032,4031}; -Line(222) = {4031,4086}; -Line(223) = {4086,4085}; -Line(224) = {4085,4124}; -Line(225) = {4124,4123}; -Line(226) = {4123,4158}; -Line(227) = {4158,4157}; -Line(228) = {4157,4156}; -Line(229) = {4156,4122}; -Line(230) = {4122,4121}; -Line(231) = {4121,4081}; -Line(232) = {4081,4080}; -Line(233) = {4080,4020}; -Line(234) = {4020,4019}; -Line(235) = {4019,4018}; -Line(236) = {4018,4143}; -Line(237) = {4143,4118}; -Line(238) = {4118,4022}; -Line(239) = {4022,4016}; -Line(240) = {4016,4015}; -Line(241) = {4015,4011}; -Line(242) = {4011,4010}; -Line(243) = {4010,4009}; -Line(244) = {4009,4219}; -Line(245) = {4219,4177}; -Line(246) = {4177,4176}; -Line(247) = {4176,4149}; -Line(248) = {4149,4059}; -Line(249) = {4059,4058}; -Line(250) = {4058,4055}; -Line(251) = {4055,4113}; -Line(252) = {4113,4110}; -Line(253) = {4110,4213}; -Line(254) = {4213,4210}; -Line(255) = {4210,4217}; -Line(256) = {4217,4006}; -Line(257) = {4006,4218}; -Line(258) = {4218,4211}; -Line(259) = {4211,4212}; -Line(260) = {4212,4111}; -Line(261) = {4111,4112}; -Line(262) = {4112,4056}; -Line(263) = {4056,4057}; -Line(264) = {4057,4060}; -Line(265) = {4060,4148}; -Line(266) = {4148,4150}; -Line(267) = {4150,4208}; -Line(268) = {4208,4209}; -Line(269) = {4209,4215}; -Line(270) = {4215,4216}; -Line(271) = {4216,4220}; -Line(272) = {4220,4012}; -Line(273) = {4012,4013}; -Line(274) = {4013,4014}; -Line(275) = {4014,4017}; -Line(276) = {4017,4021}; -Line(277) = {4021,4023}; -Line(278) = {4023,4117}; -Line(279) = {4117,4082}; -Line(280) = {4082,4083}; -Line(281) = {4083,4024}; -Line(282) = {4024,4025}; -Line(283) = {4025,4007}; -Line(284) = {4007,4026}; -Line(285) = {4026,4027}; -Line(286) = {4027,4028}; -Line(287) = {4028,4029}; -Line(288) = {4029,4008}; -Line(289) = {4008,4030}; -Line(290) = {4030,4084}; -Line(291) = {4084,4194}; -Line(292) = {4194,4195}; -Line(293) = {4195,4154}; -Line(294) = {4154,4155}; -Line(295) = {4155,4119}; -Line(296) = {4119,4120}; -Line(297) = {4120,4089}; -Line(298) = {4089,4090}; -Line(299) = {4090,4034}; -Line(300) = {4034,4035}; -Line(301) = {4035,4036}; -Line(302) = {4036,4144}; -Line(303) = {4144,4192}; -Line(304) = {4192,4193}; -Line(305) = {4193,4184}; -Line(306) = {4184,4185}; -Line(307) = {4185,4168}; -Line(308) = {4168,4169}; -Line(309) = {4169,4135}; -Line(310) = {4135,4136}; -Line(311) = {4136,4101}; -Line(312) = {4101,4102}; -Line(313) = {4102,4049}; -Line(314) = {4049,4050}; -Line(315) = {4050,4051}; -Line(316) = {4051,4103}; -Line(317) = {4103,4104}; -Line(318) = {4104,4137}; -Line(319) = {4137,4138}; -Line(320) = {4138,4170}; -Line(321) = {4170,4171}; -Line(322) = {4171,4186}; -Line(323) = {4186,4172}; -Line(324) = {4172,4173}; -Line(325) = {4173,4139}; -Line(326) = {4139,4140}; -Line(327) = {4140,4105}; -Line(328) = {4105,4106}; -Line(329) = {4106,4052}; -Line(330) = {4052,4053}; -Line(331) = {4053,4054}; -Line(332) = {4054,4107}; -Line(333) = {4107,4108}; -Line(334) = {4108,4141}; -Line(335) = {4141,4142}; -Line(336) = {4142,4174}; -Line(337) = {4174,4175}; -Line(338) = {4175,4187}; -Line(339) = {4187,4188}; -Line(340) = {4188,4145}; -Line(341) = {4145,4046}; -Line(342) = {4046,4047}; -Line(343) = {4047,4048}; -Line(344) = {4048,4196}; -Line(345) = {4196,4197}; -Line(346) = {4197,4198}; -Line(347) = {4198,4189}; -Line(348) = {4189,4190}; -Line(349) = {4190,4214}; -Line(350) = {4214,4181}; -Line(351) = {4181,4182}; -Line(352) = {4182,4151}; -Line(353) = {4151,4152}; -Line(354) = {4152,4064}; -Line(355) = {4064,4065}; -Line(356) = {4065,4066}; -Line(357) = {4066,4205}; -Line(358) = {4205,4206}; -Line(359) = {4206,4207}; -Line(360) = {4207,4072}; -Line(361) = {4072,4074}; -Line(362) = {4074,4073}; -Line(363) = {4073,4076}; -Line(364) = {4076,4075}; -Line(365) = {4075,4079}; -Line(366) = {4079,4078}; -Line(367) = {4078,4077}; -Line(368) = {4077,4068}; -Line(369) = {4068,4067}; -Line(370) = {4067,4069}; -Line(371) = {4069,4070}; -Line(372) = {4070,4071}; -Line(373) = {4071,4115}; -Line(374) = {4115,4116}; -Line(375) = {4116,4204}; -Line(376) = {4204,4063}; -Line(377) = {11,2233}; -Line(378) = {2233,5}; -Line(379) = {5,2236}; -Line(380) = {2236,14}; -Line(381) = {14,2}; -Line(382) = {2,15}; -Line(383) = {15,2301}; -Line(384) = {2301,6}; -Line(385) = {6,2304}; -Line(386) = {2304,18}; -Line(387) = {18,3}; -Line(388) = {3,19}; -Line(389) = {19,2240}; -Line(390) = {2240,7}; -Line(391) = {7,2243}; -Line(392) = {2243,22}; -Line(393) = {22,4}; -Line(394) = {4,23}; -Line(395) = {23,2317}; -Line(396) = {2317,8}; -Line(397) = {8,2297}; -Line(398) = {2297,10}; -Line(399) = {10,1}; -Line(400) = {1,11}; -Line(401) = {4298,4297}; -Line(402) = {4297,4222}; -Line(403) = {4222,4250}; -Line(404) = {4250,4252}; -Line(405) = {4252,4221}; -Line(406) = {4221,4251}; -Line(407) = {4251,4299}; -Line(408) = {4299,4335}; -Line(409) = {4335,4337}; -Line(410) = {4337,4267}; -Line(411) = {4267,4294}; -Line(412) = {4294,4269}; -Line(413) = {4269,4233}; -Line(414) = {4233,4234}; -Line(415) = {4234,4273}; -Line(416) = {4273,4293}; -Line(417) = {4293,4314}; -Line(418) = {4314,4317}; -Line(419) = {4317,4318}; -Line(420) = {4318,4274}; -Line(421) = {4274,4235}; -Line(422) = {4235,4236}; -Line(423) = {4236,4237}; -Line(424) = {4237,4301}; -Line(425) = {4301,4319}; -Line(426) = {4319,4321}; -Line(427) = {4321,4320}; -Line(428) = {4320,4322}; -Line(429) = {4322,4347}; -Line(430) = {4347,4323}; -Line(431) = {4323,4324}; -Line(432) = {4324,4325}; -Line(433) = {4325,4276}; -Line(434) = {4276,4238}; -Line(435) = {4238,4240}; -Line(436) = {4240,4239}; -Line(437) = {4239,4241}; -Line(438) = {4241,4277}; -Line(439) = {4277,4326}; -Line(440) = {4326,4327}; -Line(441) = {4327,4328}; -Line(442) = {4328,4350}; -Line(443) = {4350,4348}; -Line(444) = {4348,4349}; -Line(445) = {4349,4332}; -Line(446) = {4332,4333}; -Line(447) = {4333,4334}; -Line(448) = {4334,4278}; -Line(449) = {4278,4247}; -Line(450) = {4247,4248}; -Line(451) = {4248,4249}; -Line(452) = {4249,4282}; -Line(453) = {4282,4283}; -Line(454) = {4283,4341}; -Line(455) = {4341,4342}; -Line(456) = {4342,4343}; -Line(457) = {4343,4289}; -Line(458) = {4289,4290}; -Line(459) = {4290,4286}; -Line(460) = {4286,4255}; -Line(461) = {4255,4257}; -Line(462) = {4257,4256}; -Line(463) = {4256,4346}; -Line(464) = {4346,4288}; -Line(465) = {4288,4287}; -Line(466) = {4287,4260}; -Line(467) = {4260,4259}; -Line(468) = {4259,4258}; -Line(469) = {4258,4262}; -Line(470) = {4262,4261}; -Line(471) = {4261,4264}; -Line(472) = {4264,4263}; -Line(473) = {4263,4265}; -Line(474) = {4265,4266}; -Line(475) = {4266,4303}; -Line(476) = {4303,4302}; -Line(477) = {4302,4304}; -Line(478) = {4304,4305}; -Line(479) = {4305,4306}; -Line(480) = {4306,4307}; -Line(481) = {4307,4308}; -Line(482) = {4308,4309}; -Line(483) = {4309,4345}; -Line(484) = {4345,4344}; -Line(485) = {4344,4254}; -Line(486) = {4254,4253}; -Line(487) = {4253,4285}; -Line(488) = {4285,4284}; -Line(489) = {4284,4340}; -Line(490) = {4340,4339}; -Line(491) = {4339,4338}; -Line(492) = {4338,4246}; -Line(493) = {4246,4245}; -Line(494) = {4245,4281}; -Line(495) = {4281,4280}; -Line(496) = {4280,4279}; -Line(497) = {4279,4244}; -Line(498) = {4244,4243}; -Line(499) = {4243,4242}; -Line(500) = {4242,4296}; -Line(501) = {4296,4295}; -Line(502) = {4295,4300}; -Line(503) = {4300,4330}; -Line(504) = {4330,4331}; -Line(505) = {4331,4329}; -Line(506) = {4329,4232}; -Line(507) = {4232,4231}; -Line(508) = {4231,4230}; -Line(509) = {4230,4229}; -Line(510) = {4229,4228}; -Line(511) = {4228,4227}; -Line(512) = {4227,4225}; -Line(513) = {4225,4226}; -Line(514) = {4226,4312}; -Line(515) = {4312,4223}; -Line(516) = {4223,4224}; -Line(517) = {4224,4311}; -Line(518) = {4311,4310}; -Line(519) = {4310,4275}; -Line(520) = {4275,4316}; -Line(521) = {4316,4315}; -Line(522) = {4315,4313}; -Line(523) = {4313,4292}; -Line(524) = {4292,4272}; -Line(525) = {4272,4271}; -Line(526) = {4271,4270}; -Line(527) = {4270,4268}; -Line(528) = {4268,4291}; -Line(529) = {4291,4336}; -Line(530) = {4336,4298}; -Line Loop(531) = {384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,377,378,379,380,381,382,383}; -Line Loop(532) = {316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315}; -Line Loop(533) = {446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445}; -Line Loop(534) = {41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}; -Plane Surface(535) = {531,532,534,533}; diff --git a/benchmarks/3d/BOX.geo b/benchmarks/3d/BOX.geo deleted file mode 100644 index 972cf2aad39da9ebb7310b3f1d4fa21b320bd6ef..0000000000000000000000000000000000000000 --- a/benchmarks/3d/BOX.geo +++ /dev/null @@ -1,81 +0,0 @@ -/// Function Box: -// create a box - of width wBox, length lBox and height hBox -// - of lower corner xBox, yBox, zBox -// - rotated from thetaBox degrees from the x axis -// - characteristic length lcBox -//Function Box - - p1 = newp; Point(p1) = {xBox, yBox, zBox, lcBox} ; - p2 = newp; Point(p2) = {xBox+wBox, yBox, zBox, lcBox} ; - p3 = newp; Point(p3) = {xBox+wBox, yBox+lBox, zBox, lcBox} ; - p4 = newp; Point(p4) = {xBox, yBox+lBox, zBox, lcBox} ; - - p5 = newp; Point(p5) = {xBox, yBox, zBox+hBox, lcBox} ; - p6 = newp; Point(p6) = {xBox+wBox, yBox, zBox+hBox, lcBox} ; - p7 = newp; Point(p7) = {xBox+wBox, yBox+lBox, zBox+hBox, lcBox} ; - p8 = newp; Point(p8) = {xBox, yBox+lBox, zBox+hBox, lcBox} ; - - Boxes_Point1[iBox] = p1 ; - Boxes_Point2[iBox] = p2 ; - Boxes_Point3[iBox] = p3 ; - Boxes_Point4[iBox] = p4 ; - Boxes_Point5[iBox] = p5 ; - - c1 = newreg; Line(c1) = {p1,p2}; - c2 = newreg; Line(c2) = {p2,p3}; - c3 = newreg; Line(c3) = {p3,p4}; - c4 = newreg; Line(c4) = {p4,p1}; - - c5 = newreg; Line(c5) = {p5,p6}; - c6 = newreg; Line(c6) = {p6,p7}; - c7 = newreg; Line(c7) = {p7,p8}; - c8 = newreg; Line(c8) = {p8,p5}; - - c9 = newreg; Line(c9) = {p1,p5}; - c10 = newreg; Line(c10) = {p2,p6}; - c11 = newreg; Line(c11) = {p3,p7}; - c12 = newreg; Line(c12) = {p4,p8}; - - Boxes_Linep1p2[iBox] = c1 ; - Boxes_Linep2p1[iBox] = -c1 ; - Boxes_Linep2p3[iBox] = -c2 ; - Boxes_Linep3p4[iBox] = -c3 ; - Boxes_Linep4p1[iBox] = -c4 ; - Boxes_Linep5p6[iBox] = c5 ; - Boxes_Linep8p5[iBox] = -c8 ; - Boxes_Linep1p5[iBox] = c9 ; - Boxes_Linep2p6[iBox] = -c10 ; - Boxes_Linep4p8[iBox] = -c12 ; - - - l1 = newreg; Line Loop(l1) = {c1,c2,c3,c4}; Plane Surface(l1+1) = {l1}; - l2 = newreg; Line Loop(l2) = {c5,c6,c7,c8}; Plane Surface(l2+1) = {l2}; - - Rotate{{0,0,1},{xBox,yBox,zBox},thetaBox*Pi/180}{ Surface{l1+1}; } - Rotate{{0,0,1},{xBox,yBox,zBox},thetaBox*Pi/180}{ Surface{l2+1}; } - - l3 = newreg; Line Loop(l3) = {c9,-c8,-c12,c4}; Plane Surface(l3+1) = {l3}; - l4 = newreg; Line Loop(l4) = {c10,-c5,-c9,c1}; Plane Surface(l4+1) = {l4}; - l5 = newreg; Line Loop(l5) = {c6,-c11,-c2,c10}; Plane Surface(l5+1) = {l5}; - l6 = newreg; Line Loop(l6) = {c12,-c7,-c11,c3}; Plane Surface(l6+1) = {l6}; - - Boxes_LineLoop1[iBox] = l1 ; - Boxes_LineLoop2[iBox] = l2 ; - Boxes_LineLoop3[iBox] = l3 ; - Boxes_LineLoop4[iBox] = l4 ; - Boxes_LineLoop5[iBox] = l5 ; - Boxes_LineLoop6[iBox] = l6 ; - - Boxes_PlanSurf1[iBox] = l1+1; - Boxes_PlanSurf2[iBox] = l2+1; - Boxes_PlanSurf3[iBox] = l3+1; - Boxes_PlanSurf4[iBox] = l4+1; - Boxes_PlanSurf5[iBox] = l5+1; - Boxes_PlanSurf6[iBox] = l6+1; - - s = newreg; Surface Loop(s) = {l2+1,l4+1,l5+1,l6+1,l3+1,l1+1}; Volume(s+1) = s ; - - Boxes_SurfaceLoop[iBox] = s ; - Boxes_Volume[iBox] = s+1 ; - -//Return diff --git a/benchmarks/3d/Cube-02.geo b/benchmarks/3d/Cube-02.geo deleted file mode 100644 index 9d838badf41850dfc13ee50cfa376c71377048f4..0000000000000000000000000000000000000000 --- a/benchmarks/3d/Cube-02.geo +++ /dev/null @@ -1,18 +0,0 @@ -/***************************** -cube meshed -non uniformly -*****************************/ -Point(1) = {0.0,0.0,0.0,.04}; -Point(2) = {1,0.0,0.0,.2}; -Point(3) = {1,1,0.0,.1}; -Point(4) = {0,1,0.0,.2}; -Line(1) = {4,3}; -Line(2) = {3,2}; -Line(3) = {2,1}; -Line(4) = {1,4}; -Line Loop(5) = {2,3,4,1}; -Plane Surface(6) = {5}; -Extrude Surface {6, {0,0.0,1}}; - -Surface Loop(29) = {23,6,15,19,28,27}; -Complex Volume(30) = {29}; diff --git a/benchmarks/3d/Cube-03.geo b/benchmarks/3d/Cube-03.geo deleted file mode 100644 index c6d350a14de57bab12a760d5cee55597881a99e5..0000000000000000000000000000000000000000 --- a/benchmarks/3d/Cube-03.geo +++ /dev/null @@ -1,10 +0,0 @@ -/***************************** -Another Way to generate -a cube -*****************************/ -Point(1) = {0.0,0.0,0.0,.2}; -Extrude Point {1, {1,0.0,0} }; -Extrude Line {1, {0.0,0.0,1} }; -Extrude Surface {5, {0,1,0} }; -Surface Loop(28) = {26,5,14,18,22,27}; -Complex Volume(29) = {28}; diff --git a/benchmarks/3d/Cube-04.geo b/benchmarks/3d/Cube-04.geo deleted file mode 100644 index cbfe75ad9e39f10350a9af8bebf9cb3628b51488..0000000000000000000000000000000000000000 --- a/benchmarks/3d/Cube-04.geo +++ /dev/null @@ -1,20 +0,0 @@ -/***************************** -A cube with a hole -*****************************/ - -Point(1) = {0.0,0.0,0.0,.1}; -Extrude Point {1, {1,0.0,0} }; -Extrude Line {1, {0.0,0.0,1} }; -Extrude Surface {5, {0,1,0} }; - -Point(100) = {0.3,0.3,0.3,.02}; -Extrude Point {100, {.4,0.0,0} }; -Extrude Line {28, {0,0.4,0} }; -Coherence; -Extrude Surface {32, {0,0.,0.4} }; -Coherence; - -Surface Loop(55) = {26,5,14,18,22,27}; -Surface Loop(56) = {41,32,45,49,53,54}; -Complex Volume(57) = {55,56}; - diff --git a/benchmarks/3d/Cube-05.geo b/benchmarks/3d/Cube-05.geo deleted file mode 100644 index 74061352e6825cfec453356716d29c3640e2200e..0000000000000000000000000000000000000000 --- a/benchmarks/3d/Cube-05.geo +++ /dev/null @@ -1,30 +0,0 @@ -/***************************** -cube with a hole -*****************************/ -lv = .1; -lc = .04; -Point(1) = {0.0,0.0,0.0,lv}; -Point(2) = {1,0.0,0.0,lv}; -Point(3) = {1,1,0.0,lv}; -Point(4) = {0,1,0.0,lv}; -Line(1) = {4,3}; -Line(2) = {3,2}; -Line(3) = {2,1}; -Line(4) = {1,4}; -Point(11) = {0.5,0.5,0.0,lc}; -Point(12) = {0.5,0.7,0.0,lc}; -Point(13) = {0.5,0.3,0.0,lc}; -Point(14) = {0.3,0.5,0.0,lc}; -Point(15) = {0.7,0.5,0.0,lc}; -Circle(5) = {15,11,12}; -Circle(6) = {12,11,14}; -Circle(7) = {14,11,13}; -Circle(8) = {13,11,15}; -Line Loop(9) = {1,2,3,4}; -Line Loop(10) = {7,8,5,6}; -Plane Surface(11) = {9,10}; - -Extrude Surface{11, {0.0,1,0}, {-.5,0.0,0.0}, 3.14159/4 } ; -Coherence; -Surface Loop(54) = {36,11,24,28,32,53,40,44,48,52}; -Complex Volume(55) = {54}; diff --git a/benchmarks/3d/Cube-06.geo b/benchmarks/3d/Cube-06.geo deleted file mode 100644 index f73f583533b88f556761aa6c698c9e8b88b370cb..0000000000000000000000000000000000000000 --- a/benchmarks/3d/Cube-06.geo +++ /dev/null @@ -1,29 +0,0 @@ -/***************************** -cube with a hole -*****************************/ -lv = .1; -lc = .04; -Point(1) = {0.0,0.0,0.0,lv}; -Point(2) = {1,0.0,0.0,lv}; -Point(3) = {1,1,0.0,lv}; -Point(4) = {0,1,0.0,lv}; -Line(1) = {4,3}; -Line(2) = {3,2}; -Line(3) = {2,1}; -Line(4) = {1,4}; -Point(11) = {0.5,0.5,0.0,lc}; -Point(12) = {0.5,0.7,0.0,lc}; -Point(13) = {0.5,0.3,0.0,lc}; -Point(14) = {0.3,0.5,0.0,lc}; -Point(15) = {0.7,0.5,0.0,lc}; -Circle(5) = {15,11,12}; -Circle(6) = {12,11,14}; -Circle(7) = {14,11,13}; -Circle(8) = {13,11,15}; -Line Loop(9) = {1,2,3,4}; -Line Loop(10) = {7,8,5,6}; -Plane Surface(11) = {9,10}; -Extrude Surface {11, {.0,0.0,.5} }; -Coherence; -Surface Loop(54) = {24,11,28,32,36,53,40,44,48,52}; -Complex Volume(55) = {54}; diff --git a/benchmarks/3d/Cube-07.geo b/benchmarks/3d/Cube-07.geo deleted file mode 100644 index 81ccdebf548703e55acb5d97e93488f824f839fb..0000000000000000000000000000000000000000 --- a/benchmarks/3d/Cube-07.geo +++ /dev/null @@ -1,12 +0,0 @@ -Point(1) = {0.0,0.0,0.0,.1}; -Point(2) = {0.0,0.0,1,.1}; -Point(3) = {0.0,1,1,.1}; -Point(4) = {0.0,1,0,.1}; -Line(1) = {1,2}; -Line(2) = {2,3}; -Line(3) = {3,4}; -Line(4) = {4,1}; -Line Loop(5) = {1,2,3,4}; -Plane Surface(6) = {5}; -Extrude Surface {6, {1.0,0.0,0.0} }; -Coherence; diff --git a/benchmarks/3d/Cube-Attr-01.geo b/benchmarks/3d/Cube-Attr-01.geo deleted file mode 100644 index 71f98e23c571c71f6316c1cc597653a8f690f64b..0000000000000000000000000000000000000000 --- a/benchmarks/3d/Cube-Attr-01.geo +++ /dev/null @@ -1,30 +0,0 @@ - -Mesh.Algorithm = 2 ; - - -Point(1) = {0.0,0.0,0.0,.2}; -Point(2) = {1,0.0,0.0,.2}; -Point(3) = {1,1,0.0,.2}; -Point(4) = {0,1,0.0,.2}; -Line(1) = {4,3}; -Line(2) = {3,2}; -Line(3) = {2,1}; -Line(4) = {1,4}; -Line Loop(5) = {2,3,4,1}; -Plane Surface(6) = {5}; -Extrude Surface {6, {0,0.0,1}}; - -Surface Loop(29) = {23,6,15,19,28,27}; -Complex Volume(30) = {29}; - -Attractor Point{1,4,5,6,10,14} = {0.05,0.05,2} ; - -Point(16) = {-.5,.5,.5,1.0}; -Point(17) = {1.5,.5,.8,1.0}; -Line(30) = {16,17}; -Attractor Line{30} = {0.1,0.1,2}; - -Point(18) = {-.2,.7,1.3,1.0}; -Point(19) = {1.22,.1,-.8,1.0}; -Line(31) = {18,19}; -Attractor Line{31} = {0.01,0.01,2}; diff --git a/benchmarks/3d/Cube-Attr-02.geo b/benchmarks/3d/Cube-Attr-02.geo deleted file mode 100644 index 17f2b0b8ad20885271cd612be549ff33c36ebb03..0000000000000000000000000000000000000000 --- a/benchmarks/3d/Cube-Attr-02.geo +++ /dev/null @@ -1,22 +0,0 @@ -/***************************** -cube meshed uniformly -*****************************/ - -Mesh.Algorithm = 2; - -Point(1) = {0.0,0.0,0.0,.3}; -Point(2) = {1,0.0,0.0,.3}; -Point(3) = {1,1,0.0,.3}; -Point(4) = {0,1,0.0,.3}; -Line(1) = {4,3}; -Line(2) = {3,2}; -Line(3) = {2,1}; -Line(4) = {1,4}; -Line Loop(5) = {2,3,4,1}; -Plane Surface(6) = {5}; -Extrude Surface{6, {0,0.0,1}}; - -Surface Loop(29) = {23,6,15,19,28,27}; -Complex Volume(30) = {29}; - -Attractor Point{1} = {0.1,0.1,2}; diff --git a/benchmarks/3d/Revolve.geo b/benchmarks/3d/Revolve.geo deleted file mode 100644 index 2a4627ce43eb80857d0ee3a08f75d2372c4cfa60..0000000000000000000000000000000000000000 --- a/benchmarks/3d/Revolve.geo +++ /dev/null @@ -1,17 +0,0 @@ -lc = .1; -Point(1) = {2.0,0.0,0.0,lc}; -Point(2) = {2.0,1,0.0,lc}; -Point(3) = {1,0,0.0,lc}; -Point(4) = {3,0,0.0,lc}; -Point(5) = {2,-1,0.0,lc}; -Line(1) = {4,2}; - -Line(2) = {2,3}; -Line(3) = {3,5}; -Line(4) = {5,4}; -Line Loop(5) = {4,1,2,3}; -Plane Surface(6) = {5}; - -Extrude Surface{6, {0.0,1,0}, {0,0.0,0.0}, 3.14159/4}; - -Coherence; diff --git a/benchmarks/3d/Revolve2-Attr.geo b/benchmarks/3d/Revolve2-Attr.geo deleted file mode 100644 index ed583cb757b3e1dfcc5f37b0d5a078e0eea1cfbb..0000000000000000000000000000000000000000 --- a/benchmarks/3d/Revolve2-Attr.geo +++ /dev/null @@ -1,22 +0,0 @@ - -Mesh.Algorithm = 2; - -lc = .3; -Point(2) = {3.0,-1.0,0.0,lc}; -Point(3) = {1,-1,0.0,lc}; -Point(4) = {3,1,0.0,lc}; -Point(5) = {1,1,0.0,lc}; -Line(1) = {4,2}; -Line(2) = {2,3}; -Line(3) = {3,5}; -Line(4) = {5,4}; -Line Loop(5) = {4,1,2,3}; -Plane Surface(6) = {5}; - -Extrude Surface{6, {0.0,1,0}, {0,0.0,0.0}, 3.14159/2 }; - -Coherence; - -Attractor Line{14} = {.1,.1,1.0} ; -Surface Loop(29) = {15,6,19,23,27,28}; -Complex Volume(30) = {29}; diff --git a/benchmarks/3d/Revolve2.geo b/benchmarks/3d/Revolve2.geo deleted file mode 100644 index 685b78a6289e5ae14ec4c9cadc1766de85abc1e8..0000000000000000000000000000000000000000 --- a/benchmarks/3d/Revolve2.geo +++ /dev/null @@ -1,30 +0,0 @@ -lc = .3; -Point(2) = {3.0,-1.0,0.0,lc}; -Point(3) = {1,-1,0.0,lc}; -Point(4) = {3,1,0.0,lc}; -Point(5) = {1,1,0.0,lc}; -Line(1) = {4,2}; -Line(2) = {2,3}; -Line(3) = {3,5}; -Line(4) = {5,4}; -Line Loop(5) = {4,1,2,3}; -Plane Surface(6) = {5}; - -Extrude Surface{6, {0.0,1,0}, {0,0.0,0.0}, 3.14159/2}; - -Coherence; -Delete { - Surface{6}; -} -Delete { - Surface{15}; -} -Delete { - Surface{28}; -} -Delete { - Surface{23}; -} -Delete { - Surface{27}; -} diff --git a/benchmarks/3d/Revolve3.geo b/benchmarks/3d/Revolve3.geo deleted file mode 100644 index fcf25a64064d9db7585a163e7cdec163188db615..0000000000000000000000000000000000000000 --- a/benchmarks/3d/Revolve3.geo +++ /dev/null @@ -1,8 +0,0 @@ -Point(1) = {0.0,0.0,0.0,.2}; -Point(2) = {1,1,0.0,.2}; -Point(3) = {2,1.2,0.0,.2}; -Point(4) = {3,0,0.0,.2}; -Point(5) = {4,1,0.0,.2}; -CatmullRom(1) = {1,2,3,4,5}; -Extrude Line{ 1, {0.0,1,0}, {-1,0.0,0.0}, 3.14159/2 }; -Coherence; diff --git a/benchmarks/3d/Sphere.geo b/benchmarks/3d/Sphere.geo deleted file mode 100644 index 2efe1e02c31f30607d108abf75c176a3ebd2bbd2..0000000000000000000000000000000000000000 --- a/benchmarks/3d/Sphere.geo +++ /dev/null @@ -1,42 +0,0 @@ -lc = .1; -Point(1) = {0.0,0.0,0.0,lc}; -Point(2) = {1,0.0,0.0,lc}; -Point(3) = {0,1,0.0,lc}; -Circle(1) = {2,1,3}; -Point(4) = {-1,0,0.0,lc}; -Point(5) = {0,-1,0.0,lc}; -Circle(2) = {3,1,4}; -Circle(3) = {4,1,5}; -Circle(4) = {5,1,2}; -Point(6) = {0,0,-1,lc}; -Point(7) = {0,0,1,lc}; -Circle(5) = {3,1,6}; -Circle(6) = {6,1,5}; -Circle(7) = {5,1,7}; -Circle(8) = {7,1,3}; -Circle(9) = {2,1,7}; -Circle(10) = {7,1,4}; -Circle(11) = {4,1,6}; -Circle(12) = {6,1,2}; -Line Loop(13) = {-2,-8,10}; -Ruled Surface(14) = {13}; -Line Loop(15) = {10,3,7}; -Ruled Surface(16) = {15}; -Line Loop(17) = {-8,-9,1}; -Ruled Surface(18) = {17}; -Line Loop(19) = {-11,-2,5}; -Ruled Surface(20) = {19}; -Line Loop(21) = {5,12,1}; -Ruled Surface(22) = {21}; -Line Loop(23) = {-3,11,6}; -Ruled Surface(24) = {23}; -Line Loop(25) = {-7,4,9}; -Ruled Surface(26) = {25}; -Line Loop(27) = {4,-12,6}; -Ruled Surface(28) = {27}; - -Surface Loop(29) = {28,26,16,14,20,24,22,18}; -Complex Volume(30) = {29}; - -Physical Volume(1) = 30; -Physical Surface(2) = {14:28:2}; diff --git a/benchmarks/3d/Torus-Attr.geo b/benchmarks/3d/Torus-Attr.geo deleted file mode 100644 index 574164451773a5bed5efe115f1ec7b472f70e83b..0000000000000000000000000000000000000000 --- a/benchmarks/3d/Torus-Attr.geo +++ /dev/null @@ -1,21 +0,0 @@ - -Mesh.Algorithm = 2; - -lc = .2; -Point(1) = {2.0,0.0,0.0,lc}; -Point(2) = {2.0,1,0.0,lc}; -Point(3) = {1,0,0.0,lc}; -Point(4) = {3,0,0.0,lc}; -Point(5) = {2,-1,0.0,lc}; -Circle(1) = {4,1,2}; - -Circle(2) = {2,1,3}; -Circle(3) = {3,1,5}; -Circle(4) = {5,1,4}; -Line Loop(5) = {4,1,2,3}; -Plane Surface(6) = {5}; - -Extrude Surface{ 6, {0.0,1,0}, {0,0.0,0.0}, 1.5*3.14159/2 }; - -Coherence; -Attractor Line {22} = {1,.1,2.0}; diff --git a/benchmarks/3d/Torus.geo b/benchmarks/3d/Torus.geo deleted file mode 100644 index 5848a1f2f2aea0ea4032fcf0ebaec444949c7141..0000000000000000000000000000000000000000 --- a/benchmarks/3d/Torus.geo +++ /dev/null @@ -1,17 +0,0 @@ -lc = .2; -Point(1) = {2.0,0.0,0.0,lc}; -Point(2) = {2.0,1,0.0,lc}; -Point(3) = {1,0,0.0,lc}; -Point(4) = {3,0,0.0,lc}; -Point(5) = {2,-1,0.0,lc}; -Circle(1) = {4,1,2}; - -Circle(2) = {2,1,3}; -Circle(3) = {3,1,5}; -Circle(4) = {5,1,4}; -Line Loop(5) = {4,1,2,3}; -Plane Surface(6) = {5}; - -Extrude Surface{6, {0.0,1,0}, {0,0.0,0.0}, 1*3.14159/2}; - -Coherence; diff --git a/benchmarks/3d/avetole.geo b/benchmarks/3d/avetole.geo deleted file mode 100644 index c8a2b7880f0db99e76cc7e3f33fedf009251c89d..0000000000000000000000000000000000000000 --- a/benchmarks/3d/avetole.geo +++ /dev/null @@ -1,322 +0,0 @@ -// (c)patrick lefevre - -mm = 0.001 ; // 1 milimetre = 0.001 metre -lc = 7.3*mm ; // unite de base min pour la taille caracteristique du maillage - -lcpba2 = 2*lc ; // lc dessous plaque base -lcpba1 = lc ; // lc dessus plaque base -lcrint1 = 3*lc ; // lc coquille spherique superieure -lcrint2 = 3*lc ; // lc coquille spherique inferieure -lcrext1 = 3*lcrint1 ; // lc coquille spherique infini superieure -lcrext2 = 3*lcrint2 ; // lc coquille spherique infini inferieure - -// definition de longueur de la plaque base - -eppba = 28. *mm ; // epaisseur plaque base -longpba = 640./2 *mm ; // longueur plaque base -largpba = 550./2 *mm ; // largeur plaque base -rint = 500. *mm ; // rayon interne coquille spherique -rext = 1.5 * rint ; // rayon externe coquille spherique -// Definition de la plaque base - -Point(1) = { 0.0 , 0.0 , 0.0 , lcpba2 }; -Point(2) = { largpba , 0.0 , 0.0 , lcpba2 }; -Point(3) = { largpba , longpba , 0.0 , lcpba2 }; -Point(4) = { 0.0 , longpba , 0.0 , lcpba2 }; - -Point(5) = { 0.0 , 0.0 , eppba , lcpba1 }; -Point(6) = { largpba , 0.0 , eppba , lcpba1 }; -Point(7) = { largpba , longpba , eppba , lcpba1 }; -Point(8) = { 0.0 , longpba , eppba , lcpba1 }; - -Line(9) = {1,2}; -Line(10) = {2,3}; -Line(11) = {3,4}; -Line(12) = {4,1}; - -Line(14) = {6,7}; -Line(15) = {7,8}; - -Line(17) = {1,5}; -Line(18) = {2,6}; -Line(19) = {3,7}; -Line(20) = {4,8}; - -//la surface sur laquelle repose les aimants va etre definie plus tard,et donc aussi le volume -Line Loop(21) = {9,10,11,12}; -Plane Surface(22) = {21}; -Line Loop(25) = {-14,-18,10,19}; -Plane Surface(26) = {25}; -Line Loop(27) = {20,-15,-19,11}; -Plane Surface(28) = {27}; - -// Air au dessus des aimants pour le degre 2 -epair = eppba +20*mm +60*mm ; -tranZ = 60*mm ; -Point(32) = { 0.0 , 0.0 , epair , lcpba2 }; -Point(33) = { largpba , 0.0 , epair , lcpba2 }; -Point(34) = { largpba , longpba , epair , lcpba2 }; -Point(35) = { 0.0 , longpba , epair , lcpba2 }; - -centre=newreg; -Point(centre) = { 0.0 , 0.0 , tranZ , lcpba2 }; - -Line(37) = {32,33}; -Line(38) = {33,34}; -Line(39) = {34,35}; -Line(40) = {35,32}; -Line Loop(41) = {40,37,38,39}; -Plane Surface(42) = {41}; - -// tole sur laquelle on veut calculer la force - -hautole = 53*mm; - -Point(50) = { 0.0 , 0.0 , hautole , lc/3 }; -Point(51) = { largpba , 0.0 , hautole , lc/3 }; -Point(52) = { largpba , 215*mm , hautole , lc/3 }; -Point(53) = { 0.0 , 215*mm , hautole , lc/3 }; -Point(54) = { largpba , longpba , hautole , lc }; -Point(55) = { 0.0 , longpba , hautole , lc }; - -Line(43) = {6,51}; -Line(44) = {7,54}; -Line(45) = {8,55}; -Line(56) = {50,51}; -Line(57) = {51,52}; -Line(58) = {52,53}; -Line(59) = {53,50}; -Line(60) = {52,54}; -Line(61) = {53,55}; -Line(62) = {54,55}; -Line(63) = {50,32}; -Line(64) = {51,33}; -Line(65) = {54,34}; -Line(66) = {55,35}; - - -Line Loop(67) = {56,57,58,59}; -Plane Surface(68) = {67}; -Line Loop(69) = {-58,60,62,-61}; -Plane Surface(70) = {69};Line Loop(71) = {64,-37,-63,56}; -Plane Surface(72) = {71}; -Line Loop(73) = {-65,-60,-57,64,38}; -Plane Surface(74) = {73}; -Line Loop(75) = {66,-39,-65,62}; -Plane Surface(76) = {75}; -Line Loop(77) = {66,40,-63,-59,61}; -Plane Surface(78) = {77}; -Surface Loop(79) = {42,78,76,74,70,68,72}; -Volume(80) = {79}; - -Line Loop(80) = {44,-60,-57,-43,14}; -Plane Surface(81) = {80}; -Line Loop(82) = {-45,-15,44,62}; -Plane Surface(83) = {82}; - - - -// -//Spheres_infini -// -Point(100) = { rint , 0.0 , tranZ , lcrint1 }; -Point(101) = { rext , 0.0 , tranZ , lcrext1 }; -Point(102) = { 0.0 , rint , tranZ , lcrint1 }; -Point(103) = { 0.0 , rext , tranZ , lcrext1 }; -Point(104) = { 0.0 , 0.0 , rext+tranZ , lcrext1 }; -Point(105) = { 0.0 , 0.0 , rint+tranZ , lcrint1 }; -Point(106) = { 0.0 , 0.0 , -rint+tranZ , lcrint2 }; -Point(107) = { 0.0 , 0.0 , -rext+tranZ , lcrext2 }; - -Line(108)={1,106}; -Line(109)={106,107}; -Line(110)={32,105}; -Line(111)={105,104}; - -Circle(112) = {100, centre,105}; -Circle(113) = {101, centre,104}; -Circle(114) = {102, centre,105}; -Circle(115) = {103, centre,104}; -Circle(116) = {100, centre,106}; -Circle(117) = {101, centre,107}; -Circle(118) = {102, centre,106}; -Circle(119) = {103, centre,107}; -Circle(120) = {100, centre,102}; -Circle(121) = {101, centre,103}; - -Line Loop(122) = {-112,120,114}; -Ruled Surface(123) = {122}; -Line Loop(124) = {-113,121,115}; -Ruled Surface(125) = {124}; -Line Loop(126) = {118,-116,120}; -Ruled Surface(127) = {126}; -Line Loop(128) = {-119,-121,117}; -Ruled Surface(129) = {128}; - -Line Loop(130) = {-112,116,-108,9,18,43,64,-37,110}; -Plane Surface(131) = {130}; -Line Loop(132) = {109,-117,113,-111,-112,116}; -Plane Surface(133) = {132}; -Line Loop(134) = {-114,118,-108,-12,20,45,66,40,110}; -Plane Surface(135) = {134}; -Line Loop(136) = {109,-119,115,-111,-114,118}; -Plane Surface(137) = {136}; - -Surface Loop(138) = {74,76,135,123,131,127,22,26,81,83,28,42}; -Volume(139) = {138}; -Surface Loop(139) = {123,133,137,129,125,127}; -Volume(140) = {139}; - - -// la partie suivante definit les caracteristiques des differents aimants (longueur, largeur, hauteur, espacement, ancrage, angle de rotation) - -nbx = 5; //nbre d'aimant sur l' axe x -nby = 5; //nbre d'aimant sur l' axe y -totsym = nbx+nby; -nbc = 32; //nbre d'aimant centraux -totaim = totsym+nbc; - - -longaim[]= {20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,40*mm,40*mm,40*mm,40*mm,10*mm,40*mm,40*mm,40*mm,40*mm,40*mm,40*mm,40*mm,40*mm,40*mm,10*mm,40*mm,40*mm,40*mm,40*mm,40*mm,40*mm,40*mm,40*mm,40*mm,40*mm,10*mm,40*mm,40*mm,40*mm,40*mm,40*mm,40*mm,190*mm,190*mm,190*mm,190*mm,190*mm}; // liste des longueurs des aimants -largaim[]= {7.5*mm,15*mm,15*mm,15*mm,15*mm,15*mm,7.5*mm,7.5*mm,7.5*mm,7.5*mm,7.5*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,15*mm,10*mm,10*mm,10*mm,10*mm,10*mm}; // liste des largeurs des aimants -hautaim[]= {20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm,20*mm}; // liste des hauteurs des aimants -xancaim[]= {0*mm,37.5*mm,82.5*mm,127.5*mm,172.5*mm,217.5*mm,0*mm,0*mm,0*mm,0*mm,0*mm,37.5*mm,37.5*mm,37.5*mm,37.5*mm,38*mm,82.5*mm,82.5*mm,82.5*mm,82.5*mm,82.5*mm,127.5*mm,127.5*mm,127.5*mm,127.5*mm,128*mm,46.3*mm,172.5*mm,172.5*mm,172.5*mm,172.5*mm,172.5*mm,217.5*mm,217.5*mm,217.5*mm,217.5*mm,218*mm,136.3*mm,197.5*mm,152.5*mm,107.5*mm,62.5*mm,17.5*mm}; // liste des xBox des aimants -espaaim[]= {0*mm,0*mm,0*mm,0*mm,0*mm,0*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,2.5*mm,0*mm,0*mm,0*mm,0*mm,0*mm}; // liste des espaces entre aimants - -For i In {0:totaim} //boucle pour creer la coord y du point d'ancrage des aimants - If (i>=0 && i<=nbx) - yancaim[i]= 0*mm;EndIf - If (i==nbx+1) - yancaim[i]= espaaim[i]+longaim[0];EndIf - If (i>nbx+1 && i<=totsym) - yancaim[i]= espaaim[i]+yancaim[i-1]+longaim[i-1];EndIf - If (i==totsym+1) - yancaim[i]=espaaim[i]+longaim[1];EndIf - If (i>totsym+1 && i<=15) - yancaim[i]= espaaim[i]+yancaim[i-1]+longaim[i-1];EndIf - If (i==16) - yancaim[i]=espaaim[i]+longaim[2];EndIf - If (i>16 && i<=20) - yancaim[i]= espaaim[i]+yancaim[i-1]+longaim[i-1];EndIf - If (i==21) - yancaim[i]=espaaim[i]+longaim[3];EndIf - If (i>21 && i<=25) - yancaim[i]= espaaim[i]+yancaim[i-1]+longaim[i-1];EndIf - If (i==26) - yancaim[i]= 206.36*mm;EndIf - If (i==27) - yancaim[i]=espaaim[i]+longaim[4];EndIf - If (i>27 && i<=31) - yancaim[i]= espaaim[i]+yancaim[i-1]+longaim[i-1];EndIf - If (i==32) - yancaim[i]=espaaim[i]+longaim[5];EndIf - If (i>32 && i<=36) - yancaim[i]= espaaim[i]+yancaim[i-1]+longaim[i-1];EndIf - If (i==37) - yancaim[i]= 206.36*mm;EndIf - If (i==38) - yancaim[i]= 5*mm;EndIf - If (i==39) - yancaim[i]= 5*mm;EndIf - If (i==40) - yancaim[i]= 5*mm;EndIf - If (i==41) - yancaim[i]= 5*mm;EndIf - If (i==42) - yancaim[i]= 5*mm;EndIf -EndFor -anglerot[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,0,0,0,0,0,0,0,0,0,63,-63,0,0,0,0,0,0,0,0,0,63,-63,0,0,0,0,0};//liste des angles de rotation des aimants - -// Introduction des aimants -For i In {0:totaim} - iBox=i; wBox=largaim[i]; lBox=longaim[i]; hBox=hautaim[i]; - xBox=xancaim[i]; - yBox=yancaim[i]; zBox= eppba ; lcBox=lc; thetaBox= anglerot[i]; - Include "BOX.geo"; -EndFor - -For tx In {1:nbx} // creation des lignes manquantes sur l'axe x - divline = newreg; - Line(divline) = {Boxes_Point2[tx-1],Boxes_Point1[tx]}; - Boxes_divx[tx-1]=divline; -EndFor - -divline = newreg;// creation des lignes manquantes sur l'axe y -Line(divline) = {Boxes_Point4[0],Boxes_Point1[nbx+1]}; -Boxes_divy[0]=divline; -Boxes_divyN[0]=-divline; - -For i In {1:(nby-1)} - divline = newreg; - Line(divline) = {Boxes_Point4[i+nbx],Boxes_Point1[i+nbx+1]}; - Boxes_divy[i]=divline; - Boxes_divyN[i]=-divline; -EndFor - -derx = newreg; -Line(derx)= {Boxes_Point2[nbx],6}; -axex[]={Boxes_divx[],derx}; - -maille = newreg; -Point(maille)={ 0.0 , 250*mm , eppba , lcpba1 }; -dery1= newreg; -Line(dery1)={maille,8}; - -dery = newreg; -Line(dery)= {Boxes_Point4[totsym],maille}; -axey[]={Boxes_divy[],dery,dery1}; -axeyN[]={Boxes_divyN[],-dery,-dery1}; -axez = newreg; -Line(axez)={Boxes_Point5[0],50}; - -//il manque 5 surface - -surfxpb = newreg; -Line Loop(surfxpb)= {Boxes_Linep1p2[{0:nbx}],axex[],-18,-9,17}; -Plane Surface(surfxpb+1)= {surfxpb}; - -surfypb = newreg; -Line Loop(surfypb)= {Boxes_Linep4p1[0],Boxes_Linep4p1[{(nbx+1):(totsym)}],axey[],-20,12,17}; -Plane Surface(surfypb+1)= {surfypb}; - -surfxair = newreg; -Line Loop(surfxair)= {Boxes_Linep5p6[{0:nbx}],Boxes_Linep2p6[{0:nbx}],Boxes_Linep1p5[{1:nbx}],axex[],43,-56,-axez}; -Plane Surface(surfxair+1)= {surfxair}; - -surfyair = newreg; -Line Loop(surfyair)= {Boxes_Linep8p5[0],Boxes_Linep4p8[0],Boxes_Linep4p8[{(nbx+1):(totsym)}],Boxes_Linep8p5[{(nbx+1):(totsym)}],axey[],Boxes_Linep1p5[{(nbx+1):(totsym)}],45,-61,59,-axez}; -Plane Surface(surfyair+1)= {surfyair}; - - -surfbase = newreg; -Line Loop(surfbase)= {axex[],Boxes_Linep3p4[{0:totsym}],Boxes_Linep2p3[{0:totsym}],Boxes_Linep4p1[{1:nbx}],Boxes_Linep2p1[{(nbx+1):(totsym)}],14,15,axeyN[]}; -Plane Surface(surfbase+1)= {surfbase,Boxes_LineLoop1[{totsym+1:totaim}]}; - -// il manque 2 volume - -volpb = newreg; -Surface Loop(volpb)={surfxpb+1,26,28,22,surfypb+1,surfbase+1,Boxes_PlanSurf1[]}; -Volume(volpb+1)= {volpb}; - -volair = newreg; -Surface Loop(volair)={surfxair+1,surfyair+1,surfbase+1,68,70,81,83,Boxes_PlanSurf2[],Boxes_PlanSurf6[],Boxes_PlanSurf5[],Boxes_PlanSurf3[{1:nbx}],Boxes_PlanSurf3[{(totsym+1):totaim}],Boxes_PlanSurf4[{(nbx+1):(totaim)}]}; -Volume(volair+1)={volair}; - -// definition des entites physiques - -Physical Volume(9999)={volpb+1,Boxes_Volume[10],Boxes_Volume[20],Boxes_Volume[31],Boxes_Volume[{totaim-4:totaim}]}; -Physical Volume(9998)={volair+1,80}; -Physical Volume(9997)={139}; -Physical Volume(9996)={140}; - -//config2Physical Volume(8888)={Boxes_Volume[0],Boxes_Volume[2],Boxes_Volume[{nbx+1:totsym}],Boxes_Volume[{14:16}]}; -//config2Physical Volume(8887)={Boxes_Volume[1],Boxes_Volume[3],Boxes_Volume[{9:13}],Boxes_Volume[{17:22}]}; -Physical Volume(8888)={Boxes_Volume[0],Boxes_Volume[2],Boxes_Volume[4],Boxes_Volume[{nbx+1:totsym-1}],Boxes_Volume[{16:19}],Boxes_Volume[{27:30}]}; -Physical Volume(8887)={Boxes_Volume[1],Boxes_Volume[3],Boxes_Volume[5],Boxes_Volume[{11:15}],Boxes_Volume[{21:26}],Boxes_Volume[{32:37}]}; - -Physical Surface(7776)={125,129}; -Physical Surface(7777)={Boxes_PlanSurf4[{0:nbx}],surfxpb+1,surfxair+1,72,131,133,Boxes_PlanSurf3[0],Boxes_PlanSurf3[{nbx+1:totsym}],surfypb+1,surfyair+1,135,137,78}; - - -Physical Surface(6666)={68}; - diff --git a/benchmarks/3d/brain.geo b/benchmarks/3d/brain.geo deleted file mode 100644 index e42ba7b2511f172392a135c9524abc292481dc83..0000000000000000000000000000000000000000 --- a/benchmarks/3d/brain.geo +++ /dev/null @@ -1,35 +0,0 @@ -Point(newp) = {0,0,0,0.1}; /* Point 1 */ -Point(newp) = {1,0,0,0.1}; /* Point 2 */ -Point(newp) = {-1,0,0,0.1}; /* Point 3 */ - -Point(newp) = {0,.8,0,0.1}; /* Point 4 */ -Point(newp) = {0,0,.8,0.1}; /* Point 5 */ -Point(newp) = {0,0,-.8,0.1}; /* Point 6 */ - -Point(newp) = {.1,0,-.79,.1}; /* Point 7 */ -Point(newp) = {.3,0,-.73,.1}; /* Point 8 */ -Point(newp) = {.65,0,-.55,.1}; /* Point 9 */ -Point(newp) = {.9,0,-.38,.1}; /* Point 10 */ - -Point(newp) = {.1,0,.79,.1}; /* Point 11 */ -Point(newp) = {.3,0,.73,.1}; /* Point 12 */ -Point(newp) = {.65,0,.55,.1}; /* Point 13 */ -Point(newp) = {.9,0,.38,.1}; /* Point 14 */ - -Spline(1) = {6,7,8,9,10,2}; -Circle(2) = {6,1,4}; -Circle(3) = {2,1,1,4}; -Line Loop(4) = {3,-2,1}; -Ruled Surface(5) = {4}; - -Spline(6) = {5,11,12,13,14,2}; -Circle(7) = {5,1,4}; -Line Loop(8) = {3,-7,6}; -Ruled Surface(9) = {8}; -Line(10) = {6,5}; -Line Loop(11) = {7,-2,10}; -Plane Surface(12) = {11}; -Line Loop(13) = {-1,10,6}; -Plane Surface(14) = {13}; -Surface Loop(15) = {12,9,-5,-14}; -Complex Volume(16) = {15}; diff --git a/benchmarks/3d/bug_prot.geo b/benchmarks/3d/bug_prot.geo deleted file mode 100644 index 03c89fbcfa162a84409ebfa3bd83b36a6e8e9f7b..0000000000000000000000000000000000000000 --- a/benchmarks/3d/bug_prot.geo +++ /dev/null @@ -1,6 +0,0 @@ -c45 = 0.5 * (2^0.5); -Point(1) = {0.0,0.0,0.0,1.0}; -Point(2) = {-c45,c45,0.0,1.0}; -Line(1) = {1,2}; -Extrude Line{1, {-c45,c45,0}, {1,0.0,0}, 3.14159/2 }; -Coherence; diff --git a/benchmarks/3d/calbute.geo b/benchmarks/3d/calbute.geo deleted file mode 100644 index 8ffdc2d93f2f151fb9208ee272f2b6222598ffcf..0000000000000000000000000000000000000000 --- a/benchmarks/3d/calbute.geo +++ /dev/null @@ -1,27 +0,0 @@ -lc = 1; -Point(2) = {-1.96039E+00,-1.28719E+00, 2.12132E+00,lc}; -Point(3) = {-5.60111E-01,-1.08916E+00, 7.07107E-01,lc}; -Point(4) = {-2.24045E+00, 6.93103E-01, 2.12132E+00,lc}; -Point(5) = {-8.40168E-01, 8.91133E-01, 7.07107E-01,lc}; -Point(6) = { 5.60111E-01, 1.08916E+00, 7.07107E-01,lc}; -Point(7) = { 1.96039E+00, 1.28719E+00, 2.12132E+00,lc}; -Point(11) = { 2.24045E+00,-6.93103E-01, 2.12132E+00,lc}; -Point(15) = { 8.40168E-01,-8.91133E-01, 7.07107E-01,lc}; -Point(27) = {-1.40028E-01, 9.90148E-01, 1.20739E-15,lc}; -Point(37) = { 1.40028E-01,-9.90148E-01,-1.20739E-15,lc}; -Line (1) = {4,2}; -Line (2) = {2,3}; -Line (3) = {3,5}; -Line (4) = {5,4}; -Line (8) = {6,7}; -Line (9) = {7,11}; -Line (10) = {11,15}; -Line (11) = {15,6}; -Circle (13) = {5,27,6} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (14) = {4,27,7} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (18) = {2,37,11} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (22) = {3,37,15} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Line Loop (1000019) = { 1, 18, -9,-14}; -Ruled Surface (19) = {1000019}; -Extrude Line{1, {-0.,1,0}, {0.0,0.0,0.0}, -3.14159/2 }; -Coherence; diff --git a/benchmarks/3d/cas_pb.geo b/benchmarks/3d/cas_pb.geo deleted file mode 100644 index 5bfd74607873b37d9b545a25b54aaa5876b277af..0000000000000000000000000000000000000000 --- a/benchmarks/3d/cas_pb.geo +++ /dev/null @@ -1,33 +0,0 @@ - -Point(1) = {0,0,0,10}; -Point(2) = {10,10,0,1}; -Point(3) = {10,0,0,1}; -Point(4) = {0,10,0,1}; -Line(1) = {1,4}; -Line(2) = {4,2}; -Line(3) = {2,3}; -Line(4) = {3,1}; -Line Loop(5) = {4,1,2,3}; -Plane Surface(6) = {5}; -Extrude Surface { 6, {0,0,1} }; -Coherence; - -Point(111) = {5,5,-.1,.2}; -Point(15) = {4,4,-.1,.2}; -Point(16) = {4,6,-.1,.2}; -Point(17) = {6,4,-.1,.2}; -Point(18) = {6,6,-.1,.2}; -Circle(29) = {15,111,16}; -Circle(30) = {16,111,18}; -Circle(31) = {18,111,17}; -Circle(32) = {17,111,15}; -Line Loop(33) = {30,31,32,29}; -Plane Surface(34) = {33}; -Extrude Surface { 34, {0,0,-1} }; -Coherence; -Surface Loop(57) = {56,43,34,47,51,55}; -Complex Volume(58) = {57}; - -Surface Loop(58) = {28,15,6,19,23,27}; -Complex Volume(59) = {58}; - diff --git a/benchmarks/3d/coin.geo b/benchmarks/3d/coin.geo deleted file mode 100644 index 75db8b37cb7b441864c0139095dd11a663c62fec..0000000000000000000000000000000000000000 --- a/benchmarks/3d/coin.geo +++ /dev/null @@ -1,58 +0,0 @@ -lcar1 = .2; - -Point(newp) = {0.5,0.5,0.5,lcar1}; /* Point 1 */ -Point(newp) = {0.5,0.5,0,lcar1}; /* Point 2 */ -Point(newp) = {0,0.5,0.5,lcar1}; /* Point 3 */ -Point(newp) = {0,0,0.5,lcar1}; /* Point 4 */ -Point(newp) = {0.5,0,0.5,lcar1}; /* Point 5 */ -Point(newp) = {0.5,0,0,lcar1}; /* Point 6 */ -Point(newp) = {0,0.5,0,lcar1}; /* Point 7 */ -Point(newp) = {0,1,0,lcar1}; /* Point 8 */ -Point(newp) = {1,1,0,lcar1}; /* Point 9 */ -Point(newp) = {0,0,1,lcar1}; /* Point 10 */ -Point(newp) = {0,1,1,lcar1}; /* Point 11 */ -Point(newp) = {1,1,1,lcar1}; /* Point 12 */ -Point(newp) = {1,0,1,lcar1}; /* Point 13 */ -Point(newp) = {1,0,0,lcar1}; - -Line(1) = {8,9}; -Line(2) = {9,12}; -Line(3) = {12,11}; -Line(4) = {11,8}; -Line(5) = {9,14}; -Line(6) = {14,13}; -Line(7) = {13,12}; -Line(8) = {11,10}; -Line(9) = {10,13}; -Line(10) = {10,4}; -Line(11) = {4,5}; -Line(12) = {5,6}; -Line(13) = {6,2}; -Line(14) = {2,1}; -Line(15) = {1,3}; -Line(16) = {3,7}; -Line(17) = {7,2}; -Line(18) = {3,4}; -Line(19) = {5,1}; -Line(20) = {7,8}; -Line(21) = {6,14}; -Line Loop(22) = {11,19,15,18}; -Plane Surface(23) = {22}; -Line Loop(24) = {16,17,14,15}; -Plane Surface(25) = {24}; -Line Loop(26) = {-17,20,1,5,-21,13}; -Plane Surface(27) = {26}; -Line Loop(28) = {4,1,2,3}; -Plane Surface(29) = {28}; -Line Loop(30) = {7,-2,5,6}; -Plane Surface(31) = {30}; -Line Loop(32) = {6,-9,10,11,12,21}; -Plane Surface(33) = {32}; -Line Loop(34) = {7,3,8,9}; -Plane Surface(35) = {34}; -Line Loop(36) = {10,-18,16,20,-4,8}; -Plane Surface(37) = {36}; -Line Loop(38) = {-14,-13,-12,19}; -Plane Surface(39) = {38}; -Surface Loop(40) = {35,31,29,37,33,23,39,25,27}; -Complex Volume(41) = {40}; diff --git a/benchmarks/3d/cube.geo b/benchmarks/3d/cube.geo deleted file mode 100644 index 77a067c3d9be6ca7fdfdffe0f111db7294fd1bc7..0000000000000000000000000000000000000000 --- a/benchmarks/3d/cube.geo +++ /dev/null @@ -1,17 +0,0 @@ -/**************************** -cube meshed uniformly -****************************/ -Point(1) = {0.0,0.0,0.0,.025}; -Point(2) = {1,0.0,0.0,.025}; -Point(3) = {1,1,0.0,.4}; -Point(4) = {0,1,0.0,.4}; -Line(1) = {4,3}; -Line(2) = {3,2}; -Line(3) = {2,1}; -Line(4) = {1,4}; -Line Loop(5) = {2,3,4,1}; -Plane Surface(6) = {5}; -Extrude Surface { 6, {0,0.0,1} }; - -Surface Loop(29) = {23,6,15,19,28,27}; -Complex Volume(30) = {29}; diff --git a/benchmarks/3d/ellipsis.geo b/benchmarks/3d/ellipsis.geo deleted file mode 100644 index eb0fb3910227eebf32d6b63973e04250ab07fd68..0000000000000000000000000000000000000000 --- a/benchmarks/3d/ellipsis.geo +++ /dev/null @@ -1,37 +0,0 @@ -Point(newp) = { 0, 0,0,.1}; -Point(newp) = {-1, 0,0,.1}; -Point(newp) = { 1, 0,0,.1}; -Point(newp) = { 0, .5,0,.1}; -Point(newp) = { 0,-.5,0,.1}; -Point(newp) = { 0, 0,.8,.1}; -Point(newp) = { 0, 0,-1,.1}; - -Ellipsis(1) = {3,1,3,4}; -Ellipsis(2) = {4,1,2,2}; -Ellipsis(3) = {2,1,2,5}; -Ellipsis(4) = {5,1,3,3}; -Ellipsis(5) = {7,1,7,4}; -Ellipsis(6) = {4,1,6,6}; -Ellipsis(7) = {6,1,6,5}; -Ellipsis(8) = {5,1,7,7}; -Ellipsis(9) = {6,1,3,3}; -Ellipsis(10) = {2,1,2,6}; -Ellipsis(11) = {7,1,2,2}; -Ellipsis(12) = {3,1,3,7}; - -Line Loop(13) = {1,6,9}; -Ruled Surface(14) = {13}; -Line Loop(15) = {4,-9,7}; -Ruled Surface(16) = {15}; -Line Loop(17) = {-7,-10,3}; -Ruled Surface(18) = {17}; -Line Loop(19) = {3,8,11}; -Ruled Surface(20) = {19}; -Line Loop(21) = {2,-11,5}; -Ruled Surface(22) = {21}; -Line Loop(23) = {-5,-12,1}; -Ruled Surface(24) = {23}; -Line Loop(25) = {-12,-4,8}; -Ruled Surface(26) = {25}; -Line Loop(27) = {-6,2,10}; -Ruled Surface(28) = {27}; diff --git a/benchmarks/3d/francois.geo b/benchmarks/3d/francois.geo deleted file mode 100644 index a27017c8910d7b81740bb70e8d949bfa283ba73f..0000000000000000000000000000000000000000 --- a/benchmarks/3d/francois.geo +++ /dev/null @@ -1,33 +0,0 @@ -r = 2.24; -Point(1) = {0.0,0.0,0.0,.2}; -Point(2) = {r,.0,0.0,.2}; -Point(3) = {-r,0.0,0.0,.2}; -Point(4) = {0,r,0.0,.2}; -Point(5) = {0,-r,0.0,.2}; -Circle(1) = {2,1,4}; -Circle(2) = {4,1,3}; -Circle(3) = {3,1,5}; -Circle(4) = {5,1,2}; -Point(6) = {10,10,0.0,1}; -Point(7) = {-10,10,0.0,1}; -Point(8) = {-10,-10,0.0,1}; -Point(9) = {10,-10,0.0,1}; -Line(5) = {8,7}; -Line(6) = {7,6}; -Line(7) = {6,9}; -Line(8) = {9,8}; -Line Loop(9) = {6,7,8,5}; -Line Loop(10) = {4,1,2,3}; -Plane Surface(11) = {9,10}; -Extrude Surface {11, {0,0.0,2.0}} -{ - Layers { {2,1,2} , {100,200,100} , {.05,.95,1.} } ; -}; -Coherence; -Physical Surface(54) = {53}; -Physical Surface(55) = {11}; -Physical Surface(56) = {40,44,48,52}; -Physical Surface(57) = {53}; - -//Surface Loop(58) = {53,24,11,28,32,36,40,44,48,52}; -//Complex Volume(59) = {58}; diff --git a/benchmarks/3d/naca12.geo b/benchmarks/3d/naca12.geo deleted file mode 100644 index bd34464a5e03ecf1c4a510c765727831d47bf911..0000000000000000000000000000000000000000 --- a/benchmarks/3d/naca12.geo +++ /dev/null @@ -1,481 +0,0 @@ -// Alpha 666 (the number of the beast) MHz -// gmsh naca12.geo -clscale 1.0 -3 -> Elm=5567, 1.3 s -// gmsh naca12.geo -clscale 0.3 -3 -> Elm=152411, 66 s -// gmsh naca12.geo -clscale 0.15 -3 -> Elm=1057132, 968 s -// gmsh naca12.geo -clscale 0.11 -3 -> Elm=2541338, 3658 s (1.6 Gb = bcp trop) -// gmsh naca12.geo -clscale 0.09 -3 -> Elm=4770776, 19821.1 s (!)... -lc = 0.1; -Point(1) = {1.000000e+00,0.000000e+00,0.000000e+00,lc}; -Point(2) = {9.997533e-01,0.000000e+00,-3.498543e-05,lc}; -Point(3) = {9.990134e-01,0.000000e+00,-1.398841e-04,1.003943e-01}; -Point(4) = {9.977810e-01,0.000000e+00,-3.143904e-04,1.008856e-01}; -Point(5) = {9.960575e-01,0.000000e+00,-5.579769e-04,1.015708e-01}; -Point(6) = {9.938442e-01,0.000000e+00,-8.699747e-04,1.024472e-01}; -Point(7) = {9.911436e-01,0.000000e+00,-1.249551e-03,1.035112e-01}; -Point(8) = {9.879584e-01,0.000000e+00,-1.695579e-03,1.047586e-01}; -Point(9) = {9.842916e-01,0.000000e+00,-2.206860e-03,1.061847e-01}; -Point(10) = {9.801469e-01,0.000000e+00,-2.781989e-03,1.077836e-01}; -Point(11) = {9.755284e-01,0.000000e+00,-3.419365e-03,1.095491e-01}; -Point(12) = {9.704404e-01,0.000000e+00,-4.117359e-03,1.114743e-01}; -Point(13) = {9.648883e-01,0.000000e+00,-4.874101e-03,1.135515e-01}; -Point(14) = {9.588774e-01,0.000000e+00,-5.687566e-03,1.157726e-01}; -Point(15) = {9.524136e-01,0.000000e+00,-6.555737e-03,1.181288e-01}; -Point(16) = {9.455034e-01,0.000000e+00,-7.476377e-03,1.206107e-01}; -Point(17) = {9.381535e-01,0.000000e+00,-8.447210e-03,1.232086e-01}; -Point(18) = {9.303712e-01,0.000000e+00,-9.465891e-03,1.259123e-01}; -Point(19) = {9.221641e-01,0.000000e+00,-1.052998e-02,1.287110e-01}; -Point(20) = {9.135405e-01,0.000000e+00,-1.163695e-02,1.315937e-01}; -Point(21) = {9.045087e-01,0.000000e+00,-1.278429e-02,1.345491e-01}; -Point(22) = {8.950777e-01,0.000000e+00,-1.396934e-02,1.375654e-01}; -Point(23) = {8.852569e-01,0.000000e+00,-1.518951e-02,1.406308e-01}; -Point(24) = {8.750558e-01,0.000000e+00,-1.644214e-02,1.437333e-01}; -Point(25) = {8.644845e-01,0.000000e+00,-1.772453e-02,1.468604e-01}; -Point(26) = {8.535537e-01,0.000000e+00,-1.903398e-02,1.499999e-01}; -Point(27) = {8.422739e-01,0.000000e+00,-2.036772e-02,1.531394e-01}; -Point(28) = {8.306563e-01,0.000000e+00,-2.172309e-02,1.562666e-01}; -Point(29) = {8.187124e-01,0.000000e+00,-2.309725e-02,1.593690e-01}; -Point(30) = {8.064539e-01,0.000000e+00,-2.448751e-02,1.624344e-01}; -Point(31) = {7.938930e-01,0.000000e+00,-2.589105e-02,1.654508e-01}; -Point(32) = {7.810421e-01,0.000000e+00,-2.730503e-02,1.684061e-01}; -Point(33) = {7.679139e-01,0.000000e+00,-2.872668e-02,1.712889e-01}; -Point(34) = {7.545212e-01,0.000000e+00,-3.015313e-02,1.740876e-01}; -Point(35) = {7.408773e-01,0.000000e+00,-3.158154e-02,1.767913e-01}; -Point(36) = {7.269957e-01,0.000000e+00,-3.300894e-02,1.793892e-01}; -Point(37) = {7.128901e-01,0.000000e+00,-3.443245e-02,1.818711e-01}; -Point(38) = {6.985745e-01,0.000000e+00,-3.584905e-02,1.842273e-01}; -Point(39) = {6.840628e-01,0.000000e+00,-3.725576e-02,1.864484e-01}; -Point(40) = {6.693696e-01,0.000000e+00,-3.864942e-02,1.885256e-01}; -Point(41) = {6.545091e-01,0.000000e+00,-4.002701e-02,1.904508e-01}; -Point(42) = {6.394961e-01,0.000000e+00,-4.138529e-02,1.922163e-01}; -Point(43) = {6.243456e-01,0.000000e+00,-4.272101e-02,1.938153e-01}; -Point(44) = {6.090723e-01,0.000000e+00,-4.403092e-02,1.952413e-01}; -Point(45) = {5.936913e-01,0.000000e+00,-4.531165e-02,1.964888e-01}; -Point(46) = {5.782179e-01,0.000000e+00,-4.655984e-02,1.975528e-01}; -Point(47) = {5.626673e-01,0.000000e+00,-4.777199e-02,1.984291e-01}; -Point(48) = {5.470549e-01,0.000000e+00,-4.894463e-02,1.991143e-01}; -Point(49) = {5.313960e-01,0.000000e+00,-5.007425e-02,lc}; -Point(50) = {5.157061e-01,0.000000e+00,-5.115728e-02,1.999013e-01}; -Point(51) = {5.000008e-01,0.000000e+00,-5.219014e-02,2.000000e-01}; -Point(52) = {4.842954e-01,0.000000e+00,-5.316926e-02,1.999013e-01}; -Point(53) = {4.686055e-01,0.000000e+00,-5.409108e-02,1.996058e-01}; -Point(54) = {4.529467e-01,0.000000e+00,-5.495201e-02,1.991144e-01}; -Point(55) = {4.373342e-01,0.000000e+00,-5.574857e-02,1.984292e-01}; -Point(56) = {4.217836e-01,0.000000e+00,-5.647729e-02,1.975529e-01}; -Point(57) = {4.063102e-01,0.000000e+00,-5.713477e-02,1.964889e-01}; -Point(58) = {3.909292e-01,0.000000e+00,-5.771770e-02,1.952414e-01}; -Point(59) = {3.756559e-01,0.000000e+00,-5.822293e-02,1.938154e-01}; -Point(60) = {3.605053e-01,0.000000e+00,-5.864737e-02,1.922165e-01}; -Point(61) = {3.454924e-01,0.000000e+00,-5.898812e-02,1.904510e-01}; -Point(62) = {3.306319e-01,0.000000e+00,-5.924247e-02,1.885258e-01}; -Point(63) = {3.159386e-01,0.000000e+00,-5.940786e-02,1.864486e-01}; -Point(64) = {3.014269e-01,0.000000e+00,-5.948193e-02,1.842275e-01}; -Point(65) = {2.871112e-01,0.000000e+00,-5.946260e-02,1.818713e-01}; -Point(66) = {2.730056e-01,0.000000e+00,-5.934800e-02,1.793894e-01}; -Point(67) = {2.591240e-01,0.000000e+00,-5.913650e-02,1.767915e-01}; -Point(68) = {2.454802e-01,0.000000e+00,-5.882679e-02,1.740879e-01}; -Point(69) = {2.320875e-01,0.000000e+00,-5.841779e-02,1.712892e-01}; -Point(70) = {2.189592e-01,0.000000e+00,-5.790876e-02,1.684064e-01}; -Point(71) = {2.061082e-01,0.000000e+00,-5.729925e-02,1.654510e-01}; -Point(72) = {1.935473e-01,0.000000e+00,-5.658907e-02,1.624347e-01}; -Point(73) = {1.812888e-01,0.000000e+00,-5.577839e-02,1.593693e-01}; -Point(74) = {1.693449e-01,0.000000e+00,-5.486767e-02,1.562669e-01}; -Point(75) = {1.577273e-01,0.000000e+00,-5.385765e-02,1.531398e-01}; -Point(76) = {1.464474e-01,0.000000e+00,-5.274938e-02,1.500002e-01}; -Point(77) = {1.355165e-01,0.000000e+00,-5.154420e-02,1.468607e-01}; -Point(78) = {1.249452e-01,0.000000e+00,-5.024372e-02,1.437336e-01}; -Point(79) = {1.147441e-01,0.000000e+00,-4.884978e-02,1.406312e-01}; -Point(80) = {1.049232e-01,0.000000e+00,-4.736451e-02,1.375657e-01}; -Point(81) = {9.549212e-02,0.000000e+00,-4.579021e-02,1.345494e-01}; -Point(82) = {8.646032e-02,0.000000e+00,-4.412942e-02,1.315940e-01}; -Point(83) = {7.783660e-02,0.000000e+00,-4.238483e-02,1.287112e-01}; -Point(84) = {6.962952e-02,0.000000e+00,-4.055926e-02,1.259125e-01}; -Point(85) = {6.184718e-02,0.000000e+00,-3.865567e-02,1.232088e-01}; -Point(86) = {5.449721e-02,0.000000e+00,-3.667711e-02,1.206109e-01}; -Point(87) = {4.758692e-02,0.000000e+00,-3.462668e-02,1.181290e-01}; -Point(88) = {4.112309e-02,0.000000e+00,-3.250752e-02,1.157728e-01}; -Point(89) = {3.511214e-02,0.000000e+00,-3.032277e-02,1.135517e-01}; -Point(90) = {2.955997e-02,0.000000e+00,-2.807550e-02,1.114745e-01}; -Point(91) = {2.447206e-02,0.000000e+00,-2.576878e-02,1.095493e-01}; -Point(92) = {1.985344e-02,0.000000e+00,-2.340553e-02,1.077837e-01}; -Point(93) = {1.570869e-02,0.000000e+00,-2.098859e-02,1.061848e-01}; -Point(94) = {1.204184e-02,0.000000e+00,-1.852062e-02,1.047587e-01}; -Point(95) = {8.856565e-03,0.000000e+00,-1.600414e-02,1.035113e-01}; -Point(96) = {6.155997e-03,0.000000e+00,-1.344148e-02,1.024472e-01}; -Point(97) = {3.942788e-03,0.000000e+00,-1.083471e-02,1.015709e-01}; -Point(98) = {2.219111e-03,0.000000e+00,-8.185687e-03,1.008857e-01}; -Point(99) = {9.866953e-04,0.000000e+00,-5.496060e-03,1.003943e-01}; -Point(100) = {2.467632e-04,0.000000e+00,-2.767267e-03,lc}; -Point(101) = {0.000000e+00,0.000000e+00,1.911503e-39,1.000000e-01}; -Point(102) = {2.467632e-04,0.000000e+00,2.767267e-03,1.000987e-01}; -Point(103) = {9.866953e-04,0.000000e+00,5.496060e-03,1.003943e-01}; -Point(104) = {2.219111e-03,0.000000e+00,8.185687e-03,1.008857e-01}; -Point(105) = {3.942788e-03,0.000000e+00,1.083471e-02,1.015709e-01}; -Point(106) = {6.155997e-03,0.000000e+00,1.344148e-02,1.024472e-01}; -Point(107) = {8.856565e-03,0.000000e+00,1.600414e-02,1.035113e-01}; -Point(108) = {1.204184e-02,0.000000e+00,1.852062e-02,1.047587e-01}; -Point(109) = {1.570869e-02,0.000000e+00,2.098859e-02,1.061848e-01}; -Point(110) = {1.985344e-02,0.000000e+00,2.340553e-02,1.077837e-01}; -Point(111) = {2.447206e-02,0.000000e+00,2.576878e-02,1.095493e-01}; -Point(112) = {2.955997e-02,0.000000e+00,2.807550e-02,1.114745e-01}; -Point(113) = {3.511214e-02,0.000000e+00,3.032277e-02,1.135517e-01}; -Point(114) = {4.112309e-02,0.000000e+00,3.250752e-02,1.157728e-01}; -Point(115) = {4.758692e-02,0.000000e+00,3.462668e-02,1.181290e-01}; -Point(116) = {5.449721e-02,0.000000e+00,3.667711e-02,1.206109e-01}; -Point(117) = {6.184718e-02,0.000000e+00,3.865567e-02,1.232088e-01}; -Point(118) = {6.962952e-02,0.000000e+00,4.055926e-02,1.259125e-01}; -Point(119) = {7.783660e-02,0.000000e+00,4.238483e-02,1.287112e-01}; -Point(120) = {8.646032e-02,0.000000e+00,4.412942e-02,1.315940e-01}; -Point(121) = {9.549212e-02,0.000000e+00,4.579021e-02,1.345494e-01}; -Point(122) = {1.049232e-01,0.000000e+00,4.736451e-02,1.375657e-01}; -Point(123) = {1.147441e-01,0.000000e+00,4.884978e-02,1.406312e-01}; -Point(124) = {1.249452e-01,0.000000e+00,5.024372e-02,1.437336e-01}; -Point(125) = {1.355165e-01,0.000000e+00,5.154420e-02,1.468607e-01}; -Point(126) = {1.464474e-01,0.000000e+00,5.274938e-02,1.500002e-01}; -Point(127) = {1.577273e-01,0.000000e+00,5.385765e-02,1.531398e-01}; -Point(128) = {1.693449e-01,0.000000e+00,5.486767e-02,1.562669e-01}; -Point(129) = {1.812888e-01,0.000000e+00,5.577839e-02,1.593693e-01}; -Point(130) = {1.935473e-01,0.000000e+00,5.658907e-02,1.624347e-01}; -Point(131) = {2.061082e-01,0.000000e+00,5.729925e-02,1.654510e-01}; -Point(132) = {2.189592e-01,0.000000e+00,5.790876e-02,1.684064e-01}; -Point(133) = {2.320875e-01,0.000000e+00,5.841779e-02,1.712892e-01}; -Point(134) = {2.454802e-01,0.000000e+00,5.882679e-02,1.740879e-01}; -Point(135) = {2.591240e-01,0.000000e+00,5.913650e-02,1.767915e-01}; -Point(136) = {2.730056e-01,0.000000e+00,5.934800e-02,1.793894e-01}; -Point(137) = {2.871112e-01,0.000000e+00,5.946260e-02,1.818713e-01}; -Point(138) = {3.014269e-01,0.000000e+00,5.948193e-02,1.842275e-01}; -Point(139) = {3.159386e-01,0.000000e+00,5.940786e-02,1.864486e-01}; -Point(140) = {3.306319e-01,0.000000e+00,5.924247e-02,1.885258e-01}; -Point(141) = {3.454924e-01,0.000000e+00,5.898812e-02,1.904510e-01}; -Point(142) = {3.605053e-01,0.000000e+00,5.864737e-02,1.922165e-01}; -Point(143) = {3.756559e-01,0.000000e+00,5.822293e-02,1.938154e-01}; -Point(144) = {3.909292e-01,0.000000e+00,5.771770e-02,1.952414e-01}; -Point(145) = {4.063102e-01,0.000000e+00,5.713477e-02,1.964889e-01}; -Point(146) = {4.217836e-01,0.000000e+00,5.647729e-02,1.975529e-01}; -Point(147) = {4.373342e-01,0.000000e+00,5.574857e-02,1.984292e-01}; -Point(148) = {4.529467e-01,0.000000e+00,5.495201e-02,1.991144e-01}; -Point(149) = {4.686055e-01,0.000000e+00,5.409108e-02,1.996058e-01}; -Point(150) = {4.842954e-01,0.000000e+00,5.316926e-02,lc}; -Point(151) = {5.000008e-01,0.000000e+00,5.219014e-02,2.000000e-01}; -Point(152) = {5.157061e-01,0.000000e+00,5.115728e-02,1.999013e-01}; -Point(153) = {5.313960e-01,0.000000e+00,5.007425e-02,1.996057e-01}; -Point(154) = {5.470549e-01,0.000000e+00,4.894463e-02,1.991143e-01}; -Point(155) = {5.626673e-01,0.000000e+00,4.777199e-02,1.984291e-01}; -Point(156) = {5.782179e-01,0.000000e+00,4.655984e-02,1.975528e-01}; -Point(157) = {5.936913e-01,0.000000e+00,4.531165e-02,1.964888e-01}; -Point(158) = {6.090723e-01,0.000000e+00,4.403092e-02,1.952413e-01}; -Point(159) = {6.243456e-01,0.000000e+00,4.272101e-02,1.938153e-01}; -Point(160) = {6.394961e-01,0.000000e+00,4.138529e-02,1.922163e-01}; -Point(161) = {6.545091e-01,0.000000e+00,4.002701e-02,1.904508e-01}; -Point(162) = {6.693696e-01,0.000000e+00,3.864942e-02,1.885256e-01}; -Point(163) = {6.840628e-01,0.000000e+00,3.725576e-02,1.864484e-01}; -Point(164) = {6.985745e-01,0.000000e+00,3.584905e-02,1.842273e-01}; -Point(165) = {7.128901e-01,0.000000e+00,3.443245e-02,1.818711e-01}; -Point(166) = {7.269957e-01,0.000000e+00,3.300894e-02,1.793892e-01}; -Point(167) = {7.408773e-01,0.000000e+00,3.158154e-02,1.767913e-01}; -Point(168) = {7.545212e-01,0.000000e+00,3.015313e-02,1.740876e-01}; -Point(169) = {7.679139e-01,0.000000e+00,2.872668e-02,1.712889e-01}; -Point(170) = {7.810421e-01,0.000000e+00,2.730503e-02,1.684061e-01}; -Point(171) = {7.938930e-01,0.000000e+00,2.589105e-02,1.654508e-01}; -Point(172) = {8.064539e-01,0.000000e+00,2.448751e-02,1.624344e-01}; -Point(173) = {8.187124e-01,0.000000e+00,2.309725e-02,1.593690e-01}; -Point(174) = {8.306563e-01,0.000000e+00,2.172309e-02,1.562666e-01}; -Point(175) = {8.422739e-01,0.000000e+00,2.036772e-02,1.531394e-01}; -Point(176) = {8.535537e-01,0.000000e+00,1.903398e-02,1.499999e-01}; -Point(177) = {8.644845e-01,0.000000e+00,1.772453e-02,1.468604e-01}; -Point(178) = {8.750558e-01,0.000000e+00,1.644214e-02,1.437333e-01}; -Point(179) = {8.852569e-01,0.000000e+00,1.518951e-02,1.406308e-01}; -Point(180) = {8.950777e-01,0.000000e+00,1.396934e-02,1.375654e-01}; -Point(181) = {9.045087e-01,0.000000e+00,1.278429e-02,1.345491e-01}; -Point(182) = {9.135405e-01,0.000000e+00,1.163695e-02,1.315937e-01}; -Point(183) = {9.221641e-01,0.000000e+00,1.052998e-02,1.287110e-01}; -Point(184) = {9.303712e-01,0.000000e+00,9.465891e-03,1.259123e-01}; -Point(185) = {9.381535e-01,0.000000e+00,8.447210e-03,1.232086e-01}; -Point(186) = {9.455034e-01,0.000000e+00,7.476377e-03,1.206107e-01}; -Point(187) = {9.524136e-01,0.000000e+00,6.555737e-03,1.181288e-01}; -Point(188) = {9.588774e-01,0.000000e+00,5.687566e-03,1.157726e-01}; -Point(189) = {9.648883e-01,0.000000e+00,4.874101e-03,1.135515e-01}; -Point(190) = {9.704404e-01,0.000000e+00,4.117359e-03,1.114743e-01}; -Point(191) = {9.755284e-01,0.000000e+00,3.419365e-03,1.095491e-01}; -Point(192) = {9.801469e-01,0.000000e+00,2.781989e-03,1.077836e-01}; -Point(193) = {9.842916e-01,0.000000e+00,2.206860e-03,1.061847e-01}; -Point(194) = {9.879584e-01,0.000000e+00,1.695579e-03,1.047586e-01}; -Point(195) = {9.911436e-01,0.000000e+00,1.249551e-03,1.035112e-01}; -Point(196) = {9.938442e-01,0.000000e+00,8.699747e-04,1.024472e-01}; -Point(197) = {9.960575e-01,0.000000e+00,5.579769e-04,1.015708e-01}; -Point(198) = {9.977810e-01,0.000000e+00,3.143904e-04,1.008856e-01}; -Point(199) = {9.990134e-01,0.000000e+00,1.398841e-04,1.003943e-01}; -Point(200) = {9.997533e-01,0.000000e+00,3.498543e-05,lc}; -Point(201) = {1.000000e+00,1.000000e+00,0.000000e+00,lc}; -Point(202) = {9.997533e-01,1.000000e+00,-3.498543e-05,1.000987e-01}; -Point(203) = {9.990134e-01,1.000000e+00,-1.398841e-04,1.003943e-01}; -Point(204) = {9.977810e-01,1.000000e+00,-3.143904e-04,1.008856e-01}; -Point(205) = {9.960575e-01,1.000000e+00,-5.579769e-04,1.015708e-01}; -Point(206) = {9.938442e-01,1.000000e+00,-8.699747e-04,1.024472e-01}; -Point(207) = {9.911436e-01,1.000000e+00,-1.249551e-03,1.035112e-01}; -Point(208) = {9.879584e-01,1.000000e+00,-1.695579e-03,1.047586e-01}; -Point(209) = {9.842916e-01,1.000000e+00,-2.206860e-03,1.061847e-01}; -Point(210) = {9.801469e-01,1.000000e+00,-2.781989e-03,1.077836e-01}; -Point(211) = {9.755284e-01,1.000000e+00,-3.419365e-03,1.095491e-01}; -Point(212) = {9.704404e-01,1.000000e+00,-4.117359e-03,1.114743e-01}; -Point(213) = {9.648883e-01,1.000000e+00,-4.874101e-03,1.135515e-01}; -Point(214) = {9.588774e-01,1.000000e+00,-5.687566e-03,1.157726e-01}; -Point(215) = {9.524136e-01,1.000000e+00,-6.555737e-03,1.181288e-01}; -Point(216) = {9.455034e-01,1.000000e+00,-7.476377e-03,1.206107e-01}; -Point(217) = {9.381535e-01,1.000000e+00,-8.447210e-03,1.232086e-01}; -Point(218) = {9.303712e-01,1.000000e+00,-9.465891e-03,1.259123e-01}; -Point(219) = {9.221641e-01,1.000000e+00,-1.052998e-02,1.287110e-01}; -Point(220) = {9.135405e-01,1.000000e+00,-1.163695e-02,1.315937e-01}; -Point(221) = {9.045087e-01,1.000000e+00,-1.278429e-02,1.345491e-01}; -Point(222) = {8.950777e-01,1.000000e+00,-1.396934e-02,1.375654e-01}; -Point(223) = {8.852569e-01,1.000000e+00,-1.518951e-02,1.406308e-01}; -Point(224) = {8.750558e-01,1.000000e+00,-1.644214e-02,1.437333e-01}; -Point(225) = {8.644845e-01,1.000000e+00,-1.772453e-02,1.468604e-01}; -Point(226) = {8.535537e-01,1.000000e+00,-1.903398e-02,1.499999e-01}; -Point(227) = {8.422739e-01,1.000000e+00,-2.036772e-02,1.531394e-01}; -Point(228) = {8.306563e-01,1.000000e+00,-2.172309e-02,1.562666e-01}; -Point(229) = {8.187124e-01,1.000000e+00,-2.309725e-02,1.593690e-01}; -Point(230) = {8.064539e-01,1.000000e+00,-2.448751e-02,1.624344e-01}; -Point(231) = {7.938930e-01,1.000000e+00,-2.589105e-02,1.654508e-01}; -Point(232) = {7.810421e-01,1.000000e+00,-2.730503e-02,1.684061e-01}; -Point(233) = {7.679139e-01,1.000000e+00,-2.872668e-02,1.712889e-01}; -Point(234) = {7.545212e-01,1.000000e+00,-3.015313e-02,1.740876e-01}; -Point(235) = {7.408773e-01,1.000000e+00,-3.158154e-02,1.767913e-01}; -Point(236) = {7.269957e-01,1.000000e+00,-3.300894e-02,1.793892e-01}; -Point(237) = {7.128901e-01,1.000000e+00,-3.443245e-02,1.818711e-01}; -Point(238) = {6.985745e-01,1.000000e+00,-3.584905e-02,1.842273e-01}; -Point(239) = {6.840628e-01,1.000000e+00,-3.725576e-02,1.864484e-01}; -Point(240) = {6.693696e-01,1.000000e+00,-3.864942e-02,1.885256e-01}; -Point(241) = {6.545091e-01,1.000000e+00,-4.002701e-02,1.904508e-01}; -Point(242) = {6.394961e-01,1.000000e+00,-4.138529e-02,1.922163e-01}; -Point(243) = {6.243456e-01,1.000000e+00,-4.272101e-02,1.938153e-01}; -Point(244) = {6.090723e-01,1.000000e+00,-4.403092e-02,1.952413e-01}; -Point(245) = {5.936913e-01,1.000000e+00,-4.531165e-02,1.964888e-01}; -Point(246) = {5.782179e-01,1.000000e+00,-4.655984e-02,1.975528e-01}; -Point(247) = {5.626673e-01,1.000000e+00,-4.777199e-02,1.984291e-01}; -Point(248) = {5.470549e-01,1.000000e+00,-4.894463e-02,1.991143e-01}; -Point(249) = {5.313960e-01,1.000000e+00,-5.007425e-02,1.996057e-01}; -Point(250) = {5.157061e-01,1.000000e+00,-5.115728e-02,lc}; -Point(251) = {5.000008e-01,1.000000e+00,-5.219014e-02,2.000000e-01}; -Point(252) = {4.842954e-01,1.000000e+00,-5.316926e-02,1.999013e-01}; -Point(253) = {4.686055e-01,1.000000e+00,-5.409108e-02,1.996058e-01}; -Point(254) = {4.529467e-01,1.000000e+00,-5.495201e-02,1.991144e-01}; -Point(255) = {4.373342e-01,1.000000e+00,-5.574857e-02,1.984292e-01}; -Point(256) = {4.217836e-01,1.000000e+00,-5.647729e-02,1.975529e-01}; -Point(257) = {4.063102e-01,1.000000e+00,-5.713477e-02,1.964889e-01}; -Point(258) = {3.909292e-01,1.000000e+00,-5.771770e-02,1.952414e-01}; -Point(259) = {3.756559e-01,1.000000e+00,-5.822293e-02,1.938154e-01}; -Point(260) = {3.605053e-01,1.000000e+00,-5.864737e-02,1.922165e-01}; -Point(261) = {3.454924e-01,1.000000e+00,-5.898812e-02,1.904510e-01}; -Point(262) = {3.306319e-01,1.000000e+00,-5.924247e-02,1.885258e-01}; -Point(263) = {3.159386e-01,1.000000e+00,-5.940786e-02,1.864486e-01}; -Point(264) = {3.014269e-01,1.000000e+00,-5.948193e-02,1.842275e-01}; -Point(265) = {2.871112e-01,1.000000e+00,-5.946260e-02,1.818713e-01}; -Point(266) = {2.730056e-01,1.000000e+00,-5.934800e-02,1.793894e-01}; -Point(267) = {2.591240e-01,1.000000e+00,-5.913650e-02,1.767915e-01}; -Point(268) = {2.454802e-01,1.000000e+00,-5.882679e-02,1.740879e-01}; -Point(269) = {2.320875e-01,1.000000e+00,-5.841779e-02,1.712892e-01}; -Point(270) = {2.189592e-01,1.000000e+00,-5.790876e-02,1.684064e-01}; -Point(271) = {2.061082e-01,1.000000e+00,-5.729925e-02,1.654510e-01}; -Point(272) = {1.935473e-01,1.000000e+00,-5.658907e-02,1.624347e-01}; -Point(273) = {1.812888e-01,1.000000e+00,-5.577839e-02,1.593693e-01}; -Point(274) = {1.693449e-01,1.000000e+00,-5.486767e-02,1.562669e-01}; -Point(275) = {1.577273e-01,1.000000e+00,-5.385765e-02,1.531398e-01}; -Point(276) = {1.464474e-01,1.000000e+00,-5.274938e-02,1.500002e-01}; -Point(277) = {1.355165e-01,1.000000e+00,-5.154420e-02,1.468607e-01}; -Point(278) = {1.249452e-01,1.000000e+00,-5.024372e-02,1.437336e-01}; -Point(279) = {1.147441e-01,1.000000e+00,-4.884978e-02,1.406312e-01}; -Point(280) = {1.049232e-01,1.000000e+00,-4.736451e-02,1.375657e-01}; -Point(281) = {9.549212e-02,1.000000e+00,-4.579021e-02,1.345494e-01}; -Point(282) = {8.646032e-02,1.000000e+00,-4.412942e-02,1.315940e-01}; -Point(283) = {7.783660e-02,1.000000e+00,-4.238483e-02,1.287112e-01}; -Point(284) = {6.962952e-02,1.000000e+00,-4.055926e-02,1.259125e-01}; -Point(285) = {6.184718e-02,1.000000e+00,-3.865567e-02,1.232088e-01}; -Point(286) = {5.449721e-02,1.000000e+00,-3.667711e-02,1.206109e-01}; -Point(287) = {4.758692e-02,1.000000e+00,-3.462668e-02,1.181290e-01}; -Point(288) = {4.112309e-02,1.000000e+00,-3.250752e-02,1.157728e-01}; -Point(289) = {3.511214e-02,1.000000e+00,-3.032277e-02,1.135517e-01}; -Point(290) = {2.955997e-02,1.000000e+00,-2.807550e-02,1.114745e-01}; -Point(291) = {2.447206e-02,1.000000e+00,-2.576878e-02,1.095493e-01}; -Point(292) = {1.985344e-02,1.000000e+00,-2.340553e-02,1.077837e-01}; -Point(293) = {1.570869e-02,1.000000e+00,-2.098859e-02,1.061848e-01}; -Point(294) = {1.204184e-02,1.000000e+00,-1.852062e-02,1.047587e-01}; -Point(295) = {8.856565e-03,1.000000e+00,-1.600414e-02,1.035113e-01}; -Point(296) = {6.155997e-03,1.000000e+00,-1.344148e-02,1.024472e-01}; -Point(297) = {3.942788e-03,1.000000e+00,-1.083471e-02,1.015709e-01}; -Point(298) = {2.219111e-03,1.000000e+00,-8.185687e-03,1.008857e-01}; -Point(299) = {9.866953e-04,1.000000e+00,-5.496060e-03,1.003943e-01}; -Point(300) = {2.467632e-04,1.000000e+00,-2.767267e-03,lc}; -Point(301) = {0.000000e+00,1.000000e+00,1.911503e-39,lc}; -Point(302) = {2.467632e-04,1.000000e+00,2.767267e-03,1.000987e-01}; -Point(303) = {9.866953e-04,1.000000e+00,5.496060e-03,1.003943e-01}; -Point(304) = {2.219111e-03,1.000000e+00,8.185687e-03,1.008857e-01}; -Point(305) = {3.942788e-03,1.000000e+00,1.083471e-02,1.015709e-01}; -Point(306) = {6.155997e-03,1.000000e+00,1.344148e-02,1.024472e-01}; -Point(307) = {8.856565e-03,1.000000e+00,1.600414e-02,1.035113e-01}; -Point(308) = {1.204184e-02,1.000000e+00,1.852062e-02,1.047587e-01}; -Point(309) = {1.570869e-02,1.000000e+00,2.098859e-02,1.061848e-01}; -Point(310) = {1.985344e-02,1.000000e+00,2.340553e-02,1.077837e-01}; -Point(311) = {2.447206e-02,1.000000e+00,2.576878e-02,1.095493e-01}; -Point(312) = {2.955997e-02,1.000000e+00,2.807550e-02,1.114745e-01}; -Point(313) = {3.511214e-02,1.000000e+00,3.032277e-02,1.135517e-01}; -Point(314) = {4.112309e-02,1.000000e+00,3.250752e-02,1.157728e-01}; -Point(315) = {4.758692e-02,1.000000e+00,3.462668e-02,1.181290e-01}; -Point(316) = {5.449721e-02,1.000000e+00,3.667711e-02,1.206109e-01}; -Point(317) = {6.184718e-02,1.000000e+00,3.865567e-02,1.232088e-01}; -Point(318) = {6.962952e-02,1.000000e+00,4.055926e-02,1.259125e-01}; -Point(319) = {7.783660e-02,1.000000e+00,4.238483e-02,1.287112e-01}; -Point(320) = {8.646032e-02,1.000000e+00,4.412942e-02,1.315940e-01}; -Point(321) = {9.549212e-02,1.000000e+00,4.579021e-02,1.345494e-01}; -Point(322) = {1.049232e-01,1.000000e+00,4.736451e-02,1.375657e-01}; -Point(323) = {1.147441e-01,1.000000e+00,4.884978e-02,1.406312e-01}; -Point(324) = {1.249452e-01,1.000000e+00,5.024372e-02,1.437336e-01}; -Point(325) = {1.355165e-01,1.000000e+00,5.154420e-02,1.468607e-01}; -Point(326) = {1.464474e-01,1.000000e+00,5.274938e-02,1.500002e-01}; -Point(327) = {1.577273e-01,1.000000e+00,5.385765e-02,1.531398e-01}; -Point(328) = {1.693449e-01,1.000000e+00,5.486767e-02,1.562669e-01}; -Point(329) = {1.812888e-01,1.000000e+00,5.577839e-02,1.593693e-01}; -Point(330) = {1.935473e-01,1.000000e+00,5.658907e-02,1.624347e-01}; -Point(331) = {2.061082e-01,1.000000e+00,5.729925e-02,1.654510e-01}; -Point(332) = {2.189592e-01,1.000000e+00,5.790876e-02,1.684064e-01}; -Point(333) = {2.320875e-01,1.000000e+00,5.841779e-02,1.712892e-01}; -Point(334) = {2.454802e-01,1.000000e+00,5.882679e-02,1.740879e-01}; -Point(335) = {2.591240e-01,1.000000e+00,5.913650e-02,1.767915e-01}; -Point(336) = {2.730056e-01,1.000000e+00,5.934800e-02,1.793894e-01}; -Point(337) = {2.871112e-01,1.000000e+00,5.946260e-02,1.818713e-01}; -Point(338) = {3.014269e-01,1.000000e+00,5.948193e-02,1.842275e-01}; -Point(339) = {3.159386e-01,1.000000e+00,5.940786e-02,1.864486e-01}; -Point(340) = {3.306319e-01,1.000000e+00,5.924247e-02,1.885258e-01}; -Point(341) = {3.454924e-01,1.000000e+00,5.898812e-02,1.904510e-01}; -Point(342) = {3.605053e-01,1.000000e+00,5.864737e-02,1.922165e-01}; -Point(343) = {3.756559e-01,1.000000e+00,5.822293e-02,1.938154e-01}; -Point(344) = {3.909292e-01,1.000000e+00,5.771770e-02,1.952414e-01}; -Point(345) = {4.063102e-01,1.000000e+00,5.713477e-02,1.964889e-01}; -Point(346) = {4.217836e-01,1.000000e+00,5.647729e-02,1.975529e-01}; -Point(347) = {4.373342e-01,1.000000e+00,5.574857e-02,1.984292e-01}; -Point(348) = {4.529467e-01,1.000000e+00,5.495201e-02,1.991144e-01}; -Point(349) = {4.686055e-01,1.000000e+00,5.409108e-02,1.996058e-01}; -Point(350) = {4.842954e-01,1.000000e+00,5.316926e-02,lc}; -Point(351) = {5.000008e-01,1.000000e+00,5.219014e-02,2.000000e-01}; -Point(352) = {5.157061e-01,1.000000e+00,5.115728e-02,1.999013e-01}; -Point(353) = {5.313960e-01,1.000000e+00,5.007425e-02,1.996057e-01}; -Point(354) = {5.470549e-01,1.000000e+00,4.894463e-02,1.991143e-01}; -Point(355) = {5.626673e-01,1.000000e+00,4.777199e-02,1.984291e-01}; -Point(356) = {5.782179e-01,1.000000e+00,4.655984e-02,1.975528e-01}; -Point(357) = {5.936913e-01,1.000000e+00,4.531165e-02,1.964888e-01}; -Point(358) = {6.090723e-01,1.000000e+00,4.403092e-02,1.952413e-01}; -Point(359) = {6.243456e-01,1.000000e+00,4.272101e-02,1.938153e-01}; -Point(360) = {6.394961e-01,1.000000e+00,4.138529e-02,1.922163e-01}; -Point(361) = {6.545091e-01,1.000000e+00,4.002701e-02,1.904508e-01}; -Point(362) = {6.693696e-01,1.000000e+00,3.864942e-02,1.885256e-01}; -Point(363) = {6.840628e-01,1.000000e+00,3.725576e-02,1.864484e-01}; -Point(364) = {6.985745e-01,1.000000e+00,3.584905e-02,1.842273e-01}; -Point(365) = {7.128901e-01,1.000000e+00,3.443245e-02,1.818711e-01}; -Point(366) = {7.269957e-01,1.000000e+00,3.300894e-02,1.793892e-01}; -Point(367) = {7.408773e-01,1.000000e+00,3.158154e-02,1.767913e-01}; -Point(368) = {7.545212e-01,1.000000e+00,3.015313e-02,1.740876e-01}; -Point(369) = {7.679139e-01,1.000000e+00,2.872668e-02,1.712889e-01}; -Point(370) = {7.810421e-01,1.000000e+00,2.730503e-02,1.684061e-01}; -Point(371) = {7.938930e-01,1.000000e+00,2.589105e-02,1.654508e-01}; -Point(372) = {8.064539e-01,1.000000e+00,2.448751e-02,1.624344e-01}; -Point(373) = {8.187124e-01,1.000000e+00,2.309725e-02,1.593690e-01}; -Point(374) = {8.306563e-01,1.000000e+00,2.172309e-02,1.562666e-01}; -Point(375) = {8.422739e-01,1.000000e+00,2.036772e-02,1.531394e-01}; -Point(376) = {8.535537e-01,1.000000e+00,1.903398e-02,1.499999e-01}; -Point(377) = {8.644845e-01,1.000000e+00,1.772453e-02,1.468604e-01}; -Point(378) = {8.750558e-01,1.000000e+00,1.644214e-02,1.437333e-01}; -Point(379) = {8.852569e-01,1.000000e+00,1.518951e-02,1.406308e-01}; -Point(380) = {8.950777e-01,1.000000e+00,1.396934e-02,1.375654e-01}; -Point(381) = {9.045087e-01,1.000000e+00,1.278429e-02,1.345491e-01}; -Point(382) = {9.135405e-01,1.000000e+00,1.163695e-02,1.315937e-01}; -Point(383) = {9.221641e-01,1.000000e+00,1.052998e-02,1.287110e-01}; -Point(384) = {9.303712e-01,1.000000e+00,9.465891e-03,1.259123e-01}; -Point(385) = {9.381535e-01,1.000000e+00,8.447210e-03,1.232086e-01}; -Point(386) = {9.455034e-01,1.000000e+00,7.476377e-03,1.206107e-01}; -Point(387) = {9.524136e-01,1.000000e+00,6.555737e-03,1.181288e-01}; -Point(388) = {9.588774e-01,1.000000e+00,5.687566e-03,1.157726e-01}; -Point(389) = {9.648883e-01,1.000000e+00,4.874101e-03,1.135515e-01}; -Point(390) = {9.704404e-01,1.000000e+00,4.117359e-03,1.114743e-01}; -Point(391) = {9.755284e-01,1.000000e+00,3.419365e-03,1.095491e-01}; -Point(392) = {9.801469e-01,1.000000e+00,2.781989e-03,1.077836e-01}; -Point(393) = {9.842916e-01,1.000000e+00,2.206860e-03,1.061847e-01}; -Point(394) = {9.879584e-01,1.000000e+00,1.695579e-03,1.047586e-01}; -Point(395) = {9.911436e-01,1.000000e+00,1.249551e-03,1.035112e-01}; -Point(396) = {9.938442e-01,1.000000e+00,8.699747e-04,1.024472e-01}; -Point(397) = {9.960575e-01,1.000000e+00,5.579769e-04,1.015708e-01}; -Point(398) = {9.977810e-01,1.000000e+00,3.143904e-04,1.008856e-01}; -Point(399) = {9.990134e-01,1.000000e+00,1.398841e-04,1.003943e-01}; -Point(400) = {9.997533e-01,1.000000e+00,3.498543e-05,lc}; -Line(1) = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, -50}; -Line(2) = { 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, -96, 97, 98, 99, 100}; -Line(3) = { 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, -134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150}; -Line(4) = { 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, -184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 1}; -Line(5) = { 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, -235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250}; -Line(6) = { 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, -284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300}; -Line(7) = { 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, -334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350}; -Line(8) = { 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, -384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 201}; -Line(9) = { 1, 201}; -Line(10) = { 100, 300}; -Line Loop(13) = {5,6,7,8}; -Plane Surface(14) = {13}; -Line(15) = { 50, 250}; -Line(16) = { 150, 350}; -Line Loop(17) = {1,15,-5,-9}; -Ruled Surface(18) = {17}; -Line Loop(19) = {2,10,-6,-15}; -Ruled Surface(20) = {19}; -Line Loop(21) = {-3,10,7,-16}; -Ruled Surface(22) = {21}; -Line Loop(23) = {8,-9,-4,16}; -Ruled Surface(24) = {23}; -Point (1001) = {-10.,0., 10.,3.}; -Point (1002) = { 10.,0., 10.,3.}; -Point (1003) = { 10.,0., -10.,3.}; -Point (1004) = {-10.,0., -10.,3.}; -Point (1010) = { 10.,0., 0.,3.}; -Point (1011) = {-10.,0., 0.,3.}; -Point (1005) = {-10., 10., 10.,3.}; -Point (1006) = { 10., 10., 10.,3.}; -Point (1007) = { 10., 10.,-10.,3.}; -Point (1008) = {-10., 10.,-10.,3.}; -Line(1001) = {1001,1002}; -Line(1003) = {1004,1003}; -Line(1005) = {1005,1006}; -Line(1006) = {1006,1007}; -Line(1007) = {1008,1007}; -Line(1008) = {1005,1008}; -Line(1009) = {1001,1005}; -Line(1010) = {1002,1006}; -Line(1011) = {1003,1007}; -Line(1012) = {1004,1008}; -Line(1013) = {1010,1}; -Line(1014) = {1011,100}; -Line(1015) = {1002,1010}; -Line(1016) = {1001,1011}; -Line(1017) = {1011,1004}; -Line(1018) = {1010,1003}; -Line Loop(1000)= {1001,1015,1013,-4,-3,-1014,-1016}; -Plane Surface(1100) = {1000}; -Line Loop(1001)= {1014,-2,-1,-1013,1018,-1003,-1017}; -Plane Surface(1101) = {1001}; -Line Loop(1002)= {1005,1006,-1007,-1008}; -Plane Surface(1102 ) = {1002}; -Line Loop(1003)= {1009,1008,-1012,-1017,-1016}; -Plane Surface(1103 ) = {1003}; -Line Loop(1004)= {1006,-1011,-1018,-1015,1010}; -Plane Surface(1104 ) = {1004}; -Line Loop(1005)= {1009, 1005,-1010,-1001}; -Plane Surface(1105 ) = {1005}; -Line Loop(1006)= {1012,1007,-1011,-1003}; -Plane Surface(1106 ) = {1006}; -Surface Loop(1107) = {1101,1100,1105,-1103,-1102,1104,-1106,-24,14,18,20,-22}; -Complex Volume(1108) = {1107}; - -Physical Volume(1110) = {1108}; diff --git a/benchmarks/3d/old_extrude.geo b/benchmarks/3d/old_extrude.geo deleted file mode 100644 index a0bcc6b4fc6bff91139eee1ecfd79230e18ee552..0000000000000000000000000000000000000000 --- a/benchmarks/3d/old_extrude.geo +++ /dev/null @@ -1,454 +0,0 @@ -// Mudanca de algumas coordenadas 22/05/2001 - Li�ge. - -/* Desenho do servo motor em 3D - 20/07/2000 */ - -/* Analise de um servomotor de imas permanentes - GRUCAD - julho de 2000 */ - -rR1 = 10.5e-03; -rR2 = 23.243e-03; -rR3 = 23.862e-03; -rR4 = 23.9e-03; -rR5 = 25.6e-03; - -rS1 = 26.02e-03; -rS2 = 26.62e-03; -rS3 = 26.96e-03; -rS4 = 38.16e-03; -rS5 = 38.27e-03; -rS6 = 40.02e-03; -rS7 = 46.0e-03; - -Gap = rS1-rR5; - -rB1=rR5+Gap/3; rB1b=rB1; -//rB1=rR5+Gap/3.7; rB1b=rR5+Gap/2.3; //To see both different surfaces -rB2=rR5+Gap*2/3; - - -NbrDiv = 16; - -A0 = 45.0; -/* Rotor position(deg):use 0 for the mesh and other angles for drawing*/ -//A1 = 4.0001*45.0/NbrDiv; -A1 = 90. ; - -deg2rad = Pi/180; - -/* Mesh parameters */ - -s = 1.; - -pR1 =(rR2-rR1)/10.*s; -pR2 =(rR2-rR1)/12.*s; - -pS1 =(rS7-rS1)/7.*s; -pS2 =(rS7-rS1)/12.*s; -pS3 =(rS6-rS3)/10.*s; - - -// Uma das faces do servo motor - -/* Rotor */ - -Point(1)={0,0,0,pR1}; - -A = 0.+A1; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(2)={rR1*cosA,rR1*sinA,0,pR1}; -Point(3)={rR4*cosA,rR4*sinA,0,pR1}; -Point(4)={rR5*cosA,rR5*sinA,0,pR1}; - -Point(5)={rB1*cosA,rB1*sinA,0,pR2}; - -A = 4.455+A1; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(6)={rR2*cosA,rR2*sinA,0,pR1}; - -A = 4.938+A1; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(7)={rR3*cosA,rR3*sinA,0,pR1}; - -A = 6.165+A1; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(8)={rR5*cosA,rR5*sinA,0,pR1}; - -A = 38.835+A1; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(9)={rR5*cosA,rR5*sinA,0,pR1}; - -A = 40.062+A1; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(10)={rR3*cosA,rR3*sinA,0,pR1}; - -A = 40.545+A1; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(11)={rR2*cosA,rR2*sinA,0,pR1}; - -A = 45.0+A1; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(12)={rR1*cosA,rR1*sinA,0,pR1}; -Point(13)={rR4*cosA,rR4*sinA,0,pR1}; -Point(14)={rR5*cosA,rR5*sinA,0,pR1}; - -Point(15)={rB1*cosA,rB1*sinA,0,pR2}; - -/* Gap */ - -Point(16)={rB1b,0,0,pS1}; -Point(17)={rB2,0,0,pS1}; - -A = 45.0; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(18)={rB1b*cosA,rB1b*sinA,0,pS1}; -Point(19)={rB2*cosA,rB2*sinA,0,pS1}; - - -/* Stator */ - -Point(20)={rS1,0,0,pS1}; -Point(21)={rS7,0,0,pS2}; - -A = 5.71+0; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(61)={rS7*cosA,rS7*sinA,0,pS3}; -A = 5.71+15; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(62)={rS7*cosA,rS7*sinA,0,pS3}; -A = 5.71+30; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(63)={rS7*cosA,rS7*sinA,0,pS3}; - -//A = 22.5; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -//Point(22)={rS7*cosA,rS7*sinA,0,pS2}; - -A = 45.0; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(23)={rS1*cosA,rS1*sinA,0,pS1}; -Point(24)={rS7*cosA,rS7*sinA,0,pS2}; - -/* Pontos da ranhura 01 */ - -A2 = 0.0; - -A = 2.77+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(25)={rS5*cosA,rS5*sinA,0,pS3}; - -A = 4.0+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(26)={rS3*cosA,rS3*sinA,0,pS3}; - -A = 5.52+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(27)={rS1*cosA,rS1*sinA,0,pS3}; - -A = 5.56+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(28)={rS2*cosA,rS2*sinA,0,pS3}; - -A = 5.56+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(29)={rS4*cosA,rS4*sinA,0,pS3}; - -A = 5.65+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(30)={rS6*cosA,rS6*sinA,0,pS3}; - -A = 9.35+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(31)={rS6*cosA,rS6*sinA,0,pS3}; - -A = 9.44+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(32)={rS4*cosA,rS4*sinA,0,pS3}; - -A = 9.44+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(33)={rS2*cosA,rS2*sinA,0,pS3}; - -A = 9.48+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(34)={rS1*cosA,rS1*sinA,0,pS3}; - -A = 11.0+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(35)={rS3*cosA,rS3*sinA,0,pS3}; - -A = 12.23+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(36)={rS5*cosA,rS5*sinA,0,pS3}; - -/* Pontos da ranhura 02 */ - -A2 = 15.0; - -A = 2.77+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(37)={rS5*cosA,rS5*sinA,0,pS3}; - -A = 4.0+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(38)={rS3*cosA,rS3*sinA,0,pS3}; - -A = 5.52+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(39)={rS1*cosA,rS1*sinA,0,pS3}; - -A = 5.56+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(40)={rS2*cosA,rS2*sinA,0,pS3}; - -A = 5.56+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(41)={rS4*cosA,rS4*sinA,0,pS3}; - -A = 5.65+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(42)={rS6*cosA,rS6*sinA,0,pS3}; - -A = 9.35+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(43)={rS6*cosA,rS6*sinA,0,pS3}; - -A = 9.44+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(44)={rS4*cosA,rS4*sinA,0,pS3}; - -A = 9.44+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(45)={rS2*cosA,rS2*sinA,0,pS3}; - -A = 9.48+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(46)={rS1*cosA,rS1*sinA,0,pS3}; - -A = 11.0+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(47)={rS3*cosA,rS3*sinA,0,pS3}; - -A = 12.23+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(48)={rS5*cosA,rS5*sinA,0,pS3}; - -/* Pontos da ranhura 03 */ - -A2 = 30.0; - -A = 2.77+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(49)={rS5*cosA,rS5*sinA,0,pS3}; - -A = 4.0+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(50)={rS3*cosA,rS3*sinA,0,pS3}; - -A = 5.52+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(51)={rS1*cosA,rS1*sinA,0,pS3}; - -A = 5.56+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(52)={rS2*cosA,rS2*sinA,0,pS3}; - -A = 5.56+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(53)={rS4*cosA,rS4*sinA,0,pS3}; - -A = 5.65+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(54)={rS6*cosA,rS6*sinA,0,pS3}; - -A = 9.35+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(55)={rS6*cosA,rS6*sinA,0,pS3}; - -A = 9.44+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(56)={rS4*cosA,rS4*sinA,0,pS3}; - -A = 9.44+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(57)={rS2*cosA,rS2*sinA,0,pS3}; - -A = 9.48+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(58)={rS1*cosA,rS1*sinA,0,pS3}; - -A = 11.0+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(59)={rS3*cosA,rS3*sinA,0,pS3}; - -A = 12.23+A2; sinA=Sin(A*deg2rad);cosA=Cos(A*deg2rad); -Point(60)={rS5*cosA,rS5*sinA,0,pS3}; - - -// linhas e circulos do rotor - -Line(1)={1,2}; -Line(2)={2,3}; -Line(3)={3,4}; -Line(4)={4,5}; -Line(5)={3,7}; -Line(6)={6,7}; -Line(7)={7,8}; -Line(8)={6,11}; -Line(9)={11,10}; -Line(10)={10,9}; -Line(11)={1,12}; -Line(12)={12,13}; -Line(13)={13,14}; -Line(14)={14,15}; -Line(15)={13,10}; -Circle(16)={2,1,12}; -Circle(17)={4,1,8}; -Circle(18)={8,1,9}; -Circle(19)={9,1,14}; -Circle(20)={5,1,15}; - -/* linhas e circulos do entreferro */ - -Line(21)={16,17}; -Line(22)={17,20}; -Line(23)={18,19}; -Line(24)={19,23}; -Circle(25)={16,1,18}; -Circle(26)={17,1,19}; - -/* linhas e circulos do estator */ -Line(27)={20,21}; -Line(28)={23,24}; -Circle(29)={20,1,27}; -Circle(30)={34,1,39}; -Circle(31)={46,1,51}; -Circle(32)={58,1,23}; -Circle(33)={21,1,61}; -Circle(34)={61,1,62}; -Circle(89)={62,1,63}; -Circle(90)={63,1,24}; - -Line(91)={30,61}; -Line(92)={42,62}; -Line(93)={54,63}; - -/* linhas e circulos da ranhura 01 */ -Line(35)={27,28}; -Line(36)={28,26}; -Line(37)={26,25}; -Circle(38)={25,29,30}; -Line(39)={30,31}; -Circle(40)={31,32,36}; -Line(41)={36,35}; -Line(42)={35,33}; -Line(43)={33,34}; -Line(44)={26,35}; - -/* linhas e circulos da ranhura 02 */ -Line(45)={39,40}; -Line(46)={40,38}; -Line(47)={38,37}; -Circle(48)={37,41,42}; -Line(49)={42,43}; -Circle(50)={43,44,48}; -Line(51)={48,47}; -Line(52)={47,45}; -Line(53)={45,46}; -Line(54)={38,47}; - -/* linhas e circulos da ranhura 03 */ -Line(55)={51,52}; -Line(56)={52,50}; -Line(57)={50,49}; -Circle(58)={49,53,54}; -Line(59)={54,55}; -Circle(60)={55,56,60}; -Line(61)={60,59}; -Line(62)={59,57}; -Line(63)={57,58}; -Line(64)={50,59}; - -/* superficies do rotor */ - -Line Loop(65) = {-11,1,16}; -Plane Surface(66) = {65}; -Line Loop(67) = {12,15,-9,-8,6,-5,-2,16}; -Plane Surface(68) = {67}; -Line Loop(69) = {7,-17,-3,5}; -Plane Surface(70) = {69}; -Line Loop(71) = {-18,-7,-6,8,9,10}; -Plane Surface(72) = {71}; -Line Loop(73) = {-19,-10,-15,13}; -Plane Surface(74) = {73}; -Line Loop(75) = {18,19,14,-20,-4,17}; -Plane Surface(76) = {75}; - -/* superficies do entreferro (banda de movimento) */ - -Transfinite Line{20,25,26}=NbrDiv+1 Using Power 1.; -Transfinite Line{21,23}=2; -Line Loop(77) = {-23,-25,21,26}; -Plane Surface(78) = {77}; -Transfinite Surface{78}={16,17,19,18}; -Recombine Surface{78}; // For Hexahedra in the Moving Band - -/* superficies do estator */ - -Line Loop(79) = {24,-32,-63,-62,-64,-56,-55,-31,-53,-52,-54,-46,-45,-30,-43,-42,-44,-36,-35,-29,-22,26}; -Plane Surface(80) = {79}; - - -Line Loop(94) = {37,38,91,-33,-27,29,35,36}; -Plane Surface(95) = {94}; -Line Loop(96) = {42,43,30,45,46,47,48,92,-34,-91,39,40,41}; -Plane Surface(97) = {96}; -Line Loop(98) = {52,53,31,55,56,57,58,93,-89,-92,49,50,51}; -Plane Surface(99) = {98}; -Line Loop(100) = {62,63,32,28,-90,-93,59,60,61}; -Plane Surface(101) = {100}; -/* -Line Loop(81) = {37,38,39,40,41,42,43,30,45,46,47,48,49,50,51,52,53,31,55,56,57,58,59,60,61,62,63,32,28,-90,-89,-34,-33,-27,29,35,36}; -Plane Surface(82) = {81}; -*/ -/* superficie da ranhura 01 */ - -Line Loop(83) = {-41,-40,-39,-38,-37,44}; -Plane Surface(84) = {83}; - -/* superficie da ranhura 02 */ - -Line Loop(85) = {-51,-50,-49,-48,-47,54}; -Plane Surface(86) = {85}; - -/* superficie da ranhura 03 */ -Line Loop(87) = {-61,-60,-59,-58,-57,64}; -Plane Surface(88) = {87}; - -// Continue with 101 ... - -// ---------------------------------------------------- -// ---------------------------------------------------- - -L_ = 100e6 ; -S_ = 200e6 ; -V_ = 300e6 ; -P_ = 400e6 ; -N_ = 1e6 ; - - -Physical Volume(1301) = {V_+N_+68}; // Rotor - -//Physical Volume(1302) = {V_+N_+95, V_+N_+97, V_+N_+99, V_+N_+101}; // Stator - -Physical Volume(1320) = {V_+N_+95}; // StatorSup0 -Physical Volume(1321) = {V_+N_+97}; // StatorSup1 -Physical Volume(1322) = {V_+N_+99}; // StatorSup2 -Physical Volume(1323) = {V_+N_+101}; // StatorSup3 - -Physical Volume(1300) = {V_+N_+66}; // AirInt -Physical Volume(1303) = {V_+N_+76}; // AirRotor -Physical Volume(1304) = {V_+N_+80}; // AirStator -Physical Volume(1305) = {V_+N_+78}; // AirBM - -Physical Volume(1310) = {V_+N_+72}; // Magnet - -Physical Volume(1311) = {V_+N_+70}; // Cale1 -Physical Volume(1312) = {V_+N_+74}; // Cale2 - -Physical Volume(1401) = {V_+N_+84}; // Ind1 -Physical Volume(1402) = {V_+N_+86}; // Ind2 -Physical Volume(1403) = {V_+N_+88}; // Ind3 - - -Physical Surface(2001) = {L_+N_+16}; // SurfInt -Physical Surface(2002) = {L_+N_+33,L_+N_+34,L_+N_+89,L_+N_+90}; // SurfExt - -Physical Surface(1011) = {L_+N_+ 1, L_+N_+2, L_+N_+3, L_+N_+4, L_+N_+21,L_+N_+22, L_+N_+27}; // SurfA -Physical Surface(1012) = {L_+N_+11,L_+N_+12,L_+N_+13,L_+N_+14, L_+N_+23,L_+N_+24, L_+N_+28}; // SurfB - - -Physical Surface(1501) = {L_+N_+20}; // SurfR -Physical Surface(1502) = {L_+N_+25}; // SurfBM - -Physical Line(2021) = {P_+N_+15}; // PointR -Physical Line(2022) = {P_+N_+18}; // PointBM - -// SurfR (PointR) & SurfBM (PointBM) are lines (points) located at the same -// position, but with distinct nodes - - -// For h-formulation (cut ...) -Physical Surface(2210) = {L_+N_+37,L_+N_+38,/*L_+N_+39,*/L_+N_+40,L_+N_+41,L_+N_+44}; // SkinInd1 -Physical Surface(2211) = {L_+N_+91}; // CutInd1 -Physical Surface(2212) = {L_+N_+39}; // SkinInd1_2 - -Physical Surface(2220) = {L_+N_+47,L_+N_+48,/*L_+N_+49,*/L_+N_+50,L_+N_+51,L_+N_+54}; // SkinInd2 -Physical Surface(2221) = {L_+N_+92}; // CutInd2 -Physical Surface(2222) = {L_+N_+49}; // SkinInd2_2 - -Physical Surface(2230) = {L_+N_+57,L_+N_+58,/*L_+N_+59,*/L_+N_+60,L_+N_+61,L_+N_+64}; // SkinInd3 -Physical Surface(2231) = {L_+N_+93}; // CutInd3 -Physical Surface(2232) = {L_+N_+59}; // SkinInd3_2 - - -Physical Point(2015) = {2}; // PointRef - - -i = 0*S_+0*N_ ; -Physical Surface(2300) = -{ i+68, i+95,i+97,i+99,i+101, i+66,i+76,i+80,i+78, i+72, i+70,i+74, i+84,i+86,i+88 }; // SurfZ0 - -i = S_+1*N_ ; -Physical Surface(2301) = -{ i+68, i+95,i+97,i+99,i+101, i+66,i+76,i+80,i+78, i+72, i+70,i+74, i+84,i+86,i+88 }; // SurfZ1 - diff --git a/benchmarks/3d/old_extrude.par b/benchmarks/3d/old_extrude.par deleted file mode 100644 index 25e95e2dd07a08b34ad7230e8dcb6581198fff6d..0000000000000000000000000000000000000000 --- a/benchmarks/3d/old_extrude.par +++ /dev/null @@ -1,3 +0,0 @@ -1 -1 -0.04 diff --git a/benchmarks/3d/p19.geo b/benchmarks/3d/p19.geo deleted file mode 100644 index 344119dd0d9ac309e0a4001088adb7ffcf3baa8f..0000000000000000000000000000000000000000 --- a/benchmarks/3d/p19.geo +++ /dev/null @@ -1,119 +0,0 @@ -fact = 0.4 ; -rondelle = fact * 0.01; -iris = fact * 0.004; -size = fact * 0.01; - -larg = 86.36e-3 / 2.0 ; -long = 45.0e-3 ; -l = 16.e-3 / 2.0 ; -re = 90.e-3 / 2.0 ; -re2 = re + 3.e-3 ; -ri = 8.e-3 / 2.0 ; -ll = 60.0e-3 / 2.0; -a = larg - ll; -c45 = 0.5^0.5 ; - -hg = 21.59e-3 ; -hcav = 42.5e-3 ; - -x2 = long; -y1 = ri * c45; -y2 = ri ; -y3 = l ; -ss1 = l / re ; -xtemp = re * ( ( 1.0 - ss1 * ss1 ) ^ 0.5 ) ; -ss2 = ( 1.0 - ( xtemp / re2 ) * ( xtemp / re2 ) ) ^ 0.5 ; -y4 = ss2 * xtemp ; -ss3 = ll / re2; -xtemp2 = re2 * ( ( 1.0 - ss3 * ss3 ) ^ 0.5 ) ; -x1 = long - ( xtemp - xtemp2 ) ; -x6 = x1 + xtemp ; -x3 = x6 - re * c45 ; -x4 = x6 - ri ; -x5 = x6 - ri * c45 ; -x7 = x6 + ri * c45 ; -x8 = x6 + ri ; -x9 = x6 + re * c45 ; -x10 = x6 + re ; -y5 = ll ; -y6 = re * c45 ; -y7 = re ; -y8 = larg ; - - -Point(1) = {0.0,0.0,0.0,size}; -Point(2) = {0.0,y8,0.0,size}; -Point(3) = {x2,y8,0.0,size}; -Point(4) = {x2,y5,0.0,size}; -Point(5) = {x1,y4,0.0,size}; -Point(6) = {x1,y3,0.0,iris}; -Point(7) = {x1,0.0,0.0,iris}; -Point(8) = {x3,y6,0.0,size}; -Point(9) = {x6,y7,0.0,size}; -Point(10) = {x9,y6,0.0,size}; -Point(11) = {x10,0.0,0.0,size}; -Point(12) = {x8,0.0,0.0,rondelle}; -Point(13) = {x6,0.0,0.0,rondelle}; -Point(14) = {x4,0.0,0.0,rondelle}; -Point(15) = {x7,y1,0.0,rondelle}; -Point(16) = {x6,y2,0.0,rondelle}; -Point(17) = {x5,y1,0.0,rondelle}; - -Line(1) = {1,2}; -Line(2) = {2,3}; -Line(3) = {3,4}; -Line(4) = {5,6}; -Line(5) = {1,7}; -Line(6) = {7,14}; -Line(10) = {6,7}; -Line(11) = {14,13}; -Line(12) = {13,12}; -Circle(16) = {11,13,10}; -Circle(17) = {10,13,9}; -Circle(18) = {9,13,8}; -Circle(19) = {8,13,6}; -Circle(20) = {4,13,5}; -Line(21) = {11,12}; -Circle(22) = {17,13,14}; -Circle(23) = {16,13,17}; -Circle(24) = {15,13,16}; -Circle(25) = {12,13,15}; - -Line Loop(26) = {-5,1,2,3,20,4,10}; -Plane Surface(27) = {26}; - -Line Loop(28) = {-6,-10,-19,-18,-17,-16,21,25,24,23,22}; -Plane Surface(29) = {28}; - -Line Loop(30) = {11,12,25,24,23,22}; -Plane Surface(31) = {30}; - -Extrude Surface{27, {0,0,hg} }; -Coherence; - -Extrude Surface{29, {0,0,hg} }; -Coherence; - -Extrude Surface{31, {0,0,hg} }; -Coherence; - -Extrude Surface {105, {0,0,hcav-hg} }; -Coherence; - -Extrude Surface {126, {0,0,hcav-hg} }; -Coherence; - -//Characteristic Length {58,71} = 0.01; - -Point(85) = {0.0,0.0,0.0,1.0}; -Surface Loop(158) = {67,27,43,47,51,55,59,63,68}; -Volume(159) = {158}; -Surface Loop(159) = {112,29,84,67,125,92,96,100,104,108,116,120,124}; -Volume(160) = {159}; - -GO = 1 ; -CAV = 2 ; -DIS = 3 ; -CLDSRC = 4 ; -CLD = 5 ; - diff --git a/benchmarks/3d/p20.geo b/benchmarks/3d/p20.geo deleted file mode 100644 index 59c000b7b1f67f8cfc4184560f3e1b8de94c8709..0000000000000000000000000000000000000000 --- a/benchmarks/3d/p20.geo +++ /dev/null @@ -1,195 +0,0 @@ -/* - c8 - +---------------------+ c7 - | c4 | - | +-------------+ | - | | c3 +---+ - +---+ c5 c6 - c1 c2 - -*/ - -/* Base inferieure du fer */ -D1 = .05; -/* Base inferieure du fer */ -D2 = .15; -D3 = .01; -D4 = .03; -D5 = .05; -D6 = .025; - -ax = 3.2; -ay = 3.2; -az = 3.2; -Dy = ax * D1; -Dz = ay * D2; -Dx = az * D5; - -e = 2*.001; - -l = .008; -lbox = 2.*ax*l; - -c1=newp; -Point(c1) = {0,0,0,l}; -c2=newp; -Point(c2) = {0,D1,0,l}; -c3=newp; -Point(c3) = {0,D1,D2,l}; -c4=newp; -Point(c4) = {0,D3,D2,l}; -c5=newp; -Point(c5) = {0,D3,D2-D4,l}; -c6=newp; -Point(c6) = {0,D1-D4,D2-D4,l}; -c7=newp; -Point(c7) = {0,D1-D4,D4,l}; -c8=newp; -Point(c8) = {0,0,D4,l}; - -d1 = newreg; -Line (d1) = {c1,c2}; -d2 = newreg; -Line (d2) = {c2,c3}; -d3 = newreg; -Line (d3) = {c3,c4}; -d4 = newreg; -Line (d4) = {c4,c5}; -d5 = newreg; -Line (d5) = {c5,c6}; -d6 = newreg; -Line (d6) = {c6,c7}; -d7 = newreg; -Line (d7) = {c7,c8}; -d8 = newreg; -Line (d8) = {c8,c1}; - -e1 = newreg; -Line Loop (newreg) = {d1,d2,d3,d4,d5,d6,d7,d8}; -f1 = newreg; -Plane Surface (f1) = {e1}; -Extrude Surface { f1, {D5,0.00000E+00, 0.00000E+00} }; - -box1 = newp; -Point(box1) = {Dx,Dy,Dz,lbox}; -box2 = newp; -Point(box2) = {Dx,Dy,-Dz/6,lbox}; -box3 = newp; -Point(box3) = {Dx,0,-Dz/6,lbox}; -box4 = newp; -Point(box4) = {Dx,0,Dz,lbox}; -box5 = newp; -Point(box5) = {0,Dy,-Dz/6,lbox}; -box6 = newp; -Point(box6) = {0,Dy,Dz,lbox}; -box7 = newp; -Point(box7) = {0,0,Dz,lbox}; -box8 = newp; -Point(box8) = {0,0,-Dz/6,lbox}; - -lbox1 = newreg; -Line(lbox1) = {box7,box6}; -lbox2 = newreg; -Line(lbox2) = {box6,box1}; -lbox3 = newreg; -Line(lbox3) = {box1,box4}; -lbox4 = newreg; -Line(lbox4) = {box4,box7}; -lbox5 = newreg; -Line(lbox5) = {box8,box5}; -lbox6 = newreg; -Line(lbox6) = {box5,box2}; -lbox7 = newreg; -Line(lbox7) = {box2,box3}; -lbox8 = newreg; -Line(lbox8) = {box3,box8}; -lbox9 = newreg; -Line(lbox9) = {box5,box6}; -lbox10 = newreg; -Line(lbox10) = {box2,box1}; -lbox11 = newreg; -Line(lbox11) = {box3,box4}; - - - -s1 = newp; -Point(s1) = {0,0,D4+e,l}; -s2 = newp; -Point(s2) = {0,0,D2-D4-e,l}; -s3 = newp; -Point(s3) = {0,D3-e,D2-D4-e,l}; -s4 = newp; -Point(s4) = {0,D3-e,D4+e,l}; - -q1 = newreg; -Line(q1) = {s1,s2}; -q2 = newreg; -Line(q2) = {s2,s3}; -q3 = newreg; -Line(q3) = {s3,s4}; -q4 = newreg; -Line(q4) = {s4,s1}; - -v1 = newreg; -Line(v1) = {box8,c1}; -v2 = newreg; -Line(v2) = {s2,box7}; -v3 = newreg; -Line(v3) = {s1,c8}; - -e2 = newreg; -Line Loop (newreg) = {q1,q2,q3,q4}; -f2 = newreg; -Ruled Surface (f2) = {e2}; -Extrude Surface { f2, {D6,0.00000E+00, 0.00000E+00} }; - -DxInducteur = .005; -DyInducteur = .01; -DzInducteur = .06; -Rinducteur = .001; -Xinducteur = .028; -Yinducteur = .00; -Zinducteur = .04; -LcInducteur = .006; - -r1 = newp; -Point(r1) = {Xinducteur,Yinducteur,Zinducteur,LcInducteur}; -r2 = newp; -Point(r2) = {Xinducteur+DxInducteur,Yinducteur,Zinducteur,LcInducteur}; -r3 = newp; -Point(r3) = {Xinducteur+DxInducteur,Yinducteur+DyInducteur,Zinducteur,LcInducteur}; -r4 = newp; -Point(r4) = {Xinducteur,Yinducteur+DyInducteur,Zinducteur,LcInducteur}; -cc = newp; -Point(cc) = {Xinducteur-Rinducteur,Yinducteur+DyInducteur,Zinducteur,LcInducteur}; -r5 = newp; -Point(r5) = {Xinducteur-Rinducteur,Yinducteur+DyInducteur+Rinducteur,Zinducteur,LcInducteur}; -r6 = newp; -Point(r6) = {Xinducteur-Rinducteur,Yinducteur+DyInducteur+DxInducteur+Rinducteur,Zinducteur,LcInducteur}; -r7 = newp; -Point(r7) = {0,Yinducteur+DxInducteur+DyInducteur+Rinducteur,Zinducteur,LcInducteur}; -r8 = newp; -Point(r8) = {0,Yinducteur+DyInducteur+Rinducteur,Zinducteur,LcInducteur}; - -ll1 = newreg; -Line(ll1) = {r2,r1}; -ll2 = newreg; -Line(ll2) = {r1,r4}; -ll3 = newreg; -Circle (ll3) = {r4,cc,r5}; -ll4 = newreg; -Line(ll4) = {r5,r8}; -ll5 = newreg; -Line(ll5) = {r8,r7}; -ll6 = newreg; -Line(ll6) = {r7,r6}; -ll7 = newreg; -Circle(ll7) = {r3,cc,r6}; -ll8 = newreg; -Line(ll8) = {r3,r2}; - -BFondDeLInducteur = newreg; -Line Loop(BFondDeLInducteur) = {ll1,ll2,ll3,ll4,ll5,ll6,-ll7,ll8}; -FondDeLInducteur = newreg; -Plane Surface(FondDeLInducteur) = {BFondDeLInducteur}; -Extrude Surface { FondDeLInducteur, {0,0,DzInducteur} }; diff --git a/benchmarks/3d/p4a.geo b/benchmarks/3d/p4a.geo deleted file mode 100644 index 4a2367a39702954582960f4f8f596b15f045fe16..0000000000000000000000000000000000000000 --- a/benchmarks/3d/p4a.geo +++ /dev/null @@ -1,166 +0,0 @@ -epecr = 4.e-3 ; - -c = 0.0 ; -lspire = 0.135 ; -pspire = 0.4 ; -lecr = 0.3 ; -pecr = 0.5 ; -hecr = 0.2 - epecr/2. ; - -far = 2. ; -infty = 2.5 ; - -lc1 = 0.1; -lc2 = 0.1; -lc4 = 0.8; - -lc1 = 0.01; -lc2 = 0.05; -lc3 = 0.1; -lc4 = 0.5; - - - -Point(1) = {c, c, c, lc2}; -Point(2) = {c+lspire, c, c, lc2}; -Point(3) = {c, c+pspire, c, lc2}; -Point(4) = {c+lspire, c+pspire, c, lc2}; - -Point(5) = {c+lecr, c, c, lc2}; -Point(6) = {c, c+pecr, c, lc2}; -Point(7) = {c+lecr, c+pecr, c, lc2}; - -Point(8) = {c, c, c+hecr, lc2}; -Point(9) = {c+lecr, c, c+hecr, lc1}; -Point(10)= {c, c+pecr, c+hecr, lc1}; -Point(11)= {c+lecr, c+pecr, c+hecr, lc1}; - -Point(12)= {c+far, c, c, lc4}; -Point(13)= {c, c+far, c, lc4}; -Point(14)= {c, c, c+far, lc3}; -Point(15)= {c, c, c-far, lc4}; - -Point(16)= {c+infty, c, c, lc4}; -Point(17)= {c, c+infty, c, lc4}; -Point(18)= {c, c, c+infty, lc4}; -Point(19)= {c, c, c-infty, lc4}; - -Line(1) = {2,4}; -Line(2) = {4,3}; -Line(3) = {1,2}; -Line(4) = {1,3}; -Line(5) = {2,5}; -Line(6) = {5,7}; -Line(7) = {7,6}; -Line(8) = {6,13}; -Line(9) = {5,12}; -Line(10) = {6,10}; -Line(11) = {10,11}; -Line(12) = {11,7}; -Line(13) = {10,8}; -Line(14) = {8,9}; -Line(15) = {9,11}; -Line(16) = {9,5}; -Line(17) = {1,8}; -Line(18) = {8,14}; -Line(19) = {14,18}; -Line(20) = {13,17}; -Line(21) = {12,16}; -Circle(22) = {12,1,13}; -Circle(23) = {16,1,17}; -Circle(24) = {12,1,14}; -Circle(25) = {16,1,18}; -Circle(26) = {13,1,14}; -Circle(27) = {17,1,18}; -Circle(28) = {15,1,13}; -Circle(29) = {19,1,17}; -Circle(30) = {12,1,15}; -Circle(31) = {16,1,19}; -Line(32) = {1,15}; -Line(33) = {15,19}; -Line(34) = {3,6}; - -Line Loop(35) = {-2,-1,-3,4}; -Plane Surface(36) = {35}; -Line Loop(37) = {-7,-6,-5,1,2,34}; -Plane Surface(38) = {37}; -Line Loop(39) = {7,10,11,12}; -Plane Surface(40) = {39}; -Line Loop(41) = {12,-6,-16,15}; -Plane Surface(42) = {41}; -Line Loop(43) = {14,15,-11,13}; -Plane Surface(44) = {43}; -Line Loop(45) = {5,-16,-14,-17,3}; -Plane Surface(46) = {45}; -Line Loop(47) = {-17,4,34,10,13}; -Plane Surface(48) = {47}; -Line Loop(49) = {7,8,-22,-9,6}; -Plane Surface(50) = {49}; -Line Loop(51) = {20,-23,-21,22}; -Plane Surface(52) = {51}; -Line Loop(53) = {-8,-34,-4,32,28}; -Plane Surface(54) = {53}; -Line Loop(55) = {-20,-28,33,29}; -Plane Surface(56) = {55}; -Line Loop(57) = {5,9,30,-32,3}; -Plane Surface(58) = {57}; -Line Loop(59) = {19,-25,-21,24}; -Plane Surface(60) = {59}; -Line Loop(61) = {9,24,-18,14,16}; -Plane Surface(62) = {61}; -Line Loop(63) = {-18,-13,-10,8,26}; -Plane Surface(64) = {63}; -Line Loop(65) = {19,-27,-20,26}; -Plane Surface(66) = {65}; -Line Loop(67) = {33,-31,-21,30}; -Plane Surface(68) = {67}; -Line Loop(69) = {-28,-30,22}; -Ruled Surface(70) = {69}; -Line Loop(71) = {-29,-31,23}; -Ruled Surface(72) = {71}; -Line Loop(73) = {-24,22,26}; -Ruled Surface(74) = {73}; -Line Loop(75) = {-25,23,27}; -Ruled Surface(76) = {75}; - -Surface Loop(77) = {48,-46,-38,-40,-44,42,-36}; -Complex Volume(78) = {77}; -Surface Loop(79) = {64,-62,-50,40,44,-42,-74}; -Complex Volume(80) = {79}; -Surface Loop(81) = {36,38,50,54,58,70}; -Complex Volume(82) = {81}; -Surface Loop(83) = {70,-56,-52,-72,68}; -Complex Volume(84) = {83}; -Surface Loop(85) = {52,66,-60,76,-74}; -Complex Volume(86) = {85}; - - - -AirInterieur = 1111 ; -AirBas = 1112 ; -AirHaut = 1113 ; -AirInfini = 1114 ; - -Spire = 2222 ; -Ecran = 3333 ; -dEcran = 3334 ; - -CLInf = 1100 ; - - - -Physical Line(dEcran) = {11,12,6, 14,16,13} ; - -Physical Surface(Spire) = 36 ; -Physical Surface(Ecran) = {42,44} ; - -Physical Surface(CLInf) = {76,72} ; - -Physical Volume(AirInterieur) = 78; -Physical Volume(AirBas) = 80; -Physical Volume(AirHaut) = 82; - -Physical Volume(AirInfini) = {84,86}; - - - diff --git a/benchmarks/3d/prism.geo b/benchmarks/3d/prism.geo deleted file mode 100644 index d537e222cbbe26b62ec93d4e4b070023470fe985..0000000000000000000000000000000000000000 --- a/benchmarks/3d/prism.geo +++ /dev/null @@ -1,46 +0,0 @@ -Point(1) = {0.0,0.0,0.0,1.0}; -Point(2) = {1,0.0,0.0,1.0}; -Point(3) = {1,0.0,1,1.0}; -Point(4) = {1,2,1,1.0}; -Point(5) = {0,2,0,1.0}; -Point(6) = {1,2,0,1.0}; - -Line(1) = {4,6}; -Line(2) = {6,5}; -Line(3) = {5,4}; -Line(4) = {2,1}; -Line(5) = {1,3}; -Line(6) = {3,2}; -Line(7) = {2,6}; -Line(8) = {5,1}; -Line(9) = {3,4}; - -Line Loop(10) = {9,-3,8,5}; -Plane Surface(11) = {10}; -Line Loop(12) = {-7,-6,9,1}; -Plane Surface(13) = {12}; -Line Loop(14) = {-4,7,2,8}; -Plane Surface(15) = {14}; -Line Loop(16) = {6,4,5}; -Plane Surface(17) = {16}; -Line Loop(18) = {1,2,3}; -Plane Surface(19) = {18}; - -Surface Loop(20) = {13,15,17,-11,-19}; -Complex Volume(21) = {20}; - -Transfinite Line {1,2,3,4,5,6,7,8,9} = 3; - -Transfinite Surface {17} = {1,3,2}; -Transfinite Surface {15} = {1,2,6,5}; -Transfinite Surface {11} = {1,3,4,5}; -Transfinite Surface {13} = {3,2,6,4}; -Transfinite Surface {19} = {5,4,6}; - -Transfinite Volume {21} = {1,3,2,5,4,6}; - -/* -Recombine Surface {17,19}; -*/ -Recombine Surface {11,13,15}; - diff --git a/benchmarks/3d/runner_simple_3d.geo b/benchmarks/3d/runner_simple_3d.geo deleted file mode 100644 index e08e33dda3eb1a879721540e363694618bdebc2f..0000000000000000000000000000000000000000 --- a/benchmarks/3d/runner_simple_3d.geo +++ /dev/null @@ -1,141 +0,0 @@ -/*simple runner for 3d-studies; 07.07.1999/hm*/ - - -/*variables*/ -r=0.004; -a=0.005; -b=0.005; -m=0.010; -mh=0.020; - -h1=0.005; -h2=0.005; -h3=0.005; -h4=0.005; -hl = 0.012; -f =0.015; -l =0.040; - -lc1 = 0.004; - -/*points*/ - -Point(1) = {-r,0.0,0.0,lc1}; - -Point(2) = {0,0.0,0.0,lc1}; - -Point(3) = {+r,0.0,0.0,lc1}; -Point(4) = {r+a,0.0,0.0,lc1}; -Point(5) = {r+a+b,0.0,0.0,lc1}; -Point(6) = {r+a+b,-h4,0.0,lc1}; - -Point(11) = {-r,h1,0.0,lc1}; - -Point(13) = {+r,h1,0.0,lc1}; -Point(14) = {r+a,h2,0.0,lc1}; -Point(15) = {r+a+b,h3,0.0,lc1}; - -/*flange*/ - -Point(25) = {r+a+b+f,0,0.0,lc1}; -Point(26) = {r+a+b+f,h3,0.0,lc1}; -Point(27) = {r+a+b+f,-h4,0.0,lc1}; -Point(28) = {r+a+b+f,-hl,0.0,lc1}; - -/*laminate*/ - -Point(30) = {r+a+b+f+l,0.0,0.0,lc1}; -Point(31) = {r+a+b+f+l,h3,0.0,lc1}; -Point(32) = {r+a+b+f+l,-h4,0.0,lc1}; -Point(33) = {r+a+b+f+l,-hl,0.0,lc1}; - -/*lines*/ - -Circle(100) = {1,2,3}; - -Line(101) = {1,11}; -Line(102) = {11,13}; -Line(103) = {13,14}; -Line(104) = {14,15}; -Line(105) = {3,13}; -Line(106) = {3,4}; -Line(107) = {4,14}; -Line(108) = {4,5}; -Line(109) = {5,15}; - - - -Line(110) = {15,26}; -Line(111) = {5,25}; -Line(112) = {6,27}; -Line(113) = {5,6}; -Line(114) = {26,25}; -Line(115) = {25,27}; -Line(116) = {26,31}; -Line(117) = {25,30}; -Line(118) = {27,32}; -Line(119) = {31,30}; -Line(120) = {30,32}; - -Line(121) = {27,28}; -Line(122) = {28,33}; -Line(123) = {32,33}; - -Line Loop(300) = {-102,-101,100,105}; -Plane Surface(301) = {300}; -Line Loop(400) = {107,-103,-105,106}; -Plane Surface(401) = {400}; -Line Loop(402) = {109,-104,-107,108}; -Plane Surface(403) = {402}; - - -Line Loop(404) = {-114,-110,-109,111}; -Plane Surface(405) = {404}; -Line Loop(406) = {-112,-113,111,115}; -Plane Surface(407) = {406}; -Line Loop(408) = {117,-119,-116,114}; -Plane Surface(409) = {408}; -Line Loop(410) = {118,-120,-117,115}; -Plane Surface(411) = {410}; -Line Loop(412) = {118,123,-122,-121}; -Plane Surface(413) = {412}; - -/*mould*/ - -Point(511) = {-m,h1,0.0,lc1}; -Point(512) = {-m,h1-mh,0.0,lc1}; -Point(533) = {r+a+b+f+l,h1-mh,0.0,lc1}; - -Line(614) = {511,512}; -Line(615) = {511,11}; -Line(616) = {512,533}; -Line(617) = {533,33}; -/* -Line Loop(618) = {-617,-616,-614,615,-101,100,106,108,113,112,121,122,-617,-616,-614,615,- -101,100,106,108,113,112};*/ - -Line Loop(618) = {-617,-616,-614,615,-101,100,106,108,113,112,121,122}; -Plane Surface(619) = {618}; - -ex = .05; - -Extrude Surface{619, {0.0,0.0,ex}}; -Coherence; -Extrude Surface{301, {0.0,0.0,ex}}; -Coherence; -Extrude Surface{401, {0.0,0.0,ex}}; -Coherence; -Extrude Surface{403, {0.0,0.0,ex}}; -Coherence; -Extrude Surface{405, {0.0,0.0,ex}}; -Coherence; -Extrude Surface{407, {0.0,0.0,ex}}; -Coherence; -Extrude Surface{409, {0.0,0.0,ex}}; -Coherence; -Extrude Surface{411, {0.0,0.0,ex}}; -Coherence; -Extrude Surface{413, {0.0,0.0,ex}}; -Coherence; - - diff --git a/benchmarks/3d/sph.geo b/benchmarks/3d/sph.geo deleted file mode 100644 index 0f4a835045cc612d756b27aeeb19196074eb500f..0000000000000000000000000000000000000000 --- a/benchmarks/3d/sph.geo +++ /dev/null @@ -1,56 +0,0 @@ -lc = 0.01; -dext = .05; -dint = .055; - -Point(1) = {0,0,0,lc}; -Point(2) = {dint,0,0,lc}; -Point(3) = {0,dint,0,lc}; -Point(4) = {0,0,dint,lc}; -Point(5) = {dext,0,0,lc}; -Point(6) = {0,dext,0,lc}; -Point(7) = {0,0,dext,lc}; - -Circle(1) = {7,1,5}; -Circle(2) = {4,1,2}; -Circle(3) = {5,1,6}; -Circle(4) = {2,1,3}; -Circle(5) = {7,1,6}; -Circle(6) = {4,1,3}; -Line(7) = {1,5}; -Line(8) = {5,2}; -Line(9) = {1,6}; -Line(10) = {6,3}; -Line(11) = {1,7}; -Line(12) = {7,4}; - -Line Loop(17) = {2,-8,-1,12}; -Plane Surface(18) = {17}; -Line Loop(19) = {-4,-8,3,10}; -Plane Surface(20) = {19}; -Line Loop(21) = {-6,-12,5,10}; -Plane Surface(22) = {21}; - -Line Loop(23) = {-6,2,4}; -Ruled Surface(24) = {23}; -Line Loop(25) = {-5,1,3}; -Ruled Surface(26) = {25}; - -Surface Loop(27) = {24,-22,-18,20,-26}; -Complex Volume(28) = {27}; - -Transfinite Line {1,2,3,4,5,6} = 10 ; -Transfinite Line {-8,-10,-12} = 5 Using Power 1.6 ; - -Transfinite Surface {22} = {4,7,6,3}; -Transfinite Surface {20} = {3,2,5,6}; -Transfinite Surface {18} = {4,2,5,7}; - -Transfinite Surface {24} = {3,4,2}; -Transfinite Surface {26} = {6,7,5}; - -Recombine Surface {18,20,22}; -/* -Recombine Surface {24,26}; -*/ -Transfinite Volume {28} = {3,4,2,6,7,5}; - diff --git a/benchmarks/3d/surface3113.geo b/benchmarks/3d/surface3113.geo deleted file mode 100644 index e57c0588d5a9c82407606530772053ee430a7476..0000000000000000000000000000000000000000 --- a/benchmarks/3d/surface3113.geo +++ /dev/null @@ -1,112 +0,0 @@ -lc = 5.00000E+01; -Point(2) = {-2.70000E-02,-2.40000E-02, 1.00000E-02, 1.00000E-02}; -Point(4) = {-2.70000E-02,-4.00000E-03, 1.00000E-02, 3.33333E-03}; -Point(10) = { 1.79430E+00,-4.00000E-02, 1.00000E-02, 2.00000E-02}; -Point(12) = { 1.79430E+00,-2.00000E-02, 1.00000E-02, 2.00000E-02}; -Point(211) = { 1.18995E-02,-1.01059E-02, 1.00000E-02, 1.00000E-02}; -Point(212) = { 1.58995E-02,-1.01059E-02, 1.00000E-02, 1.00000E-02}; -Point(213) = { 1.18995E-02,-6.10592E-03, 1.00000E-02, 1.00000E-02}; -Point(214) = { 7.89953E-03,-1.01059E-02, 1.00000E-02, 1.00000E-02}; -Point(215) = { 1.18995E-02,-1.41059E-02, 1.00000E-02, 1.00000E-02}; -Point(411) = { 4.17983E-02,-1.03721E-02, 1.00000E-02, 1.00000E-02}; -Point(412) = { 4.57983E-02,-1.03721E-02, 1.00000E-02, 1.00000E-02}; -Point(413) = { 4.17983E-02,-6.37207E-03, 1.00000E-02, 1.00000E-02}; -Point(414) = { 3.77983E-02,-1.03721E-02, 1.00000E-02, 1.00000E-02}; -Point(415) = { 4.17983E-02,-1.43721E-02, 1.00000E-02, 1.00000E-02}; -Point(611) = { 8.24967E-02,-1.17343E-02, 1.00000E-02, 1.00000E-02}; -Point(612) = { 8.74967E-02,-1.17343E-02, 1.00000E-02, 1.00000E-02}; -Point(613) = { 8.24967E-02,-6.73435E-03, 1.00000E-02, 1.00000E-02}; -Point(614) = { 7.74967E-02,-1.17343E-02, 1.00000E-02, 1.00000E-02}; -Point(615) = { 8.24967E-02,-1.67343E-02, 1.00000E-02, 1.00000E-02}; -Point(811) = { 1.38495E-01,-1.32328E-02, 1.00000E-02, 1.00000E-02}; -Point(812) = { 1.44495E-01,-1.32328E-02, 1.00000E-02, 1.00000E-02}; -Point(813) = { 1.38495E-01,-7.23281E-03, 1.00000E-02, 1.00000E-02}; -Point(814) = { 1.32495E-01,-1.32328E-02, 1.00000E-02, 1.00000E-02}; -Point(815) = { 1.38495E-01,-1.92328E-02, 1.00000E-02, 1.00000E-02}; -Point(1011) = { 2.11992E-01,-1.38870E-02, 1.00000E-02, 1.00000E-02}; -Point(1012) = { 2.17992E-01,-1.38870E-02, 1.00000E-02, 1.00000E-02}; -Point(1013) = { 2.11992E-01,-7.88705E-03, 1.00000E-02, 1.00000E-02}; -Point(1014) = { 2.05992E-01,-1.38870E-02, 1.00000E-02, 1.00000E-02}; -Point(1015) = { 2.11992E-01,-1.98870E-02, 1.00000E-02, 1.00000E-02}; -Point(1211) = { 3.12488E-01,-1.47816E-02, 1.00000E-02, 1.00000E-02}; -Point(1212) = { 3.18488E-01,-1.47816E-02, 1.00000E-02, 1.00000E-02}; -Point(1213) = { 3.12488E-01,-8.78162E-03, 1.00000E-02, 1.00000E-02}; -Point(1214) = { 3.06488E-01,-1.47816E-02, 1.00000E-02, 1.00000E-02}; -Point(1215) = { 3.12488E-01,-2.07816E-02, 1.00000E-02, 1.00000E-02}; -Point(1411) = { 4.48482E-01,-1.59922E-02, 1.00000E-02, 1.00000E-02}; -Point(1412) = { 4.54482E-01,-1.59922E-02, 1.00000E-02, 1.00000E-02}; -Point(1413) = { 4.48482E-01,-9.99218E-03, 1.00000E-02, 1.00000E-02}; -Point(1414) = { 4.42482E-01,-1.59922E-02, 1.00000E-02, 1.00000E-02}; -Point(1415) = { 4.48482E-01,-2.19922E-02, 1.00000E-02, 1.00000E-02}; -Point(1611) = { 6.32475E-01,-1.76300E-02, 1.00000E-02, 1.10000E-02}; -Point(1612) = { 6.38475E-01,-1.76300E-02, 1.00000E-02, 1.10000E-02}; -Point(1613) = { 6.32475E-01,-1.16300E-02, 1.00000E-02, 1.10000E-02}; -Point(1614) = { 6.26475E-01,-1.76300E-02, 1.00000E-02, 1.10000E-02}; -Point(1615) = { 6.32475E-01,-2.36300E-02, 1.00000E-02, 1.10000E-02}; -Point(1811) = { 8.87965E-01,-1.99042E-02, 1.00000E-02, 1.60000E-02}; -Point(1812) = { 8.93965E-01,-1.99042E-02, 1.00000E-02, 1.60000E-02}; -Point(1813) = { 8.87965E-01,-1.39042E-02, 1.00000E-02, 1.60000E-02}; -Point(1814) = { 8.81965E-01,-1.99042E-02, 1.00000E-02, 1.60000E-02}; -Point(1815) = { 8.87965E-01,-2.59042E-02, 1.00000E-02, 1.60000E-02}; -Point(2011) = { 1.24165E+00,-2.30526E-02, 1.00000E-02, 2.00000E-02}; -Point(2012) = { 1.24765E+00,-2.30526E-02, 1.00000E-02, 2.00000E-02}; -Point(2013) = { 1.24165E+00,-1.70526E-02, 1.00000E-02, 2.00000E-02}; -Point(2014) = { 1.23565E+00,-2.30526E-02, 1.00000E-02, 2.00000E-02}; -Point(2015) = { 1.24165E+00,-2.90526E-02, 1.00000E-02, 2.00000E-02}; -Point(2211) = { 1.73423E+00,-2.74373E-02, 1.00000E-02, 2.40000E-02}; -Point(2212) = { 1.74023E+00,-2.74373E-02, 1.00000E-02, 2.40000E-02}; -Point(2213) = { 1.73423E+00,-2.14373E-02, 1.00000E-02, 2.40000E-02}; -Point(2214) = { 1.72823E+00,-2.74373E-02, 1.00000E-02, 2.40000E-02}; -Point(2215) = { 1.73423E+00,-3.34373E-02, 1.00000E-02, 2.40000E-02}; -Line (26) = {4,12}; -Line (6) = {2,4}; -Line (25) = {2,10}; -Line (16) = {10,12}; -Circle (216) = {215,211,212} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (213) = {212,211,213} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (214) = {213,211,214} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (215) = {214,211,215} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (416) = {415,411,412} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (413) = {412,411,413} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (414) = {413,411,414} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (415) = {414,411,415} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (616) = {615,611,612} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (613) = {612,611,613} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (614) = {613,611,614} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (615) = {614,611,615} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (816) = {815,811,812} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (813) = {812,811,813} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (814) = {813,811,814} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (815) = {814,811,815} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1016) = {1015,1011,1012} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1013) = {1012,1011,1013} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1014) = {1013,1011,1014} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1015) = {1014,1011,1015} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1216) = {1215,1211,1212} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1213) = {1212,1211,1213} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1214) = {1213,1211,1214} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1215) = {1214,1211,1215} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1416) = {1415,1411,1412} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1413) = {1412,1411,1413} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1414) = {1413,1411,1414} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1415) = {1414,1411,1415} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1616) = {1615,1611,1612} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1613) = {1612,1611,1613} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1614) = {1613,1611,1614} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1615) = {1614,1611,1615} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1816) = {1815,1811,1812} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1813) = {1812,1811,1813} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1814) = {1813,1811,1814} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (1815) = {1814,1811,1815} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (2016) = {2015,2011,2012} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (2013) = {2012,2011,2013} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (2014) = {2013,2011,2014} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (2015) = {2014,2011,2015} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (2216) = {2215,2211,2212} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (2213) = {2212,2211,2213} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (2214) = {2213,2211,2214} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Circle (2215) = {2214,2211,2215} Plane{ 1.00000E+00, 0.00000E+00, 0.00000E+00}; -Line Loop (1003113) = {-26, -6, 25, 16,216,213,214,215,416,413,414,415,616,613,614,615,816,813,814,815,1016,1013,1014,1015,1216,1213,1214,1215,1416,1413,1414,1415,1616,1613,1614,1615,1816,1813,1814,1815,2016,2013,2014,2015,2216,2213,2214,2215}; -Plane Surface (3113) = {1003113}; -Line Loop (1003113) = {-26, -6, 25, 16,216,213,214,215,416,413,414,415,616,613,614,615,816,813,814,815,1016,1013,1014,1015,1216,1213,1214,1215,1416,1413,1414,1415,1616,1613,1614,1615,1816,1813,1814,1815,2016,2013,2014,2015,2216,2213,2214,2215}; -Plane Surface (3113) = {1003113}; diff --git a/benchmarks/3d/transfinite.geo b/benchmarks/3d/transfinite.geo deleted file mode 100644 index c0c7314aba4f2fa8c96c6f3d6a02901e3c63dde4..0000000000000000000000000000000000000000 --- a/benchmarks/3d/transfinite.geo +++ /dev/null @@ -1,66 +0,0 @@ -Point(1) = {0.0,0.0,0.0,1.0}; -Point(2) = {1,0.0,0.0,1.0}; -Point(3) = {.5,.1,0.0,1.0}; -Point(4) = {.5,.2,0.0,1.0}; -Point(5) = {0,.5,0.0,1.0}; -Point(6) = {1,.55,0.0,1.0}; -Point(7) = {0,0,1,1.0}; - -Line(1) = {2,6}; -Line(2) = {5,1}; -Spline(3) = {1,3,2}; -Spline(4) = {5,4,6}; - -Line Loop(5) = {-1,-3,-2,4}; -Plane Surface(6) = {5}; - -Point(8) = {0,.5,1,1.0}; -Point(9) = {1,.5,1,1.0}; -Point(10) = {1,0,1,1.0}; - -Line(7) = {6,9}; -Line(8) = {9,10}; -Line(9) = {10,2}; -Line(10) = {10,7}; -Line(11) = {7,1}; -Line(12) = {5,8}; -Line(13) = {8,7}; -Line(14) = {8,9}; - -Line Loop(15) = {14,-7,-4,12}; -Ruled Surface(16) = {15}; -Line Loop(17) = {7,8,9,1}; -Ruled Surface(18) = {17}; -Line Loop(19) = {-10,-8,-14,13}; -Ruled Surface(20) = {19}; -Line Loop(21) = {-11,-13,-12,2}; -Ruled Surface(22) = {21}; -Line Loop(23) = {-9,10,11,3}; -Ruled Surface(24) = {23}; - -Surface Loop(25) = {16,20,24,18,6,22}; -Complex Volume(26) = {25}; - -Transfinite Line {7,9,11,12} = 5; -Transfinite Line {3,10,14} = 10; -Transfinite Line {4} = 10 Using Bump 1.5; -Transfinite Line {-1,2} = 20 Using Power 1.6; -Transfinite Line {8,13} = 20 ; - -Transfinite Surface {6} = {1,2,6,5}; -Transfinite Surface {20} = {7,10,9,8}; -Transfinite Surface {18} = {10,2,6,9}; -Transfinite Surface {22} = {7,1,5,8}; -Transfinite Surface {16} = {8,9,6,5}; -Transfinite Surface {24} = {7,10,2,1}; - -Transfinite Volume {26} = {7,10,2,1,8,9,6,5}; - -Recombine Surface {6,20,18,22,16,24}; - - - - - - - diff --git a/benchmarks/3d/trav33D.geo b/benchmarks/3d/trav33D.geo deleted file mode 100644 index 4ca92796d88c79f7246c732d4b6bc2655d9790a0..0000000000000000000000000000000000000000 --- a/benchmarks/3d/trav33D.geo +++ /dev/null @@ -1,206 +0,0 @@ -// ce programme resoud le probleme de haut-parleur en 3d -// en fixant une vitesse sur le tweeter constante U0 -// et en prennant comme frequence de source (tweeter) -// Freq. - -r = 0.175 ; x0 = 0.31 ; y1 = 0.16; -y0 = 0.16; x1 = 0.315 ; z0 = 0.12; -m = 2 ; -Freq = m*100 ; -lambda = 342 / Freq ; -dx = lambda; -x = 1.04; -y = 1.0; - -e = lambda ; -p0 = e/8; -p1 = p0/4; - -// p0=.0085 la frequence d'echontillonnage spatiale, on le -// prend toujours au moins 2 fois plus grande que la frequence -// de la source. - - -Point(1) = {r,0.0,0.0, p1}; -Point(2) = {r+x0,0.0,0.0, p0}; -Point(3) = {r+x0,0.0,y0, p0}; -Point(4) = {r+x0+x1,r+x0+x1,y0, p0}; -Point(6) = {0.0,0.0,0.0,p0}; -Point(8) = {r+x0+x1,0.0,y0,p0}; -Point(9) = {r+x0+x1,r+x0+x1,0.0, p0}; -Point(11) = {r+x0+x1,0.0,0.0,p0}; -Point(12) = {y,y,0.0,p0}; -Point(14) = {y,y,x,p0}; -Point(16) = {y+dx,y+dx,y+dx,p0}; -Point(17) = {y+dx,0.0,y+dx, p0}; -Point(18) = {0.0,r,0.0, p1}; -Point(20) = {0.0,0.0,-0.125, p0}; -Point(22) = {0.0,r+x0,y0, p0}; -Point(26) = {0.0,0.0,0.09, p1}; -Point(27) = {0.0,0.0,0.16,p0}; -Point(28) = {0.0,0.485,0.0,p0}; -Point(29) = {0.0,0.8,0.0,p0}; -Point(30) = {0.0,0.8,0.16,p0}; -Point(31) = {0.0,1.0,1.0,p0}; -Point(32) = {0.0,1.0,0.0,p0}; -Point(33) = {1.0,0.0,0.0,p0}; -Point(34) = {1.0,0.0,1.0,p0}; -Point(35) = {0.0,1.0+lambda,1.0,p0}; -Point(36) = {0.0,1.0+lambda,0.0,p0}; -Point(37) = {1.0+lambda,1.0+lambda,0.0,p0}; -Point(38) = {1.0+lambda,1.0+lambda,1.04,p0}; -Point(39) = {1+lambda,0.0,0.0,p0}; -Point(40) = {1+lambda,0.0,1.0,p0}; -Point(41) = {0.0,0.0,1.0,p0}; -Point(43) = {0.0,1+lambda,1+lambda,p0}; -Point(44) = {0.0,0.0,1+lambda,p0}; -Circle(19) = {1,6,18}; -Circle(20) = {1,20,26}; -Circle(21) = {18,20,26}; -Circle(23) = {3,27,22}; - - -Line(2) = {6,18}; -Line(6) = {3,1}; -Line(7) = {6,1}; -Line(8) = {1,2}; -Line(9) = {3,8}; -Line(10) = {8,11}; -Line(11) = {11,2}; -Line(12) = {9,11}; -Line(14) = {9,4}; -Line(15) = {8,4}; -Line(25) = {2,3}; -Line(26) = {22,18}; -Line(28) = {28,22}; -Line(31) = {18,28}; -Circle(32) = {28,6,2}; -Line(48) = {6,26}; -Line(55) = {30,22}; -Line(56) = {28,29}; -Line(57) = {30,29}; -Line(58) = {30,4}; -Line(59) = {29,9}; -Line(72) = {9,12}; -Line(73) = {14,12}; -Line(74) = {29,32}; -Line(75) = {31,32}; -Line(76) = {31,14}; -Line(77) = {32,12}; -Line(78) = {33,12}; -Line(79) = {34,33}; -Line(80) = {14,34}; -Line(81) = {33,11}; -Line(82) = {35,31}; -Line(83) = {32,36}; -Line(84) = {36,35}; -Line(85) = {35,38}; -Line(86) = {36,37}; -Line(87) = {38,37}; -Line(88) = {12,37}; -Line(89) = {14,38}; -Line(90) = {39,40}; -Line(91) = {39,37}; -Line(92) = {40,38}; -Line(93) = {33,39}; -Line(94) = {34,40}; -Line(125) = {44,17}; -Line(126) = {17,16}; -Line(127) = {43,16}; -Line(128) = {44,43}; -Line(129) = {44,41}; -Line(130) = {35,43}; -Line(131) = {17,40}; -Line(132) = {38,16}; -Line(133) = {34,41}; -Line(134) = {31,41}; -Line(153) = {27,41}; -Line(154) = {26,27}; - - -Line Loop(38) = {31,28,26}; -Plane Surface(39) = {38}; -Line Loop(42) = {21,-20,19}; -Ruled Surface(43) = {42}; -Line Loop(46) = {-26,-23,6,19}; -Ruled Surface(47) = {46}; -Line Loop(49) = {20,-48,7}; -Plane Surface(50) = {49}; -Line Loop(51) = {-48,2,21}; -Plane Surface(52) = {51}; -Line Loop(53) = {6,8,25}; -Plane Surface(54) = {53}; -Line Loop(60) = {-15,10,-12,14}; -Plane Surface(61) = {60}; -Line Loop(62) = {59,14,-58,57}; -Plane Surface(63) = {62}; -Line Loop(64) = {-55,57,-56,28}; -Plane Surface(65) = {64}; -Line Loop(66) = {-58,55,-23,9,15}; -Plane Surface(67) = {66}; -Line Loop(68) = {12,11,-32,56,59}; -Plane Surface(69) = {68}; -Line Loop(70) = {9,10,11,25}; -Plane Surface(71) = {70}; -Line Loop(95) = {-89,80,94,92}; -Plane Surface(96) = {95}; -Line Loop(97) = {92,87,-91,90}; -Plane Surface(98) = {97}; -Line Loop(99) = {85,87,-86,84}; -Plane Surface(100) = {99}; -Line Loop(101) = {84,82,75,83}; -Plane Surface(102) = {101}; -Line Loop(103) = {88,-86,-83,77}; -Plane Surface(104) = {103}; -Line Loop(105) = {88,-91,-93,78}; -Plane Surface(106) = {105}; -Line Loop(107) = {-88,-73,89,87}; -Plane Surface(108) = {107}; -Line Loop(109) = {93,90,-94,79}; -Plane Surface(110) = {109}; -Line Loop(111) = {-73,80,79,78}; -Plane Surface(112) = {111}; -Line Loop(113) = {-73,-76,75,77}; -Plane Surface(114) = {113}; -Line Loop(115) = {-85,82,76,89}; -Plane Surface(116) = {115}; -Line Loop(117) = {-81,78,-72,12}; -Plane Surface(118) = {117}; -Line Loop(119) = {77,-72,-59,74}; -Plane Surface(120) = {119}; -Line Loop(135) = {132,-126,131,92}; -Plane Surface(136) = {135}; -Line Loop(137) = {-94,133,-129,125,131}; -Plane Surface(138) = {137}; -Line Loop(139) = {133,-134,76,80}; -Plane Surface(140) = {139}; -Line Loop(141) = {-129,128,-130,82,134}; -Plane Surface(142) = {141}; -Line Loop(143) = {127,-132,-85,130}; -Plane Surface(144) = {143}; -Line Loop(145) = {127,-126,-125,128}; -Plane Surface(146) = {145}; -Line Loop(155) = {-153,-154,-20,-6,9,10,-81,-79,133}; -Plane Surface(156) = {155}; -Line Loop(157) = {-74,-57,55,26,21,154,153,-134,75}; -Plane Surface(158) = {157}; - - -Surface Loop(147) = {116,-144,146,-136,138,96,-140,-142}; -Complex Volume(148) = {147}; -Surface Loop(149) = {96,108,106,-98,110,-112}; -Complex Volume(150) = {149}; -Surface Loop(151) = {108,104,-100,-116,102,-114}; -Complex Volume(152) = {151} ; -Surface Loop(159) = {112,-114,-140,156,158,120,-118,-61,-67,63,47,-43}; -Complex Volume(160) = {159}; - -Physical Volume(1000) = {160}; // Air - -Physical Volume(1301) = {150}; // PML_X1 -Physical Volume(1302) = {152}; // PML_Y1 -Physical Volume(1303) = {148}; // PML_Z1 - -Physical Surface(1200) = {43}; // tweeter -// Physical Surface(1400) = {47,67}; // Pavillon - diff --git a/benchmarks/3d/vulp5.geo b/benchmarks/3d/vulp5.geo deleted file mode 100644 index 98564699af185a8a800799b20637f4954df256bd..0000000000000000000000000000000000000000 --- a/benchmarks/3d/vulp5.geo +++ /dev/null @@ -1,1153 +0,0 @@ -/* Antenne VULP 9118-E */ - -Frequence = 235.e6 ; -Lambda = 2.99792458e8/Frequence ; -LambdaDemi = Lambda/2 ; - -f1 = 10.e-3 ; - -si = 50.e-3 ; -si1= 20.e-3 ; -si2= 100.e-3 ; -se = 300.e-3 ; - -/* 2 longerons */ - -xmin =-27.e-3 ; -LL = 1821.3e-3 ; -ll = 20.e-3 ; -hh = 20.e-3 ; -dc = 8.e-3 ; -em = 8.e-3/2 ; -eM = 40.e-3/2 ; -t = ArcTan(eM/2-em/2/LL) ; - -/* 22 barreaux */ -/* longueur ; rayon ; dist % barreau 1 ; dist%y=0 */ - l1 = 77.e-3/2-ll/2 ; r1 = 8.e-3/2 ; d1 = 0 ; e1 = em+dc+d1*Sin(t)-2.e-3 ; - l2 = 91.e-3/2-ll/2 ; r2 = 8.e-3/2 ; d2 = 11.9e-3*Cos(t) ; e2 = em+dc+d2*Sin(t)-2.e-3 ; - l3 = 105.e-3/2-ll/2 ; r3 = 8.e-3/2 ; d3 = 25.8e-3*Cos(t) ; e3 = em+dc+d3*Sin(t)-2.e-3 ; - l4 = 122.e-3/2-ll/2 ; r4 = 8.e-3/2 ; d4 = 41.8e-3*Cos(t) ; e4 = em+dc+d4*Sin(t)-2.e-3 ; - l5 = 142.e-3/2-ll/2 ; r5 = 10.e-3/2 ; d5 = 60.5e-3*Cos(t) ; e5 = em+dc+d5*Sin(t)-1.e-3 ; - l6 = 164.e-3/2-ll/2 ; r6 = 10.e-3/2 ; d6 = 82.5e-3*Cos(t) ; e6 = em+dc+d6*Sin(t)-1.e-3 ; - l7 = 192.e-3/2-ll/2 ; r7 = 12.e-3/2 ; d7 = 107.0e-3*Cos(t) ; e7 = em+dc+d7*Sin(t) ; - l8 = 224.e-3/2-ll/2 ; r8 = 12.e-3/2 ; d8 = 138.5e-3*Cos(t) ; e8 = em+dc+d8*Sin(t) ; - l9 = 260.e-3/2-ll/2 ; r9 = 12.e-3/2 ; d9 = 172.0e-3*Cos(t) ; e9 = em+dc+d9*Sin(t) ; -l10 = 303.e-3/2-ll/2 ; r10 = 12.e-3/2 ; d10 = 212.0e-3*Cos(t) ; e10 = em+dc+d10*Sin(t) ; -l11 = 353.e-3/2-ll/2 ; r11 = 12.e-3/2 ; d11 = 258.5e-3*Cos(t) ; e11 = em+dc+d11*Sin(t) ; -l12 = 410.e-3/2-ll/2 ; r12 = 12.e-3/2 ; d12 = 312.5e-3*Cos(t) ; e12 = em+dc+d12*Sin(t) ; -l13 = 477.e-3/2-ll/2 ; r13 = 12.e-3/2 ; d13 = 375.0e-3*Cos(t) ; e13 = em+dc+d13*Sin(t) ; -l14 = 554.e-3/2-ll/2 ; r14 = 12.e-3/2 ; d14 = 448.5e-3*Cos(t) ; e14 = em+dc+d14*Sin(t) ; -l15 = 645.e-3/2-ll/2 ; r15 = 12.e-3/2 ; d15 = 533.0e-3*Cos(t) ; e15 = em+dc+d15*Sin(t) ; -l16 = 749.e-3/2-ll/2 ; r16 = 12.e-3/2 ; d16 = 632.5e-3*Cos(t) ; e16 = em+dc+d16*Sin(t) ; -l17 = 877.e-3/2-ll/2 ; r17 = 12.e-3/2 ; d17 = 750.5e-3*Cos(t) ; e17 = em+dc+d17*Sin(t) ; -l18 = 1023.e-3/2-ll/2 ; r18 = 12.e-3/2 ; d18 = 888.0e-3*Cos(t) ; e18 = em+dc+d18*Sin(t) ; -l19 = 1196.e-3/2-ll/2 ; r19 = 12.e-3/2 ; d19 = 1050.3e-3*Cos(t) ; e19 = em+dc+d19*Sin(t) ; -l20 = 1404.e-3/2-ll/2 ; r20 = 12.e-3/2 ; d20 = 1241.7e-3*Cos(t) ; e20 = em+dc+d20*Sin(t) ; -l21 = 1648.e-3/2-ll/2 ; r21 = 12.e-3/2 ; d21 = 1467.7e-3*Cos(t) ; e21 = em+dc+d21*Sin(t) ; -l22 = 1934.e-3/2-ll/2 ; r22 = 12.e-3/2 ; d22 = 1734.3e-3*Cos(t) ; e22 = em+dc+d22*Sin(t) ; - -/* long caract */ - s1 = f1 ; s1l = f1 ; - s2 = f1 ; s2l = f1 ; - s3 = f1 ; s3l = f1 ; - s4 = f1 ; s4l = f1 ; - s5 = f1 ; s5l = f1 ; - s6 = f1 ; s6l = f1 ; - s7 = f1 ; s7l = f1 ; - s8 = f1 ; s8l = f1 ; - s9 = f1 ; s9l = f1 ; -s10 = f1 ; s10l = f1 ; -s11 = f1 ; s11l = f1 ; -s12 = f1 ; s12l = f1 ; -s13 = f1 ; s13l = f1 ; -s14 = f1 ; s14l = 1.3*f1 ; -s15 = f1 ; s15l = 1.6*f1 ; -s16 = 1.1*f1 ; s16l = 2*f1 ; -s17 = 1.4*f1 ; s17l = 2.3*f1 ; -s18 = 1.6*f1 ; s18l = 2.6*f1 ; -s19 = 1.8*f1 ; s19l = 3*f1 ; -s20 = 2.0*f1 ; s20l = 3.3*f1 ; -s21 = 2.2*f1 ; s21l = 3.6*f1 ; -s22 = 2.4*f1 ; s22l = 4*f1 ; - -Point(9998) = {d11, 0, -l15, 1} ; - -/* boite */ - -abs = LambdaDemi ; -bem = 2*si ; - -bxM = -200.e-3 ; bxm = bxM+bem ; bxP = 2000.e-3 ; bxp = bxP-bem ; -byM = -150.e-3 ; bym = byM+bem ; byP = 150.e-3 ; byp = byP-bem ; -bzM = -1200.e-3 ; bzm = bzM+bem ; bzP = 1200.e-3 ; bzp = bzP-bem ; - -bxM2 = bxM-abs ; bxP2 = bxP+abs ; -byM2 = byM-abs ; byP2 = byP+abs ; -bzM2 = bzM-abs ; bzP2 = bzP+abs ; - -/* longerons */ - -Point(1) = {xmin, -em-hh, -ll/2, f1} ; Point(5) = {xmin, em, -ll/2, f1/3} ; -Point(2) = {xmin, -em-hh, ll/2, f1} ; Point(6) = {xmin, em, ll/2, f1/3} ; -Point(3) = {xmin, -em, -ll/2, f1/3} ; Point(7) = {xmin, em+hh, -ll/2, f1} ; -Point(4) = {xmin, -em, ll/2, f1/3} ; Point(8) = {xmin, em+hh, ll/2, f1} ; - -f3 = s22/1.2 ; - -Point(9) = {xmin+LL, -eM-hh, -ll/2, f3} ; Point(13) = {xmin+LL, eM, -ll/2, f3} ; -Point(10) = {xmin+LL, -eM-hh, ll/2, f3} ; Point(14) = {xmin+LL, eM, ll/2, f3} ; -Point(11) = {xmin+LL, -eM, -ll/2, f3} ; Point(15) = {xmin+LL, eM+hh, -ll/2, f3} ; -Point(12) = {xmin+LL, -eM, ll/2, f3} ; Point(16) = {xmin+LL, eM+hh, ll/2, f3} ; - -Line(1) = {5,6}; Line(11) = {13,14}; -Line(2) = {6,8}; Line(12) = {14,16}; -Line(3) = {8,7}; Line(13) = {16,15}; -Line(4) = {7,5}; Line(14) = {15,13}; -Line(5) = {1,2}; Line(15) = {9,10}; -Line(6) = {2,4}; Line(16) = {10,12}; -Line(7) = {4,3}; Line(17) = {12,11}; -Line(8) = {3,1}; Line(18) = {11,9}; -Line(9) = {4,6}; Line(19) = {12,14}; -Line(10) = {3,5}; Line(20) = {11,13}; - -Line(21) = {8,16}; Line(25) = {2,10}; -Line(22) = {7,15}; Line(26) = {4,12}; -Line(23) = {6,14}; Line(27) = {3,11}; -Line(24) = {5,13}; Line(28) = {1,9}; - -/* boite */ - -Point(51) = {bxm, bym, bzm, si1}; Point(61) = {bxM, byM, bzM, si2}; -Point(52) = {bxm, bym, bzp, si1}; Point(62) = {bxM, byM, bzP, si2}; -Point(53) = {bxm, byp, bzm, si1}; Point(63) = {bxM, byP, bzM, si2}; -Point(54) = {bxm, byp, bzp, si1}; Point(64) = {bxM, byP, bzP, si2}; -Point(55) = {bxp, bym, bzm, si}; Point(65) = {bxP, byM, bzM, si2}; -Point(56) = {bxp, bym, bzp, si}; Point(66) = {bxP, byM, bzP, si2}; -Point(57) = {bxp, byp, bzm, si}; Point(67) = {bxP, byP, bzM, si2}; -Point(58) = {bxp, byp, bzp, si}; Point(68) = {bxP, byP, bzP, si2}; - -Line(51) = {51,52}; Line(59) = {52,54}; Line(67) = {54,53}; Line(75) = {53,51}; -Line(52) = {52,56}; Line(60) = {56,58}; Line(68) = {58,54}; Line(76) = {51,55}; -Line(53) = {55,57}; Line(61) = {57,53}; Line(69) = {55,56}; Line(77) = {58,57}; -Line(54) = {53,63}; Line(62) = {51,61}; Line(70) = {54,64}; Line(78) = {52,62}; -Line(55) = {62,61}; Line(63) = {61,63}; Line(71) = {63,64}; Line(79) = {64,62}; -Line(56) = {57,67}; Line(64) = {55,65}; Line(72) = {65,67}; Line(80) = {67,63}; -Line(57) = {61,65}; Line(65) = {58,68}; Line(73) = {56,66}; Line(81) = {66,65}; -Line(58) = {68,67}; Line(66) = {68,66}; Line(74) = {66,62}; Line(82) = {64,68}; - -Point(70) = {bxM2, byM2, bzM2, se}; Point(71) = {bxM2, byM2, bzP2, se}; -Point(72) = {bxM2, byP2, bzM2, se}; Point(73) = {bxM2, byP2, bzP2, se}; -Point(74) = {bxP2, byM2, bzM2, se}; Point(75) = {bxP2, byM2, bzP2, se}; -Point(76) = {bxP2, byP2, bzM2, se}; Point(77) = {bxP2, byP2, bzP2, se}; - -Line(7001) = {70,71}; Line(7002) = {71,73}; Line(7003) = {73,72}; Line(7004) = {72,70}; -Line(7005) = {71,75}; Line(7006) = {75,77}; Line(7007) = {77,73}; Line(7008) = {74,75}; -Line(7009) = {74,76}; Line(7010) = {76,77}; Line(7011) = {76,72}; Line(7012) = {74,70}; -Line(7013) = {63,72}; Line(7014) = {61,70}; Line(7015) = {62,71}; Line(7016) = {64,73}; -Line(7017) = {68,77}; Line(7018) = {66,75}; Line(7019) = {67,76}; Line(7020) = {65,74}; - -/* barreau 1 et 1' (le + a gauche, i.e. en x==0) */ - -Point(101) = {d1, -e1, -ll/2, s1}; Point(111) = {d1, e1, ll/2, s1}; -Point(102) = {d1+r1, -e1, -ll/2, s1}; Point(112) = {d1+r1, e1, ll/2, s1}; -Point(103) = {d1, -e1+r1, -ll/2, s1}; Point(113) = {d1, e1+r1, ll/2, s1}; -Point(104) = {d1-r1, -e1, -ll/2, s1}; Point(114) = {d1-r1, e1, ll/2, s1}; -Point(105) = {d1, -e1-r1, -ll/2, s1}; Point(115) = {d1, e1-r1, ll/2, s1}; -Point(106) = {d1, -e1, -ll/2-l1, s1l}; Point(116) = {d1, e1, ll/2+l1, s1l}; -Point(107) = {d1+r1, -e1, -ll/2-l1, s1l}; Point(117) = {d1+r1, e1, ll/2+l1, s1l}; -Point(108) = {d1, -e1+r1, -ll/2-l1, s1l}; Point(118) = {d1, e1+r1, ll/2+l1, s1l}; -Point(109) = {d1-r1, -e1, -ll/2-l1, s1l}; Point(119) = {d1-r1, e1, ll/2+l1, s1l}; -Point(110) = {d1, -e1-r1, -ll/2-l1, s1l}; Point(120) = {d1, e1-r1, ll/2+l1, s1l}; - -Circle(101) = {102,101,103}; Circle(105) = {107,106,108}; Line(109) = {102,107}; -Circle(102) = {103,101,104}; Circle(106) = {108,106,109}; Line(110) = {103,108}; -Circle(103) = {104,101,105}; Circle(107) = {109,106,110}; Line(111) = {104,109}; -Circle(104) = {105,101,102}; Circle(108) = {110,106,107}; Line(112) = {105,110}; - -Circle(113) = {112,111,113}; Circle(117) = {117,116,118}; Line(121) = {112,117}; -Circle(114) = {113,111,114}; Circle(118) = {118,116,119}; Line(122) = {113,118}; -Circle(115) = {114,111,115}; Circle(119) = {119,116,120}; Line(123) = {114,119}; -Circle(116) = {115,111,112}; Circle(120) = {120,116,117}; Line(124) = {115,120}; - -Line Loop(101) = {102,103,104,101}; Plane Surface(121) = {101}; -Line Loop(102) = {107,108,105,106}; Plane Surface(122) = {102}; -Line Loop(103) = {116,113,114,115}; Plane Surface(123) = {103}; -Line Loop(104) = {120,117,118,119}; Plane Surface(124) = {104}; -Line Loop(105) = {108,-109,-104,112}; Ruled Surface(125) = {105}; -Line Loop(106) = {112,-107,-111,103}; Ruled Surface(126) = {106}; -Line Loop(107) = {-111,-102,110,106}; Ruled Surface(127) = {107}; -Line Loop(108) = {-110,-101,109,105}; Ruled Surface(128) = {108}; -Line Loop(109) = {121,-120,-124,116}; Ruled Surface(129) = {109}; -Line Loop(110) = {-124,-115,123,119}; Ruled Surface(130) = {110}; -Line Loop(111) = {123,-118,-122,114}; Ruled Surface(131) = {111}; -Line Loop(112) = {122,-117,-121,113}; Ruled Surface(132) = {112}; - -/* barreau 2 et 2' */ - -Point(201) = {d2, e2, -ll/2, s2}; Point(211) = {d2, -e2, ll/2, s2}; -Point(202) = {d2+r2, e2, -ll/2, s2}; Point(212) = {d2+r2, -e2, ll/2, s2}; -Point(203) = {d2, e2+r2, -ll/2, s2}; Point(213) = {d2, -e2+r2, ll/2, s2}; -Point(204) = {d2-r2, e2, -ll/2, s2}; Point(214) = {d2-r2, -e2, ll/2, s2}; -Point(205) = {d2, e2-r2, -ll/2, s2}; Point(215) = {d2, -e2-r2, ll/2, s2}; -Point(206) = {d2, e2, -ll/2-l2, s2l}; Point(216) = {d2, -e2, ll/2+l2, s2l}; -Point(207) = {d2+r2, e2, -ll/2-l2, s2l}; Point(217) = {d2+r2, -e2, ll/2+l2, s2l}; -Point(208) = {d2, e2+r2, -ll/2-l2, s2l}; Point(218) = {d2, -e2+r2, ll/2+l2, s2l}; -Point(209) = {d2-r2, e2, -ll/2-l2, s2l}; Point(219) = {d2-r2, -e2, ll/2+l2, s2l}; -Point(210) = {d2, e2-r2, -ll/2-l2, s2l}; Point(220) = {d2, -e2-r2, ll/2+l2, s2l}; - -Circle(201) = {202,201,203}; Circle(205) = {207,206,208}; Line(209) = {202,207}; -Circle(202) = {203,201,204}; Circle(206) = {208,206,209}; Line(210) = {203,208}; -Circle(203) = {204,201,205}; Circle(207) = {209,206,210}; Line(211) = {204,209}; -Circle(204) = {205,201,202}; Circle(208) = {210,206,207}; Line(212) = {205,210}; - -Circle(213) = {212,211,213}; Circle(217) = {217,216,218}; Line(221) = {212,217}; -Circle(214) = {213,211,214}; Circle(218) = {218,216,219}; Line(222) = {213,218}; -Circle(215) = {214,211,215}; Circle(219) = {219,216,220}; Line(223) = {214,219}; -Circle(216) = {215,211,212}; Circle(220) = {220,216,217}; Line(224) = {215,220}; - -Line Loop(201) = {202,203,204,201}; Plane Surface(221) = {201}; -Line Loop(202) = {207,208,205,206}; Plane Surface(222) = {202}; -Line Loop(203) = {216,213,214,215}; Plane Surface(223) = {203}; -Line Loop(204) = {220,217,218,219}; Plane Surface(224) = {204}; -Line Loop(205) = {208,-209,-204,212}; Ruled Surface(225) = {205}; -Line Loop(206) = {212,-207,-211,203}; Ruled Surface(226) = {206}; -Line Loop(207) = {-211,-202,210,206}; Ruled Surface(227) = {207}; -Line Loop(208) = {-210,-201,209,205}; Ruled Surface(228) = {208}; -Line Loop(209) = {221,-220,-224,216}; Ruled Surface(229) = {209}; -Line Loop(210) = {-224,-215,223,219}; Ruled Surface(230) = {210}; -Line Loop(211) = {223,-218,-222,214}; Ruled Surface(231) = {211}; -Line Loop(212) = {222,-217,-221,213}; Ruled Surface(232) = {212}; - -/* barreau 3 et 3' */ - -Point(301) = {d3, -e3, -ll/2, s3}; Point(311) = {d3, e3, ll/2, s3}; -Point(302) = {d3+r3, -e3, -ll/2, s3}; Point(312) = {d3+r3, e3, ll/2, s3}; -Point(303) = {d3, -e3+r3, -ll/2, s3}; Point(313) = {d3, e3+r3, ll/2, s3}; -Point(304) = {d3-r3, -e3, -ll/2, s3}; Point(314) = {d3-r3, e3, ll/2, s3}; -Point(305) = {d3, -e3-r3, -ll/2, s3}; Point(315) = {d3, e3-r3, ll/2, s3}; -Point(306) = {d3, -e3, -ll/2-l3, s3l}; Point(316) = {d3, e3, ll/2+l3, s3l}; -Point(307) = {d3+r3, -e3, -ll/2-l3, s3l}; Point(317) = {d3+r3, e3, ll/2+l3, s3l}; -Point(308) = {d3, -e3+r3, -ll/2-l3, s3l}; Point(318) = {d3, e3+r3, ll/2+l3, s3l}; -Point(309) = {d3-r3, -e3, -ll/2-l3, s3l}; Point(319) = {d3-r3, e3, ll/2+l3, s3l}; -Point(310) = {d3, -e3-r3, -ll/2-l3, s3l}; Point(320) = {d3, e3-r3, ll/2+l3, s3l}; - -Circle(301) = {302,301,303}; Circle(305) = {307,306,308}; Line(309) = {302,307}; -Circle(302) = {303,301,304}; Circle(306) = {308,306,309}; Line(310) = {303,308}; -Circle(303) = {304,301,305}; Circle(307) = {309,306,310}; Line(311) = {304,309}; -Circle(304) = {305,301,302}; Circle(308) = {310,306,307}; Line(312) = {305,310}; - -Circle(313) = {312,311,313}; Circle(317) = {317,316,318}; Line(321) = {312,317}; -Circle(314) = {313,311,314}; Circle(318) = {318,316,319}; Line(322) = {313,318}; -Circle(315) = {314,311,315}; Circle(319) = {319,316,320}; Line(323) = {314,319}; -Circle(316) = {315,311,312}; Circle(320) = {320,316,317}; Line(324) = {315,320}; - -Line Loop(301) = {302,303,304,301}; Plane Surface(321) = {301}; -Line Loop(302) = {307,308,305,306}; Plane Surface(322) = {302}; -Line Loop(303) = {316,313,314,315}; Plane Surface(323) = {303}; -Line Loop(304) = {320,317,318,319}; Plane Surface(324) = {304}; -Line Loop(305) = {308,-309,-304,312}; Ruled Surface(325) = {305}; -Line Loop(306) = {312,-307,-311,303}; Ruled Surface(326) = {306}; -Line Loop(307) = {-311,-302,310,306}; Ruled Surface(327) = {307}; -Line Loop(308) = {-310,-301,309,305}; Ruled Surface(328) = {308}; -Line Loop(309) = {321,-320,-324,316}; Ruled Surface(329) = {309}; -Line Loop(310) = {-324,-315,323,319}; Ruled Surface(330) = {310}; -Line Loop(311) = {323,-318,-322,314}; Ruled Surface(331) = {311}; -Line Loop(312) = {322,-317,-321,313}; Ruled Surface(332) = {312}; - -/* barreau 4 et 4' */ - -Point(401) = {d4, e4, -ll/2, s4}; Point(411) = {d4, -e4, ll/2, s4}; -Point(402) = {d4+r4, e4, -ll/2, s4}; Point(412) = {d4+r4, -e4, ll/2, s4}; -Point(403) = {d4, e4+r4, -ll/2, s4}; Point(413) = {d4, -e4+r4, ll/2, s4}; -Point(404) = {d4-r4, e4, -ll/2, s4}; Point(414) = {d4-r4, -e4, ll/2, s4}; -Point(405) = {d4, e4-r4, -ll/2, s4}; Point(415) = {d4, -e4-r4, ll/2, s4}; -Point(406) = {d4, e4, -ll/2-l4, s4l}; Point(416) = {d4, -e4, ll/2+l4, s4l}; -Point(407) = {d4+r4, e4, -ll/2-l4, s4l}; Point(417) = {d4+r4, -e4, ll/2+l4, s4l}; -Point(408) = {d4, e4+r4, -ll/2-l4, s4l}; Point(418) = {d4, -e4+r4, ll/2+l4, s4l}; -Point(409) = {d4-r4, e4, -ll/2-l4, s4l}; Point(419) = {d4-r4, -e4, ll/2+l4, s4l}; -Point(410) = {d4, e4-r4, -ll/2-l4, s4l}; Point(420) = {d4, -e4-r4, ll/2+l4, s4l}; - -Circle(401) = {402,401,403}; Circle(405) = {407,406,408}; Line(409) = {402,407}; -Circle(402) = {403,401,404}; Circle(406) = {408,406,409}; Line(410) = {403,408}; -Circle(403) = {404,401,405}; Circle(407) = {409,406,410}; Line(411) = {404,409}; -Circle(404) = {405,401,402}; Circle(408) = {410,406,407}; Line(412) = {405,410}; - -Circle(413) = {412,411,413}; Circle(417) = {417,416,418}; Line(421) = {412,417}; -Circle(414) = {413,411,414}; Circle(418) = {418,416,419}; Line(422) = {413,418}; -Circle(415) = {414,411,415}; Circle(419) = {419,416,420}; Line(423) = {414,419}; -Circle(416) = {415,411,412}; Circle(420) = {420,416,417}; Line(424) = {415,420}; - -Line Loop(401) = {402,403,404,401}; Plane Surface(421) = {401}; -Line Loop(402) = {407,408,405,406}; Plane Surface(422) = {402}; -Line Loop(403) = {416,413,414,415}; Plane Surface(423) = {403}; -Line Loop(404) = {420,417,418,419}; Plane Surface(424) = {404}; -Line Loop(405) = {408,-409,-404,412}; Ruled Surface(425) = {405}; -Line Loop(406) = {412,-407,-411,403}; Ruled Surface(426) = {406}; -Line Loop(407) = {-411,-402,410,406}; Ruled Surface(427) = {407}; -Line Loop(408) = {-410,-401,409,405}; Ruled Surface(428) = {408}; -Line Loop(409) = {421,-420,-424,416}; Ruled Surface(429) = {409}; -Line Loop(410) = {-424,-415,423,419}; Ruled Surface(430) = {410}; -Line Loop(411) = {423,-418,-422,414}; Ruled Surface(431) = {411}; -Line Loop(412) = {422,-417,-421,413}; Ruled Surface(432) = {412}; - -/* barreau 5 et 5' */ - -Point(501) = {d5, -e5, -ll/2, s5}; Point(511) = {d5, e5, ll/2, s5}; -Point(502) = {d5+r5, -e5, -ll/2, s5}; Point(512) = {d5+r5, e5, ll/2, s5}; -Point(503) = {d5, -e5+r5, -ll/2, s5}; Point(513) = {d5, e5+r5, ll/2, s5}; -Point(504) = {d5-r5, -e5, -ll/2, s5}; Point(514) = {d5-r5, e5, ll/2, s5}; -Point(505) = {d5, -e5-r5, -ll/2, s5}; Point(515) = {d5, e5-r5, ll/2, s5}; -Point(506) = {d5, -e5, -ll/2-l5, s5l}; Point(516) = {d5, e5, ll/2+l5, s5l}; -Point(507) = {d5+r5, -e5, -ll/2-l5, s5l}; Point(517) = {d5+r5, e5, ll/2+l5, s5l}; -Point(508) = {d5, -e5+r5, -ll/2-l5, s5l}; Point(518) = {d5, e5+r5, ll/2+l5, s5l}; -Point(509) = {d5-r5, -e5, -ll/2-l5, s5l}; Point(519) = {d5-r5, e5, ll/2+l5, s5l}; -Point(510) = {d5, -e5-r5, -ll/2-l5, s5l}; Point(520) = {d5, e5-r5, ll/2+l5, s5l}; - -Circle(501) = {502,501,503}; Circle(505) = {507,506,508}; Line(509) = {502,507}; -Circle(502) = {503,501,504}; Circle(506) = {508,506,509}; Line(510) = {503,508}; -Circle(503) = {504,501,505}; Circle(507) = {509,506,510}; Line(511) = {504,509}; -Circle(504) = {505,501,502}; Circle(508) = {510,506,507}; Line(512) = {505,510}; - -Circle(513) = {512,511,513}; Circle(517) = {517,516,518}; Line(521) = {512,517}; -Circle(514) = {513,511,514}; Circle(518) = {518,516,519}; Line(522) = {513,518}; -Circle(515) = {514,511,515}; Circle(519) = {519,516,520}; Line(523) = {514,519}; -Circle(516) = {515,511,512}; Circle(520) = {520,516,517}; Line(524) = {515,520}; - -Line Loop(501) = {502,503,504,501}; Plane Surface(521) = {501}; -Line Loop(502) = {507,508,505,506}; Plane Surface(522) = {502}; -Line Loop(503) = {516,513,514,515}; Plane Surface(523) = {503}; -Line Loop(504) = {520,517,518,519}; Plane Surface(524) = {504}; -Line Loop(505) = {508,-509,-504,512}; Ruled Surface(525) = {505}; -Line Loop(506) = {512,-507,-511,503}; Ruled Surface(526) = {506}; -Line Loop(507) = {-511,-502,510,506}; Ruled Surface(527) = {507}; -Line Loop(508) = {-510,-501,509,505}; Ruled Surface(528) = {508}; -Line Loop(509) = {521,-520,-524,516}; Ruled Surface(529) = {509}; -Line Loop(510) = {-524,-515,523,519}; Ruled Surface(530) = {510}; -Line Loop(511) = {523,-518,-522,514}; Ruled Surface(531) = {511}; -Line Loop(512) = {522,-517,-521,513}; Ruled Surface(532) = {512}; - -/* barreau 6 et 6' */ - -Point(601) = {d6, e6, -ll/2, s6}; Point(611) = {d6, -e6, ll/2, s6}; -Point(602) = {d6+r6, e6, -ll/2, s6}; Point(612) = {d6+r6, -e6, ll/2, s6}; -Point(603) = {d6, e6+r6, -ll/2, s6}; Point(613) = {d6, -e6+r6, ll/2, s6}; -Point(604) = {d6-r6, e6, -ll/2, s6}; Point(614) = {d6-r6, -e6, ll/2, s6}; -Point(605) = {d6, e6-r6, -ll/2, s6}; Point(615) = {d6, -e6-r6, ll/2, s6}; -Point(606) = {d6, e6, -ll/2-l6, s6l}; Point(616) = {d6, -e6, ll/2+l6, s6l}; -Point(607) = {d6+r6, e6, -ll/2-l6, s6l}; Point(617) = {d6+r6, -e6, ll/2+l6, s6l}; -Point(608) = {d6, e6+r6, -ll/2-l6, s6l}; Point(618) = {d6, -e6+r6, ll/2+l6, s6l}; -Point(609) = {d6-r6, e6, -ll/2-l6, s6l}; Point(619) = {d6-r6, -e6, ll/2+l6, s6l}; -Point(610) = {d6, e6-r6, -ll/2-l6, s6l}; Point(620) = {d6, -e6-r6, ll/2+l6, s6l}; - -Circle(601) = {602,601,603}; Circle(605) = {607,606,608}; Line(609) = {602,607}; -Circle(602) = {603,601,604}; Circle(606) = {608,606,609}; Line(610) = {603,608}; -Circle(603) = {604,601,605}; Circle(607) = {609,606,610}; Line(611) = {604,609}; -Circle(604) = {605,601,602}; Circle(608) = {610,606,607}; Line(612) = {605,610}; - -Circle(613) = {612,611,613}; Circle(617) = {617,616,618}; Line(621) = {612,617}; -Circle(614) = {613,611,614}; Circle(618) = {618,616,619}; Line(622) = {613,618}; -Circle(615) = {614,611,615}; Circle(619) = {619,616,620}; Line(623) = {614,619}; -Circle(616) = {615,611,612}; Circle(620) = {620,616,617}; Line(624) = {615,620}; - -Line Loop(601) = {602,603,604,601}; Plane Surface(621) = {601}; -Line Loop(602) = {607,608,605,606}; Plane Surface(622) = {602}; -Line Loop(603) = {616,613,614,615}; Plane Surface(623) = {603}; -Line Loop(604) = {620,617,618,619}; Plane Surface(624) = {604}; -Line Loop(605) = {608,-609,-604,612}; Ruled Surface(625) = {605}; -Line Loop(606) = {612,-607,-611,603}; Ruled Surface(626) = {606}; -Line Loop(607) = {-611,-602,610,606}; Ruled Surface(627) = {607}; -Line Loop(608) = {-610,-601,609,605}; Ruled Surface(628) = {608}; -Line Loop(609) = {621,-620,-624,616}; Ruled Surface(629) = {609}; -Line Loop(610) = {-624,-615,623,619}; Ruled Surface(630) = {610}; -Line Loop(611) = {623,-618,-622,614}; Ruled Surface(631) = {611}; -Line Loop(612) = {622,-617,-621,613}; Ruled Surface(632) = {612}; - -/* barreau 7 et 7' */ - -Point(701) = {d7, -e7, -ll/2, s7}; Point(711) = {d7, e7, ll/2, s7}; -Point(702) = {d7+r7, -e7, -ll/2, s7}; Point(712) = {d7+r7, e7, ll/2, s7}; -Point(703) = {d7, -e7+r7, -ll/2, s7}; Point(713) = {d7, e7+r7, ll/2, s7}; -Point(704) = {d7-r7, -e7, -ll/2, s7}; Point(714) = {d7-r7, e7, ll/2, s7}; -Point(705) = {d7, -e7-r7, -ll/2, s7}; Point(715) = {d7, e7-r7, ll/2, s7}; -Point(706) = {d7, -e7, -ll/2-l7, s7l}; Point(716) = {d7, e7, ll/2+l7, s7l}; -Point(707) = {d7+r7, -e7, -ll/2-l7, s7l}; Point(717) = {d7+r7, e7, ll/2+l7, s7l}; -Point(708) = {d7, -e7+r7, -ll/2-l7, s7l}; Point(718) = {d7, e7+r7, ll/2+l7, s7l}; -Point(709) = {d7-r7, -e7, -ll/2-l7, s7l}; Point(719) = {d7-r7, e7, ll/2+l7, s7l}; -Point(710) = {d7, -e7-r7, -ll/2-l7, s7l}; Point(720) = {d7, e7-r7, ll/2+l7, s7l}; - -Circle(701) = {702,701,703}; Circle(705) = {707,706,708}; Line(709) = {702,707}; -Circle(702) = {703,701,704}; Circle(706) = {708,706,709}; Line(710) = {703,708}; -Circle(703) = {704,701,705}; Circle(707) = {709,706,710}; Line(711) = {704,709}; -Circle(704) = {705,701,702}; Circle(708) = {710,706,707}; Line(712) = {705,710}; - -Circle(713) = {712,711,713}; Circle(717) = {717,716,718}; Line(721) = {712,717}; -Circle(714) = {713,711,714}; Circle(718) = {718,716,719}; Line(722) = {713,718}; -Circle(715) = {714,711,715}; Circle(719) = {719,716,720}; Line(723) = {714,719}; -Circle(716) = {715,711,712}; Circle(720) = {720,716,717}; Line(724) = {715,720}; - -Line Loop(701) = {702,703,704,701}; Plane Surface(721) = {701}; -Line Loop(702) = {707,708,705,706}; Plane Surface(722) = {702}; -Line Loop(703) = {716,713,714,715}; Plane Surface(723) = {703}; -Line Loop(704) = {720,717,718,719}; Plane Surface(724) = {704}; -Line Loop(705) = {708,-709,-704,712}; Ruled Surface(725) = {705}; -Line Loop(706) = {712,-707,-711,703}; Ruled Surface(726) = {706}; -Line Loop(707) = {-711,-702,710,706}; Ruled Surface(727) = {707}; -Line Loop(708) = {-710,-701,709,705}; Ruled Surface(728) = {708}; -Line Loop(709) = {721,-720,-724,716}; Ruled Surface(729) = {709}; -Line Loop(710) = {-724,-715,723,719}; Ruled Surface(730) = {710}; -Line Loop(711) = {723,-718,-722,714}; Ruled Surface(731) = {711}; -Line Loop(712) = {722,-717,-721,713}; Ruled Surface(732) = {712}; - -/* barreau 8 et 8' */ - -Point(801) = {d8, e8, -ll/2, s8}; Point(811) = {d8, -e8, ll/2, s8}; -Point(802) = {d8+r8, e8, -ll/2, s8}; Point(812) = {d8+r8, -e8, ll/2, s8}; -Point(803) = {d8, e8+r8, -ll/2, s8}; Point(813) = {d8, -e8+r8, ll/2, s8}; -Point(804) = {d8-r8, e8, -ll/2, s8}; Point(814) = {d8-r8, -e8, ll/2, s8}; -Point(805) = {d8, e8-r8, -ll/2, s8}; Point(815) = {d8, -e8-r8, ll/2, s8}; -Point(806) = {d8, e8, -ll/2-l8, s8l}; Point(816) = {d8, -e8, ll/2+l8, s8l}; -Point(807) = {d8+r8, e8, -ll/2-l8, s8l}; Point(817) = {d8+r8, -e8, ll/2+l8, s8l}; -Point(808) = {d8, e8+r8, -ll/2-l8, s8l}; Point(818) = {d8, -e8+r8, ll/2+l8, s8l}; -Point(809) = {d8-r8, e8, -ll/2-l8, s8l}; Point(819) = {d8-r8, -e8, ll/2+l8, s8l}; -Point(810) = {d8, e8-r8, -ll/2-l8, s8l}; Point(820) = {d8, -e8-r8, ll/2+l8, s8l}; - -Circle(801) = {802,801,803}; Circle(805) = {807,806,808}; Line(809) = {802,807}; -Circle(802) = {803,801,804}; Circle(806) = {808,806,809}; Line(810) = {803,808}; -Circle(803) = {804,801,805}; Circle(807) = {809,806,810}; Line(811) = {804,809}; -Circle(804) = {805,801,802}; Circle(808) = {810,806,807}; Line(812) = {805,810}; - -Circle(813) = {812,811,813}; Circle(817) = {817,816,818}; Line(821) = {812,817}; -Circle(814) = {813,811,814}; Circle(818) = {818,816,819}; Line(822) = {813,818}; -Circle(815) = {814,811,815}; Circle(819) = {819,816,820}; Line(823) = {814,819}; -Circle(816) = {815,811,812}; Circle(820) = {820,816,817}; Line(824) = {815,820}; - -Line Loop(801) = {802,803,804,801}; Plane Surface(821) = {801}; -Line Loop(802) = {807,808,805,806}; Plane Surface(822) = {802}; -Line Loop(803) = {816,813,814,815}; Plane Surface(823) = {803}; -Line Loop(804) = {820,817,818,819}; Plane Surface(824) = {804}; -Line Loop(805) = {808,-809,-804,812}; Ruled Surface(825) = {805}; -Line Loop(806) = {812,-807,-811,803}; Ruled Surface(826) = {806}; -Line Loop(807) = {-811,-802,810,806}; Ruled Surface(827) = {807}; -Line Loop(808) = {-810,-801,809,805}; Ruled Surface(828) = {808}; -Line Loop(809) = {821,-820,-824,816}; Ruled Surface(829) = {809}; -Line Loop(810) = {-824,-815,823,819}; Ruled Surface(830) = {810}; -Line Loop(811) = {823,-818,-822,814}; Ruled Surface(831) = {811}; -Line Loop(812) = {822,-817,-821,813}; Ruled Surface(832) = {812}; - -/* barreau 9 et 9' */ - -Point(901) = {d9, -e9, -ll/2, s9}; Point(911) = {d9, e9, ll/2, s9}; -Point(902) = {d9+r9, -e9, -ll/2, s9}; Point(912) = {d9+r9, e9, ll/2, s9}; -Point(903) = {d9, -e9+r9, -ll/2, s9}; Point(913) = {d9, e9+r9, ll/2, s9}; -Point(904) = {d9-r9, -e9, -ll/2, s9}; Point(914) = {d9-r9, e9, ll/2, s9}; -Point(905) = {d9, -e9-r9, -ll/2, s9}; Point(915) = {d9, e9-r9, ll/2, s9}; -Point(906) = {d9, -e9, -ll/2-l9, s9l}; Point(916) = {d9, e9, ll/2+l9, s9l}; -Point(907) = {d9+r9, -e9, -ll/2-l9, s9l}; Point(917) = {d9+r9, e9, ll/2+l9, s9l}; -Point(908) = {d9, -e9+r9, -ll/2-l9, s9l}; Point(918) = {d9, e9+r9, ll/2+l9, s9l}; -Point(909) = {d9-r9, -e9, -ll/2-l9, s9l}; Point(919) = {d9-r9, e9, ll/2+l9, s9l}; -Point(910) = {d9, -e9-r9, -ll/2-l9, s9l}; Point(920) = {d9, e9-r9, ll/2+l9, s9l}; - -Circle(901) = {902,901,903}; Circle(905) = {907,906,908}; Line(909) = {902,907}; -Circle(902) = {903,901,904}; Circle(906) = {908,906,909}; Line(910) = {903,908}; -Circle(903) = {904,901,905}; Circle(907) = {909,906,910}; Line(911) = {904,909}; -Circle(904) = {905,901,902}; Circle(908) = {910,906,907}; Line(912) = {905,910}; - -Circle(913) = {912,911,913}; Circle(917) = {917,916,918}; Line(921) = {912,917}; -Circle(914) = {913,911,914}; Circle(918) = {918,916,919}; Line(922) = {913,918}; -Circle(915) = {914,911,915}; Circle(919) = {919,916,920}; Line(923) = {914,919}; -Circle(916) = {915,911,912}; Circle(920) = {920,916,917}; Line(924) = {915,920}; - -Line Loop(901) = {902,903,904,901}; Plane Surface(921) = {901}; -Line Loop(902) = {907,908,905,906}; Plane Surface(922) = {902}; -Line Loop(903) = {916,913,914,915}; Plane Surface(923) = {903}; -Line Loop(904) = {920,917,918,919}; Plane Surface(924) = {904}; -Line Loop(905) = {908,-909,-904,912}; Ruled Surface(925) = {905}; -Line Loop(906) = {912,-907,-911,903}; Ruled Surface(926) = {906}; -Line Loop(907) = {-911,-902,910,906}; Ruled Surface(927) = {907}; -Line Loop(908) = {-910,-901,909,905}; Ruled Surface(928) = {908}; -Line Loop(909) = {921,-920,-924,916}; Ruled Surface(929) = {909}; -Line Loop(910) = {-924,-915,923,919}; Ruled Surface(930) = {910}; -Line Loop(911) = {923,-918,-922,914}; Ruled Surface(931) = {911}; -Line Loop(912) = {922,-917,-921,913}; Ruled Surface(932) = {912}; - -/* barreau 10 et 10' */ - -Point(1001) = {d10, e10, -ll/2, s10}; Point(1011) = {d10, -e10, ll/2, s10}; -Point(1002) = {d10+r10, e10, -ll/2, s10}; Point(1012) = {d10+r10, -e10, ll/2, s10}; -Point(1003) = {d10, e10+r10, -ll/2, s10}; Point(1013) = {d10, -e10+r10, ll/2, s10}; -Point(1004) = {d10-r10, e10, -ll/2, s10}; Point(1014) = {d10-r10, -e10, ll/2, s10}; -Point(1005) = {d10, e10-r10, -ll/2, s10}; Point(1015) = {d10, -e10-r10, ll/2, s10}; -Point(1006) = {d10, e10, -ll/2-l10, s10l}; Point(1016) = {d10, -e10, ll/2+l10, s10l}; -Point(1007) = {d10+r10, e10, -ll/2-l10, s10l}; Point(1017) = {d10+r10, -e10, ll/2+l10, s10l}; -Point(1008) = {d10, e10+r10, -ll/2-l10, s10l}; Point(1018) = {d10, -e10+r10, ll/2+l10, s10l}; -Point(1009) = {d10-r10, e10, -ll/2-l10, s10l}; Point(1019) = {d10-r10, -e10, ll/2+l10, s10l}; -Point(1010) = {d10, e10-r10, -ll/2-l10, s10l}; Point(1020) = {d10, -e10-r10, ll/2+l10, s10l}; - -Circle(1001) = {1002,1001,1003}; Circle(1005) = {1007,1006,1008}; Line(1009) = {1002,1007}; -Circle(1002) = {1003,1001,1004}; Circle(1006) = {1008,1006,1009}; Line(1010) = {1003,1008}; -Circle(1003) = {1004,1001,1005}; Circle(1007) = {1009,1006,1010}; Line(1011) = {1004,1009}; -Circle(1004) = {1005,1001,1002}; Circle(1008) = {1010,1006,1007}; Line(1012) = {1005,1010}; - -Circle(1013) = {1012,1011,1013}; Circle(1017) = {1017,1016,1018}; Line(1021) = {1012,1017}; -Circle(1014) = {1013,1011,1014}; Circle(1018) = {1018,1016,1019}; Line(1022) = {1013,1018}; -Circle(1015) = {1014,1011,1015}; Circle(1019) = {1019,1016,1020}; Line(1023) = {1014,1019}; -Circle(1016) = {1015,1011,1012}; Circle(1020) = {1020,1016,1017}; Line(1024) = {1015,1020}; - -Line Loop(1001) = {1002,1003,1004,1001}; Plane Surface(1021) = {1001}; -Line Loop(1002) = {1007,1008,1005,1006}; Plane Surface(1022) = {1002}; -Line Loop(1003) = {1016,1013,1014,1015}; Plane Surface(1023) = {1003}; -Line Loop(1004) = {1020,1017,1018,1019}; Plane Surface(1024) = {1004}; -Line Loop(1005) = {1008,-1009,-1004,1012}; Ruled Surface(1025) = {1005}; -Line Loop(1006) = {1012,-1007,-1011,1003}; Ruled Surface(1026) = {1006}; -Line Loop(1007) = {-1011,-1002,1010,1006}; Ruled Surface(1027) = {1007}; -Line Loop(1008) = {-1010,-1001,1009,1005}; Ruled Surface(1028) = {1008}; -Line Loop(1009) = {1021,-1020,-1024,1016}; Ruled Surface(1029) = {1009}; -Line Loop(1010) = {-1024,-1015,1023,1019}; Ruled Surface(1030) = {1010}; -Line Loop(1011) = {1023,-1018,-1022,1014}; Ruled Surface(1031) = {1011}; -Line Loop(1012) = {1022,-1017,-1021,1013}; Ruled Surface(1032) = {1012}; - -/* barreau 11 et 11' */ - -Point(1101) = {d11, -e11, -ll/2, s11}; Point(1111) = {d11, e11, ll/2, s11}; -Point(1102) = {d11+r11, -e11, -ll/2, s11}; Point(1112) = {d11+r11, e11, ll/2, s11}; -Point(1103) = {d11, -e11+r11, -ll/2, s11}; Point(1113) = {d11, e11+r11, ll/2, s11}; -Point(1104) = {d11-r11, -e11, -ll/2, s11}; Point(1114) = {d11-r11, e11, ll/2, s11}; -Point(1105) = {d11, -e11-r11, -ll/2, s11}; Point(1115) = {d11, e11-r11, ll/2, s11}; -Point(1106) = {d11, -e11, -ll/2-l11, s11l}; Point(1116) = {d11, e11, ll/2+l11, s11l}; -Point(1107) = {d11+r11, -e11, -ll/2-l11, s11l}; Point(1117) = {d11+r11, e11, ll/2+l11, s11l}; -Point(1108) = {d11, -e11+r11, -ll/2-l11, s11l}; Point(1118) = {d11, e11+r11, ll/2+l11, s11l}; -Point(1109) = {d11-r11, -e11, -ll/2-l11, s11l}; Point(1119) = {d11-r11, e11, ll/2+l11, s11l}; -Point(1110) = {d11, -e11-r11, -ll/2-l11, s11l}; Point(1120) = {d11, e11-r11, ll/2+l11, s11l}; - -Circle(1101) = {1102,1101,1103}; Circle(1105) = {1107,1106,1108}; Line(1109) = {1102,1107}; -Circle(1102) = {1103,1101,1104}; Circle(1106) = {1108,1106,1109}; Line(1110) = {1103,1108}; -Circle(1103) = {1104,1101,1105}; Circle(1107) = {1109,1106,1110}; Line(1111) = {1104,1109}; -Circle(1104) = {1105,1101,1102}; Circle(1108) = {1110,1106,1107}; Line(1112) = {1105,1110}; - -Circle(1113) = {1112,1111,1113}; Circle(1117) = {1117,1116,1118}; Line(1121) = {1112,1117}; -Circle(1114) = {1113,1111,1114}; Circle(1118) = {1118,1116,1119}; Line(1122) = {1113,1118}; -Circle(1115) = {1114,1111,1115}; Circle(1119) = {1119,1116,1120}; Line(1123) = {1114,1119}; -Circle(1116) = {1115,1111,1112}; Circle(1120) = {1120,1116,1117}; Line(1124) = {1115,1120}; - -Line Loop(1101) = {1102,1103,1104,1101}; Plane Surface(1121) = {1101}; -Line Loop(1102) = {1107,1108,1105,1106}; Plane Surface(1122) = {1102}; -Line Loop(1103) = {1116,1113,1114,1115}; Plane Surface(1123) = {1103}; -Line Loop(1104) = {1120,1117,1118,1119}; Plane Surface(1124) = {1104}; -Line Loop(1105) = {1108,-1109,-1104,1112}; Ruled Surface(1125) = {1105}; -Line Loop(1106) = {1112,-1107,-1111,1103}; Ruled Surface(1126) = {1106}; -Line Loop(1107) = {-1111,-1102,1110,1106}; Ruled Surface(1127) = {1107}; -Line Loop(1108) = {-1110,-1101,1109,1105}; Ruled Surface(1128) = {1108}; -Line Loop(1109) = {1121,-1120,-1124,1116}; Ruled Surface(1129) = {1109}; -Line Loop(1110) = {-1124,-1115,1123,1119}; Ruled Surface(1130) = {1110}; -Line Loop(1111) = {1123,-1118,-1122,1114}; Ruled Surface(1131) = {1111}; -Line Loop(1112) = {1122,-1117,-1121,1113}; Ruled Surface(1132) = {1112}; - -/* barreau 12 et 12' */ - -Point(1201) = {d12, e12, -ll/2, s12}; Point(1211) = {d12, -e12, ll/2, s12}; -Point(1202) = {d12+r12, e12, -ll/2, s12}; Point(1212) = {d12+r12, -e12, ll/2, s12}; -Point(1203) = {d12, e12+r12, -ll/2, s12}; Point(1213) = {d12, -e12+r12, ll/2, s12}; -Point(1204) = {d12-r12, e12, -ll/2, s12}; Point(1214) = {d12-r12, -e12, ll/2, s12}; -Point(1205) = {d12, e12-r12, -ll/2, s12}; Point(1215) = {d12, -e12-r12, ll/2, s12}; -Point(1206) = {d12, e12, -ll/2-l12, s12l}; Point(1216) = {d12, -e12, ll/2+l12, s12l}; -Point(1207) = {d12+r12, e12, -ll/2-l12, s12l}; Point(1217) = {d12+r12, -e12, ll/2+l12, s12l}; -Point(1208) = {d12, e12+r12, -ll/2-l12, s12l}; Point(1218) = {d12, -e12+r12, ll/2+l12, s12l}; -Point(1209) = {d12-r12, e12, -ll/2-l12, s12l}; Point(1219) = {d12-r12, -e12, ll/2+l12, s12l}; -Point(1210) = {d12, e12-r12, -ll/2-l12, s12l}; Point(1220) = {d12, -e12-r12, ll/2+l12, s12l}; - -Circle(1201) = {1202,1201,1203}; Circle(1205) = {1207,1206,1208}; Line(1209) = {1202,1207}; -Circle(1202) = {1203,1201,1204}; Circle(1206) = {1208,1206,1209}; Line(1210) = {1203,1208}; -Circle(1203) = {1204,1201,1205}; Circle(1207) = {1209,1206,1210}; Line(1211) = {1204,1209}; -Circle(1204) = {1205,1201,1202}; Circle(1208) = {1210,1206,1207}; Line(1212) = {1205,1210}; - -Circle(1213) = {1212,1211,1213}; Circle(1217) = {1217,1216,1218}; Line(1221) = {1212,1217}; -Circle(1214) = {1213,1211,1214}; Circle(1218) = {1218,1216,1219}; Line(1222) = {1213,1218}; -Circle(1215) = {1214,1211,1215}; Circle(1219) = {1219,1216,1220}; Line(1223) = {1214,1219}; -Circle(1216) = {1215,1211,1212}; Circle(1220) = {1220,1216,1217}; Line(1224) = {1215,1220}; - -Line Loop(1201) = {1202,1203,1204,1201}; Plane Surface(1221) = {1201}; -Line Loop(1202) = {1207,1208,1205,1206}; Plane Surface(1222) = {1202}; -Line Loop(1203) = {1216,1213,1214,1215}; Plane Surface(1223) = {1203}; -Line Loop(1204) = {1220,1217,1218,1219}; Plane Surface(1224) = {1204}; -Line Loop(1205) = {1208,-1209,-1204,1212}; Ruled Surface(1225) = {1205}; -Line Loop(1206) = {1212,-1207,-1211,1203}; Ruled Surface(1226) = {1206}; -Line Loop(1207) = {-1211,-1202,1210,1206}; Ruled Surface(1227) = {1207}; -Line Loop(1208) = {-1210,-1201,1209,1205}; Ruled Surface(1228) = {1208}; -Line Loop(1209) = {1221,-1220,-1224,1216}; Ruled Surface(1229) = {1209}; -Line Loop(1210) = {-1224,-1215,1223,1219}; Ruled Surface(1230) = {1210}; -Line Loop(1211) = {1223,-1218,-1222,1214}; Ruled Surface(1231) = {1211}; -Line Loop(1212) = {1222,-1217,-1221,1213}; Ruled Surface(1232) = {1212}; - -/* barreau 13 et 13' */ - -Point(1301) = {d13, -e13, -ll/2, s13}; Point(1311) = {d13, e13, ll/2, s13}; -Point(1302) = {d13+r13, -e13, -ll/2, s13}; Point(1312) = {d13+r13, e13, ll/2, s13}; -Point(1303) = {d13, -e13+r13, -ll/2, s13}; Point(1313) = {d13, e13+r13, ll/2, s13}; -Point(1304) = {d13-r13, -e13, -ll/2, s13}; Point(1314) = {d13-r13, e13, ll/2, s13}; -Point(1305) = {d13, -e13-r13, -ll/2, s13}; Point(1315) = {d13, e13-r13, ll/2, s13}; -Point(1306) = {d13, -e13, -ll/2-l13, s13l}; Point(1316) = {d13, e13, ll/2+l13, s13l}; -Point(1307) = {d13+r13, -e13, -ll/2-l13, s13l}; Point(1317) = {d13+r13, e13, ll/2+l13, s13l}; -Point(1308) = {d13, -e13+r13, -ll/2-l13, s13l}; Point(1318) = {d13, e13+r13, ll/2+l13, s13l}; -Point(1309) = {d13-r13, -e13, -ll/2-l13, s13l}; Point(1319) = {d13-r13, e13, ll/2+l13, s13l}; -Point(1310) = {d13, -e13-r13, -ll/2-l13, s13l}; Point(1320) = {d13, e13-r13, ll/2+l13, s13l}; - -Circle(1301) = {1302,1301,1303}; Circle(1305) = {1307,1306,1308}; Line(1309) = {1302,1307}; -Circle(1302) = {1303,1301,1304}; Circle(1306) = {1308,1306,1309}; Line(1310) = {1303,1308}; -Circle(1303) = {1304,1301,1305}; Circle(1307) = {1309,1306,1310}; Line(1311) = {1304,1309}; -Circle(1304) = {1305,1301,1302}; Circle(1308) = {1310,1306,1307}; Line(1312) = {1305,1310}; - -Circle(1313) = {1312,1311,1313}; Circle(1317) = {1317,1316,1318}; Line(1321) = {1312,1317}; -Circle(1314) = {1313,1311,1314}; Circle(1318) = {1318,1316,1319}; Line(1322) = {1313,1318}; -Circle(1315) = {1314,1311,1315}; Circle(1319) = {1319,1316,1320}; Line(1323) = {1314,1319}; -Circle(1316) = {1315,1311,1312}; Circle(1320) = {1320,1316,1317}; Line(1324) = {1315,1320}; - -Line Loop(1301) = {1302,1303,1304,1301}; Plane Surface(1321) = {1301}; -Line Loop(1302) = {1307,1308,1305,1306}; Plane Surface(1322) = {1302}; -Line Loop(1303) = {1316,1313,1314,1315}; Plane Surface(1323) = {1303}; -Line Loop(1304) = {1320,1317,1318,1319}; Plane Surface(1324) = {1304}; -Line Loop(1305) = {1308,-1309,-1304,1312}; Ruled Surface(1325) = {1305}; -Line Loop(1306) = {1312,-1307,-1311,1303}; Ruled Surface(1326) = {1306}; -Line Loop(1307) = {-1311,-1302,1310,1306}; Ruled Surface(1327) = {1307}; -Line Loop(1308) = {-1310,-1301,1309,1305}; Ruled Surface(1328) = {1308}; -Line Loop(1309) = {1321,-1320,-1324,1316}; Ruled Surface(1329) = {1309}; -Line Loop(1310) = {-1324,-1315,1323,1319}; Ruled Surface(1330) = {1310}; -Line Loop(1311) = {1323,-1318,-1322,1314}; Ruled Surface(1331) = {1311}; -Line Loop(1312) = {1322,-1317,-1321,1313}; Ruled Surface(1332) = {1312}; - -/* barreau 14 et 14' */ - -Point(1401) = {d14, e14, -ll/2, s14}; Point(1411) = {d14, -e14, ll/2, s14}; -Point(1402) = {d14+r14, e14, -ll/2, s14}; Point(1412) = {d14+r14, -e14, ll/2, s14}; -Point(1403) = {d14, e14+r14, -ll/2, s14}; Point(1413) = {d14, -e14+r14, ll/2, s14}; -Point(1404) = {d14-r14, e14, -ll/2, s14}; Point(1414) = {d14-r14, -e14, ll/2, s14}; -Point(1405) = {d14, e14-r14, -ll/2, s14}; Point(1415) = {d14, -e14-r14, ll/2, s14}; -Point(1406) = {d14, e14, -ll/2-l14, s14l}; Point(1416) = {d14, -e14, ll/2+l14, s14l}; -Point(1407) = {d14+r14, e14, -ll/2-l14, s14l}; Point(1417) = {d14+r14, -e14, ll/2+l14, s14l}; -Point(1408) = {d14, e14+r14, -ll/2-l14, s14l}; Point(1418) = {d14, -e14+r14, ll/2+l14, s14l}; -Point(1409) = {d14-r14, e14, -ll/2-l14, s14l}; Point(1419) = {d14-r14, -e14, ll/2+l14, s14l}; -Point(1410) = {d14, e14-r14, -ll/2-l14, s14l}; Point(1420) = {d14, -e14-r14, ll/2+l14, s14l}; - -Circle(1401) = {1402,1401,1403}; Circle(1405) = {1407,1406,1408}; Line(1409) = {1402,1407}; -Circle(1402) = {1403,1401,1404}; Circle(1406) = {1408,1406,1409}; Line(1410) = {1403,1408}; -Circle(1403) = {1404,1401,1405}; Circle(1407) = {1409,1406,1410}; Line(1411) = {1404,1409}; -Circle(1404) = {1405,1401,1402}; Circle(1408) = {1410,1406,1407}; Line(1412) = {1405,1410}; - -Circle(1413) = {1412,1411,1413}; Circle(1417) = {1417,1416,1418}; Line(1421) = {1412,1417}; -Circle(1414) = {1413,1411,1414}; Circle(1418) = {1418,1416,1419}; Line(1422) = {1413,1418}; -Circle(1415) = {1414,1411,1415}; Circle(1419) = {1419,1416,1420}; Line(1423) = {1414,1419}; -Circle(1416) = {1415,1411,1412}; Circle(1420) = {1420,1416,1417}; Line(1424) = {1415,1420}; - -Line Loop(1401) = {1402,1403,1404,1401}; Plane Surface(1421) = {1401}; -Line Loop(1402) = {1407,1408,1405,1406}; Plane Surface(1422) = {1402}; -Line Loop(1403) = {1416,1413,1414,1415}; Plane Surface(1423) = {1403}; -Line Loop(1404) = {1420,1417,1418,1419}; Plane Surface(1424) = {1404}; -Line Loop(1405) = {1408,-1409,-1404,1412}; Ruled Surface(1425) = {1405}; -Line Loop(1406) = {1412,-1407,-1411,1403}; Ruled Surface(1426) = {1406}; -Line Loop(1407) = {-1411,-1402,1410,1406}; Ruled Surface(1427) = {1407}; -Line Loop(1408) = {-1410,-1401,1409,1405}; Ruled Surface(1428) = {1408}; -Line Loop(1409) = {1421,-1420,-1424,1416}; Ruled Surface(1429) = {1409}; -Line Loop(1410) = {-1424,-1415,1423,1419}; Ruled Surface(1430) = {1410}; -Line Loop(1411) = {1423,-1418,-1422,1414}; Ruled Surface(1431) = {1411}; -Line Loop(1412) = {1422,-1417,-1421,1413}; Ruled Surface(1432) = {1412}; - -/* barreau 15 et 15' */ - -Point(1501) = {d15, -e15, -ll/2, s15}; Point(1511) = {d15, e15, ll/2, s15}; -Point(1502) = {d15+r15, -e15, -ll/2, s15}; Point(1512) = {d15+r15, e15, ll/2, s15}; -Point(1503) = {d15, -e15+r15, -ll/2, s15}; Point(1513) = {d15, e15+r15, ll/2, s15}; -Point(1504) = {d15-r15, -e15, -ll/2, s15}; Point(1514) = {d15-r15, e15, ll/2, s15}; -Point(1505) = {d15, -e15-r15, -ll/2, s15}; Point(1515) = {d15, e15-r15, ll/2, s15}; -Point(1506) = {d15, -e15, -ll/2-l15, s15l}; Point(1516) = {d15, e15, ll/2+l15, s15l}; -Point(1507) = {d15+r15, -e15, -ll/2-l15, s15l}; Point(1517) = {d15+r15, e15, ll/2+l15, s15l}; -Point(1508) = {d15, -e15+r15, -ll/2-l15, s15l}; Point(1518) = {d15, e15+r15, ll/2+l15, s15l}; -Point(1509) = {d15-r15, -e15, -ll/2-l15, s15l}; Point(1519) = {d15-r15, e15, ll/2+l15, s15l}; -Point(1510) = {d15, -e15-r15, -ll/2-l15, s15l}; Point(1520) = {d15, e15-r15, ll/2+l15, s15l}; - -Circle(1501) = {1502,1501,1503}; Circle(1505) = {1507,1506,1508}; Line(1509) = {1502,1507}; -Circle(1502) = {1503,1501,1504}; Circle(1506) = {1508,1506,1509}; Line(1510) = {1503,1508}; -Circle(1503) = {1504,1501,1505}; Circle(1507) = {1509,1506,1510}; Line(1511) = {1504,1509}; -Circle(1504) = {1505,1501,1502}; Circle(1508) = {1510,1506,1507}; Line(1512) = {1505,1510}; - -Circle(1513) = {1512,1511,1513}; Circle(1517) = {1517,1516,1518}; Line(1521) = {1512,1517}; -Circle(1514) = {1513,1511,1514}; Circle(1518) = {1518,1516,1519}; Line(1522) = {1513,1518}; -Circle(1515) = {1514,1511,1515}; Circle(1519) = {1519,1516,1520}; Line(1523) = {1514,1519}; -Circle(1516) = {1515,1511,1512}; Circle(1520) = {1520,1516,1517}; Line(1524) = {1515,1520}; - -Line Loop(1501) = {1502,1503,1504,1501}; Plane Surface(1521) = {1501}; -Line Loop(1502) = {1507,1508,1505,1506}; Plane Surface(1522) = {1502}; -Line Loop(1503) = {1516,1513,1514,1515}; Plane Surface(1523) = {1503}; -Line Loop(1504) = {1520,1517,1518,1519}; Plane Surface(1524) = {1504}; -Line Loop(1505) = {1508,-1509,-1504,1512}; Ruled Surface(1525) = {1505}; -Line Loop(1506) = {1512,-1507,-1511,1503}; Ruled Surface(1526) = {1506}; -Line Loop(1507) = {-1511,-1502,1510,1506}; Ruled Surface(1527) = {1507}; -Line Loop(1508) = {-1510,-1501,1509,1505}; Ruled Surface(1528) = {1508}; -Line Loop(1509) = {1521,-1520,-1524,1516}; Ruled Surface(1529) = {1509}; -Line Loop(1510) = {-1524,-1515,1523,1519}; Ruled Surface(1530) = {1510}; -Line Loop(1511) = {1523,-1518,-1522,1514}; Ruled Surface(1531) = {1511}; -Line Loop(1512) = {1522,-1517,-1521,1513}; Ruled Surface(1532) = {1512}; - -/* barreau 16 et 16' */ - -Point(1601) = {d16, e16, -ll/2, s16}; Point(1611) = {d16, -e16, ll/2, s16}; -Point(1602) = {d16+r16, e16, -ll/2, s16}; Point(1612) = {d16+r16, -e16, ll/2, s16}; -Point(1603) = {d16, e16+r16, -ll/2, s16}; Point(1613) = {d16, -e16+r16, ll/2, s16}; -Point(1604) = {d16-r16, e16, -ll/2, s16}; Point(1614) = {d16-r16, -e16, ll/2, s16}; -Point(1605) = {d16, e16-r16, -ll/2, s16}; Point(1615) = {d16, -e16-r16, ll/2, s16}; -Point(1606) = {d16, e16, -ll/2-l16, s16l}; Point(1616) = {d16, -e16, ll/2+l16, s16l}; -Point(1607) = {d16+r16, e16, -ll/2-l16, s16l}; Point(1617) = {d16+r16, -e16, ll/2+l16, s16l}; -Point(1608) = {d16, e16+r16, -ll/2-l16, s16l}; Point(1618) = {d16, -e16+r16, ll/2+l16, s16l}; -Point(1609) = {d16-r16, e16, -ll/2-l16, s16l}; Point(1619) = {d16-r16, -e16, ll/2+l16, s16l}; -Point(1610) = {d16, e16-r16, -ll/2-l16, s16l}; Point(1620) = {d16, -e16-r16, ll/2+l16, s16l}; - -Circle(1601) = {1602,1601,1603}; Circle(1605) = {1607,1606,1608}; Line(1609) = {1602,1607}; -Circle(1602) = {1603,1601,1604}; Circle(1606) = {1608,1606,1609}; Line(1610) = {1603,1608}; -Circle(1603) = {1604,1601,1605}; Circle(1607) = {1609,1606,1610}; Line(1611) = {1604,1609}; -Circle(1604) = {1605,1601,1602}; Circle(1608) = {1610,1606,1607}; Line(1612) = {1605,1610}; - -Circle(1613) = {1612,1611,1613}; Circle(1617) = {1617,1616,1618}; Line(1621) = {1612,1617}; -Circle(1614) = {1613,1611,1614}; Circle(1618) = {1618,1616,1619}; Line(1622) = {1613,1618}; -Circle(1615) = {1614,1611,1615}; Circle(1619) = {1619,1616,1620}; Line(1623) = {1614,1619}; -Circle(1616) = {1615,1611,1612}; Circle(1620) = {1620,1616,1617}; Line(1624) = {1615,1620}; - -Line Loop(1601) = {1602,1603,1604,1601}; Plane Surface(1621) = {1601}; -Line Loop(1602) = {1607,1608,1605,1606}; Plane Surface(1622) = {1602}; -Line Loop(1603) = {1616,1613,1614,1615}; Plane Surface(1623) = {1603}; -Line Loop(1604) = {1620,1617,1618,1619}; Plane Surface(1624) = {1604}; -Line Loop(1605) = {1608,-1609,-1604,1612}; Ruled Surface(1625) = {1605}; -Line Loop(1606) = {1612,-1607,-1611,1603}; Ruled Surface(1626) = {1606}; -Line Loop(1607) = {-1611,-1602,1610,1606}; Ruled Surface(1627) = {1607}; -Line Loop(1608) = {-1610,-1601,1609,1605}; Ruled Surface(1628) = {1608}; -Line Loop(1609) = {1621,-1620,-1624,1616}; Ruled Surface(1629) = {1609}; -Line Loop(1610) = {-1624,-1615,1623,1619}; Ruled Surface(1630) = {1610}; -Line Loop(1611) = {1623,-1618,-1622,1614}; Ruled Surface(1631) = {1611}; -Line Loop(1612) = {1622,-1617,-1621,1613}; Ruled Surface(1632) = {1612}; - -/* barreau 17 et 17' */ - -Point(1701) = {d17, -e17, -ll/2, s17}; Point(1711) = {d17, e17, ll/2, s17}; -Point(1702) = {d17+r17, -e17, -ll/2, s17}; Point(1712) = {d17+r17, e17, ll/2, s17}; -Point(1703) = {d17, -e17+r17, -ll/2, s17}; Point(1713) = {d17, e17+r17, ll/2, s17}; -Point(1704) = {d17-r17, -e17, -ll/2, s17}; Point(1714) = {d17-r17, e17, ll/2, s17}; -Point(1705) = {d17, -e17-r17, -ll/2, s17}; Point(1715) = {d17, e17-r17, ll/2, s17}; -Point(1706) = {d17, -e17, -ll/2-l17, s17l}; Point(1716) = {d17, e17, ll/2+l17, s17l}; -Point(1707) = {d17+r17, -e17, -ll/2-l17, s17l}; Point(1717) = {d17+r17, e17, ll/2+l17, s17l}; -Point(1708) = {d17, -e17+r17, -ll/2-l17, s17l}; Point(1718) = {d17, e17+r17, ll/2+l17, s17l}; -Point(1709) = {d17-r17, -e17, -ll/2-l17, s17l}; Point(1719) = {d17-r17, e17, ll/2+l17, s17l}; -Point(1710) = {d17, -e17-r17, -ll/2-l17, s17l}; Point(1720) = {d17, e17-r17, ll/2+l17, s17l}; - -Circle(1701) = {1702,1701,1703}; Circle(1705) = {1707,1706,1708}; Line(1709) = {1702,1707}; -Circle(1702) = {1703,1701,1704}; Circle(1706) = {1708,1706,1709}; Line(1710) = {1703,1708}; -Circle(1703) = {1704,1701,1705}; Circle(1707) = {1709,1706,1710}; Line(1711) = {1704,1709}; -Circle(1704) = {1705,1701,1702}; Circle(1708) = {1710,1706,1707}; Line(1712) = {1705,1710}; - -Circle(1713) = {1712,1711,1713}; Circle(1717) = {1717,1716,1718}; Line(1721) = {1712,1717}; -Circle(1714) = {1713,1711,1714}; Circle(1718) = {1718,1716,1719}; Line(1722) = {1713,1718}; -Circle(1715) = {1714,1711,1715}; Circle(1719) = {1719,1716,1720}; Line(1723) = {1714,1719}; -Circle(1716) = {1715,1711,1712}; Circle(1720) = {1720,1716,1717}; Line(1724) = {1715,1720}; - -Line Loop(1701) = {1702,1703,1704,1701}; Plane Surface(1721) = {1701}; -Line Loop(1702) = {1707,1708,1705,1706}; Plane Surface(1722) = {1702}; -Line Loop(1703) = {1716,1713,1714,1715}; Plane Surface(1723) = {1703}; -Line Loop(1704) = {1720,1717,1718,1719}; Plane Surface(1724) = {1704}; -Line Loop(1705) = {1708,-1709,-1704,1712}; Ruled Surface(1725) = {1705}; -Line Loop(1706) = {1712,-1707,-1711,1703}; Ruled Surface(1726) = {1706}; -Line Loop(1707) = {-1711,-1702,1710,1706}; Ruled Surface(1727) = {1707}; -Line Loop(1708) = {-1710,-1701,1709,1705}; Ruled Surface(1728) = {1708}; -Line Loop(1709) = {1721,-1720,-1724,1716}; Ruled Surface(1729) = {1709}; -Line Loop(1710) = {-1724,-1715,1723,1719}; Ruled Surface(1730) = {1710}; -Line Loop(1711) = {1723,-1718,-1722,1714}; Ruled Surface(1731) = {1711}; -Line Loop(1712) = {1722,-1717,-1721,1713}; Ruled Surface(1732) = {1712}; - -/* barreau 18 et 18' */ - -Point(1801) = {d18, e18, -ll/2, s18}; Point(1811) = {d18, -e18, ll/2, s18}; -Point(1802) = {d18+r18, e18, -ll/2, s18}; Point(1812) = {d18+r18, -e18, ll/2, s18}; -Point(1803) = {d18, e18+r18, -ll/2, s18}; Point(1813) = {d18, -e18+r18, ll/2, s18}; -Point(1804) = {d18-r18, e18, -ll/2, s18}; Point(1814) = {d18-r18, -e18, ll/2, s18}; -Point(1805) = {d18, e18-r18, -ll/2, s18}; Point(1815) = {d18, -e18-r18, ll/2, s18}; -Point(1806) = {d18, e18, -ll/2-l18, s18l}; Point(1816) = {d18, -e18, ll/2+l18, s18l}; -Point(1807) = {d18+r18, e18, -ll/2-l18, s18l}; Point(1817) = {d18+r18, -e18, ll/2+l18, s18l}; -Point(1808) = {d18, e18+r18, -ll/2-l18, s18l}; Point(1818) = {d18, -e18+r18, ll/2+l18, s18l}; -Point(1809) = {d18-r18, e18, -ll/2-l18, s18l}; Point(1819) = {d18-r18, -e18, ll/2+l18, s18l}; -Point(1810) = {d18, e18-r18, -ll/2-l18, s18l}; Point(1820) = {d18, -e18-r18, ll/2+l18, s18l}; - -Circle(1801) = {1802,1801,1803}; Circle(1805) = {1807,1806,1808}; Line(1809) = {1802,1807}; -Circle(1802) = {1803,1801,1804}; Circle(1806) = {1808,1806,1809}; Line(1810) = {1803,1808}; -Circle(1803) = {1804,1801,1805}; Circle(1807) = {1809,1806,1810}; Line(1811) = {1804,1809}; -Circle(1804) = {1805,1801,1802}; Circle(1808) = {1810,1806,1807}; Line(1812) = {1805,1810}; - -Circle(1813) = {1812,1811,1813}; Circle(1817) = {1817,1816,1818}; Line(1821) = {1812,1817}; -Circle(1814) = {1813,1811,1814}; Circle(1818) = {1818,1816,1819}; Line(1822) = {1813,1818}; -Circle(1815) = {1814,1811,1815}; Circle(1819) = {1819,1816,1820}; Line(1823) = {1814,1819}; -Circle(1816) = {1815,1811,1812}; Circle(1820) = {1820,1816,1817}; Line(1824) = {1815,1820}; - -Line Loop(1801) = {1802,1803,1804,1801}; Plane Surface(1821) = {1801}; -Line Loop(1802) = {1807,1808,1805,1806}; Plane Surface(1822) = {1802}; -Line Loop(1803) = {1816,1813,1814,1815}; Plane Surface(1823) = {1803}; -Line Loop(1804) = {1820,1817,1818,1819}; Plane Surface(1824) = {1804}; -Line Loop(1805) = {1808,-1809,-1804,1812}; Ruled Surface(1825) = {1805}; -Line Loop(1806) = {1812,-1807,-1811,1803}; Ruled Surface(1826) = {1806}; -Line Loop(1807) = {-1811,-1802,1810,1806}; Ruled Surface(1827) = {1807}; -Line Loop(1808) = {-1810,-1801,1809,1805}; Ruled Surface(1828) = {1808}; -Line Loop(1809) = {1821,-1820,-1824,1816}; Ruled Surface(1829) = {1809}; -Line Loop(1810) = {-1824,-1815,1823,1819}; Ruled Surface(1830) = {1810}; -Line Loop(1811) = {1823,-1818,-1822,1814}; Ruled Surface(1831) = {1811}; -Line Loop(1812) = {1822,-1817,-1821,1813}; Ruled Surface(1832) = {1812}; - -/* barreau 19 et 19' */ - -Point(1901) = {d19, -e19, -ll/2, s19}; Point(1911) = {d19, e19, ll/2, s19}; -Point(1902) = {d19+r19, -e19, -ll/2, s19}; Point(1912) = {d19+r19, e19, ll/2, s19}; -Point(1903) = {d19, -e19+r19, -ll/2, s19}; Point(1913) = {d19, e19+r19, ll/2, s19}; -Point(1904) = {d19-r19, -e19, -ll/2, s19}; Point(1914) = {d19-r19, e19, ll/2, s19}; -Point(1905) = {d19, -e19-r19, -ll/2, s19}; Point(1915) = {d19, e19-r19, ll/2, s19}; -Point(1906) = {d19, -e19, -ll/2-l19, s19l}; Point(1916) = {d19, e19, ll/2+l19, s19l}; -Point(1907) = {d19+r19, -e19, -ll/2-l19, s19l}; Point(1917) = {d19+r19, e19, ll/2+l19, s19l}; -Point(1908) = {d19, -e19+r19, -ll/2-l19, s19l}; Point(1918) = {d19, e19+r19, ll/2+l19, s19l}; -Point(1909) = {d19-r19, -e19, -ll/2-l19, s19l}; Point(1919) = {d19-r19, e19, ll/2+l19, s19l}; -Point(1910) = {d19, -e19-r19, -ll/2-l19, s19l}; Point(1920) = {d19, e19-r19, ll/2+l19, s19l}; - -Circle(1901) = {1902,1901,1903}; Circle(1905) = {1907,1906,1908}; Line(1909) = {1902,1907}; -Circle(1902) = {1903,1901,1904}; Circle(1906) = {1908,1906,1909}; Line(1910) = {1903,1908}; -Circle(1903) = {1904,1901,1905}; Circle(1907) = {1909,1906,1910}; Line(1911) = {1904,1909}; -Circle(1904) = {1905,1901,1902}; Circle(1908) = {1910,1906,1907}; Line(1912) = {1905,1910}; - -Circle(1913) = {1912,1911,1913}; Circle(1917) = {1917,1916,1918}; Line(1921) = {1912,1917}; -Circle(1914) = {1913,1911,1914}; Circle(1918) = {1918,1916,1919}; Line(1922) = {1913,1918}; -Circle(1915) = {1914,1911,1915}; Circle(1919) = {1919,1916,1920}; Line(1923) = {1914,1919}; -Circle(1916) = {1915,1911,1912}; Circle(1920) = {1920,1916,1917}; Line(1924) = {1915,1920}; - -Line Loop(1901) = {1902,1903,1904,1901}; Plane Surface(1921) = {1901}; -Line Loop(1902) = {1907,1908,1905,1906}; Plane Surface(1922) = {1902}; -Line Loop(1903) = {1916,1913,1914,1915}; Plane Surface(1923) = {1903}; -Line Loop(1904) = {1920,1917,1918,1919}; Plane Surface(1924) = {1904}; -Line Loop(1905) = {1908,-1909,-1904,1912}; Ruled Surface(1925) = {1905}; -Line Loop(1906) = {1912,-1907,-1911,1903}; Ruled Surface(1926) = {1906}; -Line Loop(1907) = {-1911,-1902,1910,1906}; Ruled Surface(1927) = {1907}; -Line Loop(1908) = {-1910,-1901,1909,1905}; Ruled Surface(1928) = {1908}; -Line Loop(1909) = {1921,-1920,-1924,1916}; Ruled Surface(1929) = {1909}; -Line Loop(1910) = {-1924,-1915,1923,1919}; Ruled Surface(1930) = {1910}; -Line Loop(1911) = {1923,-1918,-1922,1914}; Ruled Surface(1931) = {1911}; -Line Loop(1912) = {1922,-1917,-1921,1913}; Ruled Surface(1932) = {1912}; - -/* barreau 20 et 20' */ - -Point(2001) = {d20, e20, -ll/2, s20}; Point(2011) = {d20, -e20, ll/2, s20}; -Point(2002) = {d20+r20, e20, -ll/2, s20}; Point(2012) = {d20+r20, -e20, ll/2, s20}; -Point(2003) = {d20, e20+r20, -ll/2, s20}; Point(2013) = {d20, -e20+r20, ll/2, s20}; -Point(2004) = {d20-r20, e20, -ll/2, s20}; Point(2014) = {d20-r20, -e20, ll/2, s20}; -Point(2005) = {d20, e20-r20, -ll/2, s20}; Point(2015) = {d20, -e20-r20, ll/2, s20}; -Point(2006) = {d20, e20, -ll/2-l20, s20l}; Point(2016) = {d20, -e20, ll/2+l20, s20l}; -Point(2007) = {d20+r20, e20, -ll/2-l20, s20l}; Point(2017) = {d20+r20, -e20, ll/2+l20, s20l}; -Point(2008) = {d20, e20+r20, -ll/2-l20, s20l}; Point(2018) = {d20, -e20+r20, ll/2+l20, s20l}; -Point(2009) = {d20-r20, e20, -ll/2-l20, s20l}; Point(2019) = {d20-r20, -e20, ll/2+l20, s20l}; -Point(2010) = {d20, e20-r20, -ll/2-l20, s20l}; Point(2020) = {d20, -e20-r20, ll/2+l20, s20l}; - -Circle(2001) = {2002,2001,2003}; Circle(2005) = {2007,2006,2008}; Line(2009) = {2002,2007}; -Circle(2002) = {2003,2001,2004}; Circle(2006) = {2008,2006,2009}; Line(2010) = {2003,2008}; -Circle(2003) = {2004,2001,2005}; Circle(2007) = {2009,2006,2010}; Line(2011) = {2004,2009}; -Circle(2004) = {2005,2001,2002}; Circle(2008) = {2010,2006,2007}; Line(2012) = {2005,2010}; - -Circle(2013) = {2012,2011,2013}; Circle(2017) = {2017,2016,2018}; Line(2021) = {2012,2017}; -Circle(2014) = {2013,2011,2014}; Circle(2018) = {2018,2016,2019}; Line(2022) = {2013,2018}; -Circle(2015) = {2014,2011,2015}; Circle(2019) = {2019,2016,2020}; Line(2023) = {2014,2019}; -Circle(2016) = {2015,2011,2012}; Circle(2020) = {2020,2016,2017}; Line(2024) = {2015,2020}; - -Line Loop(2001) = {2002,2003,2004,2001}; Plane Surface(2021) = {2001}; -Line Loop(2002) = {2007,2008,2005,2006}; Plane Surface(2022) = {2002}; -Line Loop(2003) = {2016,2013,2014,2015}; Plane Surface(2023) = {2003}; -Line Loop(2004) = {2020,2017,2018,2019}; Plane Surface(2024) = {2004}; -Line Loop(2005) = {2008,-2009,-2004,2012}; Ruled Surface(2025) = {2005}; -Line Loop(2006) = {2012,-2007,-2011,2003}; Ruled Surface(2026) = {2006}; -Line Loop(2007) = {-2011,-2002,2010,2006}; Ruled Surface(2027) = {2007}; -Line Loop(2008) = {-2010,-2001,2009,2005}; Ruled Surface(2028) = {2008}; -Line Loop(2009) = {2021,-2020,-2024,2016}; Ruled Surface(2029) = {2009}; -Line Loop(2010) = {-2024,-2015,2023,2019}; Ruled Surface(2030) = {2010}; -Line Loop(2011) = {2023,-2018,-2022,2014}; Ruled Surface(2031) = {2011}; -Line Loop(2012) = {2022,-2017,-2021,2013}; Ruled Surface(2032) = {2012}; - -/* barreau 21 et 21' */ - -Point(2101) = {d21, -e21, -ll/2, s21}; Point(2111) = {d21, e21, ll/2, s21}; -Point(2102) = {d21+r21, -e21, -ll/2, s21}; Point(2112) = {d21+r21, e21, ll/2, s21}; -Point(2103) = {d21, -e21+r21, -ll/2, s21}; Point(2113) = {d21, e21+r21, ll/2, s21}; -Point(2104) = {d21-r21, -e21, -ll/2, s21}; Point(2114) = {d21-r21, e21, ll/2, s21}; -Point(2105) = {d21, -e21-r21, -ll/2, s21}; Point(2115) = {d21, e21-r21, ll/2, s21}; -Point(2106) = {d21, -e21, -ll/2-l21, s21l}; Point(2116) = {d21, e21, ll/2+l21, s21l}; -Point(2107) = {d21+r21, -e21, -ll/2-l21, s21l}; Point(2117) = {d21+r21, e21, ll/2+l21, s21l}; -Point(2108) = {d21, -e21+r21, -ll/2-l21, s21l}; Point(2118) = {d21, e21+r21, ll/2+l21, s21l}; -Point(2109) = {d21-r21, -e21, -ll/2-l21, s21l}; Point(2119) = {d21-r21, e21, ll/2+l21, s21l}; -Point(2110) = {d21, -e21-r21, -ll/2-l21, s21l}; Point(2120) = {d21, e21-r21, ll/2+l21, s21l}; - -Circle(2101) = {2102,2101,2103}; Circle(2105) = {2107,2106,2108}; Line(2109) = {2102,2107}; -Circle(2102) = {2103,2101,2104}; Circle(2106) = {2108,2106,2109}; Line(2110) = {2103,2108}; -Circle(2103) = {2104,2101,2105}; Circle(2107) = {2109,2106,2110}; Line(2111) = {2104,2109}; -Circle(2104) = {2105,2101,2102}; Circle(2108) = {2110,2106,2107}; Line(2112) = {2105,2110}; - -Circle(2113) = {2112,2111,2113}; Circle(2117) = {2117,2116,2118}; Line(2121) = {2112,2117}; -Circle(2114) = {2113,2111,2114}; Circle(2118) = {2118,2116,2119}; Line(2122) = {2113,2118}; -Circle(2115) = {2114,2111,2115}; Circle(2119) = {2119,2116,2120}; Line(2123) = {2114,2119}; -Circle(2116) = {2115,2111,2112}; Circle(2120) = {2120,2116,2117}; Line(2124) = {2115,2120}; - -Line Loop(2101) = {2102,2103,2104,2101}; Plane Surface(2121) = {2101}; -Line Loop(2102) = {2107,2108,2105,2106}; Plane Surface(2122) = {2102}; -Line Loop(2103) = {2116,2113,2114,2115}; Plane Surface(2123) = {2103}; -Line Loop(2104) = {2120,2117,2118,2119}; Plane Surface(2124) = {2104}; -Line Loop(2105) = {2108,-2109,-2104,2112}; Ruled Surface(2125) = {2105}; -Line Loop(2106) = {2112,-2107,-2111,2103}; Ruled Surface(2126) = {2106}; -Line Loop(2107) = {-2111,-2102,2110,2106}; Ruled Surface(2127) = {2107}; -Line Loop(2108) = {-2110,-2101,2109,2105}; Ruled Surface(2128) = {2108}; -Line Loop(2109) = {2121,-2120,-2124,2116}; Ruled Surface(2129) = {2109}; -Line Loop(2110) = {-2124,-2115,2123,2119}; Ruled Surface(2130) = {2110}; -Line Loop(2111) = {2123,-2118,-2122,2114}; Ruled Surface(2131) = {2111}; -Line Loop(2112) = {2122,-2117,-2121,2113}; Ruled Surface(2132) = {2112}; - -/* barreau 22 et 22' */ - -Point(2201) = {d22, e22, -ll/2, s22}; Point(2211) = {d22, -e22, ll/2, s22}; -Point(2202) = {d22+r22, e22, -ll/2, s22}; Point(2212) = {d22+r22, -e22, ll/2, s22}; -Point(2203) = {d22, e22+r22, -ll/2, s22}; Point(2213) = {d22, -e22+r22, ll/2, s22}; -Point(2204) = {d22-r22, e22, -ll/2, s22}; Point(2214) = {d22-r22, -e22, ll/2, s22}; -Point(2205) = {d22, e22-r22, -ll/2, s22}; Point(2215) = {d22, -e22-r22, ll/2, s22}; -Point(2206) = {d22, e22, -ll/2-l22, s22l}; Point(2216) = {d22, -e22, ll/2+l22, s22l}; -Point(2207) = {d22+r22, e22, -ll/2-l22, s22l}; Point(2217) = {d22+r22, -e22, ll/2+l22, s22l}; -Point(2208) = {d22, e22+r22, -ll/2-l22, s22l}; Point(2218) = {d22, -e22+r22, ll/2+l22, s22l}; -Point(2209) = {d22-r22, e22, -ll/2-l22, s22l}; Point(2219) = {d22-r22, -e22, ll/2+l22, s22l}; -Point(2210) = {d22, e22-r22, -ll/2-l22, s22l}; Point(2220) = {d22, -e22-r22, ll/2+l22, s22l}; - -Circle(2201) = {2202,2201,2203}; Circle(2205) = {2207,2206,2208}; Line(2209) = {2202,2207}; -Circle(2202) = {2203,2201,2204}; Circle(2206) = {2208,2206,2209}; Line(2210) = {2203,2208}; -Circle(2203) = {2204,2201,2205}; Circle(2207) = {2209,2206,2210}; Line(2211) = {2204,2209}; -Circle(2204) = {2205,2201,2202}; Circle(2208) = {2210,2206,2207}; Line(2212) = {2205,2210}; - -Circle(2213) = {2212,2211,2213}; Circle(2217) = {2217,2216,2218}; Line(2221) = {2212,2217}; -Circle(2214) = {2213,2211,2214}; Circle(2218) = {2218,2216,2219}; Line(2222) = {2213,2218}; -Circle(2215) = {2214,2211,2215}; Circle(2219) = {2219,2216,2220}; Line(2223) = {2214,2219}; -Circle(2216) = {2215,2211,2212}; Circle(2220) = {2220,2216,2217}; Line(2224) = {2215,2220}; - -Line Loop(2201) = {2202,2203,2204,2201}; Plane Surface(2221) = {2201}; -Line Loop(2202) = {2207,2208,2205,2206}; Plane Surface(2222) = {2202}; -Line Loop(2203) = {2216,2213,2214,2215}; Plane Surface(2223) = {2203}; -Line Loop(2204) = {2220,2217,2218,2219}; Plane Surface(2224) = {2204}; -Line Loop(2205) = {2208,-2209,-2204,2212}; Ruled Surface(2225) = {2205}; -Line Loop(2206) = {2212,-2207,-2211,2203}; Ruled Surface(2226) = {2206}; -Line Loop(2207) = {-2211,-2202,2210,2206}; Ruled Surface(2227) = {2207}; -Line Loop(2208) = {-2210,-2201,2209,2205}; Ruled Surface(2228) = {2208}; -Line Loop(2209) = {2221,-2220,-2224,2216}; Ruled Surface(2229) = {2209}; -Line Loop(2210) = {-2224,-2215,2223,2219}; Ruled Surface(2230) = {2210}; -Line Loop(2211) = {2223,-2218,-2222,2214}; Ruled Surface(2231) = {2211}; -Line Loop(2212) = {2222,-2217,-2221,2213}; Ruled Surface(2232) = {2212}; - -/* barreau x et x' */ -/* -Point(x01) = {dx, -e, -ll/2, sx}; Point(x11) = {dx, e, ll/2, sx}; -Point(x02) = {dx+rx, -e, -ll/2, sx}; Point(x12) = {dx+rx, e, ll/2, sx}; -Point(x03) = {dx, -e+rx, -ll/2, sx}; Point(x13) = {dx, e+rx, ll/2, sx}; -Point(x04) = {dx-rx, -e, -ll/2, sx}; Point(x14) = {dx-rx, e, ll/2, sx}; -Point(x05) = {dx, -e-rx, -ll/2, sx}; Point(x15) = {dx, e-rx, ll/2, sx}; -Point(x06) = {dx, -e, -ll/2-lx, sx}; Point(x16) = {dx, e, ll/2+lx, sx}; -Point(x07) = {dx+rx, -e, -ll/2-lx, sx}; Point(x17) = {dx+rx, e, ll/2+lx, sx}; -Point(x08) = {dx, -e+rx, -ll/2-lx, sx}; Point(x18) = {dx, e+rx, ll/2+lx, sx}; -Point(x09) = {dx-rx, -e, -ll/2-lx, sx}; Point(x19) = {dx-rx, e, ll/2+lx, sx}; -Point(x10) = {dx, -e-rx, -ll/2-lx, sx}; Point(x20) = {dx, e-rx, ll/2+lx, sx}; - -Circle(x01) = {x02,x01,x03}; Circle(x05) = {x07,x06,x08}; Line(x09) = {x02,x07}; -Circle(x02) = {x03,x01,x04}; Circle(x06) = {x08,x06,x09}; Line(x10) = {x03,x08}; -Circle(x03) = {x04,x01,x05}; Circle(x07) = {x09,x06,x10}; Line(x11) = {x04,x09}; -Circle(x04) = {x05,x01,x02}; Circle(x08) = {x10,x06,x07}; Line(x12) = {x05,x10}; - -Circle(x13) = {x12,x11,x13}; Circle(x17) = {x17,x16,x18}; Line(x21) = {x12,x17}; -Circle(x14) = {x13,x11,x14}; Circle(x18) = {x18,x16,x19}; Line(x22) = {x13,x18}; -Circle(x15) = {x14,x11,x15}; Circle(x19) = {x19,x16,x20}; Line(x23) = {x14,x19}; -Circle(x16) = {x15,x11,x12}; Circle(x20) = {x20,x16,x17}; Line(x24) = {x15,x20}; - -Line Loop(x01) = {x02,x03,x04,x01}; Plane Surface(x21) = {x01}; -Line Loop(x02) = {x07,x08,x05,x06}; Plane Surface(x22) = {x02}; -Line Loop(x03) = {x16,x13,x14,x15}; Plane Surface(x23) = {x03}; -Line Loop(x04) = {x20,x17,x18,x19}; Plane Surface(x24) = {x04}; -Line Loop(x05) = {x08,-x09,-x04,x12}; Ruled Surface(x25) = {x05}; -Line Loop(x06) = {x12,-x07,-x11,x03}; Ruled Surface(x26) = {x06}; -Line Loop(x07) = {-x11,-x02,x10,x06}; Ruled Surface(x27) = {x07}; -Line Loop(x08) = {-x10,-x01,x09,x05}; Ruled Surface(x28) = {x08}; -Line Loop(x09) = {x21,-x20,-x24,x16}; Ruled Surface(x29) = {x09}; -Line Loop(x10) = {-x24,-x15,x23,x19}; Ruled Surface(x30) = {x10}; -Line Loop(x11) = {x23,-x18,-x22,x14}; Ruled Surface(x31) = {x11}; -Line Loop(x12) = {x22,-x17,-x21,x13}; Ruled Surface(x32) = {x12}; -*/ - -/* surface longerons */ -Line Loop(3001) = {-13,-21,3,22}; Plane Surface(3101) = {3001}; /* ymax */ -Line Loop(3002) = {23,-11,-24,1}; Plane Surface(3102) = {3002}; /* ymax - eps */ -Line Loop(3003) = {-27,-7,26,17}; Plane Surface(3103) = {3003}; /* ymin + eps*/ -Line Loop(3004) = {25,-15,-28,5}; Plane Surface(3104) = {3004}; /* ymin */ -Line Loop(3005) = {3,4,1,2}; Plane Surface(3105) = {3005}; /* gauche haut */ -Line Loop(3006) = {7,8,5,6}; Plane Surface(3106) = {3006}; /* gauche bas */ -Line Loop(3007) = {11,12,13,14}; Plane Surface(3107) = {3007}; /* droite haut */ -Line Loop(3008) = {18,15,16,17}; Plane Surface(3108) = {3008}; /* droite bas */ - -Line Loop(3009) = {-23,-9,26,19}; Plane Surface(3109) = {3009}; /* bouchon proche */ -Line Loop(3010) = {24,-20,-27,10}; Plane Surface(3110) = {3010}; /* bouchon loin */ - -Line Loop(3011) = {-9,7,10,1}; Plane Surface(3111) = {3011}; /* input */ -Line Loop(3012) = {-11,-20,-17,19};Plane Surface(3112) = {3012}; /* output */ - -Line Loop(3013) = {-26,-6,25,16}; -Line Loop(3014) = {-28,-8,27,18}; -Line Loop(3015) = {-21,-2,23,12}; -Line Loop(3016) = {-24,-4,22,14}; -Plane Surface(3113) = {3013,203,403,603,803,1003,1203,1403,1603,1803,2003,2203} ; -Plane Surface(3114) = {3014,101,301,501,701,901,1101,1301,1501,1701,1901,2101}; -Plane Surface(3115) = {3015,103,303,503,703,903,1103,1303,1503,1703,1903,2103}; -Plane Surface(3116) = {3016,201,401,601,801,1001,1201,1401,1601,1801,2001,2201}; - -/* surface boite interne */ -Line Loop(4001) = {61,75,76,53}; Plane Surface(4101) = {4001}; -Line Loop(4002) = {-54,-61,56,80}; Plane Surface(4102) = {4002}; -Line Loop(4003) = {62,63,-54,75}; Plane Surface(4103) = {4003}; -Line Loop(4004) = {-57,-62,76,64}; Plane Surface(4104) = {4004}; -Line Loop(4005) = {-72,-64,53,56}; Plane Surface(4105) = {4005}; -Line Loop(4006) = {80,-63,57,72}; Plane Surface(4106) = {4006}; -Line Loop(4007) = {-52,-51,76,69}; Plane Surface(4107) = {4007}; -Line Loop(4008) = {55,-62,51,78}; Plane Surface(4108) = {4008}; -Line Loop(4009) = {74,-78,52,73}; Plane Surface(4109) = {4009}; -Line Loop(4010) = {-81,-73,-69,64};Plane Surface(4110) = {4010}; -Line Loop(4011) = {-57,-55,-74,81};Plane Surface(4111) = {4011}; -Line Loop(4012) = {67,75,51,59}; Plane Surface(4112) = {4012}; -Line Loop(4013) = {-71,-54,-67,70};Plane Surface(4113) = {4013}; -Line Loop(4014) = {70,79,-78,59}; Plane Surface(4114) = {4014}; -Line Loop(4015) = {55,63,71,79}; Plane Surface(4115) = {4015}; -Line Loop(4016) = {61,-67,-68,77}; Plane Surface(4116) = {4016}; -Line Loop(4017) = {70,82,-65,68}; Plane Surface(4117) = {4017}; -Line Loop(4018) = {-58,-65,77,56}; Plane Surface(4118) = {4018}; -Line Loop(4019) = {80,71,82,58}; Plane Surface(4119) = {4019}; -Line Loop(4020) = {68,-59,52,60}; Plane Surface(4120) = {4020}; -Line Loop(4021) = {66,-73,60,65}; Plane Surface(4121) = {4021}; -Line Loop(4022) = {74,-79,82,66}; Plane Surface(4122) = {4022}; -Line Loop(4023) = {-77,-60,-69,53};Plane Surface(4123) = {4023}; -Line Loop(4024) = {-72,-81,-66,58};Plane Surface(4124) = {4024}; - -/* volume bouchon */ - -Surface Loop(4125) = {3103,-3110,-3102,-3109,3111,3112}; -Complex Volume(4126) = {4125}; - -/* volume air */ - -Surface Loop(4127) = {4123,4116,-4101,4112,4107,4120}; -Surface Loop(4128) = {2229,2232,2231,-2230,-3113,-3109,-3115,3101,3107,3112,-3110,-3116,-3105,3111,-3106,-3114,3104,3108,-127,126,-125,122,-128,-327,326,-325,322,-328,-527,526,-525,522,-528,-727,726,-725,722,-728,-927,926,-925,922,-928,-1127,1126,-1125,1122,-1128,-1327,1326,-1325,1322,-1328,-1527,1526,-1525,1522,-1528,-1727,1726,-1725,1722,-1728,-1927,1926,-1925,1922,-1928,-2127,2126,-2125,2122,-2128,-227,226,-225,222,-228,-427,426,-425,422,-428,-627,626,-625,622,-628,-827,826,-825,822,-828,-1027,1026,-1025,1022,-1028,-1227,1226,-1225,1222,-1228,-1427,1426,-1425,1422,-1428,-1627,1626,-1625,1622,-1628,-1827,1826,-1825,1822,-1828,-2027,2026,-2025,2022,-2028,-2227,2226,-2225,2222,-2228,129,132,131,-130,124,329,332,331,-330,324,529,532,531,-530,524,729,732,731,-730,724,929,932,931,-930,924,1129,1132,1131,-1130,1124,1329,1332,1331,-1330,1324,1529,1532,1531,-1530,1524,1729,1732,1731,-1730,1724,1929,1932,1931,-1930,1924,2129,2132,2131,-2130,2124,229,232,231,-230,224,429,432,431,-430,424,629,632,631,-630,624,829,832,831,-830,824,1029,1032,1031,-1030,1024,1229,1232,1231,-1230,1224,1429,1432,1431,-1430,1424,1629,1632,1631,-1630,1624,1829,1832,1831,-1830,1824,2029,2032,2031,-2030,2024,2224}; -Complex Volume(4129) = {4127,4128}; - -/* volumes boite */ - -Surface Loop(4130) = {4101,4102,-4103,-4104,-4106,-4105}; Complex Volume(4131) = {4130}; /* Zm */ -Surface Loop(4132) = {4113,4115,-4108,-4103,4112,-4114}; Complex Volume(4133) = {4132}; /* Xm */ -Surface Loop(4134) = {4110,4111,-4104,4108,4107,4109}; Complex Volume(4135) = {4134}; /* Ym */ -Surface Loop(4136) = {4118,4119,-4102,4113,-4116,-4117}; Complex Volume(4137) = {4136}; /* Yp */ -Surface Loop(4138) = {4105,-4124,4110,-4121,-4123,-4118}; Complex Volume(4139) = {4138}; /* Xp */ -Surface Loop(4140) = {4121,-4122,4109,-4114,4117,-4120}; Complex Volume(4141) = {4140}; /* Zp */ - -/* Surface et volume boite externe */ - -Line Loop(7021) = {-7013,-80,7019,7011};Plane Surface(7022) = {7021}; -Line Loop(7023) = {-7014,63,7013,7004};Plane Surface(7024) = {7023}; -Line Loop(7025) = {7020,7012,-7014,57};Plane Surface(7026) = {7025}; -Line Loop(7027) = {-7009,-7020,72,7019};Plane Surface(7028) = {7027}; -Line Loop(7029) = {-7012,7009,7011,7004};Plane Surface(7030) = {7029}; -Line Loop(7031) = {-7015,55,7014,7001};Plane Surface(7032) = {7031}; -Line Loop(7033) = {-7016,79,7015,7002};Plane Surface(7034) = {7033}; -Line Loop(7035) = {-7013,71,7016,7003};Plane Surface(7036) = {7035}; -Line Loop(7037) = {7003,7004,7001,7002};Plane Surface(7038) = {7037}; -Line Loop(7039) = {-7018,81,7020,7008};Plane Surface(7040) = {7039}; -Line Loop(7041) = {-7017,66,7018,7006};Plane Surface(7042) = {7041}; -Line Loop(7043) = {-7017,58,7019,7010};Plane Surface(7044) = {7043}; -Line Loop(7045) = {-7010,-7009,7008,7006};Plane Surface(7046) = {7045}; -Line Loop(7047) = {7007,-7016,82,7017};Plane Surface(7048) = {7047}; -Line Loop(7049) = {-7011,7010,7007,7003};Plane Surface(7050) = {7049}; -Line Loop(7051) = {7015,7005,-7018,74};Plane Surface(7052) = {7051}; -Line Loop(7053) = {7005,-7008,7012,7001};Plane Surface(7054) = {7053}; -Line Loop(7055) = {7007,-7002,7005,7006};Plane Surface(7056) = {7055}; - -Surface Loop(7057) = {7036,7024,7032,7034,-4115,-7038}; Complex Volume(7058) = {7057}; /* XM */ -Surface Loop(7059) = {7046,7044,-7042,-4124,-7028,-7040}; Complex Volume(7060) = {7059}; /* XP */ -Surface Loop(7061) = {7054,-7052,-7032,-4111,-7026,7040}; Complex Volume(7062) = {7061}; /* YM */ -Surface Loop(7063) = {7036,-7022,-4119,7048,-7050,7044}; Complex Volume(7064) = {7063}; /* YP */ -Surface Loop(7065) = {4106,7022,7024,-7026,-7028,-7030}; Complex Volume(7066) = {7065}; /* ZM */ -Surface Loop(7067) = {4122,-7052,7034,-7048,7056,-7042}; Complex Volume(7068) = {7067}; /* ZP */ - -/* physical entities */ - -AIR = 8001 ; -XM = 8002 ; -XP = 8003 ; -YM = 8004 ; -YP = 8005 ; -ZM = 8006 ; -ZP = 8007 ; - -CLINPUT = 9001 ; -CLBOX = 9002 ; -CLLONG = 9003 ; -CLBARREAU = 9004 ; -CLBEM = 9005 ; - -Physical Volume (AIR) = {4126,4129, 4131,4133,4135,4137,4139,4141}; -Physical Volume (XM) = {7058}; -Physical Volume (XP) = {7060}; -Physical Volume (YM) = {7062}; -Physical Volume (YP) = {7064}; -Physical Volume (ZM) = {7066}; -Physical Volume (ZP) = {7068}; - -Physical Surface(CLINPUT) = {3111}; -Physical Surface(CLBEM) = {4119,4106,4115,4111,4122,4124}; -Physical Surface(CLBOX) = {7050,7030,7038,7054,7056,7046}; -Physical Surface(CLLONG) = {3102,3115,3101,3116,3105,3107,3103,3114,3104,3113,3108,3106}; -Physical Surface(CLBARREAU) = -{ - 122,125,126,127,128, - 124,129,130,131,132, - 222,225,226,227,228, - 224,229,230,231,232, - 322,325,326,327,328, - 324,329,330,331,332, - 422,425,426,427,428, - 424,429,430,431,432, - 522,525,526,527,528, - 524,529,530,531,532, - 622,625,626,627,628, - 624,629,630,631,632, - 722,725,726,727,728, - 724,729,730,731,732, - 822,825,826,827,828, - 824,829,830,831,832, - 922,925,926,927,928, - 924,929,930,931,932, - 1022,1025,1026,1027,1028, - 1024,1029,1030,1031,1032, - 1122,1125,1126,1127,1128, - 1124,1129,1130,1131,1132, - 1222,1225,1226,1227,1228, - 1224,1229,1230,1231,1232, - 1322,1325,1326,1327,1328, - 1324,1329,1330,1331,1332, - 1422,1425,1426,1427,1428, - 1424,1429,1430,1431,1432, - 1522,1525,1526,1527,1528, - 1524,1529,1530,1531,1532, - 1622,1625,1626,1627,1628, - 1624,1629,1630,1631,1632, - 1722,1725,1726,1727,1728, - 1724,1729,1730,1731,1732, - 1822,1825,1826,1827,1828, - 1824,1829,1830,1831,1832, - 1922,1925,1926,1927,1928, - 1924,1929,1930,1931,1932, - 2022,2025,2026,2027,2028, - 2024,2029,2030,2031,2032, - 2122,2125,2126,2127,2128, - 2124,2129,2130,2131,2132, - 2222,2225,2226,2227,2228, - 2224,2229,2230,2231,2232 - }; - diff --git a/benchmarks/bugs/bug_demi_cercles.geo b/benchmarks/bugs/bug_demi_cercles.geo deleted file mode 100644 index a42a3fe8cb5a67f71075833a15c6677c0644b37a..0000000000000000000000000000000000000000 --- a/benchmarks/bugs/bug_demi_cercles.geo +++ /dev/null @@ -1,13 +0,0 @@ -Point(1) = {0.0,0.0,0.0,.08}; -Point(2) = {-.5,0.0,0.0,.08}; -Point(3) = {.5,0.0,0.0,.08}; -Point(4) = {.5,-.5,0.0,.08}; -Point(5) = {-.5,-.5,0.0,.08}; -Circle(1) = {3,1,2} Plane {0,0,1}; -Line(2) = {3,4}; -Line(3) = {4,5}; -Line(4) = {5,2}; -Line Loop(5) = {3,4,-1,2}; -Plane Surface(6) = {5}; -Extrude Surface {6, {0,0,.5}}; -Coherence; diff --git a/benchmarks/bugs/bug_ruled.geo b/benchmarks/bugs/bug_ruled.geo deleted file mode 100644 index 0f5cb1cf6ec0247d696b749fffa02a51be32808e..0000000000000000000000000000000000000000 --- a/benchmarks/bugs/bug_ruled.geo +++ /dev/null @@ -1,19 +0,0 @@ - -// solved by setting the tolerance lower in sys3x3_with_tol (-> again, -// this arised from a wrong mean plane computation) - -//lc = 0.00001; -lc = 0.001; -Point(61) = {0.058, -0.005, 0, lc}; -Point(62) = {0.058, -0.005, 0.000625, lc}; -Point(64) = {0.058625, -0.005, 0, lc}; - -Point(85) = {0.058, -0.006, 0, lc}; -Point(86) = {0.058, -0.006, 0.000625, lc}; -Point(88) = {0.058625, -0.006, 0, lc}; -Line(1) = {86,62}; -Line(2) = {88,64}; -Circle(3) = {62,61,64}; -Circle(4) = {86,85,88}; -Line Loop(5) = {2,-3,-1,4}; -Ruled Surface(6) = {5}; diff --git a/benchmarks/bugs/bug_spline.geo b/benchmarks/bugs/bug_spline.geo deleted file mode 100644 index 08ad7be9296f97f78bcdd5117722aca0acbf3361..0000000000000000000000000000000000000000 --- a/benchmarks/bugs/bug_spline.geo +++ /dev/null @@ -1,11 +0,0 @@ -Point(1) = {0.0,0.0,0.0,.1}; -Point(2) = {1,0.0,0.0,.1}; -Point(3) = {1,1,0.0,.1}; -Point(4) = {.5,.5,1,.1}; -Point(5) = {1.2,.3,-.2,.1}; -Point(6) = {.5,0,.2,.1}; -Spline(1) = {1,4,3}; -Spline(2) = {3,5,2}; -Spline(3) = {2,6,1}; -Line Loop(4) = {2,3,1}; -Ruled Surface(5) = {4}; diff --git a/benchmarks/misc/500views.geo b/benchmarks/misc/500views.geo deleted file mode 100644 index 5da7a5873e86c834f2c0659bd54cf6fea6d8b038..0000000000000000000000000000000000000000 --- a/benchmarks/misc/500views.geo +++ /dev/null @@ -1,10 +0,0 @@ - -// this tests that we can still load as many views as we want. -// (even if only 200 are allowed in the GUI) - -For i In {0:250} - -Include "../../tutorial/view1.pos" ; -Include "../../tutorial/view2.pos" ; - -EndFor diff --git a/benchmarks/misc/animation.geo b/benchmarks/misc/animation.geo deleted file mode 100644 index a97770746b88365401cb0724f2a1200761d59071..0000000000000000000000000000000000000000 --- a/benchmarks/misc/animation.geo +++ /dev/null @@ -1,24 +0,0 @@ - -General.Trackball = 0; -General.RotationX = 0 ; -General.Color.Background = White ; -General.Color.Foreground = Red ; - -View[0].IntervalsType = 2 ; -View[0].RaiseZ = 0.1 ; - -For(1:300) - - General.RotationX += 10 ; - General.RotationY = General.RotationX / 3 ; - - View[0].TimeStep += - (View[0].TimeStep < View[0].NbTimeStep-1) ? 1 : 0 ; - - View[0].RaiseZ -= .01 ; - - Sleep 0.1; - Draw; - -EndFor - diff --git a/benchmarks/misc/discontinuous.pos b/benchmarks/misc/discontinuous.pos deleted file mode 100644 index e14879d9eea204cb65f6e5983d04f9b175efd9c5..0000000000000000000000000000000000000000 --- a/benchmarks/misc/discontinuous.pos +++ /dev/null @@ -1,164 +0,0 @@ -View "h" { -ST(0.33333333,1,0,0.11111111,1,0,0.21543771,0.73213875,0){1.8313023,1.8313023,1.8313023}; -ST(-1,-0.11111111,0,-1,-0.33333333,0,-0.73174678,-0.21478859,0){1.8328944,1.8328944,1.8328944}; -ST(-0.033284914,0.58770906,0,-0.31289368,0.69974287,0,-0.20381263,0.45499536,0){1.2467638,1.2467638,1.2467638}; -ST(-0.31289368,0.69974287,0,-0.41651431,0.41690828,0,-0.20381263,0.45499536,0){1.246735,1.246735,1.246735}; -ST(-0.31289368,0.69974287,0,-0.033284914,0.58770906,0,-0.18268367,0.83021756,0){1.4247917,1.4247917,1.4247917}; -ST(-0.78315651,-0.45008839,0,-0.67495489,-0.6652659,0,-0.50036547,-0.57239096,0){1.6709509,1.6709509,1.6709509}; -ST(-0.78315651,-0.45008839,0,-0.50036547,-0.57239096,0,-0.6528672,-0.35528873,0){1.5976438,1.5976438,1.5976438}; -ST(0.6657623,0.67544754,0,0.45062041,0.7833899,0,0.57309542,0.50075776,0){1.6720033,1.6720033,1.6720033}; -ST(0.57309542,0.50075776,0,0.45062041,0.7833899,0,0.3558391,0.65309297,0){1.5989111,1.5989111,1.5989111}; -ST(-0.31289368,0.69974287,0,-0.33333333,1,0,-0.50014045,0.79673357,0){1.8548935,1.8548935,1.8548935}; -ST(-1,0.33333333,0,-0.69937066,0.31351533,0,-0.79644003,0.50064951,0){1.8226088,1.8226088,1.8226088}; -ST(-0.41651431,0.41690828,0,-0.31289368,0.69974287,0,-0.4813337,0.60105459,0){1.3627269,1.3627269,1.3627269}; -ST(-0.73174678,-0.21478859,0,-1,-0.33333333,0,-0.78315651,-0.45008839,0){1.8085947,1.8085947,1.8085947}; -ST(0.33333333,1,0,0.21543771,0.73213875,0,0.45062041,0.7833899,0){1.8074496,1.8074496,1.8074496}; -ST(-0.17603462,0.24070348,0,-0.41651431,0.41690828,0,-0.40408872,0.18166381,0){0.860479,0.860479,0.860479}; -ST(-0.33333333,1,0,-0.31289368,0.69974287,0,-0.18268367,0.83021756,0){1.8123202,1.8123202,1.8123202}; -ST(-0.69937066,0.31351533,0,-1,0.33333333,0,-0.82994199,0.18319278,0){1.7959787,1.7959787,1.7959787}; -ST(0.25,0,0,0.5,0,0,0.37532516,0.23078833,0){0.76586185,0.76586185,0.76586185}; -ST(-0.41651431,0.41690828,0,-0.17603462,0.24070348,0,-0.20381263,0.45499536,0){0.88311527,0.88311527,0.88311527}; -ST(0,-0.5,0,0,-0.25,0,-0.23055166,-0.37480907,0){0.76369137,0.76369137,0.76369137}; -ST(-0.41651431,0.41690828,0,-0.61503712,0.4760032,0,-0.57195495,0.20229502,0){1.3257743,1.3257743,1.3257743}; -ST(-0.033284914,0.58770906,0,0.21543771,0.73213875,0,0.00024312215,0.80750011,0){1.4020328,1.4020328,1.4020328}; -ST(0.21543771,0.73213875,0,0.11111111,1,0,0.00024312215,0.80750011,0){1.7190227,1.7190227,1.7190227}; -ST(-1,-0.11111111,0,-0.73174678,-0.21478859,0,-0.80728146,0.00010990719,0){1.7213234,1.7213234,1.7213234}; -ST(-0.73174678,-0.21478859,0,-0.58754442,0.033885734,0,-0.80728146,0.00010990719,0){1.3869461,1.3869461,1.3869461}; -ST(0.21543771,0.73213875,0,-0.033284914,0.58770906,0,0.16368264,0.50834729,0){1.272058,1.272058,1.272058}; -ST(-0.58754442,0.033885734,0,-0.73174678,-0.21478859,0,-0.50815189,-0.16301678,0){1.2684127,1.2684127,1.2684127}; -ST(-0.82994199,0.18319278,0,-0.58754442,0.033885734,0,-0.57195495,0.20229502,0){1.420179,1.420179,1.420179}; -ST(-0.30131805,-0.11512588,0,-0.23055166,-0.37480907,0,-0.12484866,-0.12486094,0){0.61125261,0.61125261,0.61125261}; -ST(-0.61503712,0.4760032,0,-0.69937066,0.31351533,0,-0.57195495,0.20229502,0){1.3155254,1.3155254,1.3155254}; -ST(-0.033284914,0.58770906,0,0.00024312215,0.80750011,0,-0.18268367,0.83021756,0){1.4630244,1.4630244,1.4630244}; -ST(-0.80728146,0.00010990719,0,-0.58754442,0.033885734,0,-0.82994199,0.18319278,0){1.447258,1.447258,1.447258}; -ST(-0.23055166,-0.37480907,0,0,-0.25,0,-0.12484866,-0.12486094,0){0.57184012,0.57184012,0.57184012}; -ST(0,-0.5,0,-0.23055166,-0.37480907,0,-0.14376826,-0.62489354,0){1.0344464,1.0344464,1.0344464}; -ST(0.37532516,0.23078833,0,0.5,0,0,0.6251418,0.1440922,0){1.0276149,1.0276149,1.0276149}; -ST(-1,-1,0,-0.75,-1,0,-0.80632325,-0.81147186,0){2.5284279,2.5284279,2.5284279}; -ST(1,0.75,0,1,1,0,0.81205362,0.80656044,0){2.5291109,2.5291109,2.5291109}; -ST(-0.23055166,-0.37480907,0,-0.30131805,-0.11512588,0,-0.36172351,-0.27107089,0){0.69952818,0.69952818,0.69952818}; -ST(1,0,0,1,0.25,0,0.81149777,0.18885984,0){1.8795088,1.8795088,1.8795088}; -ST(-0.25,-1,0,0,-1,0,-0.18848435,-0.81110947,0){1.8790454,1.8790454,1.8790454}; -ST(0.75,0,0,1,0,0,0.81149777,0.18885984,0){1.7158747,1.7158747,1.7158747}; -ST(0,-1,0,0,-0.75,0,-0.18848435,-0.81110947,0){1.7176318,1.7176318,1.7176318}; -ST(0,0,0,0.25,0,0,0.21849817,0.16667219,0){0.28230937,0.28230937,0.28230937}; -ST(-1,1,0,-1,0.77777778,0,-0.80479144,0.80504612,0){2.5252509,2.5252509,2.5252509}; -ST(-0.77777778,1,0,-1,1,0,-0.80479144,0.80504612,0){2.5253427,2.5253427,2.5253427}; -ST(-0.010543702,0.17712261,0,0,0,0,0.21849817,0.16667219,0){0.28388128,0.28388128,0.28388128}; -ST(-1,-0.77777778,0,-1,-1,0,-0.80632325,-0.81147186,0){2.525268,2.525268,2.525268}; -ST(1,1,0,0.77777778,1,0,0.81205362,0.80656044,0){2.5257772,2.5257772,2.5257772}; -ST(-1,-0.33333333,0,-1,-0.55555556,0,-0.78315651,-0.45008839,0){2.0625544,2.0625544,2.0625544}; -ST(0.55555556,1,0,0.33333333,1,0,0.45062041,0.7833899,0){2.0632983,2.0632983,2.0632983}; -ST(-1,0.55555556,0,-1,0.33333333,0,-0.79644003,0.50064951,0){2.0612356,2.0612356,2.0612356}; -ST(-0.33333333,1,0,-0.55555556,1,0,-0.50014045,0.79673357,0){2.057698,2.057698,2.057698}; -ST(-0.14376826,-0.62489354,0,-0.23055166,-0.37480907,0,-0.3454447,-0.50093054,0){1.1512014,1.1512014,1.1512014}; -ST(0.37532516,0.23078833,0,0.6251418,0.1440922,0,0.50136923,0.34587735,0){1.1261277,1.1261277,1.1261277}; -ST(-0.40408872,0.18166381,0,-0.41651431,0.41690828,0,-0.57195495,0.20229502,0){1.1060132,1.1060132,1.1060132}; -ST(0.25,0,0,0.37532516,0.23078833,0,0.21849817,0.16667219,0){0.68222895,0.68222895,0.68222895}; -ST(-0.17603462,0.24070348,0,-0.40408872,0.18166381,0,-0.19007896,0.04567822,0){0.62137253,0.62137253,0.62137253}; -ST(0.37549445,0.49317282,0,0.57309542,0.50075776,0,0.3558391,0.65309297,0){1.4761854,1.4761854,1.4761854}; -ST(-0.50036547,-0.57239096,0,-0.49292178,-0.37477565,0,-0.6528672,-0.35528873,0){1.4773777,1.4773777,1.4773777}; -ST(-0.19007896,0.04567822,0,-0.40408872,0.18166381,0,-0.41767704,0.010770256,0){0.65374928,0.65374928,0.65374928}; -ST(-0.69937066,0.31351533,0,-0.82994199,0.18319278,0,-0.57195495,0.20229502,0){1.4501658,1.4501658,1.4501658}; -ST(-1,0.11111111,0,-1,-0.11111111,0,-0.80728146,0.00010990719,0){1.8675323,1.8675323,1.8675323}; -ST(0.11111111,1,0,-0.11111111,1,0,0.00024312215,0.80750011,0){1.8631253,1.8631253,1.8631253}; -ST(0.5,0,0,0.75,0,0,0.6251418,0.1440922,0){1.2740082,1.2740082,1.2740082}; -ST(0,-0.75,0,0,-0.5,0,-0.14376826,-0.62489354,0){1.2678382,1.2678382,1.2678382}; -ST(-0.5,-1,0,-0.25,-1,0,-0.35055989,-0.86268532,0){2.076819,2.076819,2.076819}; -ST(1,0.25,0,1,0.5,0,0.8630441,0.3509768,0){2.077962,2.077962,2.077962}; -ST(1,0.5,0,1,0.75,0,0.86780481,0.65024921,0){2.3134466,2.3134466,2.3134466}; -ST(-0.75,-1,0,-0.5,-1,0,-0.65003046,-0.86727585,0){2.3126243,2.3126243,2.3126243}; -ST(0.21543771,0.73213875,0,0.16368264,0.50834729,0,0.3558391,0.65309297,0){1.2912496,1.2912496,1.2912496}; -ST(-0.50815189,-0.16301678,0,-0.73174678,-0.21478859,0,-0.6528672,-0.35528873,0){1.2871156,1.2871156,1.2871156}; -ST(-0.11111111,1,0,-0.33333333,1,0,-0.18268367,0.83021756,0){1.9308042,1.9308042,1.9308042}; -ST(-1,0.33333333,0,-1,0.11111111,0,-0.82994199,0.18319278,0){1.9365169,1.9365169,1.9365169}; -ST(-0.029932551,0.40748663,0,-0.17603462,0.24070348,0,-0.010543702,0.17712261,0){0.59558032,0.59558032,0.59558032}; -ST(-0.78315651,-0.45008839,0,-1,-0.55555556,0,-0.84799337,-0.64190935,0){2.0731839,2.0731839,2.0731839}; -ST(-0.67495489,-0.6652659,0,-0.78315651,-0.45008839,0,-0.84799337,-0.64190935,0){1.9236857,1.9236857,1.9236857}; -ST(0.55555556,1,0,0.45062041,0.7833899,0,0.64252683,0.84854279,0){2.0743158,2.0743158,2.0743158}; -ST(0.45062041,0.7833899,0,0.6657623,0.67544754,0,0.64252683,0.84854279,0){1.9255181,1.9255181,1.9255181}; -ST(-0.49292178,-0.37477565,0,-0.50815189,-0.16301678,0,-0.6528672,-0.35528873,0){1.2518836,1.2518836,1.2518836}; -ST(0.16368264,0.50834729,0,0.37549445,0.49317282,0,0.3558391,0.65309297,0){1.2523606,1.2523606,1.2523606}; -ST(-0.73174678,-0.21478859,0,-0.78315651,-0.45008839,0,-0.6528672,-0.35528873,0){1.6287559,1.6287559,1.6287559}; -ST(0.45062041,0.7833899,0,0.21543771,0.73213875,0,0.3558391,0.65309297,0){1.6304464,1.6304464,1.6304464}; -ST(-0.50377808,-0.78884267,0,-0.32879066,-0.67072359,0,-0.50036547,-0.57239096,0){1.6411316,1.6411316,1.6411316}; -ST(-0.67495489,-0.6652659,0,-0.50377808,-0.78884267,0,-0.50036547,-0.57239096,0){1.7808541,1.7808541,1.7808541}; -ST(0.671223,0.32907594,0,0.78906409,0.5041626,0,0.57309542,0.50075776,0){1.6413945,1.6413945,1.6413945}; -ST(0.78906409,0.5041626,0,0.6657623,0.67544754,0,0.57309542,0.50075776,0){1.7821071,1.7821071,1.7821071}; -ST(-0.20381263,0.45499536,0,-0.17603462,0.24070348,0,-0.029932551,0.40748663,0){0.76607712,0.76607712,0.76607712}; -ST(0.6251418,0.1440922,0,0.671223,0.32907594,0,0.50136923,0.34587735,0){1.2739154,1.2739154,1.2739154}; -ST(-0.32879066,-0.67072359,0,-0.14376826,-0.62489354,0,-0.3454447,-0.50093054,0){1.2672515,1.2672515,1.2672515}; -ST(0.11583535,0.30145324,0,0.16368264,0.50834729,0,-0.029932551,0.40748663,0){0.83720618,0.83720618,0.83720618}; -ST(0.16368264,0.50834729,0,-0.033284914,0.58770906,0,-0.029932551,0.40748663,0){0.95602133,0.95602133,0.95602133}; -ST(-0.40408872,0.18166381,0,-0.58754442,0.033885734,0,-0.41767704,0.010770256,0){0.96625648,0.96625648,0.96625648}; -ST(-0.30131805,-0.11512588,0,-0.19007896,0.04567822,0,-0.41767704,0.010770256,0){0.61413965,0.61413965,0.61413965}; -ST(-0.58754442,0.033885734,0,-0.40408872,0.18166381,0,-0.57195495,0.20229502,0){1.0173008,1.0173008,1.0173008}; -ST(-0.49292178,-0.37477565,0,-0.3454447,-0.50093054,0,-0.36172351,-0.27107089,0){1.069825,1.069825,1.069825}; -ST(0.50136923,0.34587735,0,0.37549445,0.49317282,0,0.27170325,0.36204749,0){1.0744841,1.0744841,1.0744841}; -ST(-1,-0.55555556,0,-1,-0.77777778,0,-0.84799337,-0.64190935,0){2.3213805,2.3213805,2.3213805}; -ST(0.11583535,0.30145324,0,-0.029932551,0.40748663,0,-0.010543702,0.17712261,0){0.59631419,0.59631419,0.59631419}; -ST(0.77777778,1,0,0.55555556,1,0,0.64252683,0.84854279,0){2.3222499,2.3222499,2.3222499}; -ST(-0.19007896,0.04567822,0,0,0,0,-0.010543702,0.17712261,0){0.24507431,0.24507431,0.24507431}; -ST(-0.17603462,0.24070348,0,-0.19007896,0.04567822,0,-0.010543702,0.17712261,0){0.34098964,0.34098964,0.34098964}; -ST(-0.31289368,0.69974287,0,-0.50014045,0.79673357,0,-0.4813337,0.60105459,0){1.6538358,1.6538358,1.6538358}; -ST(-0.50014045,0.79673357,0,-0.66548665,0.66585508,0,-0.4813337,0.60105459,0){1.7451221,1.7451221,1.7451221}; -ST(-1,0.11111111,0,-0.80728146,0.00010990719,0,-0.82994199,0.18319278,0){1.8032441,1.8032441,1.8032441}; -ST(0.11583535,0.30145324,0,-0.010543702,0.17712261,0,0.21849817,0.16667219,0){0.4421974,0.4421974,0.4421974}; -ST(0.00024312215,0.80750011,0,-0.11111111,1,0,-0.18268367,0.83021756,0){1.7941061,1.7941061,1.7941061}; -ST(-0.3454447,-0.50093054,0,-0.23055166,-0.37480907,0,-0.36172351,-0.27107089,0){1.0906623,1.0906623,1.0906623}; -ST(0.37532516,0.23078833,0,0.50136923,0.34587735,0,0.27170325,0.36204749,0){1.0644457,1.0644457,1.0644457}; -ST(-0.66548665,0.66585508,0,-0.79644003,0.50064951,0,-0.61503712,0.4760032,0){1.7779659,1.7779659,1.7779659}; -ST(-0.50377808,-0.78884267,0,-0.5,-1,0,-0.35055989,-0.86268532,0){1.9852538,1.9852538,1.9852538}; -ST(1,0.5,0,0.78906409,0.5041626,0,0.8630441,0.3509768,0){1.9858966,1.9858966,1.9858966}; -ST(-0.55555556,1,0,-0.77777778,1,0,-0.65071255,0.86515077,0){2.3415147,2.3415147,2.3415147}; -ST(-1,0.77777778,0,-1,0.55555556,0,-0.86489107,0.65108436,0){2.341617,2.341617,2.341617}; -ST(-0.50377808,-0.78884267,0,-0.67495489,-0.6652659,0,-0.65003046,-0.86727585,0){1.9742304,1.9742304,1.9742304}; -ST(0.6657623,0.67544754,0,0.78906409,0.5041626,0,0.86780481,0.65024921,0){1.9755715,1.9755715,1.9755715}; -ST(-0.41651431,0.41690828,0,-0.4813337,0.60105459,0,-0.61503712,0.4760032,0){1.4582466,1.4582466,1.4582466}; -ST(-0.50815189,-0.16301678,0,-0.30131805,-0.11512588,0,-0.41767704,0.010770256,0){0.84776778,0.84776778,0.84776778}; -ST(-0.58754442,0.033885734,0,-0.50815189,-0.16301678,0,-0.41767704,0.010770256,0){0.9929078,0.9929078,0.9929078}; -ST(-0.033284914,0.58770906,0,-0.20381263,0.45499536,0,-0.029932551,0.40748663,0){0.96444138,0.96444138,0.96444138}; -ST(-0.5,-1,0,-0.50377808,-0.78884267,0,-0.65003046,-0.86727585,0){2.0924135,2.0924135,2.0924135}; -ST(0.78906409,0.5041626,0,1,0.5,0,0.86780481,0.65024921,0){2.0932413,2.0932413,2.0932413}; -ST(-0.66548665,0.66585508,0,-0.50014045,0.79673357,0,-0.65071255,0.86515077,0){1.9803852,1.9803852,1.9803852}; -ST(-0.79644003,0.50064951,0,-0.66548665,0.66585508,0,-0.86489107,0.65108436,0){1.9807017,1.9807017,1.9807017}; -ST(-0.79644003,0.50064951,0,-0.69937066,0.31351533,0,-0.61503712,0.4760032,0){1.6593956,1.6593956,1.6593956}; -ST(-0.32879066,-0.67072359,0,-0.50377808,-0.78884267,0,-0.35055989,-0.86268532,0){1.7163674,1.7163674,1.7163674}; -ST(0.75,0,0,0.81149777,0.18885984,0,0.6251418,0.1440922,0){1.486239,1.486239,1.486239}; -ST(0.81149777,0.18885984,0,0.671223,0.32907594,0,0.6251418,0.1440922,0){1.4851034,1.4851034,1.4851034}; -ST(-0.18848435,-0.81110947,0,0,-0.75,0,-0.14376826,-0.62489354,0){1.4824274,1.4824274,1.4824274}; -ST(-0.32879066,-0.67072359,0,-0.18848435,-0.81110947,0,-0.14376826,-0.62489354,0){1.4813626,1.4813626,1.4813626}; -ST(0.78906409,0.5041626,0,0.671223,0.32907594,0,0.8630441,0.3509768,0){1.7162358,1.7162358,1.7162358}; -ST(-1,-0.77777778,0,-0.80632325,-0.81147186,0,-0.84799337,-0.64190935,0){2.3072652,2.3072652,2.3072652}; -ST(0.81205362,0.80656044,0,0.77777778,1,0,0.64252683,0.84854279,0){2.3080751,2.3080751,2.3080751}; -ST(-0.4813337,0.60105459,0,-0.66548665,0.66585508,0,-0.61503712,0.4760032,0){1.6491063,1.6491063,1.6491063}; -ST(-0.30131805,-0.11512588,0,-0.50815189,-0.16301678,0,-0.36172351,-0.27107089,0){0.86513624,0.86513624,0.86513624}; -ST(-0.50815189,-0.16301678,0,-0.49292178,-0.37477565,0,-0.36172351,-0.27107089,0){1.0704865,1.0704865,1.0704865}; -ST(0.16368264,0.50834729,0,0.11583535,0.30145324,0,0.27170325,0.36204749,0){0.85284266,0.85284266,0.85284266}; -ST(0.37549445,0.49317282,0,0.16368264,0.50834729,0,0.27170325,0.36204749,0){1.0755674,1.0755674,1.0755674}; -ST(-0.67495489,-0.6652659,0,-0.80632325,-0.81147186,0,-0.65003046,-0.86727585,0){2.0917259,2.0917259,2.0917259}; -ST(0.81205362,0.80656044,0,0.6657623,0.67544754,0,0.86780481,0.65024921,0){2.0929865,2.0929865,2.0929865}; -ST(-0.66548665,0.66585508,0,-0.80479144,0.80504612,0,-0.86489107,0.65108436,0){2.0813257,2.0813257,2.0813257}; -ST(-0.80479144,0.80504612,0,-0.66548665,0.66585508,0,-0.65071255,0.86515077,0){2.0814938,2.0814938,2.0814938}; -ST(-0.49292178,-0.37477565,0,-0.50036547,-0.57239096,0,-0.3454447,-0.50093054,0){1.2701799,1.2701799,1.2701799}; -ST(0.57309542,0.50075776,0,0.37549445,0.49317282,0,0.50136923,0.34587735,0){1.2742436,1.2742436,1.2742436}; -ST(-0.18848435,-0.81110947,0,-0.32879066,-0.67072359,0,-0.35055989,-0.86268532,0){1.6604334,1.6604334,1.6604334}; -ST(0.671223,0.32907594,0,0.81149777,0.18885984,0,0.8630441,0.3509768,0){1.6605315,1.6605315,1.6605315}; -ST(-0.50014045,0.79673357,0,-0.55555556,1,0,-0.65071255,0.86515077,0){2.1108419,2.1108419,2.1108419}; -ST(-1,0.55555556,0,-0.79644003,0.50064951,0,-0.86489107,0.65108436,0){2.1128912,2.1128912,2.1128912}; -ST(0,0,0,-0.19007896,0.04567822,0,-0.12484866,-0.12486094,0){0.22854898,0.22854898,0.22854898}; -ST(-0.19007896,0.04567822,0,-0.30131805,-0.11512588,0,-0.12484866,-0.12486094,0){0.43242437,0.43242437,0.43242437}; -ST(-0.77777778,1,0,-0.80479144,0.80504612,0,-0.65071255,0.86515077,0){2.3203869,2.3203869,2.3203869}; -ST(-0.80479144,0.80504612,0,-1,0.77777778,0,-0.86489107,0.65108436,0){2.3205228,2.3205228,2.3205228}; -ST(-0.80632325,-0.81147186,0,-0.67495489,-0.6652659,0,-0.84799337,-0.64190935,0){2.1028015,2.1028015,2.1028015}; -ST(0.6657623,0.67544754,0,0.81205362,0.80656044,0,0.64252683,0.84854279,0){2.104332,2.104332,2.104332}; -ST(0.21849817,0.16667219,0,0.37532516,0.23078833,0,0.27170325,0.36204749,0){0.74577411,0.74577411,0.74577411}; -ST(0.11583535,0.30145324,0,0.21849817,0.16667219,0,0.27170325,0.36204749,0){0.70861502,0.70861502,0.70861502}; -ST(-0.25,-1,0,-0.18848435,-0.81110947,0,-0.35055989,-0.86268532,0){1.8551484,1.8551484,1.8551484}; -ST(0.671223,0.32907594,0,0.57309542,0.50075776,0,0.50136923,0.34587735,0){1.4067439,1.4067439,1.4067439}; -ST(0.81149777,0.18885984,0,1,0.25,0,0.8630441,0.3509768,0){1.855982,1.855982,1.855982}; -ST(-0.50036547,-0.57239096,0,-0.32879066,-0.67072359,0,-0.3454447,-0.50093054,0){1.4003681,1.4003681,1.4003681}; -ST(-0.80632325,-0.81147186,0,-0.75,-1,0,-0.65003046,-0.86727585,0){2.3091204,2.3091204,2.3091204}; -ST(1,0.75,0,0.81205362,0.80656044,0,0.86780481,0.65024921,0){2.3096666,2.3096666,2.3096666}; -ST(0,-0.25,0,0,0,0,-0.12484866,-0.12486094,0){0.24400114,0.24400114,0.24400114}; -}; diff --git a/benchmarks/misc/displacement.pos b/benchmarks/misc/displacement.pos deleted file mode 100644 index 42641a3232f67961d613d3b7eac805a313c1159d..0000000000000000000000000000000000000000 --- a/benchmarks/misc/displacement.pos +++ /dev/null @@ -1,164 +0,0 @@ -View "phiz" { -VT(0.12769368,0.48850822,0,0.093878652,0.21606276,0,0.30170882,0.31749481,0){0,0,0.23608739,0,0,0.039927481,0,0,0.18127988}; -VT(-0.5421228,-0.11260696,0,-0.76457788,-0.080568783,0,-0.7261901,-0.30622169,0){0,0,0.29334969,0,0,0.58004414,0,0,0.60510213}; -VT(0.30679003,0.71918631,0,0.043011361,0.73950988,0,0.12769368,0.48850822,0){0,0,0.59405992,0,0,0.53333204,0,0,0.23608739}; -VT(1,0.6,0,0.84832091,0.84974074,0,0.69212735,0.70317181,0){0,0,1.3402922,0,0,1.4269182,0,0,0.95455084}; -VT(-1,-0.6,0,-0.84971248,-0.848268,0,-0.70289226,-0.69159403,0){0,0,1.3413455,0,0,1.4267533,0,0,0.95344494}; -VT(-0.29614927,-0.68911075,0,-0.15018816,-0.84801006,0,0,-0.6,0){0,0,0.54324782,0,0,0.7271253,0,0,0.34037099}; -VT(-0.4,-1,0,-0.15018816,-0.84801006,0,-0.29614927,-0.68911075,0){0,0,1.1400056,0,0,0.7271253,0,0,0.54324782}; -VT(-0.70289226,-0.69159403,0,-0.84971248,-0.848268,0,-0.6,-1,0){0,0,0.95344494,0,0,1.4267533,0,0,1.3402345}; -VT(0.68845064,0.29742567,0,0.84793591,0.15031831,0,1,0.4,0){0,0,0.54289424,0,0,0.72705167,0,0,1.1400094}; -VT(0.6,0,0,0.84793591,0.15031831,0,0.68845064,0.29742567,0){0,0,0.34012917,0,0,0.72705167,0,0,0.54289424}; -VT(0.69212735,0.70317181,0,0.84832091,0.84974074,0,0.6,1,0){0,0,0.95455084,0,0,1.4269182,0,0,1.3413909}; -VT(0.12769368,0.48850822,0,0.37038152,0.50386299,0,0.30679003,0.71918631,0){0,0,0.23608739,0,0,0.38031894,0,0,0.59405992}; -VT(0.30170882,0.31749481,0,0.37038152,0.50386299,0,0.12769368,0.48850822,0){0,0,0.18127988,0,0,0.38031894,0,0,0.23608739}; -VT(-0.7261901,-0.30622169,0,-0.48993004,-0.34456746,0,-0.5421228,-0.11260696,0){0,0,0.60510213,0,0,0.34565331,0,0,0.29334969}; -VT(0.30679003,0.71918631,0,0.50076357,0.81140902,0,0.4,1,0){0,0,0.59405992,0,0,0.90095104,0,0,1.144558}; -VT(-1,-0.4,0,-0.81220583,-0.50021121,0,-0.7261901,-0.30622169,0){0,0,1.1449524,0,0,0.90166921,0,0,0.60510213}; -VT(0.4,1,0,0.19528035,0.88414987,0,0.30679003,0.71918631,0){0,0,1.144558,0,0,0.8102247,0,0,0.59405992}; -VT(-0.7261901,-0.30622169,0,-0.88909151,-0.20108716,0,-1,-0.4,0){0,0,0.60510213,0,0,0.82235965,0,0,1.1449524}; -VT(0.69212735,0.70317181,0,0.79278602,0.50016561,0,1,0.6,0){0,0,0.95455084,0,0,0.86850078,0,0,1.3402922}; -VT(1,0.4,0,0.79278602,0.50016561,0,0.68845064,0.29742567,0){0,0,1.1400094,0,0,0.86850078,0,0,0.54289424}; -VT(-0.29614927,-0.68911075,0,-0.49970002,-0.79249012,0,-0.4,-1,0){0,0,0.54324782,0,0,0.86750281,0,0,1.1400056}; -VT(-0.6,-1,0,-0.49970002,-0.79249012,0,-0.70289226,-0.69159403,0){0,0,1.3402345,0,0,0.86750281,0,0,0.95344494}; -VT(-0.097376676,0.37012027,0,0.093878652,0.21606276,0,0.12769368,0.48850822,0){0,0,0.13384161,0,0,0.039927481,0,0,0.23608739}; -VT(0.46505257,0.18920403,0,0.28472232,0.147503,0,0.4,0,0){0,0,0.24153004,0,0,0.095759319,0,0,0.15186115}; -VT(0.30170882,0.31749481,0,0.28472232,0.147503,0,0.46505257,0.18920403,0){0,0,0.18127988,0,0,0.095759319,0,0,0.24153004}; -VT(-0.5069458,0.52411158,0,-0.28048336,0.5090566,0,-0.41369197,0.73184535,0){0,0,0.52086505,0,0,0.32465226,0,0,0.69052686}; -VT(-0.41369197,0.73184535,0,-0.28048336,0.5090566,0,-0.18314711,0.69947345,0){0,0,0.69052686,0,0,0.32465226,0,0,0.51294111}; -VT(0,-0.6,0,-0.18237993,-0.47217714,0,-0.29614927,-0.68911075,0){0,0,0.34037099,0,0,0.24651427,0,0,0.54324782}; -VT(-0.70289226,-0.69159403,0,-0.81220583,-0.50021121,0,-1,-0.6,0){0,0,0.95344494,0,0,0.90166921,0,0,1.3413455}; -VT(0.68845064,0.29742567,0,0.46505257,0.18920403,0,0.6,0,0){0,0,0.54289424,0,0,0.24153004,0,0,0.34012917}; -VT(0.6,1,0,0.50076357,0.81140902,0,0.69212735,0.70317181,0){0,0,1.3413909,0,0,0.90095104,0,0,0.95455084}; -VT(-0.72720733,0.43583582,0,-0.5069458,0.52411158,0,-0.65294722,0.66226976,0){0,0,0.70414594,0,0,0.52086505,0,0,0.85297032}; -VT(-0.72720733,0.43583582,0,-0.5562586,0.36467285,0,-0.5069458,0.52411158,0){0,0,0.70414594,0,0,0.43706793,0,0,0.52086505}; -VT(1,0.8,0,0.84832091,0.84974074,0,1,0.6,0){0,0,1.6351217,0,0,1.4269182,0,0,1.3402922}; -VT(-1,-0.8,0,-0.84971248,-0.848268,0,-1,-0.6,0){0,0,1.6350425,0,0,1.4267533,0,0,1.3413455}; -VT(-0.6,-1,0,-0.84971248,-0.848268,0,-0.8,-1,0){0,0,1.3402345,0,0,1.4267533,0,0,1.6351469}; -VT(0,-0.6,0,-0.15018816,-0.84801006,0,0,-0.8,0){0,0,0.34037099,0,0,0.7271253,0,0,0.63521318}; -VT(-0.2,-1,0,-0.15018816,-0.84801006,0,-0.4,-1,0){0,0,1.0350883,0,0,0.7271253,0,0,1.1400056}; -VT(0.8,0,0,0.84793591,0.15031831,0,0.6,0,0){0,0,0.63526591,0,0,0.72705167,0,0,0.34012917}; -VT(1,0.4,0,0.84793591,0.15031831,0,1,0.2,0){0,0,1.1400094,0,0,0.72705167,0,0,1.0350863}; -VT(0.6,1,0,0.84832091,0.84974074,0,0.8,1,0){0,0,1.3413909,0,0,1.4269182,0,0,1.6350174}; -VT(0,0,0,-0.13062954,0.15354208,0,-0.20237428,-0.094234203,0){0,0,-0.011188789,0,0,0.028273334,0,0,0.035308585}; -VT(-0.20237428,-0.094234203,0,-0.13062954,0.15354208,0,-0.31649602,0.11487776,0){0,0,0.035308585,0,0,0.028273334,0,0,0.10378379}; -VT(0.58125547,0.50080114,0,0.79278602,0.50016561,0,0.69212735,0.70317181,0){0,0,0.5792341,0,0,0.86850078,0,0,0.95455084}; -VT(-0.49856645,-0.57864874,0,-0.49970002,-0.79249012,0,-0.29614927,-0.68911075,0){0,0,0.57334145,0,0,0.86750281,0,0,0.54324782}; -VT(0.68845064,0.29742567,0,0.79278602,0.50016561,0,0.58125547,0.50080114,0){0,0,0.54289424,0,0,0.86850078,0,0,0.5792341}; -VT(-0.70289226,-0.69159403,0,-0.49970002,-0.79249012,0,-0.49856645,-0.57864874,0){0,0,0.95344494,0,0,0.86750281,0,0,0.57334145}; -VT(-0.18314711,0.69947345,0,-0.078017137,0.55659901,0,0.043011361,0.73950988,0){0,0,0.51294111,0,0,0.30773002,0,0,0.53333204}; -VT(0.69212735,0.70317181,0,0.48833461,0.64651393,0,0.58125547,0.50080114,0){0,0,0.95455084,0,0,0.65057086,0,0,0.5792341}; -VT(0.58125547,0.50080114,0,0.48102844,0.36070204,0,0.68845064,0.29742567,0){0,0,0.5792341,0,0,0.35498666,0,0,0.54289424}; -VT(-0.29614927,-0.68911075,0,-0.35285213,-0.48044777,0,-0.49856645,-0.57864874,0){0,0,0.54324782,0,0,0.34856344,0,0,0.57334145}; -VT(-0.49856645,-0.57864874,0,-0.64504271,-0.48377429,0,-0.70289226,-0.69159403,0){0,0,0.57334145,0,0,0.64319256,0,0,0.95344494}; -VT(0.043011361,0.73950988,0,-0.11821516,0.85398875,0,-0.18314711,0.69947345,0){0,0,0.53333204,0,0,0.73703289,0,0,0.51294111}; -VT(0.2,0,0,0.093878652,0.21606276,0,0,0,0){0,0,0.029318307,0,0,0.039927481,0,0,-0.011188789}; -VT(-1,0,0,-0.88909151,-0.20108716,0,-0.76457788,-0.080568783,0){0,0,0.98567746,0,0,0.82235965,0,0,0.58004414}; -VT(0.043011361,0.73950988,0,0.19528035,0.88414987,0,0,1,0){0,0,0.53333204,0,0,0.8102247,0,0,0.98599093}; -VT(0.2,0,0,0.28472232,0.147503,0,0.093878652,0.21606276,0){0,0,0.029318307,0,0,0.095759319,0,0,0.039927481}; -VT(0.12769368,0.48850822,0,-0.078017137,0.55659901,0,-0.097376676,0.37012027,0){0,0,0.23608739,0,0,0.30773002,0,0,0.13384161}; -VT(-1,0.8,0,-0.81500321,0.8168568,0,-1,1,0){0,0,1.6296302,0,0,1.3205926,0,0,1.9856788}; -VT(-1,1,0,-0.81500321,0.8168568,0,-0.8,1,0){0,0,1.9856788,0,0,1.3205926,0,0,1.6295719}; -VT(-1,-0.2,0,-0.88909151,-0.20108716,0,-1,0,0){0,0,1.035932,0,0,0.82235965,0,0,0.98567746}; -VT(0,1,0,0.19528035,0.88414987,0,0.2,1,0){0,0,0.98599093,0,0,0.8102247,0,0,1.0361451}; -VT(0.043011361,0.73950988,0,-0.078017137,0.55659901,0,0.12769368,0.48850822,0){0,0,0.53333204,0,0,0.30773002,0,0,0.23608739}; -VT(-1,0.8,0,-0.86037128,0.61481672,0,-0.81500321,0.8168568,0){0,0,1.6296302,0,0,1.106042,0,0,1.3205926}; -VT(-0.81500321,0.8168568,0,-0.61026761,0.86248481,0,-0.8,1,0){0,0,1.3205926,0,0,1.1041067,0,0,1.6295719}; -VT(-1,0.6,0,-0.86037128,0.61481672,0,-1,0.8,0){0,0,1.3548322,0,0,1.106042,0,0,1.6296302}; -VT(-0.8,1,0,-0.61026761,0.86248481,0,-0.6,1,0){0,0,1.6295719,0,0,1.1041067,0,0,1.3548692}; -VT(-0.4,1,0,-0.61026761,0.86248481,0,-0.41369197,0.73184535,0){0,0,1.1445323,0,0,1.1041067,0,0,0.69052686}; -VT(-0.72720733,0.43583582,0,-0.86037128,0.61481672,0,-1,0.4,0){0,0,0.70414594,0,0,1.106042,0,0,1.1437749}; -VT(0,0,0,-0.20237428,-0.094234203,0,0,-0.2,0){0,0,-0.011188789,0,0,0.035308585,0,0,0.030108895}; -VT(0.50076357,0.81140902,0,0.48833461,0.64651393,0,0.69212735,0.70317181,0){0,0,0.90095104,0,0,0.65057086,0,0,0.95455084}; -VT(0.68845064,0.29742567,0,0.48102844,0.36070204,0,0.46505257,0.18920403,0){0,0,0.54289424,0,0,0.35498666,0,0,0.24153004}; -VT(-0.70289226,-0.69159403,0,-0.64504271,-0.48377429,0,-0.81220583,-0.50021121,0){0,0,0.95344494,0,0,0.64319256,0,0,0.90166921}; -VT(-0.18237993,-0.47217714,0,-0.35285213,-0.48044777,0,-0.29614927,-0.68911075,0){0,0,0.24651427,0,0,0.34856344,0,0,0.54324782}; -VT(-0.76457788,-0.080568783,0,-0.88909151,-0.20108716,0,-0.7261901,-0.30622169,0){0,0,0.58004414,0,0,0.82235965,0,0,0.60510213}; -VT(0.30679003,0.71918631,0,0.19528035,0.88414987,0,0.043011361,0.73950988,0){0,0,0.59405992,0,0,0.8102247,0,0,0.53333204}; -VT(-0.6,1,0,-0.61026761,0.86248481,0,-0.4,1,0){0,0,1.3548692,0,0,1.1041067,0,0,1.1445323}; -VT(-1,0.4,0,-0.86037128,0.61481672,0,-1,0.6,0){0,0,1.1437749,0,0,1.106042,0,0,1.3548322}; -VT(1,0.6,0,0.79278602,0.50016561,0,1,0.4,0){0,0,1.3402922,0,0,0.86850078,0,0,1.1400094}; -VT(-0.4,-1,0,-0.49970002,-0.79249012,0,-0.6,-1,0){0,0,1.1400056,0,0,0.86750281,0,0,1.3402345}; -VT(-0.76457788,-0.080568783,0,-0.81920417,0.10649619,0,-1,0,0){0,0,0.58004414,0,0,0.67320716,0,0,0.98567746}; -VT(0,1,0,-0.11821516,0.85398875,0,0.043011361,0.73950988,0){0,0,0.98599093,0,0,0.73703289,0,0,0.53333204}; -VT(-0.097376676,0.37012027,0,-0.13062954,0.15354208,0,0.093878652,0.21606276,0){0,0,0.13384161,0,0,0.028273334,0,0,0.039927481}; -VT(0.093878652,0.21606276,0,0.28472232,0.147503,0,0.30170882,0.31749481,0){0,0,0.039927481,0,0,0.095759319,0,0,0.18127988}; -VT(-0.5421228,-0.11260696,0,-0.65059508,0.041512801,0,-0.76457788,-0.080568783,0){0,0,0.29334969,0,0,0.41885836,0,0,0.58004414}; -VT(0.093878652,0.21606276,0,-0.13062954,0.15354208,0,0,0,0){0,0,0.039927481,0,0,0.028273334,0,0,-0.011188789}; -VT(0.37038152,0.50386299,0,0.48102844,0.36070204,0,0.58125547,0.50080114,0){0,0,0.38031894,0,0,0.35498666,0,0,0.5792341}; -VT(0.58125547,0.50080114,0,0.48833461,0.64651393,0,0.37038152,0.50386299,0){0,0,0.5792341,0,0,0.65057086,0,0,0.38031894}; -VT(-0.49856645,-0.57864874,0,-0.35285213,-0.48044777,0,-0.48993004,-0.34456746,0){0,0,0.57334145,0,0,0.34856344,0,0,0.34565331}; -VT(-0.48993004,-0.34456746,0,-0.64504271,-0.48377429,0,-0.49856645,-0.57864874,0){0,0,0.34565331,0,0,0.64319256,0,0,0.57334145}; -VT(0.6,0,0,0.46505257,0.18920403,0,0.4,0,0){0,0,0.34012917,0,0,0.24153004,0,0,0.15186115}; -VT(0.4,1,0,0.50076357,0.81140902,0,0.6,1,0){0,0,1.144558,0,0,0.90095104,0,0,1.3413909}; -VT(-1,-0.6,0,-0.81220583,-0.50021121,0,-1,-0.4,0){0,0,1.3413455,0,0,0.90166921,0,0,1.1449524}; -VT(0,-0.4,0,-0.18237993,-0.47217714,0,0,-0.6,0){0,0,0.15276498,0,0,0.24651427,0,0,0.34037099}; -VT(-1,0.4,0,-0.84092818,0.27169996,0,-0.72720733,0.43583582,0){0,0,1.1437749,0,0,0.77335554,0,0,0.70414594}; -VT(-0.41369197,0.73184535,0,-0.26434268,0.85422499,0,-0.4,1,0){0,0,0.69052686,0,0,0.79358086,0,0,1.1445323}; -VT(-0.72720733,0.43583582,0,-0.84092818,0.27169996,0,-0.65243693,0.21794688,0){0,0,0.70414594,0,0,0.77335554,0,0,0.46262006}; -VT(-0.18314711,0.69947345,0,-0.26434268,0.85422499,0,-0.41369197,0.73184535,0){0,0,0.51294111,0,0,0.79358086,0,0,0.69052686}; -VT(-0.65294722,0.66226976,0,-0.5069458,0.52411158,0,-0.41369197,0.73184535,0){0,0,0.85297032,0,0,0.52086505,0,0,0.69052686}; -VT(0,-0.4,0,-0.13561503,-0.2979777,0,-0.18237993,-0.47217714,0){0,0,0.15276498,0,0,0.099810723,0,0,0.24651427}; -VT(-0.65243693,0.21794688,0,-0.5562586,0.36467285,0,-0.72720733,0.43583582,0){0,0,0.46262006,0,0,0.43706793,0,0,0.70414594}; -VT(-0.65294722,0.66226976,0,-0.86037128,0.61481672,0,-0.72720733,0.43583582,0){0,0,0.85297032,0,0,1.106042,0,0,0.70414594}; -VT(-0.41369197,0.73184535,0,-0.61026761,0.86248481,0,-0.65294722,0.66226976,0){0,0,0.69052686,0,0,1.1041067,0,0,0.85297032}; -VT(-0.4165969,0.39543964,0,-0.28048336,0.5090566,0,-0.5069458,0.52411158,0){0,0,0.32534352,0,0,0.32465226,0,0,0.52086505}; -VT(-0.29182364,-0.31445753,0,-0.13561503,-0.2979777,0,-0.20237428,-0.094234203,0){0,0,0.17552505,0,0,0.099810723,0,0,0.035308585}; -VT(-0.20237428,-0.094234203,0,-0.13561503,-0.2979777,0,0,-0.2,0){0,0,0.035308585,0,0,0.099810723,0,0,0.030108895}; -VT(-0.5069458,0.52411158,0,-0.5562586,0.36467285,0,-0.4165969,0.39543964,0){0,0,0.52086505,0,0,0.43706793,0,0,0.32534352}; -VT(0.2,1,0,0.19528035,0.88414987,0,0.4,1,0){0,0,1.0361451,0,0,0.8102247,0,0,1.144558}; -VT(-1,-0.4,0,-0.88909151,-0.20108716,0,-1,-0.2,0){0,0,1.1449524,0,0,0.82235965,0,0,1.035932}; -VT(-0.18237993,-0.47217714,0,-0.13561503,-0.2979777,0,-0.29182364,-0.31445753,0){0,0,0.24651427,0,0,0.099810723,0,0,0.17552505}; -VT(-0.097376676,0.37012027,0,-0.28356559,0.29961254,0,-0.13062954,0.15354208,0){0,0,0.13384161,0,0,0.16152593,0,0,0.028273334}; -VT(0.4,0,0,0.28472232,0.147503,0,0.2,0,0){0,0,0.15186115,0,0,0.095759319,0,0,0.029318307}; -VT(-0.20237428,-0.094234203,0,-0.37726926,-0.17874311,0,-0.29182364,-0.31445753,0){0,0,0.035308585,0,0,0.16815028,0,0,0.17552505}; -VT(-0.31649602,0.11487776,0,-0.37982886,-0.033787755,0,-0.20237428,-0.094234203,0){0,0,0.10378379,0,0,0.14032754,0,0,0.035308585}; -VT(-0.13062954,0.15354208,0,-0.28356559,0.29961254,0,-0.31649602,0.11487776,0){0,0,0.028273334,0,0,0.16152593,0,0,0.10378379}; -VT(-0.48993004,-0.34456746,0,-0.35285213,-0.48044777,0,-0.29182364,-0.31445753,0){0,0,0.34565331,0,0,0.34856344,0,0,0.17552505}; -VT(0.30170882,0.31749481,0,0.48102844,0.36070204,0,0.37038152,0.50386299,0){0,0,0.18127988,0,0,0.35498666,0,0,0.38031894}; -VT(0.37038152,0.50386299,0,0.48833461,0.64651393,0,0.30679003,0.71918631,0){0,0,0.38031894,0,0,0.65057086,0,0,0.59405992}; -VT(-0.7261901,-0.30622169,0,-0.64504271,-0.48377429,0,-0.48993004,-0.34456746,0){0,0,0.60510213,0,0,0.64319256,0,0,0.34565331}; -VT(0,-1,0,-0.15018816,-0.84801006,0,-0.2,-1,0){0,0,0.99004705,0,0,0.7271253,0,0,1.0350883}; -VT(1,0.2,0,0.84793591,0.15031831,0,1,0,0){0,0,1.0350863,0,0,0.72705167,0,0,0.99001353}; -VT(0,-0.8,0,-0.15018816,-0.84801006,0,0,-1,0){0,0,0.63521318,0,0,0.7271253,0,0,0.99004705}; -VT(1,0,0,0.84793591,0.15031831,0,0.8,0,0){0,0,0.99001353,0,0,0.72705167,0,0,0.63526591}; -VT(1,1,0,0.84832091,0.84974074,0,1,0.8,0){0,0,1.9902232,0,0,1.4269182,0,0,1.6351217}; -VT(-0.8,-1,0,-0.84971248,-0.848268,0,-1,-1,0){0,0,1.6351469,0,0,1.4267533,0,0,1.9902184}; -VT(0.8,1,0,0.84832091,0.84974074,0,1,1,0){0,0,1.6350174,0,0,1.4269182,0,0,1.9902232}; -VT(-1,-1,0,-0.84971248,-0.848268,0,-1,-0.8,0){0,0,1.9902184,0,0,1.4267533,0,0,1.6350425}; -VT(-0.49398787,0.083343978,0,-0.45358265,0.24821429,0,-0.65243693,0.21794688,0){0,0,0.24306828,0,0,0.25954993,0,0,0.46262006}; -VT(-0.81500321,0.8168568,0,-0.86037128,0.61481672,0,-0.65294722,0.66226976,0){0,0,1.3205926,0,0,1.106042,0,0,0.85297032}; -VT(-0.65294722,0.66226976,0,-0.61026761,0.86248481,0,-0.81500321,0.8168568,0){0,0,0.85297032,0,0,1.1041067,0,0,1.3205926}; -VT(-0.31649602,0.11487776,0,-0.45358265,0.24821429,0,-0.49398787,0.083343978,0){0,0,0.10378379,0,0,0.25954993,0,0,0.24306828}; -VT(-1,0,0,-0.81920417,0.10649619,0,-1,0.2,0){0,0,0.98567746,0,0,0.67320716,0,0,1.0319964}; -VT(-0.2,1,0,-0.11821516,0.85398875,0,0,1,0){0,0,1.0333304,0,0,0.73703289,0,0,0.98599093}; -VT(-1,0.2,0,-0.84092818,0.27169996,0,-1,0.4,0){0,0,1.0319964,0,0,0.77335554,0,0,1.1437749}; -VT(-0.4,1,0,-0.26434268,0.85422499,0,-0.2,1,0){0,0,1.1445323,0,0,0.79358086,0,0,1.0333304}; -VT(-0.65243693,0.21794688,0,-0.45358265,0.24821429,0,-0.5562586,0.36467285,0){0,0,0.46262006,0,0,0.25954993,0,0,0.43706793}; -VT(-0.76457788,-0.080568783,0,-0.65059508,0.041512801,0,-0.81920417,0.10649619,0){0,0,0.58004414,0,0,0.41885836,0,0,0.67320716}; -VT(-0.81920417,0.10649619,0,-0.65059508,0.041512801,0,-0.65243693,0.21794688,0){0,0,0.67320716,0,0,0.41885836,0,0,0.46262006}; -VT(-0.11821516,0.85398875,0,-0.26434268,0.85422499,0,-0.18314711,0.69947345,0){0,0,0.73703289,0,0,0.79358086,0,0,0.51294111}; -VT(-0.65243693,0.21794688,0,-0.84092818,0.27169996,0,-0.81920417,0.10649619,0){0,0,0.46262006,0,0,0.77335554,0,0,0.67320716}; -VT(0.46505257,0.18920403,0,0.48102844,0.36070204,0,0.30170882,0.31749481,0){0,0,0.24153004,0,0,0.35498666,0,0,0.18127988}; -VT(0.30679003,0.71918631,0,0.48833461,0.64651393,0,0.50076357,0.81140902,0){0,0,0.59405992,0,0,0.65057086,0,0,0.90095104}; -VT(-0.81220583,-0.50021121,0,-0.64504271,-0.48377429,0,-0.7261901,-0.30622169,0){0,0,0.90166921,0,0,0.64319256,0,0,0.60510213}; -VT(-0.29182364,-0.31445753,0,-0.35285213,-0.48044777,0,-0.18237993,-0.47217714,0){0,0,0.17552505,0,0,0.34856344,0,0,0.24651427}; -VT(-0.28356559,0.29961254,0,-0.45358265,0.24821429,0,-0.31649602,0.11487776,0){0,0,0.16152593,0,0,0.25954993,0,0,0.10378379}; -VT(-0.48993004,-0.34456746,0,-0.37726926,-0.17874311,0,-0.5421228,-0.11260696,0){0,0,0.34565331,0,0,0.16815028,0,0,0.29334969}; -VT(-0.29182364,-0.31445753,0,-0.37726926,-0.17874311,0,-0.48993004,-0.34456746,0){0,0,0.17552505,0,0,0.16815028,0,0,0.34565331}; -VT(-0.4165969,0.39543964,0,-0.28356559,0.29961254,0,-0.28048336,0.5090566,0){0,0,0.32534352,0,0,0.16152593,0,0,0.32465226}; -VT(-0.28048336,0.5090566,0,-0.28356559,0.29961254,0,-0.097376676,0.37012027,0){0,0,0.32465226,0,0,0.16152593,0,0,0.13384161}; -VT(-0.49398787,0.083343978,0,-0.65059508,0.041512801,0,-0.5421228,-0.11260696,0){0,0,0.24306828,0,0,0.41885836,0,0,0.29334969}; -VT(-0.2,1,0,-0.26434268,0.85422499,0,-0.11821516,0.85398875,0){0,0,1.0333304,0,0,0.79358086,0,0,0.73703289}; -VT(-0.81920417,0.10649619,0,-0.84092818,0.27169996,0,-1,0.2,0){0,0,0.67320716,0,0,0.77335554,0,0,1.0319964}; -VT(-0.49398787,0.083343978,0,-0.37982886,-0.033787755,0,-0.31649602,0.11487776,0){0,0,0.24306828,0,0,0.14032754,0,0,0.10378379}; -VT(-0.5421228,-0.11260696,0,-0.37982886,-0.033787755,0,-0.49398787,0.083343978,0){0,0,0.29334969,0,0,0.14032754,0,0,0.24306828}; -VT(-0.28048336,0.5090566,0,-0.078017137,0.55659901,0,-0.18314711,0.69947345,0){0,0,0.32465226,0,0,0.30773002,0,0,0.51294111}; -VT(-0.097376676,0.37012027,0,-0.078017137,0.55659901,0,-0.28048336,0.5090566,0){0,0,0.13384161,0,0,0.30773002,0,0,0.32465226}; -VT(0,-0.2,0,-0.13561503,-0.2979777,0,0,-0.4,0){0,0,0.030108895,0,0,0.099810723,0,0,0.15276498}; -VT(-0.65243693,0.21794688,0,-0.65059508,0.041512801,0,-0.49398787,0.083343978,0){0,0,0.46262006,0,0,0.41885836,0,0,0.24306828}; -VT(-0.5562586,0.36467285,0,-0.45358265,0.24821429,0,-0.4165969,0.39543964,0){0,0,0.43706793,0,0,0.25954993,0,0,0.32534352}; -VT(-0.4165969,0.39543964,0,-0.45358265,0.24821429,0,-0.28356559,0.29961254,0){0,0,0.32534352,0,0,0.25954993,0,0,0.16152593}; -VT(-0.5421228,-0.11260696,0,-0.37726926,-0.17874311,0,-0.37982886,-0.033787755,0){0,0,0.29334969,0,0,0.16815028,0,0,0.14032754}; -VT(-0.37982886,-0.033787755,0,-0.37726926,-0.17874311,0,-0.20237428,-0.094234203,0){0,0,0.14032754,0,0,0.16815028,0,0,0.035308585}; -}; diff --git a/benchmarks/misc/lists.geo b/benchmarks/misc/lists.geo deleted file mode 100644 index 00ec8b0bd746f9fcd6b5059e3a639f2bd5c354f7..0000000000000000000000000000000000000000 --- a/benchmarks/misc/lists.geo +++ /dev/null @@ -1,26 +0,0 @@ - -a = 1; - -Printf("a = %g", a); - -b[] = {1,2,3}; - -Printf("b = %g %g %g", b[{0:1}]); - -Printf("b[a] = %g", b[a]); - -Printf("b[b[0]] = %g", b[b[0]]); - -c[{1,2,3}] = {5,6,7} ; - -c[0] = 4 ; - -Printf("c = %g %g %g %g", c[]); - -c[{0:3}] = {-1,-2,-3,-4} ; - -Printf("c = %g %g %g %g", c[]); - -c[{b[]}] = {8,9,10} ; - -Printf("c = %g %g %g %g", c[]); diff --git a/benchmarks/misc/loop.geo b/benchmarks/misc/loop.geo deleted file mode 100644 index c6180d2cf1a804b69acdbdcae632e9a874326e86..0000000000000000000000000000000000000000 --- a/benchmarks/misc/loop.geo +++ /dev/null @@ -1,10 +0,0 @@ -/* -This is a very simple control sequense -with 2 imbricated loops -*/ - -For t In {0:1:0.1} - For x In {0:0.5:0.1} - Point(newp) = {t,x,0,.1}; - EndFor -EndFor diff --git a/benchmarks/misc/strings.geo b/benchmarks/misc/strings.geo deleted file mode 100644 index bb5dd362653002122ac028ed2620a71dabb9038e..0000000000000000000000000000000000000000 --- a/benchmarks/misc/strings.geo +++ /dev/null @@ -1,18 +0,0 @@ - - -Include "../../tutorial/view1.pos" ; - -View[0].Name = "gloups.prout" ; - -General.Trackball = 0 ; - -For num In {1:2} - - General.RotationX += 10 ; - - Print StrCat( StrPrefix(Sprintf(View[0].Name)) , Sprintf("-%g.jpg", num) ) ; - - Draw ; - -EndFor - diff --git a/bin/Makefile b/bin/Makefile deleted file mode 100644 index 50b1eb6c5d25cf026e46188da4b139e01fbaee63..0000000000000000000000000000000000000000 --- a/bin/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -# $Id: Makefile,v 1.1 2001-01-24 08:27:30 geuzaine Exp $ - -RM = rm -RMFLAGS = -f - diff --git a/demos/.gmsh-options b/demos/.gmsh-options deleted file mode 100644 index 7e5388245b538cee4f299543a6b0937b99ab4d4c..0000000000000000000000000000000000000000 --- a/demos/.gmsh-options +++ /dev/null @@ -1,262 +0,0 @@ -// Gmsh Option File -// -// This file takes configuration options (preferences) that -// should be loaded each time Gmsh is launched. You can create -// this file by hand, or let Gmsh generate it for you (with -// the 'Options->Save options' menu button). This file can -// also be automatically regenerated every time you quit -// Gmsh if the option 'General.SaveOptions' is set. If -// this file isn't found, defaults are used. -// -// -// General options -// -General.TextEditor = "emacs %s &"; // System command to launch a text editor -General.InitialModule = 0; // Module launched on startup (0=automatic, 1=geometry, 2=mesh, 3=solver, 4=post-processing) -General.CenterWindows = 1; // Center new windows on the menu window -General.Shininess = 0.4; // Material shininess (must be > 0) -General.ColorScheme = 0; // Default color scheme (0, 1 or 2) -General.Verbosity = 2; // Level of information printed during processing (0=no information) -General.Terminal = 0; // Should information be printed on the terminal (if available)? -General.Orthographic = 1; // Orthographic projection mode (0=perspective projection) -General.FastRedraw = 1; // Fast redraw (no mesh or view display) when moving the model -General.Axes = 0; // Display the axes linked to the model -General.SmallAxes = 1; // Display the small axes -General.DoubleBuffer = 1; // Use a double buffered graphic window (on Unix, should be set to 0 when working on a remote host without GLX) -General.DisplayLists = 0; // Use OpenGL display lists (useful with real time manipulation of 'big' post-processing views) -General.AlphaBlending = 0; // Enable alpha blending (transparency) in post-processing views -General.Trackball = 1; // Use trackball rotation mode -General.ZoomFactor = 1.1; // 'Speed' of the middle mouse button zoom -General.DefaultPlugins = 0; // Load default plugins on startup -General.MovingLight = 0; // Use a moving (i.e. which follows the model) light source -General.Light0 = 1; // Enable light source 0 -General.Light0X = 0.5; // X position of light source 0 -General.Light0Y = 0.3; // Y position of light source 0 -General.Light0Z = 1; // Z position of light source 0 -General.Light1 = 0; // Enable light source 1 -General.Light1X = 0.5; // X position of light source 1 -General.Light1Y = 0.3; // Y position of light source 1 -General.Light1Z = 1; // Z position of light source 1 -General.Light2 = 0; // Enable light source 2 -General.Light2X = 0.5; // X position of light source 2 -General.Light2Y = 0.3; // Y position of light source 2 -General.Light2Z = 1; // Z position of light source 2 -General.Light3 = 0; // Enable light source 3 -General.Light3X = 0.5; // X position of light source 3 -General.Light3Y = 0.3; // Y position of light source 3 -General.Light3Z = 1; // Z position of light source 3 -General.Light4 = 0; // Enable light source 4 -General.Light4X = 0.5; // X position of light source 4 -General.Light4Y = 0.3; // Y position of light source 4 -General.Light4Z = 1; // Z position of light source 4 -General.Light5 = 0; // Enable light source 5 -General.Light5X = 0.5; // X position of light source 5 -General.Light5Y = 0.3; // Y position of light source 5 -General.Light5Z = 1; // Z position of light source 5 -General.Color.Background = {120,120,120}; // Background color -General.Color.Foreground = {255,255,255}; // Foreground color -General.Color.Text = {255,255,255}; // Text color -General.Color.Axes = {255,255,0}; // Axes color -General.Color.SmallAxes = {255,255,255}; // Small axes color -// -// Geometry options -// -Geometry.Normals = 0; // Size of the vectors normal to the surfaces -Geometry.Tangents = 0; // Size of the vectors tangent to the curves -Geometry.Points = 1; // Display geometry points? -Geometry.Lines = 1; // Display geometry curves? -Geometry.Surfaces = 0; // Display geometry surfaces? -Geometry.Volumes = 0; // Display geometry volumes? (not implemented yet) -Geometry.PointsNumbers = 1; // Display points numbers? -Geometry.LinesNumbers = 0; // Display curve numbers? -Geometry.SurfacesNumbers = 0; // Display surface numbers? -Geometry.VolumesNumbers = 0; // Display volume numbers? (not implemented yet) -Geometry.Aspect = 0; // Not used -Geometry.Highlight = 0; // Not used -Geometry.OldCircle = 0; // Use old circle description (compatibility option for old Gmsh geometries) -Geometry.ScalingFactor = 1; // Global geometry scaling factor -Geometry.ColorScheme = 0; // Default geometry color scheme (0, 1 or 2) -Geometry.Color.Points = {255,119,0}; // Normal geometry point color -Geometry.Color.Lines = {0,0,255}; // Normal geometry curve color -Geometry.Color.Surfaces = {196,196,196}; // Normal geometry surface color -Geometry.Color.Volumes = {128,128,128}; // Normal geometry volume color -Geometry.Color.PointsSelect = {255,0,0}; // Selected geometry point color -Geometry.Color.LinesSelect = {255,0,0}; // Selected geometry curve color -Geometry.Color.SurfacesSelect = {255,0,0}; // Selected geometry surface color -Geometry.Color.VolumesSelect = {255,0,0}; // Selected geometry volume color -Geometry.Color.PointsHighlight = {0,255,0}; // Highlighted geometry point color -Geometry.Color.LinesHighlight = {0,0,255}; // Highlighted geometry curve color -Geometry.Color.SurfacesHighlight = {128,128,128}; // Highlighted geometry surface color -Geometry.Color.VolumesHighlight = {128,128,128}; // Highlighted geometry volume color -Geometry.Color.Tangents = {255,255,0}; // Tangent geometry vectors color -Geometry.Color.Normals = {255,0,0}; // Normal geometry vectors color -// -// Mesh options -// -Mesh.Quality = 0; // Target quality for tetrahedral elements (not fully functional) -Mesh.Normals = 0; // Size of the normal vectors -Mesh.Tangents = 0; // Size of the tangent vectors -Mesh.Explode = 1; // Display mesh with non adjacent elements (factor between 0 and 1) -Mesh.ScalingFactor = 1; // Global scaling factor applied to the saved mesh -Mesh.CharacteristicLengthFactor = 1; // Factor applied to all charcteristic lenghts (and background meshes) -Mesh.RandomFactor = 0.0001; // Random factor used in 2D and 3D meshing algorithm (test other values when the algorithm fails) -Mesh.GammaInf = 0; // Only display elements whose Gamma factor is greater than GammaInf -Mesh.GammaSup = 0; // Only display elements whose Gamma factor is smaller than GammaSup -Mesh.RadiusInf = 0; // Only display elements whose Radius is greater than RadiusInf -Mesh.RadiusSup = 0; // Only display elements whose Radius is smaller than RadiusSup -Mesh.Points = 1; // Display mesh vertices? -Mesh.Lines = 1; // Display mesh vertices on curves? -Mesh.Surfaces = 1; // Display surface mesh? -Mesh.Volumes = 1; // Display volume mesh? -Mesh.PointsNumbers = 0; // Display mesh vertices numbers? -Mesh.LinesNumbers = 0; // Display mesh line numbers? -Mesh.SurfacesNumbers = 0; // Display mesh surface numbers? -Mesh.VolumesNumbers = 0; // Display mesh elements numbers? -Mesh.Aspect = 0; // Mesh apsect (0=wireframe, 1=hidden lines, 2=solid) -Mesh.Format = 1; // Mesh output format (1=MSH, 2=UNV) -Mesh.Smoothing = 0; // Number of smoothing steps applied to the final mesh -Mesh.Algorithm = 1; // 2D mesh algorithm (1=isotropic, 2=anisotropic) -Mesh.PointInsertion = 1; // Point insertion method for isotropic 2D algorithm (1=center of circ. circle, 2=voronoi, 3=cog) -Mesh.SpeedMax = 0; // Disable dubious point insertion tests -Mesh.MinimumCirclePoints = 7; // Minimum number of points used to mesh a circle -Mesh.ConstrainedBackgroundMesh = 0; // Should the background mesh be constrained by the characteristic lengths associated with the geometry? -Mesh.Degree = 1; // Element order -Mesh.Dual = 0; // Display the dual mesh obtained by barycentric subdivision -Mesh.Interactive = 0; // Show the construction of the 2D mesh in real time (only with the anisotropic algorithm) -Mesh.ColorScheme = 0; // Default mesh color scheme (0, 1 or 2) -Mesh.ColorCarousel = 1; // Use a 'color by region number' scheme -Mesh.Color.Points = {0,123,59}; // Mesh vertex color -Mesh.Color.PointsSupp = {255,0,255}; // Mesh high order vertex color -Mesh.Color.Lines = {0,255,0}; // Mesh line color -Mesh.Color.Triangles = {160,150,255}; // Mesh triangle color (if ColorCarousel=0) -Mesh.Color.Quadrangles = {130,120,225}; // Mesh quadrangle color (if ColorCarousel=0) -Mesh.Color.Tetrahedra = {160,150,255}; // Mesh tetrahedron color (if ColorCarousel=0) -Mesh.Color.Hexahedra = {130,120,225}; // Mesh hexahedron color (if ColorCarousel=0) -Mesh.Color.Prisms = {232,210,23}; // Mesh prism color (if ColorCarousel=0) -Mesh.Color.Pyramids = {217,113,38}; // Mesh pyramid color (if ColorCarousel=0) -Mesh.Color.Normals = {128,128,128}; // Normal mesh vector color -Mesh.Color.Tangents = {128,128,128}; // Tangent mesh vector color -Mesh.Color.One = {232,210,23}; // First color in color carousel -Mesh.Color.Two = {226,167,29}; // Second color in color carousel -Mesh.Color.Three = {217,113,38}; // Third color in color carousel -Mesh.Color.Four = {201,54,54}; // Fourth color in color carousel -Mesh.Color.Five = {169,12,86}; // Fifth color in color carousel -Mesh.Color.Six = {114,2,141}; // Sixth color in color carousel -Mesh.Color.Seven = {67,30,188}; // Seventh color in color carousel -Mesh.Color.Eight = {44,86,211}; // Eighth color in color carousel -Mesh.Color.Nine = {32,145,223}; // Nitnth color in color carousel -Mesh.Color.Ten = {25,193,230}; // tenth color in color carousel -// -// Solver options -// -Solver.GetDPCommand = "getdp"; // System command to launch the GetDP solver (should _not_ contain the '&' character) -Solver.GetDPPopupMessages = 1; // Automatically display GetDP messages -Solver.GetDPMergeViews = 1; // Automatically merge any post-processing view created by GetDP -// -// Post-processing options -// -PostProcessing.Scales = 1; // Show value scales -PostProcessing.Link = 0; // Link post-processing views (0=no, 1=visible views, 2=all views) -PostProcessing.Smoothing = 0; // Apply (non-reversible) smoothing to post-processing view when merged -PostProcessing.AnimationDelay = 0.25; // Delay (in seconds) between to animation frames -// -// View options -// -View.Format = "%.3e"; // Number format (in standard C form) -View.ArrowScale = 50; // Size of the vector (e.g. arrow size in pixels) -View.IntervalsType = 2; // Type of interval display (1=iso, 2=discrete, 3=continuous, 4=numeric) -View.NbIso = 15; // Number of intervals -View.Light = 0; // Enable light sources? -View.ShowElement = 0; // Show element boundaries? -View.ShowTime = 1; // Show time value (or time step) if NbTimeStep > 1? -View.ShowScale = 1; // Show value scale? -View.DrawPoints = 1; // Display post-processing points? -View.DrawLines = 1; // Display post-processing lines? -View.DrawTriangles = 1; // Display post-processing triangles? -View.DrawTetrahedra = 1; // Display post-processing tetrahedra? -View.DrawScalars = 1; // Display scalar values? -View.DrawVectors = 1; // Display vector values? -View.DrawTensors = 1; // Display tensor values? -View.TransparentScale = 1; // Display a 'transparent' value scale? -View.ScaleType = 1; // Value scale type (1=linear, 2=logarithmic) -View.RangeType = 1; // Value scale range type (1=default, 2=custom) -View.ArrowType = 2; // Vector display type (1=segment, 2=arrow, 3=pyramid, 4=cone, 5=displacement) -View.ArrowLocation = 1; // Arrow location (1=cog, 2=vertex) -View.ColorTable = { -{17, 246, 238, 255}, {17, 246, 238, 255}, {17, 245, 238, 255}, {17, 245, 238, 255}, -{17, 244, 238, 255}, {17, 244, 238, 255}, {18, 243, 237, 255}, {18, 243, 237, 255}, -{18, 242, 237, 255}, {18, 241, 237, 255}, {18, 241, 237, 255}, {18, 240, 237, 255}, -{18, 239, 237, 255}, {19, 238, 236, 255}, {19, 238, 236, 255}, {19, 237, 236, 255}, -{19, 236, 236, 255}, {19, 235, 236, 255}, {19, 234, 236, 255}, {19, 233, 236, 255}, -{20, 232, 235, 255}, {20, 231, 235, 255}, {20, 230, 235, 255}, {20, 229, 235, 255}, -{20, 228, 235, 255}, {21, 227, 234, 255}, {21, 225, 234, 255}, {21, 224, 234, 255}, -{21, 223, 234, 255}, {21, 222, 234, 255}, {22, 220, 233, 255}, {22, 219, 233, 255}, -{22, 217, 233, 255}, {22, 216, 233, 255}, {22, 214, 233, 255}, {23, 213, 232, 255}, -{23, 211, 232, 255}, {23, 209, 232, 255}, {23, 207, 232, 255}, {24, 206, 231, 255}, -{24, 204, 231, 255}, {24, 202, 231, 255}, {24, 200, 231, 255}, {25, 198, 230, 255}, -{25, 196, 230, 255}, {25, 194, 230, 255}, {25, 192, 230, 255}, {26, 189, 229, 255}, -{26, 187, 229, 255}, {26, 185, 229, 255}, {27, 183, 228, 255}, {27, 180, 228, 255}, -{27, 178, 228, 255}, {28, 175, 227, 255}, {28, 173, 227, 255}, {28, 170, 227, 255}, -{29, 168, 226, 255}, {29, 165, 226, 255}, {30, 162, 225, 255}, {30, 159, 225, 255}, -{30, 157, 225, 255}, {31, 154, 224, 255}, {31, 151, 224, 255}, {32, 148, 223, 255}, -{32, 145, 223, 255}, {32, 142, 223, 255}, {33, 139, 222, 255}, {33, 136, 222, 255}, -{34, 133, 221, 255}, {34, 130, 221, 255}, {35, 127, 220, 255}, {35, 124, 220, 255}, -{36, 121, 219, 255}, {37, 118, 218, 255}, {37, 115, 218, 255}, {38, 112, 217, 255}, -{38, 108, 217, 255}, {39, 105, 216, 255}, {40, 102, 215, 255}, {40, 99, 215, 255}, -{41, 96, 214, 255}, {42, 93, 213, 255}, {43, 89, 212, 255}, {43, 86, 212, 255}, -{44, 83, 211, 255}, {45, 80, 210, 255}, {46, 77, 209, 255}, {47, 74, 208, 255}, -{48, 71, 207, 255}, {49, 68, 206, 255}, {50, 65, 205, 255}, {51, 62, 204, 255}, -{52, 59, 203, 255}, {53, 56, 202, 255}, {54, 53, 201, 255}, {56, 50, 199, 255}, -{57, 47, 198, 255}, {58, 45, 197, 255}, {59, 42, 196, 255}, {61, 40, 194, 255}, -{62, 37, 193, 255}, {64, 35, 191, 255}, {65, 32, 190, 255}, {67, 30, 188, 255}, -{69, 28, 186, 255}, {71, 25, 184, 255}, {72, 23, 183, 255}, {74, 21, 181, 255}, -{76, 19, 179, 255}, {78, 17, 177, 255}, {81, 16, 174, 255}, {83, 14, 172, 255}, -{85, 12, 170, 255}, {87, 11, 168, 255}, {90, 9, 165, 255}, {92, 8, 163, 255}, -{95, 7, 160, 255}, {98, 6, 157, 255}, {100, 5, 155, 255}, {103, 4, 152, 255}, -{106, 3, 149, 255}, {109, 2, 146, 255}, {112, 2, 143, 255}, {115, 1, 140, 255}, -{118, 1, 137, 255}, {121, 1, 134, 255}, {124, 1, 131, 255}, {127, 0, 127, 255}, -{131, 1, 124, 255}, {134, 1, 121, 255}, {137, 1, 118, 255}, {140, 1, 115, 255}, -{143, 2, 112, 255}, {146, 2, 109, 255}, {149, 3, 106, 255}, {152, 4, 103, 255}, -{155, 5, 100, 255}, {157, 6, 98, 255}, {160, 7, 95, 255}, {163, 8, 92, 255}, -{165, 9, 90, 255}, {168, 11, 87, 255}, {170, 12, 85, 255}, {172, 14, 83, 255}, -{174, 16, 81, 255}, {177, 17, 78, 255}, {179, 19, 76, 255}, {181, 21, 74, 255}, -{183, 23, 72, 255}, {184, 25, 71, 255}, {186, 28, 69, 255}, {188, 30, 67, 255}, -{190, 32, 65, 255}, {191, 35, 64, 255}, {193, 37, 62, 255}, {194, 40, 61, 255}, -{196, 42, 59, 255}, {197, 45, 58, 255}, {198, 47, 57, 255}, {199, 50, 56, 255}, -{201, 53, 54, 255}, {202, 56, 53, 255}, {203, 59, 52, 255}, {204, 62, 51, 255}, -{205, 65, 50, 255}, {206, 68, 49, 255}, {207, 71, 48, 255}, {208, 74, 47, 255}, -{209, 77, 46, 255}, {210, 80, 45, 255}, {211, 83, 44, 255}, {212, 86, 43, 255}, -{212, 89, 43, 255}, {213, 93, 42, 255}, {214, 96, 41, 255}, {215, 99, 40, 255}, -{215, 102, 40, 255}, {216, 105, 39, 255}, {217, 108, 38, 255}, {217, 112, 38, 255}, -{218, 115, 37, 255}, {218, 118, 37, 255}, {219, 121, 36, 255}, {220, 124, 35, 255}, -{220, 127, 35, 255}, {221, 130, 34, 255}, {221, 133, 34, 255}, {222, 136, 33, 255}, -{222, 139, 33, 255}, {223, 142, 32, 255}, {223, 145, 32, 255}, {223, 148, 32, 255}, -{224, 151, 31, 255}, {224, 154, 31, 255}, {225, 157, 30, 255}, {225, 159, 30, 255}, -{225, 162, 30, 255}, {226, 165, 29, 255}, {226, 168, 29, 255}, {227, 170, 28, 255}, -{227, 173, 28, 255}, {227, 175, 28, 255}, {228, 178, 27, 255}, {228, 180, 27, 255}, -{228, 183, 27, 255}, {229, 185, 26, 255}, {229, 187, 26, 255}, {229, 189, 26, 255}, -{230, 192, 25, 255}, {230, 194, 25, 255}, {230, 196, 25, 255}, {230, 198, 25, 255}, -{231, 200, 24, 255}, {231, 202, 24, 255}, {231, 204, 24, 255}, {231, 206, 24, 255}, -{232, 207, 23, 255}, {232, 209, 23, 255}, {232, 211, 23, 255}, {232, 213, 23, 255}, -{233, 214, 22, 255}, {233, 216, 22, 255}, {233, 217, 22, 255}, {233, 219, 22, 255}, -{233, 220, 22, 255}, {234, 222, 21, 255}, {234, 223, 21, 255}, {234, 224, 21, 255}, -{234, 225, 21, 255}, {234, 227, 21, 255}, {235, 228, 20, 255}, {235, 229, 20, 255}, -{235, 230, 20, 255}, {235, 231, 20, 255}, {235, 232, 20, 255}, {236, 233, 19, 255}, -{236, 234, 19, 255}, {236, 235, 19, 255}, {236, 236, 19, 255}, {236, 237, 19, 255}, -{236, 238, 19, 255}, {236, 238, 19, 255}, {237, 239, 18, 255}, {237, 240, 18, 255}, -{237, 241, 18, 255}, {237, 241, 18, 255}, {237, 242, 18, 255}, {237, 243, 18, 255}, -{237, 243, 18, 255}, {238, 244, 17, 255}, {238, 244, 17, 255}, {238, 245, 17, 255}, -{238, 245, 17, 255}, {238, 246, 17, 255}, {238, 246, 17, 255} -}; -// -// Print options -// -Print.Font = "Courier"; // Font used for postscript printing -Print.Format = 10; // Print format -Print.EpsQuality = 2; // Postscript quality (1=simple sort, 2=recursive sort) -Print.JpegQuality = 85; // JPEG quality (between 1 and 100) -Print.GifDither = 0; // Apply dithering to GIF output -Print.GifSort = 1; // Sort the colormap in GIF output -Print.GifInterlace = 0; // Interlace GIF output -Print.GifTransparent = 0; // Output transparent GIF image -Print.FontSize = 12; // Font size used for postscript printing diff --git a/demos/anim-all.script b/demos/anim-all.script deleted file mode 100644 index ed8c417de65a0186f411ccf8a27bea316c0eddc6..0000000000000000000000000000000000000000 --- a/demos/anim-all.script +++ /dev/null @@ -1,82 +0,0 @@ -// -// Animate all views (together) and save the animation as a 320x240 -// mpeg and a 320x240 animated gif -// -// Requirements: mpeg_encode, whirlgif and a UNIX shell -// -// Output: anim.mpg and anim.gif -// - -General.GraphicsWidth = 320 ; -General.GraphicsHeight = 240 ; - -For i In {1:View[0].NbTimeStep} - - Draw; - If (i < 10) - Print Sprintf("anim-00%g.jpg", i); - Print Sprintf("anim-00%g.gif", i); - EndIf - If (i >= 10 && i < 100) - Print Sprintf("anim-0%g.jpg", i); - Print Sprintf("anim-0%g.gif", i); - EndIf - If (i >= 100) - Print Sprintf("anim-%g.jpg", i); - Print Sprintf("anim-%g.gif", i); - EndIf - - For j In {1:PostProcessing.NbViews} - View[j-1].TimeStep++; - EndFor - -EndFor - -// create the parameter file for mpeg_encode - -System 'echo "PATTERN I" > anim.par' ; -System 'echo "BASE_FILE_FORMAT JPEG" >> anim.par' ; -System 'echo "GOP_SIZE 30" >> anim.par' ; -System 'echo "SLICES_PER_FRAME 1" >> anim.par' ; -System 'echo "PIXEL HALF" >> anim.par' ; -System 'echo "RANGE 10" >> anim.par' ; -System 'echo "PSEARCH_ALG TWOLEVEL" >> anim.par' ; -System 'echo "BSEARCH_ALG CROSS2" >> anim.par' ; -System 'echo "IQSCALE 8" >> anim.par' ; -System 'echo "PQSCALE 10" >> anim.par' ; -System 'echo "BQSCALE 25" >> anim.par' ; -System 'echo "REFERENCE_FRAME ORIGINAL" >> anim.par' ; -System 'echo "OUTPUT anim.mpg" >> anim.par' ; -System 'echo "INPUT_CONVERT *" >> anim.par' ; -System 'echo "INPUT_DIR ." >> anim.par' ; -System 'echo "INPUT" >> anim.par' ; -If (View[0].NbTimeStep < 10) - System Sprintf('echo "anim-*.jpg [001-00%g]" >> anim.par', View[0].NbTimeStep) ; -EndIf -If (View[0].NbTimeStep >= 10 && View[0].NbTimeStep < 100) - System Sprintf('echo "anim-*.jpg [001-0%g]" >> anim.par', View[0].NbTimeStep) ; -EndIf -If (View[0].NbTimeStep >= 100) - System Sprintf('echo "anim-*.jpg [001-%g]" >> anim.par', View[0].NbTimeStep) ; -EndIf -System 'echo "END_INPUT" >> anim.par' ; - -// Call mpeg_encode - -System "mpeg_encode anim.par" ; - -// Call whirlgif - -System "whirlgif -loop -o anim.gif anim-*.gif" ; - -// Clean-up all temp files - -System "rm -f anim-*.gif" ; -System "rm -f anim-*.jpg" ; -System "rm -f anim.par" ; - -// One could also rename the output files with the view name - -// System StrCat( StrCat("mv anim.gif ", Sprintf(View[0].Name)), ".gif"); -// System StrCat( StrCat("mv anim.mpg ", Sprintf(View[0].Name)), ".mpg"); - diff --git a/demos/anim-seq.script b/demos/anim-seq.script deleted file mode 100644 index ffa53f3b6b969ce142549e058eb29914bde0d467..0000000000000000000000000000000000000000 --- a/demos/anim-seq.script +++ /dev/null @@ -1,97 +0,0 @@ -// -// Animate all views (sequentially) and save the animation as a -// 320x240 mpeg and a 320x240 animated gif -// -// Requirements: mpeg_encode, whirlgif and a UNIX shell -// -// Output: anim.mpg and anim.gif -// - -General.GraphicsWidth = 320 ; -General.GraphicsHeight = 240 ; - -// Hide all views - -For i In {1:PostProcessing.NbViews} - View[i-1].Visible = 0; -EndFor - -// Loop on all views - -index = 0; - -For i In {1:PostProcessing.NbViews} - - // Display view i-1 - - View[i-1].Visible = 1; - - // Loop on all solutions in view i-1 - - For j In {1:View[i-1].NbTimeStep} - - index++; - Draw; - If (index < 10) - Print Sprintf("anim-00%g.jpg", index); - Print Sprintf("anim-00%g.gif", index); - EndIf - If (index >= 10 && index < 100) - Print Sprintf("anim-0%g.jpg", index); - Print Sprintf("anim-0%g.gif", index); - EndIf - If (index >= 100) - Print Sprintf("anim-%g.jpg", index); - Print Sprintf("anim-%g.gif", index); - EndIf - View[i-1].TimeStep++; - - EndFor - - View[i-1].Visible = 0; - -EndFor - -// create the parameter file for mpeg_encode - -System 'echo "PATTERN I" > anim.par' ; -System 'echo "BASE_FILE_FORMAT JPEG" >> anim.par' ; -System 'echo "GOP_SIZE 30" >> anim.par' ; -System 'echo "SLICES_PER_FRAME 1" >> anim.par' ; -System 'echo "PIXEL HALF" >> anim.par' ; -System 'echo "RANGE 10" >> anim.par' ; -System 'echo "PSEARCH_ALG TWOLEVEL" >> anim.par' ; -System 'echo "BSEARCH_ALG CROSS2" >> anim.par' ; -System 'echo "IQSCALE 8" >> anim.par' ; -System 'echo "PQSCALE 10" >> anim.par' ; -System 'echo "BQSCALE 25" >> anim.par' ; -System 'echo "REFERENCE_FRAME ORIGINAL" >> anim.par' ; -System 'echo "OUTPUT anim.mpg" >> anim.par' ; -System 'echo "INPUT_CONVERT *" >> anim.par' ; -System 'echo "INPUT_DIR ." >> anim.par' ; -System 'echo "INPUT" >> anim.par' ; -If (index < 10) - System Sprintf('echo "anim-*.jpg [001-00%g]" >> anim.par', index) ; -EndIf -If (index >= 10 && index < 100) - System Sprintf('echo "anim-*.jpg [001-0%g]" >> anim.par', index) ; -EndIf -If (index >= 100) - System Sprintf('echo "anim-*.jpg [001-%g]" >> anim.par', index) ; -EndIf -System 'echo "END_INPUT" >> anim.par' ; - -// Call mpeg_encode - -System "mpeg_encode anim.par" ; - -// Call whirlgif - -System "whirlgif -loop -o anim.gif anim-*.gif" ; - -// Clean-up all temp files - -System "rm -f anim-*.gif" ; -System "rm -f anim-*.jpg" ; -System "rm -f anim.par" ; - diff --git a/demos/antenna.geo b/demos/antenna.geo deleted file mode 100644 index f1f6430bd6b26e57107cdbdd4c2420f0c5090cdc..0000000000000000000000000000000000000000 --- a/demos/antenna.geo +++ /dev/null @@ -1,194 +0,0 @@ -/* - Gmsh demo file (C) 2000 C. Geuzaine, J.-F. Remacle -*/ - -/* - The two longitudinal bars -*/ - -f4 = 0.6 ; -f5 = 1.33 ; - -xmin =-27.e-3 ; -LL = 1821.3e-3 ; -ll = 20.e-3 ; -hh = 20.e-3 ; -dc = 8.e-3 ; -em = 8.e-3/2 ; -eM = 40.e-3/2 ; -t = ArcTan(eM/2-em/2/LL) ; - -Point(1) = {xmin, -em-hh, -ll/2, f4*ll/2} ; Point(5) = {xmin, em, -ll/2, f4*ll/2} ; -Point(2) = {xmin, -em-hh, ll/2, f4*ll/2} ; Point(6) = {xmin, em, ll/2, f4*ll/2} ; -Point(3) = {xmin, -em, -ll/2, f4*ll/2} ; Point(7) = {xmin, em+hh, -ll/2, f4*ll/2} ; -Point(4) = {xmin, -em, ll/2, f4*ll/2} ; Point(8) = {xmin, em+hh, ll/2, f4*ll/2} ; - -Point(9) = {xmin+LL, -eM-hh, -ll/2, f5*ll/2} ; Point(13) = {xmin+LL, eM, -ll/2, f5*ll/2} ; -Point(10) = {xmin+LL, -eM-hh, ll/2, f5*ll/2} ; Point(14) = {xmin+LL, eM, ll/2, f5*ll/2} ; -Point(11) = {xmin+LL, -eM, -ll/2, f5*ll/2} ; Point(15) = {xmin+LL, eM+hh, -ll/2, f5*ll/2} ; -Point(12) = {xmin+LL, -eM, ll/2, f5*ll/2} ; Point(16) = {xmin+LL, eM+hh, ll/2, f5*ll/2} ; - -Line(1) = {5,6}; Line(11) = {13,14}; -Line(2) = {6,8}; Line(12) = {14,16}; -Line(3) = {8,7}; Line(13) = {16,15}; -Line(4) = {7,5}; Line(14) = {15,13}; -Line(5) = {1,2}; Line(15) = {9,10}; -Line(6) = {2,4}; Line(16) = {10,12}; -Line(7) = {4,3}; Line(17) = {12,11}; -Line(8) = {3,1}; Line(18) = {11,9}; -Line(9) = {4,6}; Line(19) = {12,14}; -Line(10) = {3,5}; Line(20) = {11,13}; - -Line(21) = {8,16}; Line(25) = {2,10}; -Line(22) = {7,15}; Line(26) = {4,12}; -Line(23) = {6,14}; Line(27) = {3,11}; -Line(24) = {5,13}; Line(28) = {1,9}; - -/* - The 22 resonators -*/ - -f1 = 2 ; f2 = 3.5 ; f3 = 5 ; - -// length ; radius ; dist % 1st bar ; dist % y=0 ; charact. length - l1 = 77.e-3/2-ll/2 ; r1 = 8.e-3/2 ; d1 = 0 ; e1 = em+dc+d1*Sin(t)-2.e-3 ; s1 = f1*r1 ; - l2 = 91.e-3/2-ll/2 ; r2 = 8.e-3/2 ; d2 = 11.9e-3 ; e2 = em+dc+d2*Sin(t)-2.e-3 ; s2 = f1*r2 ; - l3 = 105.e-3/2-ll/2 ; r3 = 8.e-3/2 ; d3 = 25.8e-3 ; e3 = em+dc+d3*Sin(t)-2.e-3 ; s3 = f1*r3 ; - l4 = 122.e-3/2-ll/2 ; r4 = 8.e-3/2 ; d4 = 41.8e-3 ; e4 = em+dc+d4*Sin(t)-2.e-3 ; s4 = f1*r4 ; - l5 = 142.e-3/2-ll/2 ; r5 = 10.e-3/2 ; d5 = 60.5e-3 ; e5 = em+dc+d5*Sin(t)-1.e-3 ; s5 = f1*r5 ; - l6 = 164.e-3/2-ll/2 ; r6 = 10.e-3/2 ; d6 = 82.5e-3 ; e6 = em+dc+d6*Sin(t)-1.e-3 ; s6 = f1*r6 ; - l7 = 192.e-3/2-ll/2 ; r7 = 12.e-3/2 ; d7 = 107.0e-3 ; e7 = em+dc+d7*Sin(t) ; s7 = f1*r7 ; - l8 = 224.e-3/2-ll/2 ; r8 = 12.e-3/2 ; d8 = 138.5e-3 ; e8 = em+dc+d8*Sin(t) ; s8 = f1*r8 ; - l9 = 260.e-3/2-ll/2 ; r9 = 12.e-3/2 ; d9 = 172.0e-3 ; e9 = em+dc+d9*Sin(t) ; s9 = f1*r9 ; -l10 = 303.e-3/2-ll/2 ; r10 = 12.e-3/2 ; d10 = 212.0e-3 ; e10 = em+dc+d10*Sin(t) ; s10 = f1*r10 ; -l11 = 353.e-3/2-ll/2 ; r11 = 12.e-3/2 ; d11 = 258.5e-3 ; e11 = em+dc+d11*Sin(t) ; s11 = f1*r11 ; -l12 = 410.e-3/2-ll/2 ; r12 = 12.e-3/2 ; d12 = 312.5e-3 ; e12 = em+dc+d12*Sin(t) ; s12 = f1*r12 ; -l13 = 477.e-3/2-ll/2 ; r13 = 12.e-3/2 ; d13 = 375.0e-3 ; e13 = em+dc+d13*Sin(t) ; s13 = f1*r13 ; -l14 = 554.e-3/2-ll/2 ; r14 = 12.e-3/2 ; d14 = 448.5e-3 ; e14 = em+dc+d14*Sin(t) ; s14 = f1*r14 ; -l15 = 645.e-3/2-ll/2 ; r15 = 12.e-3/2 ; d15 = 533.0e-3 ; e15 = em+dc+d15*Sin(t) ; s15 = f1*r15 ; -l16 = 749.e-3/2-ll/2 ; r16 = 12.e-3/2 ; d16 = 632.5e-3 ; e16 = em+dc+d16*Sin(t) ; s16 = f1*r16 ; -l17 = 877.e-3/2-ll/2 ; r17 = 12.e-3/2 ; d17 = 750.5e-3 ; e17 = em+dc+d17*Sin(t) ; s17 = f2*r17 ; -l18 = 1023.e-3/2-ll/2 ; r18 = 12.e-3/2 ; d18 = 888.0e-3 ; e18 = em+dc+d18*Sin(t) ; s18 = f2*r18 ; -l19 = 1196.e-3/2-ll/2 ; r19 = 12.e-3/2 ; d19 = 1050.3e-3 ; e19 = em+dc+d19*Sin(t) ; s19 = f3*r19 ; -l20 = 1404.e-3/2-ll/2 ; r20 = 12.e-3/2 ; d20 = 1241.7e-3 ; e20 = em+dc+d20*Sin(t) ; s20 = f3*r20 ; -l21 = 1648.e-3/2-ll/2 ; r21 = 12.e-3/2 ; d21 = 1467.7e-3 ; e21 = em+dc+d21*Sin(t) ; s21 = f3*r21 ; -l22 = 1934.e-3/2-ll/2 ; r22 = 12.e-3/2 ; d22 = 1734.3e-3 ; e22 = em+dc+d22*Sin(t) ; s22 = f3*r22 ; - -dx = d1 ; rx = r1 ; sx = s1 ; lx = l1 ; e = e1 ; x = 100; Include "antenna.i1" ; -dx = d2 ; rx = r2 ; sx = s2 ; lx = l2 ; e =-e2 ; x = 200; Include "antenna.i1" ; -dx = d3 ; rx = r3 ; sx = s3 ; lx = l3 ; e = e3 ; x = 300; Include "antenna.i1" ; -dx = d4 ; rx = r4 ; sx = s4 ; lx = l4 ; e =-e4 ; x = 400; Include "antenna.i1" ; -dx = d5 ; rx = r5 ; sx = s5 ; lx = l5 ; e = e5 ; x = 500; Include "antenna.i1" ; -dx = d6 ; rx = r6 ; sx = s6 ; lx = l6 ; e =-e6 ; x = 600; Include "antenna.i1" ; -dx = d7 ; rx = r7 ; sx = s7 ; lx = l7 ; e = e7 ; x = 700; Include "antenna.i1" ; -dx = d8 ; rx = r8 ; sx = s8 ; lx = l8 ; e =-e8 ; x = 800; Include "antenna.i1" ; -dx = d9 ; rx = r9 ; sx = s9 ; lx = l9 ; e = e9 ; x = 900; Include "antenna.i1" ; -dx = d10; rx = r10; sx = s10; lx = l10; e =-e10; x =1000; Include "antenna.i1" ; -dx = d11; rx = r11; sx = s11; lx = l11; e = e11; x =1100; Include "antenna.i1" ; -dx = d12; rx = r12; sx = s12; lx = l12; e =-e12; x =1200; Include "antenna.i1" ; -dx = d13; rx = r13; sx = s13; lx = l13; e = e13; x =1300; Include "antenna.i1" ; -dx = d14; rx = r14; sx = s14; lx = l14; e =-e14; x =1400; Include "antenna.i1" ; -dx = d15; rx = r15; sx = s15; lx = l15; e = e15; x =1500; Include "antenna.i1" ; -dx = d16; rx = r16; sx = s16; lx = l16; e =-e16; x =1600; Include "antenna.i1" ; -dx = d17; rx = r17; sx = s17; lx = l17; e = e17; x =1700; Include "antenna.i1" ; -dx = d18; rx = r18; sx = s18; lx = l18; e =-e18; x =1800; Include "antenna.i1" ; -dx = d19; rx = r19; sx = s19; lx = l19; e = e19; x =1900; Include "antenna.i1" ; -dx = d20; rx = r20; sx = s20; lx = l20; e =-e20; x =2000; Include "antenna.i1" ; -dx = d21; rx = r21; sx = s21; lx = l21; e = e21; x =2100; Include "antenna.i1" ; -dx = d22; rx = r22; sx = s22; lx = l22; e =-e22; x =2200; Include "antenna.i1" ; - - -/* - Surfaces for longitudinal bars -*/ - -Line Loop(3001) = {-13,-21,3,22}; Plane Surface(3101) = {3001}; // ymax -Line Loop(3002) = {23,-11,-24,1}; Plane Surface(3102) = {3002}; // ymax - eps -Line Loop(3003) = {-27,-7,26,17}; Plane Surface(3103) = {3003}; // ymin + eps -Line Loop(3004) = {25,-15,-28,5}; Plane Surface(3104) = {3004}; // ymin -Line Loop(3005) = {3,4,1,2}; Plane Surface(3105) = {3005}; // left top -Line Loop(3006) = {7,8,5,6}; Plane Surface(3106) = {3006}; // left bottom -Line Loop(3007) = {11,12,13,14}; Plane Surface(3107) = {3007}; // right top -Line Loop(3008) = {18,15,16,17}; Plane Surface(3108) = {3008}; // right bottom - -Line Loop(3011) = {-9,7,10,1}; Plane Surface(3111) = {3011}; // input -Line Loop(3012) = {-11,-20,-17,19};Plane Surface(3112) = {3012}; // output - -Line Loop(3013) = {-26,-6,25,16}; -Line Loop(3014) = {-28,-8,27,18}; -Line Loop(3015) = {-21,-2,23,12}; -Line Loop(3016) = {-24,-4,22,14}; -Plane Surface(3113) = {3013,203,403,603,803,1003,1203,1403,1603,1803,2003,2203} ; -Plane Surface(3114) = {3014,101,301,501,701,901,1101,1301,1501,1701,1901,2101}; -Plane Surface(3115) = {3015,103,303,503,703,903,1103,1303,1503,1703,1903,2103}; -Plane Surface(3116) = {3016,201,401,601,801,1001,1201,1401,1601,1801,2001,2201}; - -/* - The physical entities -*/ - -AIR = 8001 ; -XM = 8002 ; -XP = 8003 ; -YM = 8004 ; -YP = 8005 ; -ZM = 8006 ; -ZP = 8007 ; - -CLINPUT = 9001 ; -CLBOX = 9002 ; -CLLONG = 9003 ; -CLBAR = 9004 ; -CLBEM = 9005 ; - -Physical Surface(CLINPUT) = {3111}; -Physical Surface(CLBEM) = {4119,4106,4115,4111,4122,4124}; -Physical Surface(CLLONG) = {3102,3115,3101,3116,3105,3107,3103,3114,3104,3113,3108,3106}; -Physical Surface(CLBAR) = -{ - 122,125,126,127,128, - 124,129,130,131,132, - 222,225,226,227,228, - 224,229,230,231,232, - 322,325,326,327,328, - 324,329,330,331,332, - 422,425,426,427,428, - 424,429,430,431,432, - 522,525,526,527,528, - 524,529,530,531,532, - 622,625,626,627,628, - 624,629,630,631,632, - 722,725,726,727,728, - 724,729,730,731,732, - 822,825,826,827,828, - 824,829,830,831,832, - 922,925,926,927,928, - 924,929,930,931,932, - 1022,1025,1026,1027,1028, - 1024,1029,1030,1031,1032, - 1122,1125,1126,1127,1128, - 1124,1129,1130,1131,1132, - 1222,1225,1226,1227,1228, - 1224,1229,1230,1231,1232, - 1322,1325,1326,1327,1328, - 1324,1329,1330,1331,1332, - 1422,1425,1426,1427,1428, - 1424,1429,1430,1431,1432, - 1522,1525,1526,1527,1528, - 1524,1529,1530,1531,1532, - 1622,1625,1626,1627,1628, - 1624,1629,1630,1631,1632, - 1722,1725,1726,1727,1728, - 1724,1729,1730,1731,1732, - 1822,1825,1826,1827,1828, - 1824,1829,1830,1831,1832, - 1922,1925,1926,1927,1928, - 1924,1929,1930,1931,1932, - 2022,2025,2026,2027,2028, - 2024,2029,2030,2031,2032, - 2122,2125,2126,2127,2128, - 2124,2129,2130,2131,2132, - 2222,2225,2226,2227,2228, - 2224,2229,2230,2231,2232 - }; - diff --git a/demos/antenna.i1 b/demos/antenna.i1 deleted file mode 100644 index eff2c9ece2ea014fa0d76528905d2ebb7447c126..0000000000000000000000000000000000000000 --- a/demos/antenna.i1 +++ /dev/null @@ -1,38 +0,0 @@ -/* - Gmsh demo file (C) 2000 C. Geuzaine, J.-F. Remacle -*/ - -Point(x+01) = {dx, -e, -ll/2, sx}; Point(x+11) = {dx, e, ll/2, sx}; -Point(x+02) = {dx+rx, -e, -ll/2, sx}; Point(x+12) = {dx+rx, e, ll/2, sx}; -Point(x+03) = {dx, -e+rx, -ll/2, sx}; Point(x+13) = {dx, e+rx, ll/2, sx}; -Point(x+04) = {dx-rx, -e, -ll/2, sx}; Point(x+14) = {dx-rx, e, ll/2, sx}; -Point(x+05) = {dx, -e-rx, -ll/2, sx}; Point(x+15) = {dx, e-rx, ll/2, sx}; -Point(x+06) = {dx, -e, -ll/2-lx, sx}; Point(x+16) = {dx, e, ll/2+lx, sx}; -Point(x+07) = {dx+rx, -e, -ll/2-lx, sx}; Point(x+17) = {dx+rx, e, ll/2+lx, sx}; -Point(x+08) = {dx, -e+rx, -ll/2-lx, sx}; Point(x+18) = {dx, e+rx, ll/2+lx, sx}; -Point(x+09) = {dx-rx, -e, -ll/2-lx, sx}; Point(x+19) = {dx-rx, e, ll/2+lx, sx}; -Point(x+10) = {dx, -e-rx, -ll/2-lx, sx}; Point(x+20) = {dx, e-rx, ll/2+lx, sx}; - -Circle(x+01) = {x+02,x+01,x+03}; Circle(x+05) = {x+07,x+06,x+08}; Line(x+09) = {x+02,x+07}; -Circle(x+02) = {x+03,x+01,x+04}; Circle(x+06) = {x+08,x+06,x+09}; Line(x+10) = {x+03,x+08}; -Circle(x+03) = {x+04,x+01,x+05}; Circle(x+07) = {x+09,x+06,x+10}; Line(x+11) = {x+04,x+09}; -Circle(x+04) = {x+05,x+01,x+02}; Circle(x+08) = {x+10,x+06,x+07}; Line(x+12) = {x+05,x+10}; - -Circle(x+13) = {x+12,x+11,x+13}; Circle(x+17) = {x+17,x+16,x+18}; Line(x+21) = {x+12,x+17}; -Circle(x+14) = {x+13,x+11,x+14}; Circle(x+18) = {x+18,x+16,x+19}; Line(x+22) = {x+13,x+18}; -Circle(x+15) = {x+14,x+11,x+15}; Circle(x+19) = {x+19,x+16,x+20}; Line(x+23) = {x+14,x+19}; -Circle(x+16) = {x+15,x+11,x+12}; Circle(x+20) = {x+20,x+16,x+17}; Line(x+24) = {x+15,x+20}; - -Line Loop(x+01) = {x+02,x+03,x+04,x+01}; Plane Surface(x+21) = {x+01}; -Line Loop(x+02) = {x+07,x+08,x+05,x+06}; Plane Surface(x+22) = {x+02}; -Line Loop(x+03) = {x+16,x+13,x+14,x+15}; Plane Surface(x+23) = {x+03}; -Line Loop(x+04) = {x+20,x+17,x+18,x+19}; Plane Surface(x+24) = {x+04}; -Line Loop(x+05) = {x+08,-(x+09),-(x+04),x+12}; Ruled Surface(x+25) = {x+05}; -Line Loop(x+06) = {x+12,-(x+07),-(x+11),x+03}; Ruled Surface(x+26) = {x+06}; -Line Loop(x+07) = {-(x+11),-(x+02),x+10,x+06}; Ruled Surface(x+27) = {x+07}; -Line Loop(x+08) = {-(x+10),-(x+01),x+09,x+05}; Ruled Surface(x+28) = {x+08}; -Line Loop(x+09) = {x+21,-(x+20),-(x+24),x+16}; Ruled Surface(x+29) = {x+09}; -Line Loop(x+10) = {-(x+24),-(x+15),x+23,x+19}; Ruled Surface(x+30) = {x+10}; -Line Loop(x+11) = {x+23,-(x+18),-(x+22),x+14}; Ruled Surface(x+31) = {x+11}; -Line Loop(x+12) = {x+22,-(x+17),-(x+21),x+13}; Ruled Surface(x+32) = {x+12}; - diff --git a/demos/filter.geo b/demos/filter.geo deleted file mode 100644 index 3854840329a31c13978ebd939f506f12e3c67156..0000000000000000000000000000000000000000 --- a/demos/filter.geo +++ /dev/null @@ -1,485 +0,0 @@ -/* - Gmsh demo file (C) 2000 C. Geuzaine, J.-F. Remacle -*/ - -ech = 0.001 ; -a = 8.0 ; -b = 20.45 ; -c = 45.55 ; -d = 58.0 ; -e = 66.0 ; -f = 23.0 ; -g = 20.0 ; -h = 2.8 ; -i = 8.0 ; -k = 5.0 ; -in = 1.0 ; -did = 4.0 ; -ded = 11.7 ; -dame = 1.25 ; -dtef = 4.0 ; - -sizereson = 1.5 ; -sizeresoni = 1. ; -sizebig = 4.0 ; -sizeame = 1.0 ; -sizetef = 1.0 ; - -a = a* ech ; -b = b* ech ; -c = c* ech ; -d = d* ech ; -e = e* ech ; -f = f* ech ; -g = g* ech ; -h = h* ech ; -i = i* ech ; -k = k* ech ; -j = f/2 ; -in = in * ech ; -did = did* ech ; -ded = ded* ech ; -dame = dame* ech ; -dtef = dtef* ech ; - -rid = did/2.0 ; -red = ded/2.0 ; -rame=dame/2 ; -rtef=dtef/2 ; - - -sizereson = sizereson * ech ; -sizeresoni = sizeresoni * ech ; -sizebig = sizebig * ech ; -sizeame = sizeame * ech ; -sizetef = sizetef * ech ; - -/* box */ - -Point(1) = {0,0,0,sizebig} ; -Point(2) = {e,0,0,sizebig} ; -Point(3) = {e,f,0,sizebig} ; -Point(4) = {0,f,0,sizebig} ; -Point(5) = {0,0,i,sizebig} ; -Point(6) = {e,0,i,sizebig} ; -Point(7) = {e,f,i,sizebig} ; -Point(8) = {0,f,i,sizebig} ; -Point(81) = {e/2,0,0,sizebig}; - -/* left reson */ - -Point(9) = {b,j,0,sizeresoni} ; -Point(10) = {b+rid,j,0,sizeresoni} ; -Point(11) = {b,j+rid,0,sizeresoni} ; -Point(12) = {b-rid,j,0,sizeresoni} ; -Point(13) = {b,j-rid,0,sizeresoni} ; -Point(14) = {b+red,j,0,sizereson} ; -Point(15) = {b,j+red,0,sizereson} ; -Point(16) = {b-red,j,0,sizereson} ; -Point(17) = {b,j-red,0,sizereson} ; - -Point(18) = {b,j,h,sizeresoni} ; -Point(19) = {b+rid,j,h,sizeresoni} ; -Point(20) = {b,j+rid,h,sizeresoni} ; -Point(21) = {b-rid,j,h,sizeresoni} ; -Point(22) = {b,j-rid,h,sizeresoni} ; -Point(23) = {b+red,j,h,sizereson} ; -Point(24) = {b,j+red,h,sizereson} ; -Point(25) = {b-red,j,h,sizereson} ; -Point(26) = {b,j-red,h,sizereson} ; - -/* right reson */ - -Point(27) = {c,j,0,sizeresoni} ; -Point(28) = {c+rid,j,0,sizeresoni} ; -Point(29) = {c,j+rid,0,sizeresoni} ; -Point(30) = {c-rid,j,0,sizeresoni} ; -Point(31) = {c,j-rid,0,sizeresoni} ; -Point(32) = {c+red,j,0,sizereson} ; -Point(33) = {c,j+red,0,sizereson} ; -Point(34) = {c-red,j,0,sizereson} ; -Point(35) = {c,j-red,0,sizereson} ; - -Point(36) = {c,j,h,sizeresoni} ; -Point(37) = {c+rid,j,h,sizeresoni} ; -Point(38) = {c,j+rid,h,sizeresoni} ; -Point(39) = {c-rid,j,h,sizeresoni} ; -Point(40) = {c,j-rid,h,sizeresoni} ; -Point(41) = {c+red,j,h,sizereson} ; -Point(42) = {c,j+red,h,sizereson} ; -Point(43) = {c-red,j,h,sizereson} ; -Point(44) = {c,j-red,h,sizereson} ; - -/* left cab */ - -Point(45) = {a,0,0,sizeame} ; -Point(46) = {a,0,rame,sizeame} ; -Point(47) = {a-rame,0,0,sizeame} ; -Point(48) = {a+rame,0,0,sizeame} ; - -Point(49) = {a,-k,0,sizeame} ; -Point(50) = {a,-k,rame,sizeame} ; -Point(51) = {a-rame,-k,0,sizeame} ; -Point(52) = {a+rame,-k,0,sizeame} ; - -Point(53) = {a,g,0,sizeame} ; -Point(54) = {a,g,rame,sizeame} ; -Point(55) = {a-rame,g,0,sizeame} ; -Point(56) = {a+rame,g,0,sizeame} ; - -/* right cab */ - -Point(57) = {d,0,0,sizeame} ; -Point(58) = {d,0,rame,sizeame} ; -Point(59) = {d-rame,0,0,sizeame} ; -Point(60) = {d+rame,0,0,sizeame} ; - -Point(61) = {d,-k,0,sizeame} ; -Point(62) = {d,-k,rame,sizeame} ; -Point(63) = {d-rame,-k,0,sizeame} ; -Point(64) = {d+rame,-k,0,sizeame} ; - -Point(65) = {d,g,0,sizeame} ; -Point(66) = {d,g,rame,sizeame} ; -Point(67) = {d-rame,g,0,sizeame} ; -Point(68) = {d+rame,g,0,sizeame} ; - -/* left teflon */ - -Point(69) = {a,0,rtef,sizetef} ; -Point(70) = {a-rtef,0,0,sizetef} ; -Point(71) = {a+rtef,0,0,sizetef} ; - -Point(72) = {a,-k,rtef,sizetef} ; -Point(73) = {a-rtef,-k,0,sizetef} ; -Point(74) = {a+rtef,-k,0,sizetef} ; - - -/* right teflon */ - -Point(75) = {d,0,rtef,sizetef} ; -Point(76) = {d-rtef,0,0,sizetef} ; -Point(77) = {d+rtef,0,0,sizetef} ; - -Point(78) = {d,-k,rtef,sizetef} ; -Point(79) = {d-rtef,-k,0,sizetef} ; -Point(80) = {d+rtef,-k,0,sizetef} ; - -/* in */ - - -Point(82) = {d,-k-in,rtef,sizetef} ; -Point(83) = {d-rtef,-k-in,0,sizetef} ; -Point(84) = {d+rtef,-k-in,0,sizetef} ; - - -Point(85) = {d,-k-in,0,sizeame} ; -Point(86) = {d,-k-in,rame,sizeame} ; -Point(87) = {d-rame,-k-in,0,sizeame} ; -Point(88) = {d+rame,-k-in,0,sizeame} ; - - -/* eps teflon = 2.03 - eps res = 38 */ - -Circle(1) = {20,18,21}; -Circle(2) = {21,18,22}; -Circle(3) = {22,18,19}; -Circle(4) = {19,18,20}; -Circle(5) = {11,9,12}; -Circle(6) = {12,9,13}; -Circle(7) = {13,9,10}; -Circle(8) = {10,9,11}; -Circle(9) = {24,18,25}; -Circle(10) = {25,18,26}; -Circle(11) = {26,18,23}; -Circle(12) = {23,18,24}; -Circle(13) = {15,9,16}; -Circle(14) = {16,9,17}; -Circle(15) = {17,9,14}; -Circle(16) = {14,9,15}; -Circle(17) = {38,36,39}; -Circle(18) = {39,36,40}; -Circle(19) = {40,36,37}; -Circle(20) = {37,36,38}; -Circle(21) = {42,36,43}; -Circle(22) = {43,36,44}; -Circle(23) = {44,36,41}; -Circle(24) = {41,36,42}; -Circle(25) = {29,27,30}; -Circle(26) = {30,27,31}; -Circle(27) = {31,27,28}; -Circle(28) = {28,27,29}; -Circle(29) = {33,27,34}; -Circle(30) = {34,27,35}; -Circle(31) = {35,27,32}; -Circle(32) = {32,27,33}; -Line(33) = {8,7}; -Line(34) = {7,3}; -Line(35) = {8,4}; -Line(36) = {5,1}; -Line(37) = {6,2}; -Line(38) = {6,7}; -Line(39) = {5,8}; -Line(40) = {2,3}; -Line(41) = {1,4}; -Line(42) = {3,4}; -Line(43) = {6,5}; -Circle(44) = {66,65,67}; -Circle(45) = {68,65,66}; -Circle(46) = {54,53,55}; -Circle(47) = {56,53,54}; -Circle(48) = {50,49,51}; -Circle(49) = {52,49,50}; -Circle(50) = {72,49,73}; -Circle(51) = {74,49,72}; -Circle(52) = {48,45,46}; -Circle(53) = {46,45,47}; -Circle(54) = {69,45,70}; -Circle(55) = {71,45,69}; -Circle(56) = {62,61,63}; -Circle(57) = {64,61,62}; -Circle(58) = {80,61,78}; -Circle(59) = {78,61,79}; -Circle(60) = {60,57,58}; -Circle(61) = {58,57,59}; -Circle(62) = {77,57,75}; -Circle(63) = {75,57,76}; -Line(64) = {2,77}; -Line(65) = {77,60}; -Line(66) = {60,57}; -Line(67) = {57,59}; -Line(68) = {59,76}; -Line(70) = {71,48}; -Line(71) = {48,45}; -Line(72) = {45,47}; -Line(73) = {47,70}; -Line(74) = {70,1}; -Line(75) = {70,73}; -Line(76) = {47,51}; -Line(77) = {48,52}; -Line(78) = {71,74}; -Line(79) = {74,52}; -Line(80) = {52,49}; -Line(81) = {49,51}; -Line(82) = {51,73}; -Line(83) = {76,79}; -Line(84) = {59,63}; -Line(85) = {60,64}; -Line(86) = {77,80}; -Line(87) = {79,63}; -Line(88) = {63,61}; -Line(89) = {61,64}; -Line(90) = {64,80}; -Line(91) = {59,67}; -Line(92) = {60,68}; -Line(93) = {67,65}; -Line(94) = {65,68}; -Line(95) = {48,56}; -Line(96) = {47,55}; -Line(97) = {55,53}; -Line(98) = {53,56}; -Line Loop(99) = {11,12,9,10}; -Line Loop(100) = {4,1,2,3}; -Plane Surface(101) = {99,100}; -Line Loop(102) = {15,16,13,14}; -Line Loop(103) = {7,8,5,6}; -Plane Surface(104) = {102,103}; -Plane Surface(105) = {103}; -Plane Surface(106) = {100}; -Line Loop(107) = {31,32,29,30}; -Line Loop(108) = {27,28,25,26}; -Plane Surface(109) = {107,108}; -Line Loop(110) = {23,24,21,22}; -Line Loop(111) = {19,20,17,18}; -Plane Surface(112) = {110,111}; -Plane Surface(113) = {111}; -Plane Surface(114) = {108}; -Line(115) = {16,25}; -Line(116) = {15,24}; -Line(117) = {14,23}; -Line(118) = {17,26}; -Line(119) = {12,21}; -Line(120) = {11,20}; -Line(121) = {19,10}; -Line(122) = {22,13}; -Line(123) = {44,35}; -Line(124) = {41,32}; -Line(125) = {43,34}; -Line(126) = {42,33}; -Line(127) = {40,31}; -Line(128) = {37,28}; -Line(129) = {38,29}; -Line(130) = {39,30}; - -Line Loop(131) = {31,-124,-23,123}; -Ruled Surface(132) = {131}; -Line Loop(133) = {30,-123,-22,125}; -Ruled Surface(134) = {133}; -Line Loop(135) = {29,-125,-21,126}; -Ruled Surface(136) = {135}; -Line Loop(137) = {32,-126,-24,124}; -Ruled Surface(138) = {137}; -Line Loop(139) = {11,-117,-15,118}; -Ruled Surface(140) = {139}; -Line Loop(141) = {10,-118,-14,115}; -Ruled Surface(142) = {141}; -Line Loop(143) = {9,-115,-13,116}; -Ruled Surface(144) = {143}; -Line Loop(145) = {-116,-16,117,12}; -Ruled Surface(146) = {145}; -Line Loop(147) = {-1,-120,5,119}; -Ruled Surface(148) = {147}; -Line Loop(149) = {-6,119,2,122}; -Ruled Surface(150) = {149}; -Line Loop(151) = {-7,-122,3,121}; -Ruled Surface(152) = {151}; -Line Loop(153) = {120,-4,121,8}; -Ruled Surface(154) = {153}; -Line Loop(155) = {27,-128,-19,127}; -Ruled Surface(156) = {155}; -Line Loop(157) = {-127,-18,130,26}; -Ruled Surface(158) = {157}; -Line Loop(159) = {130,-25,-129,17}; -Ruled Surface(160) = {159}; -Line Loop(161) = {28,-129,-20,128}; -Ruled Surface(162) = {161}; -Line(167) = {78,75}; -Line(168) = {62,58}; -Line(169) = {75,66}; -Line(170) = {58,66}; -Line Loop(171) = {-167,-58,-86,62}; -Ruled Surface(172) = {171}; -Line Loop(173) = {63,83,-59,167}; -Ruled Surface(174) = {173}; -Line Loop(175) = {84,-56,168,61}; -Ruled Surface(176) = {175}; -Line Loop(177) = {-168,-57,-85,60}; -Ruled Surface(178) = {177}; -Line Loop(179) = {-91,-61,170,44}; -Ruled Surface(180) = {179}; -Line Loop(181) = {170,-45,-92,60}; -Ruled Surface(182) = {181}; -Line Loop(183) = {-87,-59,-58,-90,57,56}; -Plane Surface(184) = {183}; -Line Loop(185) = {68,-63,-62,65,60,61}; -Plane Surface(186) = {185}; -Line Loop(187) = {93,94,45,44}; -Plane Surface(188) = {187}; -Line Loop(189) = {-87,-83,-68,84}; -Plane Surface(190) = {189}; -Line Loop(191) = {-90,-85,-65,86}; -Plane Surface(192) = {191}; -Line(195) = {72,69}; -Line(196) = {50,46}; -Line(197) = {46,54}; -Line Loop(198) = {96,-46,-197,53}; -Ruled Surface(199) = {198}; -Line Loop(200) = {197,-47,-95,52}; -Ruled Surface(201) = {200}; -Line Loop(202) = {75,-50,195,54}; -Ruled Surface(203) = {202}; -Line Loop(204) = {-195,-51,-78,55}; -Ruled Surface(205) = {204}; -Line Loop(206) = {49,196,-52,77}; -Ruled Surface(207) = {206}; -Line Loop(208) = {76,-48,196,53}; -Ruled Surface(209) = {208}; -Line Loop(210) = {48,82,-50,-51,79,49}; -Plane Surface(211) = {210}; -Line Loop(212) = {73,-54,-55,70,52,53}; -Plane Surface(213) = {212}; -Line Loop(214) = {-79,-78,70,77}; -Plane Surface(215) = {214}; -Line Loop(216) = {82,-75,-73,76}; -Plane Surface(217) = {216}; -Line Loop(218) = {97,98,47,46}; -Plane Surface(219) = {218}; -Line Loop(226) = {39,33,-38,43}; -Plane Surface(227) = {226}; -Line Loop(228) = {-35,33,34,42}; -Plane Surface(229) = {228}; -Line Loop(230) = {41,-35,-39,36}; -Plane Surface(231) = {230}; -Line Loop(232) = {-34,-38,37,40}; -Plane Surface(233) = {232}; -Line(234) = {76,81}; -Line(235) = {81,71}; -Line Loop(236) = {234,235,55,54,74,-36,-43,37,64,62,63}; -Plane Surface(237) = {236}; -Line Loop(238) = {92,-94,-93,-91,68,234,235,70,95,-98,-97,-96,73,74,41,-42,-40,64,65}; -Plane Surface(239) = {238,107,102}; - - - -Surface Loop(601) = {152,104,140,-101,146,144,142,-154,-148,150}; -Complex Volume(602) = {601}; -Surface Loop(603) = {160,-158,-156,109,-132,-138,-136,-134,-112,-162}; -Complex Volume(604) = {603}; -Surface Loop(605) = {213,217,-211,-209,207,-215,205,203}; -Complex Volume(606) = {605}; -Surface Loop(607) = {186,190,-184,174,172,192,-178,-176}; -Complex Volume(608) = {607}; - - -Surface Loop(6001) = {213,-239,-182,180,186,237,231,-229,227,-233,-188, - -201,-199,-219,132,138,136,134,112,156,-114,162,-160,158,-140,101, - -146,-144,-142,154,148,-105,-152,-150}; -Complex Volume(6002) = {6001}; - -Delete { Line{169} ; } - -Line(6003) = {83,87}; -Line(6004) = {87,85}; -Line(6005) = {85,88}; -Line(6006) = {88,84}; -Circle(6007) = {84,85,82}; -Circle(6008) = {82,85,83}; -Circle(6009) = {88,85,86}; -Circle(6010) = {86,85,87}; -Line(6011) = {83,79}; -Line(6012) = {87,63}; -Line(6013) = {88,64}; -Line(6014) = {84,80}; -Line(6015) = {82,78}; -Line(6016) = {86,62}; -Line Loop(6017) = {90,-6014,-6006,6013}; -Plane Surface(6018) = {6017}; -Line Loop(6019) = {87,-6012,-6003,6011}; -Plane Surface(6020) = {6019}; -Line Loop(6021) = {6010,-6003,-6008,-6007,-6006,6009}; -Plane Surface(6022) = {6021}; -Line Loop(6023) = {-58,-6014,6007,6015}; -Ruled Surface(6024) = {6023}; -Line Loop(6025) = {6011,-59,-6015,6008}; -Ruled Surface(6026) = {6025}; -//Line Loop(6027) = {-57,-6013,6009,6016}; -//Ruled Surface(6028) = {6027}; -Line Loop(6029) = {-56,-6016,6010,6012}; -Ruled Surface(6030) = {6029}; -Surface Loop(6031) = {184,6020,6030,6028,6018,-6024,-6022,-6026}; -//Complex Volume(6032) = {6031}; - - -AIR = 10000 ; -R1 = 20000 ; -R2 = 30000 ; -T1 = 40000 ; -T2 = 50000 ; -CLD0 = 60000 ; -SOU = 70000 ; -CLTEM = 80000 ; - -Physical Volume (AIR) = 6002; - -Physical Volume (T1) = 606; -Physical Volume (T2) = 608; -Physical Volume (R1) = 602; -Physical Volume (R2) = 604; -//Physical Volume (SOU) = 6032; - -Physical Surface (CLD0) = {231,229,223,237,227, - 199,201,219,209,207,203,205, - 180,182,188,176,178,174,172, - 6026,6024,6028,6030}; -Physical Surface (CLTEM) = {211,6022}; diff --git a/demos/machine.geo b/demos/machine.geo deleted file mode 100644 index e06f090ffac04ef7dcee68da62fc26aec6bd1207..0000000000000000000000000000000000000000 --- a/demos/machine.geo +++ /dev/null @@ -1,186 +0,0 @@ -/* - Gmsh demo file (C) 2000 C. Geuzaine, J.-F. Remacle -*/ - -// All dimensions in meters and rads - -Lc = 0.0004 ; // Base char length -Z = 0.0 ; // Z-coord - -// Stator data - -nbs = 36 ; // Num. of poles -dths = 2 * Pi / nbs ; // Ang. shift between 2 poles. - -// Pi is the only constant predefined in Gmsh - -th0s = dths / 2 ; // Angular pos. -des = 0.1529 ; // Ext. diam. -res = des / 2 ; -dis = 0.09208 ; // Int. diam. -ris = dis / 2 ; - -hs = 0.0153 ; // Pole height -h1s = 0.000762 ; // Dist. intersection rec.-int. circle -d1s = 0.00636 ; // Diam. sup. circle -r1s = d1s / 2 ; -rc1s = 0.00084 ; // Radius convex rec. -rc2s = 0.000508 ; // Radius concave rec. -e1s = 0.0025 ; // Dist. between 2 sides at int diam -e2s = 0.00424 ; // Dist. between 2 sides at 1st rec. - -// Rotor data - -nbr = 32 ; // Num. of poles -dthr = 2 * Pi / nbr ; // Angular shift betw. 2 poles - -th0r = dths / 2 ; // Ang. pos. rotor -gap = 0.00080 ; // Air gap width -espa = 0.0015 ; // Dist. stator-pole top -der = 0.09208 ; // Ext. diam rotor -rer = der / 2 ; -dir = 0.03175 ; // Diam. int. -rir = dir / 2 ; - -hr = 0.01425 ; // Pole height -d1r = 0.00426 ; // Diam. sup circle -r1r = d1r / 2 ; -d2r = 0.00213 ; // Diam. inf. circle -r2r = d2r / 2 ; - -dist = rer - espa ; // Radial dist. of intersect. point - -/* 'newp' is a meta variable defining a new point number for you. - This is mostly useful with included files. There is also 'newreg' - which defines a new region number (that is, everything that is not - a point). */ - -pAxe = newp ; Point(pAxe) = { 0. , 0. , 0., 15*Lc} ; - -// axis - -p1 = newp ; Point(p1) = { rir, 0. , 0., 15*Lc} ; -p2 = newp ; Point(p2) = { 0. , rir, 0., 15*Lc} ; - -lin1 = newreg ; Line(lin1) = {pAxe,p1} ; -arc1 = newreg ; Circle(arc1) = {p1,pAxe,p2} ; -lin2 = newreg ; Line(lin2) = {p2, pAxe} ; - -reg1 = newreg ; Line Loop(reg1) = {lin1,arc1,lin2} ; -reg2 = newreg ; Plane Surface(reg2) = {reg1} ; - -// Rotor lateral sides - -p3 = newp ; Point(p3) = { rer-gap, 0. , 0., Lc} ; -p4 = newp ; Point(p4) = { 0. , rer-gap, 0., Lc} ; - -lin3 = newreg ; Line(lin3) = {p1, p3} ; -arc2 = newreg ; Circle(arc2) = {p3,pAxe,p4} ; -lin4 = newreg ; Line(lin4) = {p4, p2} ; - -// Air gap - -p5 = newp ; Point(p5) = { ris, 0. , 0., Lc} ; -p6 = newp ; Point(p6) = { 0. , ris, 0., Lc} ; - -lin5 = newreg ; Line(lin5) = {p3, p5} ; -lin6 = newreg ; Line(lin6) = {p6, p4} ; - -// Stator exterior - -p7 = newp ; Point(p7) = { res, 0. , 0. , 15*Lc } ; -p8 = newp ; Point(p8) = { 0. , res, 0. , 15*Lc } ; - -lin7 = newreg ; Line(lin7) = {p5, p7} ; -arc4 = newreg ; Circle(arc4) = {p7,pAxe,p8} ; -lin8 = newreg ; Line(lin8) = {p8, p6} ; - -PP1 = p5 ; PPB = p6 ; - -// 8 rotor poles - -D1 = dist ; -H = hr ; -R1 = r1r ; -R2 = r2r ; - -/* You can include files with the 'Include' command. Note that *ALL* - variables in Gmsh are global. Including a file is similar to paste - its content where the include command is located. */ - -i = 0; - -For(1:8) - i++ ; - th = th0r + (i - 1) * dthr ; - Include "machine.i1" ; -EndFor - -// 9 stator poles - -dth = dths ; -D2 = ris ; -H = hs ; -R1 = r1s ; -R2 = rc1s ; -R3 = rc2s ; -E1 = e1s ; -E2 = e2s ; -H1 = h1s ; - -i = 1 ; th = th0s + (i - 1) * dths ; -Include "machine.i2" ; -PP2 = p1 ; PP3 = p9 ; -i = 2 ; th = th0s + (i - 1) * dths ; -Include "machine.i2" ; -PP4 = p1 ; PP5 = p9 ; -i = 3 ; th = th0s + (i - 1) * dths ; -Include "machine.i2" ; -PP6 = p1 ; PP7 = p9 ; -i = 4 ; th = th0s + (i - 1) * dths ; -Include "machine.i2" ; -PP8 = p1 ; PP9 = p9 ; -i = 5 ; th = th0s + (i - 1) * dths ; -Include "machine.i2" ; -PP10 = p1 ; PP11 = p9 ; -i = 6 ; th = th0s + (i - 1) * dths ; -Include "machine.i2" ; -PP12 = p1 ; PP13 = p9 ; -i = 7 ; th = th0s + (i - 1) * dths ; -Include "machine.i2" ; -PP14 = p1 ; PP15 = p9 ; -i = 8 ; th = th0s + (i - 1) * dths ; -Include "machine.i2" ; -PP16 = p1 ; PP17 = p9 ; -i = 9 ; th = th0s + (i - 1) * dths ; -Include "machine.i2" ; -PP18 = p1 ; PP19 = p9 ; - -lin1 = newreg ; Line(lin1) = {PP1 , PP2 } ; -lin1 = newreg ; Line(lin1) = {PP3 , PP4 } ; -lin1 = newreg ; Line(lin1) = {PP5 , PP6 } ; -lin1 = newreg ; Line(lin1) = {PP7 , PP8 } ; -lin1 = newreg ; Line(lin1) = {PP9 , PP10} ; -lin1 = newreg ; Line(lin1) = {PP11, PP12} ; -lin1 = newreg ; Line(lin1) = {PP13, PP14} ; -lin1 = newreg ; Line(lin1) = {PP15, PP16} ; -lin1 = newreg ; Line(lin1) = {PP17, PP18} ; -lin1 = newreg ; Line(lin1) = {PP19, PPB } ; - - -Line Loop(145) = {8,-2,6,7}; -Plane Surface(146) = {145,68,61,54,47,40,33,26,19}; - -Line Loop(147) = {-7,9,133,-74,134,-81,135,-88,136,-95,137,-102, - 138,-109,139,-116,140,-123,141,-130,142,10}; -Plane Surface(148) = {147}; - -Line Loop(149) = {70,71,72,73,134,77,78,79,80,135,84,85,86,87,136, - 91,92,93,94,137,98,99,100,101,138,105,106,107,108, - 139,112,113,114,115,140,119,120,121,122,141,126,127, - 128,129,142,-13,-12,-11,133}; -Plane Surface(150) = {149}; - -/* One should define physical regions to specify what to - save. Otherwise, only mesh points will be output in the mesh - file. */ diff --git a/demos/machine.i1 b/demos/machine.i1 deleted file mode 100644 index aa6e3e405789d750dce09783ef14321e825e736a..0000000000000000000000000000000000000000 --- a/demos/machine.i1 +++ /dev/null @@ -1,51 +0,0 @@ -/* - Gmsh demo file (C) 2000 C. Geuzaine, J.-F. Remacle -*/ - -/* Variables that must be defined when including this file: - th,D1,H,R1,R2,Lc */ - -XC1 = (D1 - R1) * Cos(th) ; // Sup. circle center -YC1 = (D1 - R1) * Sin(th) ; -XC2 = (D1 - H + R2) * Cos(th) ; // Inf. circle center -YC2 = (D1 - H + R2) * Sin(th) ; - -XS1 = (D1) * Cos(th) ; // Sup. circle top -YS1 = (D1) * Sin(th) ; - -dth = Pi - ArcCos((R1 - R2) / (H - R1 - R2)) ; - -XA1 = XC1 + R1 * Cos(th - dth) ; // Sup. right tangency point -YA1 = YC1 + R1 * Sin(th - dth) ; -XA2 = XC2 + R2 * Cos(th - dth) ; // Inf. right tangency point -YA2 = YC2 + R2 * Sin(th - dth) ; -XB1 = XC1 + R1 * Cos(th + dth) ; // Sup. left tangency point -YB1 = YC1 + R1 * Sin(th + dth) ; -XB2 = XC2 + R2 * Cos(th + dth) ; // Inf. left tangency point -YB2 = YC2 + R2 * Sin(th + dth) ; - -// Pole - -/* 'newp' is a meta variable defining a new point number for - you. This is mostly useful with included files. There is also - 'newreg' which defines a new region number (that is, everything - that is not a point). */ - -p1 = newp ; Point(p1) = { XA2 , YA2, 0., 3*Lc} ; -p2 = newp ; Point(p2) = { XA1 , YA1, 0., Lc} ; -p3 = newp ; Point(p3) = { XC1 , YC1, 0., Lc} ; -p4 = newp ; Point(p4) = { XB1 , YB1, 0., Lc} ; -p5 = newp ; Point(p5) = { XB2 , YB2, 0., 3*Lc} ; -p6 = newp ; Point(p6) = { XC2 , YC2, 0., 3*Lc} ; - -p7 = newp ; Point(p7) = { XS1 , YS1, 0., Lc} ; - -lin1 = newreg ; Line(lin1) = {p1,p2} ; -arc1 = newreg ; Circle (arc1) = {p2,p3,p7} ; -arc2 = newreg ; Circle (arc2) = {p7,p3,p4} ; -lin2 = newreg ; Line(lin2) = {p4,p5} ; -arc3 = newreg ; Circle(arc3) = {p5,p6,p1} ; - -reg1 = newreg ; Line Loop(reg1) = {lin1,arc1,arc2,lin2,arc3}; -reg2 = newreg ; Plane Surface(reg2) = {reg1}; - diff --git a/demos/machine.i2 b/demos/machine.i2 deleted file mode 100644 index 9792c42e4a1cc3ebe85a71a076e2cc8413c5e563..0000000000000000000000000000000000000000 --- a/demos/machine.i2 +++ /dev/null @@ -1,42 +0,0 @@ -/* - Gmsh demo file (C) 2000 C. Geuzaine, J.-F. Remacle -*/ - -/* Variables that must be defined when including this file: - th,D2,H,R1,E1 */ - -dtH = ArcSin(E1/2./D2) ; -XH6 = D2 * Cos(th + dtH ) ; // Slab opening -YH6 = D2 * Sin(th + dtH ) ; -XH7 = D2 * Cos(th - dtH ) ; -YH7 = D2 * Sin(th - dtH ) ; - -D1 = D2 + H ; -XH2 = (D1 - R1) * Cos(th) ; // Circle center -YH2 = (D1 - R1) * Sin(th) ; - -XS1 = (D1) * Cos(th) ; // Circle top -YS1 = (D1) * Sin(th) ; - -XT1 = XH2 + R1 * Cos(th + Pi / 2.) ; -YT1 = YH2 + R1 * Sin(th + Pi / 2.) ; -XT2 = XH2 + R1 * Cos(th - Pi / 2.) ; -YT2 = YH2 + R1 * Sin(th - Pi / 2.) ; - -p1 = newp ; Point(p1) = { XH7 , YH7, 0., Lc} ; -p4 = newp ; Point(p4) = { XT2 , YT2, 0., 3*Lc} ; -p5 = newp ; Point(p5) = { XH2 , YH2, 0., 3*Lc} ; -p6 = newp ; Point(p6) = { XT1 , YT1, 0., 3*Lc} ; -p9 = newp ; Point(p9) = { XH6 , YH6, 0., Lc} ; - -p10 = newp ; Point(p10) = { XS1 , YS1, 0., 3*Lc} ; - -lin1 = newreg ; Line(lin1) = {p1, p4} ; -arc1 = newreg ; Circle(arc1) = {p4, p5, p10} ; -arc2 = newreg ; Circle(arc2) = {p10, p5, p6} ; -lin6 = newreg ; Line(lin6) = {p6, p9} ; - -lin7 = newreg ; Line(lin7) = {p9, p1} ; - -reg1 = newreg ; Line Loop(reg1) = {lin1,arc1,arc2,lin6,lin7} ; -reg2 = newreg ; Plane Surface(reg2) = {reg1} ; diff --git a/demos/piece-extr.geo b/demos/piece-extr.geo deleted file mode 100644 index 070e28da60f043c0863f0fbf1916912e9652bd5e..0000000000000000000000000000000000000000 --- a/demos/piece-extr.geo +++ /dev/null @@ -1,96 +0,0 @@ -/* - Gmsh demo file (C) 2000 C. Geuzaine, J.-F. Remacle -*/ - -r1 = .1; -l1 = 1.; -l2 = .8; -l3 = .1; -r2 = 1.1; -lc = .1; -lc2 = .05; -rint = .2; -rext = .3; - -Point(1) = {0.0,0.0,0.0,lc}; -Point(2) = {l1,0.0,0.0,lc2}; -Point(3) = {l1-r1,0.0,0.0,lc2}; -Point(4) = {l1,r1,0.0,lc2}; -Point(5) = {l1,-r1,0.0,lc2}; -Point(6) = {l1+l2,r1,0.0,lc}; -Point(7) = {l1+l2,-r1,0.0,lc}; -Point(8) = {l1+l2,-r1-l3,0.0,lc}; -Point(9) = {l1+l2,r1+l3,0.0,lc}; - -Line(1) = {4,6}; -Line(2) = {6,9}; -Line(3) = {7,8}; -Line(4) = {5,7}; -Circle(5) = {4,2,3}; -Circle(6) = {3,2,5}; - -r = 2*3.14159/5; -Point(10) = { (l1 + r2) * Cos(r/2) , (l1 + r2) * Sin(r/2), 0.0, lc}; - -// Remember, all rotations are specified by the axis direction -// ({0,0,1}), an axis point ({0,0,0}) and a rotation angle (r) - -i = 0 ; - -For(1:4) - - i+=1 ; - - Rotate {{0.0,0.0,1.0},{0.0,0.0,0.0}, i*r} { - Duplicata { - Line{1}; Line{2}; Line{3}; - Line{4}; Line{5}; Line{6}; - Point{10}; - } - } - -EndFor - -Point(newp) = {rint,0,0,lc}; -Point(newp) = {rext,0,0,lc}; -Point(newp) = {-rint,0,0,lc}; -Point(newp) = {-rext,0,0,lc}; -Point(newp) = {0,rint,0,lc}; -Point(newp) = {0,rext,0,lc}; -Point(newp) = {0,-rint,0,lc}; -Point(newp) = {0,-rext,0,lc}; - -Circle(31) = {8,118,97}; -Circle(32) = {20,10,9}; -Circle(33) = {47,37,16}; -Circle(34) = {74,64,43}; -Circle(35) = {101,91,70}; -Circle(36) = {119,1,123}; -Circle(37) = {123,1,121}; -Circle(38) = {121,1,125}; -Circle(39) = {125,1,119}; -Circle(40) = {124,1,122}; -Circle(41) = {122,1,126}; -Circle(42) = {126,1,120}; -Circle(43) = {120,1,124}; - -Line Loop(44) = {37,38,39,36}; -Line Loop(46) = {40,41,42,43}; -Plane Surface(47) = {46,44}; - -Line Loop(48) = {-2,-1,5,6,4,3,31,-26,-25,29,30,28,27,35,-20,-19, - 23,24,22,21,34,-14,-13,17,18,16,15,33,-8,-7,11,12,10,9,32}; -Plane Surface(49) = {48,46}; - -ones[]={1,1,1,1,1,1,1,1,1,1}; -ep[]={0.01, 0.05, 0.1, 0.2, 0.5, 0.8, 0.9, 0.95, 0.99, 1}; -For i In {0:4} - ep2[i]=2*ep[i]; -EndFor - -Extrude Surface {47, {0,0,0.2}}{ Layers{ ones[], ones[], ep[] }; }; -Extrude Surface {49, {0,0,0.2}}{ Layers{ ones[], ones[], ep[] }; }; -Extrude Surface {91, {0,0,0.2}}{ Layers{ ones[{0:4}],ones[{0:4}], ep2[] }; }; -Extrude Surface {47, {0,0,-0.2}}{ Layers{ ones[{0:4}],ones[{0:4}], ep2[] }; }; - -Physical Volume(1) = 1 ; diff --git a/demos/piece.geo b/demos/piece.geo deleted file mode 100644 index 85f36431b1813ace56601305c25ae3ec3b22a070..0000000000000000000000000000000000000000 --- a/demos/piece.geo +++ /dev/null @@ -1,97 +0,0 @@ -/* - Gmsh demo file (C) 2000 C. Geuzaine, J.-F. Remacle -*/ - -r1 = .1; -l1 = 1.; -l2 = .8; -l3 = .1; -r2 = 1.1; -lc = .1; -lc2 = .05; -rint = .2; -rext = .3; - -Point(1) = {0.0,0.0,0.0,lc}; -Point(2) = {l1,0.0,0.0,lc2}; -Point(3) = {l1-r1,0.0,0.0,lc2}; -Point(4) = {l1,r1,0.0,lc2}; -Point(5) = {l1,-r1,0.0,lc2}; -Point(6) = {l1+l2,r1,0.0,lc}; -Point(7) = {l1+l2,-r1,0.0,lc}; -Point(8) = {l1+l2,-r1-l3,0.0,lc}; -Point(9) = {l1+l2,r1+l3,0.0,lc}; - -Line(1) = {4,6}; -Line(2) = {6,9}; -Line(3) = {7,8}; -Line(4) = {5,7}; -Circle(5) = {4,2,3}; -Circle(6) = {3,2,5}; - -r = 2*3.14159/5; -Point(10) = { (l1 + r2) * Cos(r/2) , (l1 + r2) * Sin(r/2), 0.0, lc}; - -// Remember, all rotations are specified by the axis direction -// ({0,0,1}), an axis point ({0,0,0}) and a rotation angle (r) - -i = 0 ; - -For(1:4) - - i+=1 ; - - Rotate {{0.0,0.0,1.0},{0.0,0.0,0.0}, i*r} { - Duplicata { - Line{1}; Line{2}; Line{3}; - Line{4}; Line{5}; Line{6}; - Point{10}; - } - } - -EndFor - -Point(newp) = {rint,0,0,lc}; -Point(newp) = {rext,0,0,lc}; -Point(newp) = {-rint,0,0,lc}; -Point(newp) = {-rext,0,0,lc}; -Point(newp) = {0,rint,0,lc}; -Point(newp) = {0,rext,0,lc}; -Point(newp) = {0,-rint,0,lc}; -Point(newp) = {0,-rext,0,lc}; - -Circle(31) = {8,118,97}; -Circle(32) = {20,10,9}; -Circle(33) = {47,37,16}; -Circle(34) = {74,64,43}; -Circle(35) = {101,91,70}; -Circle(36) = {119,1,123}; -Circle(37) = {123,1,121}; -Circle(38) = {121,1,125}; -Circle(39) = {125,1,119}; -Circle(40) = {124,1,122}; -Circle(41) = {122,1,126}; -Circle(42) = {126,1,120}; -Circle(43) = {120,1,124}; - -Line Loop(44) = {37,38,39,36}; -Line Loop(46) = {40,41,42,43}; -Plane Surface(47) = {46,44}; - -Line Loop(48) = {-2,-1,5,6,4,3,31,-26,-25,29,30,28,27,35,-20,-19, - 23,24,22,21,34,-14,-13,17,18,16,15,33,-8,-7,11,12,10,9,32}; -Plane Surface(49) = {48,46}; - -Extrude Surface {47, {0,0,0.2}}; -Extrude Surface {49, {0,0,0.2}}; -Extrude Surface {91, {0,0,0.2}}; -Extrude Surface {47, {0,0,-0.2}}; - -Surface Loop(373) = {90,371,359,78,82,363,367,86,325,329,317, - 321,330,301,288,135,49,139,143,147,151,155,159,163,167,171, - 175,179,183,187,191,195,199,203,207,211,215,219,223,227,231, - 235,239,243,247,251,255,259,263,267,271,343,347,351,355,372, - 305,309,313}; -Volume(374) = {373}; - -Physical Volume(1) = 374 ; diff --git a/demos/primitives.pos b/demos/primitives.pos deleted file mode 100644 index e068cfc8358b9ad6f599814999ecc55cf2d073eb..0000000000000000000000000000000000000000 --- a/demos/primitives.pos +++ /dev/null @@ -1,55 +0,0 @@ - -// Post-processing primitives in parsed format - -General.FastRedraw = 0 ; -General.Color.Background = White ; -General.Color.Foreground = Black ; -General.Color.Text = Black ; - -View "default"{ - SP(0,10,0){1} ; // a scalar point - VP(0,8,0){1,0,0} ; // a vector point - //TP(0,8,0){1,0,0,0,0,0,0,0,0} ; // a tensor point - SL(0,6,0, 1,6,0){1,2} ; // a scalar line - VL(0,4,0, 1,4,0){1,0,0, 2,0,0} ; // a vector line - ST(0,2,0, 1,2,0, 0,3,0){1,2,3} ; // a scalar triangle - VT(0,0,0, 1,0,0, 0,1,0){1,0,0, 2,0,0, 3,0,0} ; // a vector triangle - SS(0,-2,0, 1,-2,0, 0,-1,0, 0,-2,1){1,2,3,4} ; // a scalar tetrahedron - VS(0,-4,0, 1,-4,0, 0,-3,0, 0,-4,1){1,0,0, 2,0,0, 3,0,0, 4,0,0} ; // a vector tetrahedron -}; - - -View "with-options"{ - SP(0,10,0){1} ; - VP(0,8,0){1,0,0} ; - //TP(0,8,0){1,0,0,0,0,0,0,0,0} ; - SL(0,6,0, 1,6,0){1,2} ; - VL(0,4,0, 1,4,0){1,0,0, 2,0,0} ; - ST(0,2,0, 1,2,0, 0,3,0){1,2,3} ; - VT(0,0,0, 1,0,0, 0,1,0){1,0,0, 2,0,0, 3,0,0} ; - SS(0,-2,0, 1,-2,0, 0,-1,0, 0,-2,1){1,2,3,4} ; - VS(0,-4,0, 1,-4,0, 0,-3,0, 0,-4,1){1,0,0, 2,0,0, 3,0,0, 4,0,0} ; -}; - -View[1].OffsetX = 3 ; -View[1].IntervalsType = 2 ; -View[1].ShowElement = 1 ; -View[1].ArrowLocation = 2 ; -View[1].ColorTable = {Red,Green,Magenta,Cyan,Brown,Pink} ; - -View "with-options-2"{ - SP(0,10,0){1} ; - VP(0,8,0){1,0,0} ; - //TP(0,8,0){1,0,0,0,0,0,0,0,0} ; - SL(0,6,0, 1,6,0){1,2} ; - VL(0,4,0, 1,4,0){1,0,0, 2,0,0} ; - ST(0,2,0, 1,2,0, 0,3,0){1,2,3} ; - VT(0,0,0, 1,0,0, 0,1,0){1,0,0, 2,0,0, 3,0,0} ; - SS(0,-2,0, 1,-2,0, 0,-1,0, 0,-2,1){1,2,3,4} ; - VS(0,-4,0, 1,-4,0, 0,-3,0, 0,-4,1){1,0,0, 2,0,0, 3,0,0, 4,0,0} ; -}; - -View[2].OffsetX = 6 ; -View[2].IntervalsType = 4 ; -View[2].ShowElement = 1 ; -View[2].Format = "%.1f" ; diff --git a/demos/tower.geo b/demos/tower.geo deleted file mode 100644 index 5e7ab47c3469133e838c0758f528a5511b6a5933..0000000000000000000000000000000000000000 --- a/demos/tower.geo +++ /dev/null @@ -1,55 +0,0 @@ -/* - Gmsh demo file (C) 2000 C. Geuzaine, J.-F. Remacle -*/ - -Include "tower.i1" ; - -/* Post-Processing meshes */ - -xBox = 30. ; -yBox = y1a * 1.5 ; -pBox = 20. ; - -Point(1002) = { xBox, yBox, 0, pBox} ; -Point(1003) = {-xBox, yBox, 0, pBox} ; -Point(1004) = {-xBox, 0, 0, pBox} ; -Point(1005) = { xBox, 0, 0, pBox} ; - -Line(2301) = {1004,1005}; -Line(2302) = {1005,1002}; -Line(2303) = {1002,1003}; -Line(2305) = {1003,1004}; - -Line Loop(2307) = {2303,2305,2301,2302}; -Plane Surface(2308) = {2307}; - -Transfinite Line {2301,2303} = 61 ; -Transfinite Line {2302,-2305} = 61 ; -Transfinite Surface {2308} = {1003,1002,1005,1004} ; -Recombine Surface {2308} ; - -Physical Surface (1201) = {2308} ; - -xBox = 30. ; -zBox = 150. ; -pBox = 20. ; - -Point(1006) = { xBox, 1, zBox, pBox} ; -Point(1007) = {-xBox, 1, zBox, pBox} ; -Point(1008) = {-xBox, 1, 0, pBox} ; -Point(1009) = { xBox, 1, 0, pBox} ; - -Line(2306) = {1008,1009}; -Line(2307) = {1009,1006}; -Line(2308) = {1006,1007}; -Line(2309) = {1007,1008}; - -Line Loop(2310) = {2307,2308,2309,2306}; -Plane Surface(2311) = {2310}; - -Transfinite Line {2306,2308} = 61 ; -Transfinite Line {2307,-2309} = 61 ; -Transfinite Surface {2311} = {1007,1006,1009,1008} ; -Recombine Surface {2311} ; - -Physical Surface (1202) = {2311} ; diff --git a/demos/tower.i1 b/demos/tower.i1 deleted file mode 100644 index 67a1a4f0a6eae8cad8947c3a687031498d3d58fd..0000000000000000000000000000000000000000 --- a/demos/tower.i1 +++ /dev/null @@ -1,102 +0,0 @@ -/* - Gmsh demo file (C) 2000 C. Geuzaine, J.-F. Remacle -*/ - -h = 19.6 ; hSol = 1. ; -L = 150. ; - -xg = 0. ; yg = 30.023 + h ; -x1a = -6.782 ; y1a = 19.355 + h ; -x1b = -9.83 ; y1b = 8.839 + h ; -x1c = -8.001 ; y1c = 0. + h ; - -x2a = 6.782 ; y2a = 19.355 + h ; -x2b = 9.83 ; y2b = 8.839 + h ; -x2c = 8.001 ; y2c = 0. + h ; - -z0 = 0 ; dy0 = 12. ; -z1 = 20 ; dy1 = 11.787 ; -z2 = 40 ; dy2 = 11.148 ; -z3 = 70 ; dy3 = 9.391 ; -z4 = 100 ; dy4 = 6.673 ; -z5 = 120 ; dy5 = 4.326 ; -z6 = 130 ; dy6 = 2.991 ; -z7 = 140 ; dy7 = 1.550 ; -z8 = 150 ; dy8 = 0. ; - -p0 = 2. ; p1 = 30. ; - -Include "tower.i2" ; - -/* ------------ */ -/* Fil 1a, b, c */ -/* ------------ */ - -x = x1a ; y = y1a ; i_p = 100 ; i_l = 10 ; -Include "tower.i3" ; -x = x1b ; y = y1b ; i_p = 200 ; i_l = 20 ; -Include "tower.i3" ; -x = x1c ; y = y1c ; i_p = 300 ; i_l = 30 ; -Include "tower.i3" ; - -/* ------------ */ -/* Fil 2a, b, c */ -/* ------------ */ - -x = x2a ; y = y2a ; i_p = 400 ; i_l = 40 ; -Include "tower.i3" ; -x = x2b ; y = y2b ; i_p = 500 ; i_l = 50 ; -Include "tower.i3" ; -x = x2c ; y = y2c ; i_p = 600 ; i_l = 60 ; -Include "tower.i3" ; - -/* ------ */ -/* Fil g */ -/* ------ */ - -x = xg ; y = yg ; i_p = 700 ; i_l = 70 ; -Include "tower.i3" ; - - -/* --------------------------------------------- */ - -Physical Line (1011) = {10,11,12} ; -Physical Line (1012) = {20,21,22} ; -Physical Line (1013) = {30,31,32} ; - -Physical Line (1021) = {40,41,42} ; -Physical Line (1022) = {50,51,52} ; -Physical Line (1023) = {60,61,62} ; - -Physical Line (1010) = {70,71,72} ; - - -Physical Line (1100) = { - 10,20,30,40,50,60, 70, - 11,21,31,41,51,61, 71, - 12,22,32,42,52,62, 72, - - 201,202,203,204, 211,212,213,214, 221,222,223,224, 231,232,233,234, - 241,242,243,244, 251,252,253,254, 261,262,263,264, 271,272,273,274, - 281,282,283,284, - 301,302,303,304,305,306,307,308, 311,312,313,314,315,316,317,318, - 321,322,323,324,325,326,327,328, 331,332,333,334,335,336,337,338, - 401,402,403,404, 411,412,413,414, 421,422,423,424, 431,432,433,434, - 441,442,443,444, 451,452,453,454, - 501,502,503,504, 511,512,513,514, 521,522,523,524, 531,532,533,534, - 541,542,543,544, 551,552,553,554 -} ; - -Physical Line (1001) = { - 201,202,203,204, 211,212,213,214, 221,222,223,224, 231,232,233,234, - 241,242,243,244, 251,252,253,254, 261,262,263,264, 271,272,273,274, - 281,282,283,284, - 301,302,303,304,305,306,307,308, 311,312,313,314,315,316,317,318, - 321,322,323,324,325,326,327,328, 331,332,333,334,335,336,337,338, - 401,402,403,404, 411,412,413,414, 421,422,423,424, 431,432,433,434, - 441,442,443,444, 451,452,453,454, - 501,502,503,504, 511,512,513,514, 521,522,523,524, 531,532,533,534, - 541,542,543,544, 551,552,553,554 -} ; - - diff --git a/demos/tower.i2 b/demos/tower.i2 deleted file mode 100644 index bc0708acc7b2dc942e5de0b309e245d0b68baf0e..0000000000000000000000000000000000000000 --- a/demos/tower.i2 +++ /dev/null @@ -1,172 +0,0 @@ -/* - Gmsh demo file (C) 2000 C. Geuzaine, J.-F. Remacle -*/ - -h = 19.6 ; hSol = 1. ; -L = 150. ; - -xg = 0. ; yg = 30.023 + h ; -x1a = -6.782 ; y1a = 19.355 + h ; -x1b = -9.83 ; y1b = 8.839 + h ; -x1c = -8.001 ; y1c = 0. + h ; - -x2a = 6.782 ; y2a = 19.355 + h ; -x2b = 9.83 ; y2b = 8.839 + h ; -x2c = 8.001 ; y2c = 0. + h ; - - -/* ------------ */ -/* T o w e r */ -/* ------------ */ - -ho = -0.288 ; - - -c0 = 9.144 /2. ; h0 = 0.10 ; -c1 = 7.422 /2. ; h1 = 6.139 + ho ; -c2 = 5.639 /2. ; h2 = 12.497 + ho ; -c3 = 3.657 /2. ; h3 = 25.527 + ho ; b3 = 8.001 ; -c4 = 3.457 /2. ; h4 = h3 + 1.900 ; -c5 = 2.743 /2. ; h5 = h3 + 8.839 ; b5 = 9.830 ; -c6 = 2.631 /2. ; h6 = h5 + 2.320 ; -c7 = 2.118 /2. ; h7 = h5 + 10.516 ; b7 = 6.782 ; -c8 = 2.100 /2. ; h8 = h7 + 1.680 ; -c9 = 1.050 /2. ; h9 = h7 + 5.029 ; - - -pt0 = 1. ; pt1 = 1. ; pt2 = 1. ; pt3 = 1. ; pt4 = 1. ; pt5 = 1. ; -pt6 = 1. ; pt7 = 1. ; pt8 = 1. ; pt9 = 1. ; - -ci = c0 ; hi = h0 ; pti = pt0 ; i_p = 0 ; -Include "tower.i4" ; - -ci = c1 ; hi = h1 ; pti = pt1 ; i_p = 10 ; -Include "tower.i4" ; -Include "tower.i5" ; - -ci = c2 ; hi = h2 ; pti = pt2 ; i_p = 20 ; -Include "tower.i4" ; -Include "tower.i5" ; - -ci = c3 ; hi = h3 ; pti = pt3 ; i_p = 30 ; -Include "tower.i4" ; - -ci = c4 ; hi = h4 ; pti = pt4 ; i_p = 40 ; -Include "tower.i4" ; - -ci = c5 ; hi = h5 ; pti = pt5 ; i_p = 50 ; -Include "tower.i4" ; - -ci = c6 ; hi = h6 ; pti = pt6 ; i_p = 60 ; -Include "tower.i4" ; - -ci = c7 ; hi = h7 ; pti = pt7 ; i_p = 70 ; -Include "tower.i4" ; - -ci = c8 ; hi = h8 ; pti = pt8 ; i_p = 80 ; -Include "tower.i4" ; - -ci = c9 ; hi = h9 ; pti = pt9 ; i_p = 90 ; -Point(91) = { ci , hi , 0. , pti } ; -Point(92) = { -ci , hi , 0. , pti } ; - - -Point(38) = { b3 , h3 , 0. , pt3 } ; -Point(39) = { -b3 , h3 , 0. , pt3 } ; - -Point(58) = { b5 , h5 , 0. , pt5 } ; -Point(59) = { -b5 , h5 , 0. , pt5 } ; - -Point(78) = { b7 , h7 , 0. , pt7 } ; -Point(79) = { -b7 , h7 , 0. , pt7 } ; - - - -Line(201) = { 1 , 11 } ; Line(202) = { 2 , 12 } ; -Line(203) = { 3 , 13 } ; Line(204) = { 4 , 14 } ; - -Line(211) = { 11 , 21 } ; Line(212) = { 12 , 22 } ; -Line(213) = { 13 , 23 } ; Line(214) = { 14 , 24 } ; - -Line(221) = { 21 , 31 } ; Line(222) = { 22 , 32 } ; -Line(223) = { 23 , 33 } ; Line(224) = { 24 , 34 } ; - -Line(231) = { 31 , 41 } ; Line(232) = { 32 , 42 } ; -Line(233) = { 33 , 43 } ; Line(234) = { 34 , 44 } ; - -Line(241) = { 41 , 51 } ; Line(242) = { 42 , 52 } ; -Line(243) = { 43 , 53 } ; Line(244) = { 44 , 54 } ; - -Line(251) = { 51 , 61 } ; Line(252) = { 52 , 62 } ; -Line(253) = { 53 , 63 } ; Line(254) = { 54 , 64 } ; - -Line(261) = { 61 , 71 } ; Line(262) = { 62 , 72 } ; -Line(263) = { 63 , 73 } ; Line(264) = { 64 , 74 } ; - -Line(271) = { 71 , 81 } ; Line(272) = { 72 , 82 } ; -Line(273) = { 73 , 83 } ; Line(274) = { 74 , 84 } ; - -Line(281) = { 81 , 92 } ; Line(282) = { 82 , 91 } ; -Line(283) = { 83 , 91 } ; Line(284) = { 84 , 92 } ; - - - - -Line(301) = { 1 , 17 } ; Line(302) = { 2 , 17 } ; -Line(303) = { 2 , 16 } ; Line(304) = { 3 , 16 } ; -Line(305) = { 3 , 15 } ; Line(306) = { 4 , 15 } ; -Line(307) = { 4 , 18 } ; Line(308) = { 1 , 18 } ; - -Line(311) = { 11 , 27 } ; Line(312) = { 12 , 27 } ; -Line(313) = { 12 , 26 } ; Line(314) = { 13 , 26 } ; -Line(315) = { 13 , 25 } ; Line(316) = { 14 , 25 } ; -Line(317) = { 14 , 28 } ; Line(318) = { 11 , 28 } ; - -Line(321) = { 11 , 17 } ; Line(322) = { 12 , 17 } ; -Line(323) = { 12 , 16 } ; Line(324) = { 13 , 16 } ; -Line(325) = { 13 , 15 } ; Line(326) = { 14 , 15 } ; -Line(327) = { 14 , 18 } ; Line(328) = { 11 , 18 } ; - -Line(331) = { 21 , 27 } ; Line(332) = { 22 , 27 } ; -Line(333) = { 22 , 26 } ; Line(334) = { 23 , 26 } ; -Line(335) = { 23 , 25 } ; Line(336) = { 24 , 25 } ; -Line(337) = { 24 , 28 } ; Line(338) = { 21 , 28 } ; - - - -Line(401) = { 31 , 32 } ; Line(402) = { 32 , 33 } ; -Line(403) = { 33 , 34 } ; Line(404) = { 34 , 31 } ; - -Line(411) = { 41 , 42 } ; Line(412) = { 42 , 43 } ; -Line(413) = { 43 , 44 } ; Line(414) = { 44 , 41 } ; - -Line(421) = { 51 , 52 } ; Line(422) = { 52 , 53 } ; -Line(423) = { 53 , 54 } ; Line(424) = { 54 , 51 } ; - -Line(431) = { 61 , 62 } ; Line(432) = { 62 , 63 } ; -Line(433) = { 63 , 64 } ; Line(434) = { 64 , 61 } ; - -Line(441) = { 71 , 72 } ; Line(442) = { 72 , 73 } ; -Line(443) = { 73 , 74 } ; Line(444) = { 74 , 71 } ; - -Line(451) = { 81 , 82 } ; Line(452) = { 82 , 83 } ; -Line(453) = { 83 , 84 } ; Line(454) = { 84 , 81 } ; - - - - -Line(501) = { 31 , 39 } ; Line(502) = { 41 , 39 } ; -Line(503) = { 34 , 39 } ; Line(504) = { 44 , 39 } ; -Line(511) = { 32 , 38 } ; Line(512) = { 42 , 38 } ; -Line(513) = { 33 , 38 } ; Line(514) = { 43 , 38 } ; - -Line(521) = { 51 , 59 } ; Line(522) = { 61 , 59 } ; -Line(523) = { 54 , 59 } ; Line(524) = { 64 , 59 } ; -Line(531) = { 52 , 58 } ; Line(532) = { 62 , 58 } ; -Line(533) = { 53 , 58 } ; Line(534) = { 63 , 58 } ; - -Line(541) = { 71 , 79 } ; Line(542) = { 81 , 79 } ; -Line(543) = { 74 , 79 } ; Line(544) = { 84 , 79 } ; -Line(551) = { 72 , 78 } ; Line(552) = { 82 , 78 } ; -Line(553) = { 73 , 78 } ; Line(554) = { 83 , 78 } ; - diff --git a/demos/tower.i3 b/demos/tower.i3 deleted file mode 100644 index 2c226f78a05f0bacf22c7469c7534db33dd37e5e..0000000000000000000000000000000000000000 --- a/demos/tower.i3 +++ /dev/null @@ -1,43 +0,0 @@ -/* - Gmsh demo file (C) 2000 C. Geuzaine, J.-F. Remacle -*/ - -/* INPUT : - i_p - i_l -*/ - -Point(i_p + 0) = { x, y-dy0, z8+z0, p0} ; -Point(i_p + 1) = { x, y-dy1, z8+z1, p0} ; -Point(i_p + 2) = { x, y-dy2, z8+z2, p0} ; -Point(i_p + 3) = { x, y-dy3, z8+z3, p0} ; -Point(i_p + 4) = { x, y-dy4, z8+z4, p0} ; -Point(i_p + 5) = { x, y-dy5, z8+z5, p0} ; -Point(i_p + 6) = { x, y-dy6, z8+z6, p0} ; -Point(i_p + 7) = { x, y-dy7, z8+z7, p0} ; -Point(i_p + 8) = { x, y-dy8, z8+z8, p0} ; - -Point(i_p + 11) = { x, y-dy1,z8-z1, p0} ; -Point(i_p + 12) = { x, y-dy2,z8-z2, p0} ; -Point(i_p + 13) = { x, y-dy3,z8-z3, p0} ; -Point(i_p + 14) = { x, y-dy4,z8-z4, p0} ; -Point(i_p + 15) = { x, y-dy5,z8-z5, p0} ; -Point(i_p + 16) = { x, y-dy6,z8-z6, p0} ; -Point(i_p + 17) = { x, y-dy7,z8-z7, p0} ; -Point(i_p + 18) = { x, y-dy8,z8-z8, p0} ; - - -Point(i_p + 20) = { x, y-dy0, -z8+z0, p0} ; -Point(i_p + 21) = { x, y-dy1, -z8+z1, p0} ; -Point(i_p + 22) = { x, y-dy2, -z8+z2, p0} ; -Point(i_p + 23) = { x, y-dy3, -z8+z3, p0} ; -Point(i_p + 24) = { x, y-dy4, -z8+z4, p0} ; -Point(i_p + 25) = { x, y-dy5, -z8+z5, p0} ; -Point(i_p + 26) = { x, y-dy6, -z8+z6, p0} ; -Point(i_p + 27) = { x, y-dy7, -z8+z7, p0} ; - - -Spline(i_l + 0) = {i_p, i_p+1 : i_p+8}; -Spline(i_l + 1) = {i_p, i_p+11 : i_p+18}; -Spline(i_l + 2) = {i_p+20 : i_p+27, i_p + 18}; - diff --git a/demos/tower.i4 b/demos/tower.i4 deleted file mode 100644 index 097293ebfbe0bef594f10b1b702428780143bc1f..0000000000000000000000000000000000000000 --- a/demos/tower.i4 +++ /dev/null @@ -1,8 +0,0 @@ -/* - Gmsh demo file (C) 2000 C. Geuzaine, J.-F. Remacle -*/ - -Point(i_p + 1) = { -ci , hi , -ci , pti } ; -Point(i_p + 2) = { ci , hi , -ci , pti } ; -Point(i_p + 3) = { ci , hi , ci , pti } ; -Point(i_p + 4) = { -ci , hi , ci , pti } ; diff --git a/demos/tower.i5 b/demos/tower.i5 deleted file mode 100644 index 4b8d4b1e8905263ba23336f0f5b86e69c8ade1d9..0000000000000000000000000000000000000000 --- a/demos/tower.i5 +++ /dev/null @@ -1,8 +0,0 @@ -/* - Gmsh demo file (C) 2000 C. Geuzaine, J.-F. Remacle -*/ - -Point(i_p + 5) = { 0. , hi , ci , pti } ; -Point(i_p + 6) = { ci , hi , 0. , pti } ; -Point(i_p + 7) = { 0. , hi , -ci , pti } ; -Point(i_p + 8) = { -ci , hi , 0. , pti } ; diff --git a/doc/.globalrc b/doc/.globalrc deleted file mode 100644 index 2b92f4f4cc9eba365dcd973ea8f3d385b12a7dde..0000000000000000000000000000000000000000 --- a/doc/.globalrc +++ /dev/null @@ -1,165 +0,0 @@ -# -# Copyright (c) 1998, 1999 -# Shigio Yamaguchi. All rights reserved. -# Copyright (c) 1999, 2000 -# Tama Communications Corporation. All rights reserved. -# -# This file is part of GNU GLOBAL. -# -# GNU GLOBAL is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# GNU GLOBAL is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# * -# Configuration file for GNU GLOBAL source code tag system. -# -# GLOBAL doesn't need 'global.conf' because it has the default values in it. -# But if you have this file as '/etc/global.conf' or "$HOME/.globalrc" -# then GLOBAL system overwrite default values with the values from the file. -# -# 'global.conf' is termcap style file. -# 'default' is default target. -# You can specify target with GTAGSLABEL environment variable. -# -default:\ - :tc=gctags:tc=htags: -#--------------------------------------------------------------------- -# -# Configuration for gtags(1) -# -# format: -# Select 'standard' or 'compact'. By default, it assumes 'standard'. -# suffixes: -# Suffixes of target source file. By default, it assumes -# 'c,h,y,c++,cc,cpp,cxx,hxx,C,H,s,S,java' -# skip: -# Skip files among the target files. If the name ends with '/', -# gtags skips all files under the directory. -# By default, it assumes 'y.tab.c,y.tab.h,SCCS/,RCS/,CVS/'. -# extractmethod: -# Please see source code of gtags(1). -# GTAGS: -# Tag command for definitions. Non of default value. -# GRTAGS: -# Tag command for references. Non of default value. -# GSYMS: -# Tag command for other symbols. Non of default value. -# -# Htags(1) needs both of GTAGS and GRTAGS. Global(1)'s -s option needs GSYMS. -# -#--------------------------------------------------------------------- -common:\ - :skip=GetDP.tab.h,GetDP.tab.c,GetDP.yy.c,pvpii.c,utils/,trash/,\ - Gmsh.tab.cpp,Gmsh.tab.cpp.h,Gmsh.yy.cpp,\ - CVS/,HTML/:\ - :format=standard: -# -# [gctags] -# -# This command is distributed as part of GLOBAL. -# -gctags|tag command for GLOBAL:\ - :tc=common:\ - :suffixes=c,h,y,c++,cc,cpp,cxx,hxx,C,H,s,S,java:\ - :sort_command=sort:\ - :sed_command=sed:\ - :GTAGS=gctags %s:\ - :GRTAGS=gctags -r %s:\ - :GSYMS=gctags -s %s: -# -# [Emacs's ctags] -# -# This ctags is distributed as a part of Emacs editor. -# -# supported suffixes by etags. -# -# lisp: l,el,lsp,lisp,cl,clisp -# scheme: sm,scm,scheme,t,sch,ss,SM,SCM -# assembler: s,a,sa,asm,src,def,ins,inc -# C++: C,H,cpp,cxx,hxx,cc -# C*: cs,hs -# c,yacc: c,h,y -# pl,p,pas: pascal -# fortran: f,for -# -# [Installation] -# % cd <emacs source directory>/lib-src -# % make ctags -# # cp ctags /usr/local/bin/ctags-emacs -# -ctags-emacs|ctags based on etags|GNU Emacs ctags:\ - :tc=common:\ - :suffixes=el,s,a,sa,asm,C,H,cpp,cxx,hxx,cc,c,h,y:\ - :extractmethod:\ - :GTAGS=/usr/local/bin/ctags-emacs -x -d -T -w %s: -# -# [Exuberant Ctags] -# -# This ctags is distributed as a part of Vim editor. -# -# [Installation] -# % cd <Vim source directory>/src/ctags -# % make -# # cp ctags /usr/local/bin/ctags-exuberant -# -ctags-exuberant|Exuberant Ctags|ctags by Darren Hiebert:\ - :tc=common:\ - :suffixes=s,a,sa,asm,C,H,cpp,cxx,hxx,cc,c,h,y:\ - :extractmethod:\ - :GTAGS=/usr/local/bin/ctags-exuberant -x %s | perl -ne '\ - if (/^operator \\S+\\s+function\\s/) { s/^operator //; }\ - ($name, $type, $no, $path, $line) = split(/[ \\t]+/, $_, 5);\ - printf(STDOUT "%-16s %4d %-16s %s", $name, $no, $path, $line);': -#--------------------------------------------------------------------- -# -# Configuration for htags(1) -# Let's paint hypertext with your favorite colors! -# -# body_begin,body_end: -# body tag -# title_begin,title_end: -# title tag -# comment_begin,comment_end: -# comment tag. (/* ... */, // ...) -# sharp_begin,sharp_end: -# macro tag. (#include, #define, ...) -# brace_begin,brace_end: -# brace tag. ('{', '}') -# reserved_begin,reserved_end: -# reserved word tag. (while, if, char, ...) -# ncol: -# columns of line number. (default = 4) -# tabs: -# tab stop. (default = 8) -# full_path: -# list file names with full path in file index. -# By default, the last component of a path. -# table_list: -# list tags using table tag (<table></table>). -# normal_suffix: -# normal suffix for html file. By default, 'html'. -# gzipped_suffix: -# suffix for compressed html file. By default, 'ghtml'. -# script_alias: -# specified -s option then use this value as script alias. -# -#--------------------------------------------------------------------- -htags:\ - :body_begin=<BODY BGCOLOR="#ffffff">:body_end=</BODY>:\ - :table_begin=<TABLE>:table_end=</TABLE>:\ - :title_begin=<FONT COLOR=#cc0000>:title_end=</FONT>:\ - :comment_begin=<I><FONT COLOR=darkred>:comment_end=</FONT></I>:\ - :sharp_begin=<FONT COLOR=darkviolet>:sharp_end=</FONT>:\ - :brace_begin=<FONT COLOR=blue>:brace_end=</FONT>:\ - :reserved_begin=<FONT COLOR=green><B>:reserved_end=</B></FONT>:script_alias=/cgi-bin/:\ - :ncol#4:tabs#8:normal_suffix=html:gzipped_suffix=ghtml: diff --git a/doc/BUGS b/doc/BUGS deleted file mode 100644 index 3d51eefb15920d7c5aa1e3a693a2fb86e2a87a95..0000000000000000000000000000000000000000 --- a/doc/BUGS +++ /dev/null @@ -1,11 +0,0 @@ -$Id: BUGS,v 1.3 2001-06-06 08:47:48 geuzaine Exp $ - -* Splines are bugged since version 1. Don't use them. - -* Si la coherence des surfaces n'est pas recouvree en une etape, et -qu'on fait une seconde passe qui marche, les volumes ne sont pas -retrouves-< pas de maillage final. - -* Comme le code se stabilise, je pense qu'il serait grand temps de -penser a desallouer les structures. On pourrait alors cloturer une -version 1 "stable". diff --git a/doc/CONTRIBUTORS b/doc/CONTRIBUTORS deleted file mode 100644 index 894ffa39ebbeba9e35f981d5c8a2b5d3cb850b0f..0000000000000000000000000000000000000000 --- a/doc/CONTRIBUTORS +++ /dev/null @@ -1,33 +0,0 @@ -$Id: CONTRIBUTORS,v 1.5 2001-05-01 18:58:24 geuzaine Exp $ - -Gmsh is copyright (c) 1997-2001 by - - Jean-Fran�ois Remacle <remacle@scorec.rpi.edu> and - Christophe Geuzaine <christophe.geuzaine@ulg.ac.be> - -Parts of the code have been contributed by - - Patrick Dular <patrick.dular@ulg.ac.be> - Marc Um� <Marc.Ume@digitalgraphics.be> - -Special thanks to the following folks who have greatly contributed by -providing fresh ideas on theoretical or programming topics, or who -have sent patches, requests, warnings, or pleas for changes or -improvements. While attempts were made to be as complete as possible, -it is inevitable that some contributors have been omitted. If you are -in this situation, just send an e-mail to one of the authors, and you -will be added to the list! - - �ric Bechet <eric.bechet@epost.de> - David Colignon <david.colignon@ulg.ac.be> - Philippe Geuzaine <geuzaine@gnat.colorado.edu> - Johan Gyselinck <johan.gyselinck@ulg.ac.be> - Fran�ois Henrotte <fhenrott@esat.kuleuven.ac.be> - Beno�t Meys <bmeys@techspace-aero.be> - Nicolas Mo�s <moes@tam9.mech.nwu.edu> - -Finally, thanks to all of you who sent e-mail showing interest. This -has motivated us a lot to release the code as free software and to -continue improving it. - - diff --git a/doc/FAQ b/doc/FAQ deleted file mode 100644 index 21186bcc228a5a6cfe4a4189b3d2181191f9e869..0000000000000000000000000000000000000000 --- a/doc/FAQ +++ /dev/null @@ -1,29 +0,0 @@ -$Id: FAQ,v 1.2 2001-03-06 21:31:17 geuzaine Exp $ - -Q. Gmsh complains about missing libraries. -A. Try 'ldd gmsh' to check if all required shared libraries are -installed on your system. - -Q. Gmsh does not work under HP-UX. -A. the HP version is reported not to work with native OpenGL. You -should install Mesa instead. - -Q. When moving the mouse over the graphic window, everything that is -drawn on it disappears, and each item is visible only when the cursor -is directly over it. -A. You should start Gmsh with the '-noov' command line option. - -Q. The graphics display very slowly. -A. Are you are executing Gmsh from a remote host (via the network) -without GLX? You should turn double buffering off (with the -nodb -command line option). - -Q. Big post-processing scenes are slow to display. -A. Try display lists (-dl command line option). - -Q. Gmsh keeps re-displaying its graphics when other windows partially -hide the graphical window. -A. Disable opaque move in your window manager. - -Q. What does Gmsh mean? -A. Nothing ;-) diff --git a/doc/FORMATS b/doc/FORMATS deleted file mode 100644 index 89ee3b762f30327c92f051725b0391529923e421..0000000000000000000000000000000000000000 --- a/doc/FORMATS +++ /dev/null @@ -1,201 +0,0 @@ -$Id: FORMATS,v 1.8 2001-03-01 08:04:15 geuzaine Exp $ - -This document describes the mesh and post-processing file formats for -Gmsh, version >= 1.0. - -(This document deals only with the import/export interfaces for -Gmsh. The language driving the behaviour of Gmsh for defining -geometries, options, scripts, etc. is explained step by step in the -tutorials.) - - -Gmsh Mesh File Format -===================== - -The 'msh' file format is the native output file format for Gmsh. The -file is divided in two sections (enclosed in $KEY and $ENDKEY pairs): -$NOD/$ENDNOD defines the nodes and $ELM/$ENDELM defines the elements. - - $NOD - number-of-nodes - node-number coord1 coord2 coord3 - ... - $ENDNOD - - $ELM - number-of-elements - elm-number elm-type elm-region unused nb-nodes node-numbers - ... - $ENDELM - -All the syntactic variables stand for integers except coord1, coord2 -and coord3 which stand for floating point values, and node-numbers -which stand for a list of nb-nodes integers. The elm-type value -defines the geometrical type for the element: - - 1 Line (2 nodes, 1 edge). - 2 Triangle (3 nodes, 3 edges). - 3 Quadrangle (4 nodes, 4 edges). - 4 Tetrahedron (4 nodes, 6 edges, 4 facets). - 5 Hexahedron (8 nodes, 12 edges, 6 facets). - 6 Prism (6 nodes, 9 edges, 5 facets). - 7 Pyramid (5 nodes, 8 edges, 5 facets). - 15 Point (1 node). - -The elm-region value is the number of the physical entity to which the -element belongs. - - -Gmsh Ascii Post-Processing File Format -====================================== - -A post-processing file is divided in several sections: one format -section (enclosed between $PostFormat/$EndPostFormat) and (possibly -multiple) post-processing views (enclosed between $View/$EndView -pairs). - - $PostFormat - version-number file-type data-size - $EndPostFormat - - $View - view-name nb-time-steps - nb-scalar-points nb-vector-points nb-tensor-points - nb-scalar-lines nb-vector-lines nb-tensor-lines - nb-scalar-triangles nb-vector-triangles nb-tensor-triangles - nb-scalar-tetrahedra nb-vector-tetrahedra nb-tensor-tetrahedra - time-step-values - scalar-point-value ... - vector-point-value ... - tensor-point-value ... - scalar-line-value ... - vector-line-value ... - tensor-line-value ... - scalar-triangle-value ... - vector-triangle-value ... - tensor-triangle-value ... - scalar-tetrahedron-value ... - vector-tetrahedron-value ... - tensor-tetrahedron-value ... - $endView - -version-number is a floating point number giving the version of -Gmsh for which the file is destined (e.g. 1.0). - -file-type is an integer equal to 0 in the ascii file format. - -data-size is an integer equal to the size of the floating point -numbers used in the file (usually, data-size == sizeof(double)). - -view-name is a string containing the name of the view (max. 256 characters) - -nb-time-step is an integer giving the number of time steps in the view - -nb-scalar-points, nb-vector-points, etc. are integers giving the -number of scalar points, vector points, etc. in the view. - -time-step-values is a list of nb-time-steps double precision numbers -giving the value of the time (or any other variable) for which an -evolution was saved. - -scalar-point-value, vector-point-value, etc. are lists of double -precision numbers giving the node coordinates and the values -associated with the nodes of the nb-scalar-points, nb-vector-points, -etc. for each time-step-value. For example, vector-triangle-value is -defined as - - coord1-node1 coord1-node2 coord1-node3 - coord2-node1 coord2-node2 coord2-node3 - coord3-node1 coord3-node2 coord3-node3 - comp1-node1-time1 comp2-node1-time1 comp3-node1-time1 - comp1-node2-time1 comp2-node2-time1 comp3-node2-time1 - comp1-node3-time1 comp2-node3-time1 comp3-node3-time1 - comp1-node1-time2 comp2-node1-time2 comp3-node1-time2 - comp1-node2-time2 comp2-node2-time2 comp3-node2-time2 - comp1-node3-time2 comp2-node3-time2 comp3-node3-time2 - ... - - -Gmsh Binary Post-Processing File Format -======================================= - -The binary post-processing file format is the same as the ascii file format, -except that: - -1) file-type equals 1. - -2) all lists of floating point numbers are written in binary format - -3) there is an additional integer, of value 1, written before - time-step-values. This integer is used for detecting if the - computer on which the binary file was written and the computer on - which the file is read are of the same type (little or big endian). - -Here is a pseudo C code to write the beginning of a post-processing -file in binary format: - -int one = 1; - -fprintf(file, "$PostFormat\n"); -fprintf(file, "%g %d %d\n", 1.0, 1, sizeof(double)); -fprintf(file, "$EndPostFormat\n"); - -fprintf(file, "$View\n"); -fprintf(file, "%s %d %d %d %d %d %d %d %d %d %d %d %d %d\n", - view-name, nb-time-steps, - nb-scalar-points, nb-vector-points, nb-tensor-points, - nb-scalar-lines, nb-vector-lines, nb-tensor-lines, - nb-scalar-triangles, nb-vector-triangles, nb-tensor-triangles, - nb-scalar-tetrahedra, nb-vector-tetrahedra, nb-tensor-tetrahedra); -fwrite(&one, sizeof(int), 1, file); -fwrite(time-step-values, sizeof(double), nb-time-steps, file); -fwrite(all-scalar-point-values, sizeof(double), all-scalar-points, file); -... -fprintf(file, "$EndView\n"); - -In this pseudo-code, all-scalar-point-values is the array of double -precision numbers containing all the scalar-point-value lists, put one -after each other in order to form a long array of doubles. The -principle is the same for all other kinds of values. - - -Gmsh Parsed Post-Processing Format -================================== - -For testing purposes (or with very small data sets, e.g. in the -tutorials), there is an additional post-processing format which is -parsed by the same grammar analyser as the geometry. You can thus, for -example, embed small post-processing views into your geometrical -descriptions. The format of the parsed post-processing files is the -following: - - View "name" { - type-of-element (list-of-coordinates) {list-of-values} ; - ... - }; - - 12 base objects can be displayed: - - type-of-element list-of-coordinates list-of-values - -------------------------------------------------------------------------------- - scalar point SP 3 1 * nb-time-steps - vector point VP 3 3 * nb-time-steps - tensor point TP 3 9 * nb-time-steps - scalar line SL 6 2 * nb-time-steps - vector line VL 6 6 * nb-time-steps - tensor line TL 6 18 * nb-time-steps - scalar triangle ST 9 3 * nb-time-steps - vector triangle VT 9 9 * nb-time-steps - tensor triangle TT 9 27 * nb-time-steps - scalar tetrahedron SS 12 4 * nb-time-steps - vector tetrahedron VS 12 12 * nb-time-steps - tensor tetrahedron TS 12 36 * nb-time-steps - -Contrary to the ascii post-processing file format, the coordinates are -given by node, i.e. (coord1, coord2, coord3) for a point, -(coord1-node1, coord2-node1, coord3-node1, coord1-node2, coord2-node2, -coord3-node2) for a line, (coord1-node1, coord2-node1, coord3-node1, -coord1-node2, coord2-node2, coord3-node2, coord1-node3, coord2-node3, -coord3-node3) for a triangle, etc. The values are given in the same -order as for the ascii post-processing file format. - diff --git a/doc/KEYWORDS b/doc/KEYWORDS deleted file mode 100644 index 1b3c783f651b623f80174910100752bb293bfd82..0000000000000000000000000000000000000000 --- a/doc/KEYWORDS +++ /dev/null @@ -1,213 +0,0 @@ -// $Id: KEYWORDS,v 1.1 2001-05-16 14:33:16 geuzaine Exp $ - -/* List of reserved keywords for Gmsh 1.19 */ - -/* Special characters */ - -\t -\n -\r -\f -; -/* -// -" -' -= -+= --= -*= -/= -: -... -/\ -|| -&& -++ --- -== -!= -~= -<= ->= - -/* GEO file format */ - -newreg -newp - -Acos -ArcCos -Asin -ArcSin -Atan -ArcTan -Atan2 -ArcTan2 -Attractor - -Bump -BSpline -Bounds - -Ceil -Cosh -Cos -Characteristic -Circle -Coherence -Complex -Color -ColorTable -CatmullRom -Call - -Delete -Dilate -Duplicata -Draw - -Exp -Ellipsis -Extrude -Elliptic -ELLIPSE -EndFor -EndIf -Exit - -Fabs -Floor -Fmod -For -Function - -Hypot - -In -If -Intersect - -Knots - -Length -Line -Loop -Log -Log10 -Layers - -Modulo -Meshes - -Nurbs - -Order - -Physical -Pi -Plane -Point -Power -Progression -Parametric -Printf - -Recombine -Rotate -Ruled -Rand -Return - -Sqrt -Sin -Sinh -Spline -Surface -Symmetry -Sprintf - -Transfinite -Translate -Tanh -Tan -Trimmed - -Using - -Volume - -With - -SS -VS -TS -ST -VT -TT -SL -VL -TL -SP -VP -TP - -/* STEP ISO-10303-21 file format */ - -CARTESIAN_POINT -B_SPLINE_SURFACE_WITH_KNOTS -B_SPLINE_CURVE_WITH_KNOTS -.UNSPECIFIED. -.CONTINUOUS. -.F. -.T. -.U. -.V. -ORIENTED_EDGE -EDGE_CURVE -EDGE_LOOP -VERTEX_POINT -FACE_OUTER_BOUND -FACE_BOUND -ADVANCED_FACE -LINE -VECTOR -DIRECTION -AXIS2_PLACEMENT_3D -PLANE -HEADER -DATA -FILE_SCHEMA -FILE_NAME -FILE_DESCRIPTION -"ISO-10303-21" -"END-ISO-10303-21" -ENDSEC -CLOSED_SHELL -ADVANCED_BREP_SHAPE_REPRESENTATION -MANIFOLD_SOLID_BREP -CYLINDRICAL_SURFACE -CONICAL_SURFACE -TOROIDAL_SURFACE -CIRCLE -TRIMMED_CURVE -GEOMETRIC_SET -COMPOSITE_CURVE_SEGMENT -COMPOSITE_CURVE -PRODUCT_DEFINITION -PRODUCT_DEFINITION_SHAPE -SHAPE_DEFINITION_REPRESENTATION - -/* STL file format */ - -vertex -facet -normal -outer -loop -endloop -endfacet -endsolid -solid - -// $Id: KEYWORDS,v 1.1 2001-05-16 14:33:16 geuzaine Exp $ \ No newline at end of file diff --git a/doc/Makefile b/doc/Makefile deleted file mode 100644 index 28f91ec995f7d8caa436926166b2c0001e6c9ad2..0000000000000000000000000000000000000000 --- a/doc/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -# $Id: Makefile,v 1.2 2000-11-25 15:26:12 geuzaine Exp $ - -RM = rm -RMFLAGS = -f - -dvi: - texi2dvi gmsh.texi - -ps: dvi - dvips gmsh -o - -pdf: - texi2pdf gmsh.texi - -html: - texi2html -expandinfo -number -split_chapter gmsh.texi - -html2: - Texi2html -init_file gmsh.htmlconfig gmsh.texi - -html3: - makeinfo --html gmsh.texi - -info: - makeinfo gmsh.texi - -infoz: - gtar zcvf gmsh-info.tgz gmsh.info* - -doc: ps pdf html info - -install: - cp gmsh.info* /usr/local/info/ - install-info gmsh.info /usr/local/info/dir - -clean: - $(RM) $(RMFLAGS) *.cp* *.fn* *.ky* *.pg* *.tp* *.vr* *.mv* \ - *.log *.toc *.aux \ - *.dvi *.ps gmsh.pdf \ - *.html *.info* gmsh-info.tgz* - - diff --git a/doc/README.cvs b/doc/README.cvs deleted file mode 100644 index d24781307b383f932820e70133fa60a50d2a96a2..0000000000000000000000000000000000000000 --- a/doc/README.cvs +++ /dev/null @@ -1,17 +0,0 @@ - -To download the latset full source by CVS, type - -cvs -d :pserver:YOUR_NAME@elap57.montefiore.ulg.ac.be:/usr/users57/cvs-master COMMAND - -where YOUR_NAME is your username on elap57.montefiore.ulg.ac.be, and where COMMAND is -first 'login' (you will be prompted for a password), and then 'checkout gmsh'. When -this is done, you can use 'logout' to exit. - -To update your local version, type - -cvs update -dP - -To submit your changes, type - -cvs commit - diff --git a/doc/README.devel b/doc/README.devel deleted file mode 100644 index 9d736185f1bdb323e6f95b6ff397eca37452cc18..0000000000000000000000000000000000000000 --- a/doc/README.devel +++ /dev/null @@ -1,29 +0,0 @@ - -Some easy rules to make the code easy to read/debug/maintain: - -- please enable full warnings for your compiler (e.g. gcc -Wall) -- always use Msg() to print information/errors/etc. -- indent your files and, if working on Windows, suppress the tabs (untabify) - - -How to add an option in the graphical user interface? - -1) Create the option in the Context_T class (Common/Context.h) if it's -a classical option, or in the View class (Common/View.h) if it's a -post-processing view-dependent option. - -2) In Common/DefaultOptions.h, give a name (for the parser to be able -to access it), a reference to a handling routine (i.e. opt_XXX) and a -default value for this option. - -3) Create the handling routine opt_XXX in Common/Options.cpp (and add -the prototype in Common/Options.h). - -4) Create the associated widget in Fltk/GUI.cpp - -5) If no special callback is to be associated to the widget, add the -handling routine opt_XXX to the OK callback for the corresponding -option panel (in Fltk/Callbacks.cpp). - -6) That's it! - diff --git a/doc/README.leaks b/doc/README.leaks deleted file mode 100644 index 5f138056b35b93c84017dcd7190f866cd883d95c..0000000000000000000000000000000000000000 --- a/doc/README.leaks +++ /dev/null @@ -1,6 +0,0 @@ -* LIBNJAMD - -export LD_PRELOAD=libnjamd.so - - kill -USR1 - diff --git a/doc/README.txt b/doc/README.txt deleted file mode 100644 index cc17ef0bf84973b66e6c18355d005fea1ce138f5..0000000000000000000000000000000000000000 --- a/doc/README.txt +++ /dev/null @@ -1,40 +0,0 @@ -$Id: README.txt,v 1.3 2001-05-08 09:19:28 geuzaine Exp $ - -For Windows versions of Gmsh only: -================================== - -1) About opengl32.dll: - -If a version of the OpenGL library opengl32.dll is already installed -on your system, you should remove the version shipped with -Gmsh. Failing to do so may result in an incorrect behaviour of Gmsh -(the most common being the graphic window staying "transparent"). - -2) About cygwin1.dll: - -If you plan to use other programs than Gmsh which depend on the -cygwin1.dll library (e.g. GetDP, http://www.geuz.org/getdp/), you -should keep only one version of the library on your system. For this -purpose, you should move the file cygwin1.dll from this directory to -the Windows system directory (usually C:\Windows\System\) and suppress -all other versions of cygwin1.dll. Failing to do so may result in -incorrect behaviour of applications sharing the library and running -simultaneously. - -3) About configuration files: - -Gmsh saves session information and default options on disk. The -directory in which these files are saved is (in that order) $HOME (if -the HOME variable is defined, e.g. in your autoexec.bat file), $TEMP -(if TEMP is defined) or $TMP (if TMP is defined). If none of these -variables are defined, Gmsh will try to save/load its configuration -files from the current working directory. - -4) About solvers: - -Gmsh can be used as a front end to solvers, e.g. to GetDP. The default -behaviour of Gmsh is to look for these solvers in the same directory -as the Gmsh executable (i.e. to look for getdp.exe in the same -directory as gmsh.exe). If you don't want to copy the solver -executable into this directory, you have to modify the path in the -solver command (in the solver option panel). diff --git a/doc/VERSIONS b/doc/VERSIONS deleted file mode 100644 index bcaf0f0d2e10822d7781c97201f2e850729f8d67..0000000000000000000000000000000000000000 --- a/doc/VERSIONS +++ /dev/null @@ -1,151 +0,0 @@ -$Id: VERSIONS,v 1.53 2001-08-12 14:24:51 geuzaine Exp $ - -New in 1.23: Fixed duplicate elements generation with Extrude; Better -display of displacement maps; boundary operator generalization; new -explode option for post-processing views; enhanced link view behaviour -(to update only the changed items); new default plugins: Skin, -Transform, Smooth; various other bug fixes and clean-ups (mostly in -the post-processing module and for extruded meshes); - -New in 1.22: Fixed (yet another) bug for 2D mesh in the mean plane; -fixed surface coherence bug in extruded meshes; new double logarithmic -scale, saturate value and smoothed normals option for post-processing -views; plugins are now enabled by default; three new experimental -statically linked plugins: CutMap (extracts a given iso surface from a -3D scalar map), CutPlane (cuts a 3D scalar map with a plane section), -CutSphere (cuts a 3D scalar map with a sphere); various other bug -fixes, additions and clean-ups; - -New in 1.21: Fixed more memory leaks; added -opt command line option -to parse definitions directly from the command line; fixed missing -screen refreshes during contour/surface/volume selection; Enhanced -string manipulation functions (Sprintf, StrCat, StrPrefix); Many other -small fixes and clean-ups; - -New in 1.20: Fixed various bugs (memory leaks, functions in included -files, solver command selection, ColorTable option, duplicate nodes in -extruded meshes (not finished yet), infinite loop on empty views, -orientation of recombined quadrangles...); reorganized the interface -menus; added constrained background mesh and mesh visibility options; -added mesh quality histograms; changed default mesh colors; -reintegrated the old command-line extrusion mesh generator; - -New in 1.19: Fixed seg. fault for scalar simplex post-processing; new -Solver menu; interface for GetDP solver through sockets; fixed -multiple scale alignment; added some options + full option -descriptions; - -New in 1.18: Fixed many small bugs and incoherences in -post-processing; fixed broken background mesh in 1D mesh generation. - -New in 1.17: Corrected physical points saving; fixed parsing of DOS -files (carriage return problems); easier geometrical selections -(cursor change); plugin manager; enhanced variable arrays (sublist -selection and affectation); line loop check; New arrow display; -reduced number of 'fatal' errors + better handling in interactive -mode; fixed bug when opening meshes; enhanced File->Open behaviour for -meshes and post-processing views; - -New in 1.16: Added single/double buffer selection (only useful for -Unix versions of Gmsh run from remote hosts without GLX); fixed a bug -for recent versions of the opengl32.dll on Windows, which caused OpenGL -fonts not to show up; - -New in 1.15: Added automatic visibility setting during entity -selection; Corrected geometrical extrusion bug; - -New in 1.14: Corrected a few bugs in the GUI (most of them were -introduced in 1.13); Added interactive color selection; Made the -option database bidirectional (i.e. scripts now correctly update the -GUI); Default options can now be saved and automatically reloaded at -startup; Made some changes to the scripting syntax -(PostProcessing.View[n] becomes View[n]; Offset0 becomes OffsetX, -etc.); Corrected the handling of simple triangular surfaces with large -characteristic lengths in the 2D isotropic algorithm; Added an ascii -to binary post-processing view converter; - -New in 1.13: Added jpeg output on Windows; - -New in 1.12: Corrected vector lines in the post-processing parsed -format; corrected animation on Windows; corrected file creation in -scripts on Windows; direct affectation of variable arrays; - -New in 1.11: Corrected included file loading problem. - -New in 1.10: Switched from Motif to FLTK for the GUI. Many small -tweaks. - -New in 1.00: Added PPM and YUV output; Corrected nested If/Endif; -Corrected several bugs for pixel output and enhanced GIF output -(dithering, transparency); Slightly changed the post-processing file -format to allow both single and double precision numbers. - -New in 0.999: Added JPEG output and easy MPEG generation (see t8.geo in the -tutorial); Clean up of export functions; small fixes; Linux versions -are now compiled with gcc 2.95.2, which should fix the problems -encountered with Mandrake 7.2; - -New in 0.998: Corrected bug introduced in 0.997 in the generation of -the initial 3D mesh; - -New in 0.997: Corrected bug in interactive surface/volume selection; -Added interactive symmetry; Corrected geometrical extrusion with -rotation in degenerated or partially degenerated cases; Corrected bug -in 2D mesh when meshing in the mean plane; - -New in 0.996: Arrays of variables; Enhanced Printf and Sprintf; -Simplified options (suppression of option arrays). - -New in 0.995: Totally rewritten geometrical database (performance has -been drastically improved for all geometrical transformations, and -most notably for extrusion). As a consequence, the internal numbering -of geometrical entities has changed: this will cause incompatibilities -with old .geo files, and will require a partial rewrite of your old -.geo files if these files made use of geometrical transformations. The -syntax of the .geo file has also been clarified. Many additions for -scripting purposes. New extrusion mesh generator. Preliminary version -of the coupling between extruded and Delaunay meshes. New option and -procedural database. All interactive operations can be scripted in the -input files. See the last example in the tutorial for an example. Many -stability enhancements in the 2D and 3D mesh algorithms. Performance -boost of the 3D algorithm. Gmsh is still slow, but the performance -becomes acceptable. An average 1000 tetrahedra/second is obtained on a -600Mhz computer for a mesh of one million tetrahedra. New anisotropic -2D mesh algorithm. New (ascii and binary) post-processing file format -and clarified mesh file format. New handling for interactive rotations -(trackball mode). New didactic interactive mesh construction (watch -the Delaunay algorithm in real time on complex geometries: that's -exciting ;-). And many, many bug fixes and cleanings... - -New in 0.992: corrected recombined extrusion; corrected ellipses; added -simple automatic animation of post-processing maps; fixed various bugs. - -New in 0.991: fixed a serious allocation bug in 2D algorithm, which -caused random crashes. All users should upgrade to 0.991. - -New in 0.990: bug fix in non-recombined 3D transfinite meshes. - -New in 0.989: added ability to reload previously saved meshes; some -new command line options; reorganization of the scale menu; GIF -output. - -New in 0.987: fixed bug with smoothing (leading to the possible -generation of erroneous 3d meshes); corrected bug for mixed 3D meshes; -moved the 'toggle view link' option to Opt->Postprocessing_Options. - -New in 0.986: fixed overlay problems; SGI version should now also run -on 32 bits machines; fixed small 3d mesh bug. - -New in 0.985: corrected colormap bug on HP, SUN, SGI and IBM versions; -corrected small initialization bug in postscript output. - -New in 0.984: corrected bug in display lists; added some options in -Opt->General. - -New in 0.983: corrected some seg faults in interactive mode; corrected -bug in rotations; changed default window sizes for better match with -1024x768 screens (default X resources can be changed: see ex03.geo). - -New in 0.982: lighting for mesh and post-processing; corrected 2nd -order mesh on non plane surfaces; added example 13. - diff --git a/doc/gmsh.1 b/doc/gmsh.1 deleted file mode 100644 index 862b775931b1523be49b9b4299e9af17dfd0a100..0000000000000000000000000000000000000000 --- a/doc/gmsh.1 +++ /dev/null @@ -1,225 +0,0 @@ -.\" ====================================================================== -.\" -.\" This is the manual page for Gmsh -.\" -.\" Copyright (c) 2000-2001 J.-F. Remacle, C. Geuzaine -.\" -.\" ====================================================================== -.TH Gmsh 1 "06 August 2001" "Version 1.23" "Gmsh Manual Pages" -.UC 4 -.\" ====================================================================== -.SH NAME -Gmsh \- an automatic three-dimensional finite element mesh generator -with built-in pre- and post-processing facilities -.\" ====================================================================== -.SH SYNOPSIS -.B gmsh [file(s)] [option(s)] -.\" ====================================================================== -.SH DESCRIPTION -\fIGmsh\fR is an automatic three-dimensional finite element mesh -generator, primarily Delaunay, with built-in pre- and post-processing -facilities. Its primal goal is to provide a simple meshing tool for -academic test cases with parametric input and up to date visualization -capabilities. One of the strengths of \fIGmsh\fR is its ability to -respect a characteristic length field for the generation of adapted -meshes on lines, surfaces and volumes. These adapted meshes can be -mixed with simple structured (transfinite, elliptic, etc.) meshes in -order to augment the flexibility. -.SS Geometrical Entity Definition -Parameterized geometries are created by successively defining points, -oriented curves (segments, circles, ellipsis, splines, etc.), oriented -surfaces (plane surfaces, ruled surfaces, etc.) and volumes. Compound -groups of geometrical entities can be defined, based on these elementary -parameterized and scriptable geometric entities. -.SS Mesh Generation -A finite element mesh is a tessellation of a given subset of R^3 by -elementary geometrical elements of various shapes (in this case lines, -triangles, quadrangles, tetrahedra, prisms and hexahedra), arranged in -such a way that two of them intersect, if they do, along a common -face, edge or node, and never otherwise. All the finite element meshes -produced by \fIGmsh\fR as unstructured, even if they were generated in -a structured way. This implies that the elementary geometrical -elements are defined only by an ordered list of their vertices (which -allows the orientation of all their lower order geometrical entities) -but no predefined relation is assumed between any two elementary -elements. -.PP -The procedure follows the same order as for the geometry creation: -curves are discretized first; the mesh of the curves is then used to -mesh the surfaces; then the mesh of the surfaces is used to mesh the -volumes. This automatically assures the continuity of the mesh when, -for example, two surfaces share a common curve. Every meshing step is -constrained by the characteristic length field, which can be uniform, -specified by characteristic length associated to elementary -geometrical entities, or associated to another mesh (the background -mesh). -.PP -For each meshing step (i.e. the discretization of lines, surfaces and -volumes), all structured mesh directives are executed first, and serve -as additional constraints for the unstructured parts. The implemented -Delaunay algorithm is subdivided in the following five steps for -surface/volume discretization: -.TP 4 -.B 1. -trivial meshing of a box including the convex polygon/polyhedron -defined by the boundary nodes resulting from the discretization of the -curves/surfaces; -.TP 4 -.B 2. -creation of the initial mesh by insertion of all the nodes on the -curves/surfaces thanks to the Bowyer algorithm; -.TP 4 -.B 3. -boundary restoration to force all the edges/faces of the -curves/surfaces to be present in the initial mesh; -.TP 4 -.B 4. -suppression of all the unwanted triangles/tetrahedra (in -particular those containing the nodes of the initial box); -.TP 4 -.B 5. -insertion of new nodes by the Bowyer algorithm until the -characteristic size of each simplex is lower or equal to the -characteristic length field evaluated at the center of its -circumscribed circle/sphere. -.SS Scalar, vector and tensor field Visualization -Multiple post-processing scalar or vector maps can be loaded and -manipulated (globally or individually) along with the geometry and the -mesh. Scalar fields are represented by iso-value curves or color maps -and vector fields by three-dimensional arrows or displacement -maps. Post-processor functions include offsets, elevation, interactive -color map modification, range clamping, interactive animation, vector -postscript output, etc. All post-processing options can be accessed -either interactively or through the input ascii files. -.\" ====================================================================== -.SH GEOMETRY OPTIONS -.TP 4 -.B \-0 -parse all input files, output flattened geometry, and exit. -.\" ====================================================================== -.SH MESH OPTIONS -.TP 4 -.B \-1 -perform the one-dimensional mesh, i.e. discretize all the curves in -the geometry. -.TP 4 -.B \-2 -perform the two-dimensional mesh, i.e. discretize all the surfaces in -the geometry. -.TP 4 -.B \-3 -perform the three-dimensional mesh, i.e. discretize all the volumes in -the geometry. -.TP 4 -.B \-o file -specify mesh output file name. -.TP 4 -.B \-format msh|unv|gref -set output mesh format (default: msh). -.TP 4 -.B \-algo iso|aniso -select the two-dimensional mesh algorithm (default: iso). -.TP 4 -.B \-smooth int -set the number of smoothing passes (default value is 3). -.TP 4 -.B \-degree int -set the degree of the generated elements (default value is 1). -.TP 4 -.B \-scale float -apply a global scaling factor to the generated mesh (default value is -1.0). -.TP 4 -.B \-meshscale float -apply a global scaling factor to all generated elements (default value is 1.0). -.TP 4 -.B \-clscale float -apply a global scaling factor to all the characteristic lengths in the -mesh (default value is 1.0). -.TP 4 -.B \-rand float -set random perturbation factor (default: 1.e-4). -.TP 4 -.B \-bgm file -load view in file as current background mesh. -.TP 4 -.B \-constrain -constrain background mesh with characteristic lengths. -.TP 4 -.B \-histogram -print mesh quality histogram. -.TP 4 -.B \-interactive -display the 2D mesh construction interactively if the anisotropic mesh -algorithm is selected. -.TP 4 -.B \-extrude -use old extrusion mesh generator. -.TP 4 -.B \-recombine -recombine meshes from old extrusion mesh generator. -.\" ====================================================================== -.SH POST-PROCESSING OPTIONS -.TP 4 -.B \-dl -enable OpenGL display lists. -.TP 4 -.B \-noview -hide all views at startup. -.TP 4 -.B \-link -link all views (all interactive option modifications will apply to all -views) at startup. -.TP 4 -.B \-convert file file -convert an ascii view into a binary one. -.\" ====================================================================== -.SH DISPLAY OPTIONS -.TP 4 -.B \-nodb -suppress the double buffer. Use this options if you use \fIGmsh\fR on -a remote host without GLX. -.TP 4 -.B \-alpha -enable alpha blending. -.TP 4 -.B \-notrack -don't use trackball mode for rotations. -.TP 4 -.B \-display disp -specify display. -.TP 4 -.B \-perspective -use perspective instead of orthographic projection. -.\" ====================================================================== -.SH OTHER OPTIONS -.TP 4 -.B \-a, \-g, \-m, \-s, \-p -start in automatic, geometry, mesh, solver or post-processing mode -(default: automatic). -.TP 4 -.B \-opt string -parse string before project file. -.TP 4 -.B \-v int -set verbosity level (default: 2). -.TP 4 -.B \-version -show version number. -.TP 4 -.B \-info -show detailed version information. -.TP 4 -.B \-help -show help message. -.\" ====================================================================== -.SH AUTHORS -Christophe Geuzaine (Christope.Geuzaine@ulg.ac.be) and Jean-Francois -Remacle (Remacle@scorec.rpi.edu). -.\" ====================================================================== -.SH SEE ALSO -.BR getdp (1), -.br -Gmsh examples (\fI/usr/doc/gmsh-1.23/\fR), -.br -Gmsh homepage (\fIhttp://www.geuz.org/gmsh/\fR). diff --git a/doc/gmsh.texi b/doc/gmsh.texi deleted file mode 100644 index e4636e9730cc6fe27bbe1d63e2d214de468e7d6a..0000000000000000000000000000000000000000 --- a/doc/gmsh.texi +++ /dev/null @@ -1,327 +0,0 @@ -\input texinfo.tex @c -*-texinfo-*- -@c $Id: gmsh.texi,v 1.3 2000-12-11 22:09:43 geuzaine Exp $ -@c ========================================================================= -@c -@c This is the Gmsh documentation texinfo source file -@c -@c Indexing : @cindex == concepts -@c @tindex == syntax -@c -@c Before release, run C-u C-c C-u C-a in GNU Emacs -@c This updates all node pointers and menus -@c -@c info : makeinfo getdp.texi -@c dvi : texi2dvi getdp.texi -@c ps : dvips getdp.dvi -o -@c pdf : texi2pdf getdp.texi -@c html : texi2html -init_file getdp.t2h getdp.texi -@c nroff : texi2roff getdp.texi -@c -@c ========================================================================= -@c %**start of header -@setfilename gmsh.info -@set EDITION 1. -@set VERSION 0.996 -@set DAY 12 -@set MONTH December 2000 -@set COPYRIGHT @copyright{} 1997-2000 Christophe Geuzaine, Jean-Francois Remacle -@set WEB-GMSH @uref{http://www.geuz.org/gmsh/} -@settitle Gmsh @value{VERSION} -@footnotestyle separate -@setchapternewpage odd -@paragraphindent 0 -@finalout -@c %**end of header - -@c ========================================================================= -@c Info directives -@c ========================================================================= - -@ifinfo -@dircategory Math -@direntry -* Gmsh: (gmsh). a 3D mesh generator with pre- and post-processing facilities -@end direntry -@noindent -This is Edition @value{EDITION}, last updated @value{DAY} @value{MONTH}, of the -@cite{Gmsh Manual}, for Gmsh, Version @value{VERSION}. -@noindent -Copyright @value{COPYRIGHT} -@end ifinfo - -@c ========================================================================= -@c TeX directives -@c ========================================================================= - -@iftex -@global@let@bullet=- -@global@let@sl=@it -@global@setfont@indit@itshape{9}{1000} -@c @global@let@linkcolor=@Orange -@c @parskip=5pt -@end iftex - -@c ========================================================================= -@c Title page -@c ========================================================================= - -@shorttitlepage Gmsh - -@titlepage - -@title Gmsh Manual - -@subtitle The documentation for Gmsh, Version @value{VERSION} -@subtitle -@subtitle Edition @value{EDITION}, @value{MONTH} - -@author Christophe Geuzaine -@author Jean-Francois Remacle - - -@page -@vskip 0pt plus 1filll -Copyright @value{COPYRIGHT} -@sp 1 -This manual was prepared with Texinfo (@uref{http://texinfo.org}). The source -of the document as well as several formatted versions (info, postscript, pdf, -html) are available at @value{WEB-GMSH}. - -@end titlepage - -@c ========================================================================= -@c Table of contents -@c ========================================================================= - -@summarycontents -@contents - -@c ========================================================================= -@c Top node (for all output, except TeX) -@c ========================================================================= - -@ifnottex -@node Top, Copying Conditions, (dir), (dir) -@top Gmsh - -@chapheading The documentation for Gmsh, version @value{VERSION} - -Christophe Geuzaine and Jean-Francois Remacle - -Gmsh is an automatic three-dimensional mesh generator, primarily Delaunay, -with pre- and post-processing facilities. This is Edition @value{EDITION} of -the @cite{Gmsh Manual}, last updated @value{DAY} @value{MONTH} for Gmsh -Version @value{VERSION}. -@end ifnottex - -@c ========================================================================= -@c Master menu -@c ========================================================================= - -@menu -* Copying Conditions:: How is Gmsh distributable? -* Introduction:: Basic presentation -* Geometry:: How to define a geometry in Gmsh -* Mesh:: An explanation of the mesh generator -* Post-Processing:: An overview of the post-processing functions -* Tutorial:: Seven complete examples -* Running Gmsh:: How to run Gmsh on your operating system -* File formats:: Input and output file formats -* Versions and credits:: Versions history and contributors -* Tips and tricks:: Some tips to make your life easier with Gmsh -* Concept index:: Main concepts -* Syntax index:: Reserved keywords -@end menu - -@c ========================================================================= -@c Copying Conditions -@c ========================================================================= - -@node Copying Conditions, Introduction, Top, Top -@unnumbered Copying Conditions - -@cindex Copyright -@cindex Web site -@cindex Internet address -@cindex Download -@cindex Platforms - -Executable versions of Gmsh can be downloaded for most of the classical UNIX -platforms (SUN, DEC, IBM, HP, SGI and Linux) from the web site -@value{WEB-GMSH} (no source distribution is available for the moment). The -executable versions of Gmsh are free; the only thing asked if you use Gmsh -is to mention it in your work. Published references, as well as the latest -news about Gmsh developments and download information, are always available -on the web site. - - -@c ========================================================================= -@c Introduction -@c ========================================================================= - -@node Introduction, General overview, Copying Conditions, Top -@unnumbered Introduction - -@cindex Introduction - -Gmsh is an automatic three-dimensional mesh generator, primarily Delaunay, -with pre- and post-processing facilities. Its primal goal is to provide a -simple meshing tool for academic test cases with parametric input and up to -date visualization capabilities. One of the strengths of Gmsh is its -ability to respect a characteristic length field for the generation of -adapted meshes on lines, surfaces and volumes. Gmsh requires OpenGL -libraries to be installed in on your system. - - -@c ------------------------------------------------------------------------- -@c How to Read this Manual? -@c ------------------------------------------------------------------------- - -@node How to Read this Manual?, , Industry, Introduction -@heading How to Read this Manual? - -@cindex Reading, guidelines - -After reading @ref{General overview}, and @ref{Expressions}, which depict -the general concepts and the way to construct simple expressions in GetDP, -you can safely (in a first reading) skip @ref{Objects} and @ref{Types for -objects} and directly go to @ref{Short examples}. This chapter gives simple -examples of the problem definition syntax used to define the discrete -problems. For each example, you should then go back to @ref{Objects}, and -@ref{Types for objects}, and have a detailed view of the syntax of the -objects appearing in it. Note that indexes for many concepts and for all the -syntax elements are available at the end of this manual. - -Once the examples presented in @ref{Short examples}, are understood, you -may start to use GetDP on your computer (@pxref{Running GetDP}), for -example by solving the complete examples presented in @ref{Complete -examples}. Ready-to-use input files for these examples can be downloaded -from the web site. - - -@c ========================================================================= -@c Versions and Credits -@c ========================================================================= - -@node Versions and credits, Tips and tricks, File formats, Top -@chapter Versions and Credits - -@menu -* Version history:: -* Bugs:: -* Contributors:: -@end menu - -@c ------------------------------------------------------------------------- -@c Versions -@c ------------------------------------------------------------------------- - -@node Version history, Bugs, Versions and credits, Versions and credits -@section Version History - -@cindex Versions -@cindex History, versions -@cindex Changelog - -@c ------------------------------------------------------------------------- -@c Bugs -@c ------------------------------------------------------------------------- - -@node Bugs, Contributors, Version history, Versions and credits -@section Bugs - -@cindex Known bugs -@cindex Bugs, known -@cindex Bugs, reporting -@cindex Reporting bugs -@cindex Authors, e-mail -@cindex E-mail, authors - -If you think you have found a bug in Gmsh, you can report it by electronic -mail to @email{Christophe.Geuzaine@@ulg.ac.be} or -@email{Remacle@@scorec.rpi.edu}. Please send as precise a description of -the problem as you can, including sample input files that produce the -bug. Don't forget to mention both the versions of Gmsh and of your operation -system (@pxref{Running Gmsh} to see how to get this information). - -Here is a list of known bugs: - - -@c ------------------------------------------------------------------------- -@c Contributors -@c ------------------------------------------------------------------------- - -@node Contributors, , Bugs, Versions and credits -@section Contributors - -@cindex Acknowledgments -@cindex Contributors, list -@cindex Credits - -@itemize @bullet -@item -M. Ume: code for lists and trees (listman.c, treeman.c). -@item -Unknown: avl tree code -@item -@dots{} -@end itemize - -And many thanks to all the users whose feedback permitted many -improvements and bug correction... - - -@c ========================================================================= -@c Tips ans Tricks -@c ========================================================================= - -@node Tips and tricks, Gmsh examples, Versions and credits, Top -@appendix Tips and Tricks - -@cindex Tips -@cindex Tricks -@cindex Efficiency, tips - -@itemize @bullet -@item -Install the 'info' version of this user's guide! On your (Unix) system, this -can be done by 1) copying all getdp.info* files to the place where your info -files live (usually /usr/info), and 2) issuing the command 'install-info -/usr/info/getdp.info /usr/info/dir'. You will then be able to access the -documentation with the command 'info getdp'. Note that particular sections -("nodes") can be accessed directly. For example, 'info getdp functionspace' -will take you directly to the definition of the FunctionSpace object. -@item -Use emacs to edit your files, and load the C++ mode! This permits automatic -syntax highlighting and easy indentation. Automatic loading of the C++ mode -for @file{.pro} files can be done by adding the following command in your -@code{.emacs} file: @code{(setq auto-mode-alist (append '(("\\.pro$" -. c++-mode)) auto-mode-alist))}. -@end itemize - -@c ========================================================================= -@c Concept Index -@c ========================================================================= - -@node Concept index, Syntax index, Gmsh examples, Top -@unnumbered Concept Index - -@cindex Index, concepts -@cindex Concepts, index - -@printindex cp - -@c ========================================================================= -@c Syntax Index -@c ========================================================================= - -@node Syntax index, Variable index, Concept index, Top -@unnumbered Syntax Index - -@cindex Index, syntax -@cindex Syntax, index -@cindex Keywords, index - -@printindex tp - -@bye diff --git a/jpeg/Makefile b/jpeg/Makefile deleted file mode 100644 index c6eb9ee856c1c2df8236aacb6bdd384acd8b77f5..0000000000000000000000000000000000000000 --- a/jpeg/Makefile +++ /dev/null @@ -1,93 +0,0 @@ -# $Id: Makefile,v 1.19 2001-08-11 23:32:27 geuzaine Exp $ -# -# Makefile for "libJpeg.a" -# - -.IGNORE: - -CC = c++ -AR = ar ruvs -RM = rm -RANLIB = ranlib - -LIB = ../lib/libJpeg.a -INCLUDE = -I. - -C_FLAGS = -g -Wall -OS_FLAGS = -VERSION_FLAGS = - -RMFLAGS = -f -CFLAGS = $(C_FLAGS) $(OS_FLAGS) $(VERSION_FLAGS) $(INCLUDE) - -SRC = jcomapi.c jutils.c jerror.c jmemmgr.c jmemnobs.c \ - jcapi.c jcparam.c jdatadst.c jcmaster.c jcmarker.c jcmainct.c \ - jcprepct.c jccoefct.c jccolor.c jcsample.c jchuff.c jcdctmgr.c \ - jfdctfst.c jfdctflt.c jfdctint.c - -OBJ = $(SRC:.c=.o) - -.SUFFIXES: .o .cpp - -$(LIB): $(OBJ) - $(AR) $(LIB) $(OBJ) - $(RANLIB) $(LIB) - -.cpp.o: - $(CC) $(CFLAGS) -c $< - -clean: - $(RM) $(RMFLAGS) *.o - -lint: - $(LINT) $(CFLAGS) $(SRC) - -depend: - (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ - $(CC) -MM $(CFLAGS) ${SRC} \ - ) >Makefile.new - cp Makefile Makefile.bak - cp Makefile.new Makefile - $(RM) $(RMFLAGS) Makefile.new - -# DO NOT DELETE THIS LINE -jcomapi.o: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ - jpegint.h jerror.h -jutils.o: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h \ - jerror.h -jerror.o: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ - jversion.h jerror.h -jmemmgr.o: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ - jpegint.h jerror.h jmemsys.h -jmemnobs.o: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ - jpegint.h jerror.h jmemsys.h -jcapi.o: jcapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h \ - jerror.h -jcparam.o: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ - jpegint.h jerror.h -jdatadst.o: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ - jerror.h -jcmaster.o: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ - jpegint.h jerror.h -jcmarker.o: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ - jpegint.h jerror.h -jcmainct.o: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ - jpegint.h jerror.h -jcprepct.o: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ - jpegint.h jerror.h -jccoefct.o: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ - jpegint.h jerror.h -jccolor.o: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ - jpegint.h jerror.h -jcsample.o: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ - jpegint.h jerror.h -jchuff.o: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h \ - jerror.h -jcdctmgr.o: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ - jpegint.h jerror.h jdct.h -jfdctfst.o: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ - jpegint.h jerror.h jdct.h -jfdctflt.o: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ - jpegint.h jerror.h jdct.h -jfdctint.o: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ - jpegint.h jerror.h jdct.h diff --git a/jpeg/jcapi.c b/jpeg/jcapi.c deleted file mode 100644 index d9ba37b921d772f4dd9adcb2a79a633830cf36e6..0000000000000000000000000000000000000000 --- a/jpeg/jcapi.c +++ /dev/null @@ -1,369 +0,0 @@ -/* - * jcapi.c - * - * Copyright (C) 1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains application interface code for the compression half of - * the JPEG library. Most of the routines intended to be called directly by - * an application are in this file. But also see jcparam.c for - * parameter-setup helper routines, and jcomapi.c for routines shared by - * compression and decompression. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* - * Initialization of a JPEG compression object. - * The error manager must already be set up (in case memory manager fails). - */ - -GLOBAL void -jpeg_create_compress (j_compress_ptr cinfo) -{ - int i; - - /* For debugging purposes, zero the whole master structure. - * But error manager pointer is already there, so save and restore it. - */ - { - struct jpeg_error_mgr * err = cinfo->err; - MEMZERO(cinfo, SIZEOF(struct jpeg_compress_struct)); - cinfo->err = err; - } - cinfo->is_decompressor = FALSE; - - /* Initialize a memory manager instance for this object */ - jinit_memory_mgr((j_common_ptr) cinfo); - - /* Zero out pointers to permanent structures. */ - cinfo->progress = NULL; - cinfo->dest = NULL; - - cinfo->comp_info = NULL; - - for (i = 0; i < NUM_QUANT_TBLS; i++) - cinfo->quant_tbl_ptrs[i] = NULL; - - for (i = 0; i < NUM_HUFF_TBLS; i++) { - cinfo->dc_huff_tbl_ptrs[i] = NULL; - cinfo->ac_huff_tbl_ptrs[i] = NULL; - } - - cinfo->input_gamma = 1.0; /* in case application forgets */ - - /* OK, I'm ready */ - cinfo->global_state = CSTATE_START; -} - - -/* - * Destruction of a JPEG compression object - */ - -GLOBAL void -jpeg_destroy_compress (j_compress_ptr cinfo) -{ - jpeg_destroy((j_common_ptr) cinfo); /* use common routine */ -} - - -/* - * Forcibly suppress or un-suppress all quantization and Huffman tables. - * Marks all currently defined tables as already written (if suppress) - * or not written (if !suppress). This will control whether they get emitted - * by a subsequent jpeg_start_compress call. - * - * This routine is exported for use by applications that want to produce - * abbreviated JPEG datastreams. It logically belongs in jcparam.c, but - * since it is called by jpeg_start_compress, we put it here --- otherwise - * jcparam.o would be linked whether the application used it or not. - */ - -GLOBAL void -jpeg_suppress_tables (j_compress_ptr cinfo, boolean suppress) -{ - int i; - JQUANT_TBL * qtbl; - JHUFF_TBL * htbl; - - for (i = 0; i < NUM_QUANT_TBLS; i++) { - if ((qtbl = cinfo->quant_tbl_ptrs[i]) != NULL) - qtbl->sent_table = suppress; - } - - for (i = 0; i < NUM_HUFF_TBLS; i++) { - if ((htbl = cinfo->dc_huff_tbl_ptrs[i]) != NULL) - htbl->sent_table = suppress; - if ((htbl = cinfo->ac_huff_tbl_ptrs[i]) != NULL) - htbl->sent_table = suppress; - } -} - - -/* - * Compression initialization. - * Before calling this, all parameters and a data destination must be set up. - * - * We require a write_all_tables parameter as a failsafe check when writing - * multiple datastreams from the same compression object. Since prior runs - * will have left all the tables marked sent_table=TRUE, a subsequent run - * would emit an abbreviated stream (no tables) by default. This may be what - * is wanted, but for safety's sake it should not be the default behavior: - * programmers should have to make a deliberate choice to emit abbreviated - * images. Therefore the documentation and examples should encourage people - * to pass write_all_tables=TRUE; then it will take active thought to do the - * wrong thing. - */ - -GLOBAL void -jpeg_start_compress (j_compress_ptr cinfo, boolean write_all_tables) -{ - if (cinfo->global_state != CSTATE_START) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - - if (write_all_tables) - jpeg_suppress_tables(cinfo, FALSE); /* mark all tables to be written */ - - /* (Re)initialize error mgr and destination modules */ - (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); - (*cinfo->dest->init_destination) (cinfo); - /* Perform master selection of active modules */ - jinit_master_compress(cinfo); - /* Set up for the first pass */ - (*cinfo->master->prepare_for_pass) (cinfo); - /* Ready for application to drive first pass through jpeg_write_scanlines - * or jpeg_write_raw_data. - */ - cinfo->next_scanline = 0; - cinfo->global_state = (cinfo->raw_data_in ? CSTATE_RAW_OK : CSTATE_SCANNING); -} - - -/* - * Write some scanlines of data to the JPEG compressor. - * - * The return value will be the number of lines actually written. - * This should be less than the supplied num_lines only in case that - * the data destination module has requested suspension of the compressor, - * or if more than image_height scanlines are passed in. - * - * Note: we warn about excess calls to jpeg_write_scanlines() since - * this likely signals an application programmer error. However, - * excess scanlines passed in the last valid call are *silently* ignored, - * so that the application need not adjust num_lines for end-of-image - * when using a multiple-scanline buffer. - */ - -GLOBAL JDIMENSION -jpeg_write_scanlines (j_compress_ptr cinfo, JSAMPARRAY scanlines, - JDIMENSION num_lines) -{ - JDIMENSION row_ctr, rows_left; - - if (cinfo->global_state != CSTATE_SCANNING) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - if (cinfo->next_scanline >= cinfo->image_height) - WARNMS(cinfo, JWRN_TOO_MUCH_DATA); - - /* Call progress monitor hook if present */ - if (cinfo->progress != NULL) { - cinfo->progress->pass_counter = (long) cinfo->next_scanline; - cinfo->progress->pass_limit = (long) cinfo->image_height; - (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); - } - - /* Give master control module another chance if this is first call to - * jpeg_write_scanlines. This lets output of the frame/scan headers be - * delayed so that application can write COM, etc, markers between - * jpeg_start_compress and jpeg_write_scanlines. - */ - if (cinfo->master->call_pass_startup) - (*cinfo->master->pass_startup) (cinfo); - - /* Ignore any extra scanlines at bottom of image. */ - rows_left = cinfo->image_height - cinfo->next_scanline; - if (num_lines > rows_left) - num_lines = rows_left; - - row_ctr = 0; - (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, num_lines); - cinfo->next_scanline += row_ctr; - return row_ctr; -} - - -/* - * Alternate entry point to write raw data. - * Processes exactly one iMCU row per call. - */ - -GLOBAL JDIMENSION -jpeg_write_raw_data (j_compress_ptr cinfo, JSAMPIMAGE data, - JDIMENSION num_lines) -{ - JDIMENSION mcu_ctr, lines_per_MCU_row; - - if (cinfo->global_state != CSTATE_RAW_OK) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - if (cinfo->next_scanline >= cinfo->image_height) { - WARNMS(cinfo, JWRN_TOO_MUCH_DATA); - return 0; - } - - /* Call progress monitor hook if present */ - if (cinfo->progress != NULL) { - cinfo->progress->pass_counter = (long) cinfo->next_scanline; - cinfo->progress->pass_limit = (long) cinfo->image_height; - (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); - } - - /* Give master control module another chance if this is first call to - * jpeg_write_raw_data. This lets output of the frame/scan headers be - * delayed so that application can write COM, etc, markers between - * jpeg_start_compress and jpeg_write_raw_data. - */ - if (cinfo->master->call_pass_startup) - (*cinfo->master->pass_startup) (cinfo); - - /* Verify that at least one iMCU row has been passed. */ - lines_per_MCU_row = cinfo->max_v_samp_factor * DCTSIZE; - if (num_lines < lines_per_MCU_row) - ERREXIT(cinfo, JERR_BUFFER_SIZE); - - /* Directly compress the row. */ - mcu_ctr = 0; - (*cinfo->coef->compress_data) (cinfo, data, &mcu_ctr); - /* If compressor did not consume the whole row, then we must need to - * suspend processing; this is not currently supported. - */ - if (mcu_ctr != cinfo->MCUs_per_row) - ERREXIT(cinfo, JERR_CANT_SUSPEND); - - /* OK, we processed one iMCU row. */ - cinfo->next_scanline += lines_per_MCU_row; - return lines_per_MCU_row; -} - - -/* - * Finish JPEG compression. - * - * If a multipass operating mode was selected, this may do a great deal of - * work including most of the actual output. - */ - -GLOBAL void -jpeg_finish_compress (j_compress_ptr cinfo) -{ - JDIMENSION iMCU_row, mcu_ctr; - - if (cinfo->global_state != CSTATE_SCANNING && - cinfo->global_state != CSTATE_RAW_OK) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - if (cinfo->next_scanline < cinfo->image_height) - ERREXIT(cinfo, JERR_TOO_LITTLE_DATA); - /* Terminate first pass */ - (*cinfo->master->finish_pass) (cinfo); - /* Perform any remaining passes */ - while (! cinfo->master->is_last_pass) { - (*cinfo->master->prepare_for_pass) (cinfo); - for (iMCU_row = 0; iMCU_row < cinfo->total_iMCU_rows; iMCU_row++) { - if (cinfo->progress != NULL) { - cinfo->progress->pass_counter = (long) iMCU_row; - cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows; - (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo); - } - /* We bypass the main controller and invoke coef controller directly; - * all work is being done from the coefficient buffer. - */ - mcu_ctr = 0; - (*cinfo->coef->compress_data) (cinfo, (JSAMPIMAGE) NULL, &mcu_ctr); - if (mcu_ctr != cinfo->MCUs_per_row) - ERREXIT(cinfo, JERR_CANT_SUSPEND); - } - (*cinfo->master->finish_pass) (cinfo); - } - /* Write EOI, do final cleanup */ - (*cinfo->marker->write_file_trailer) (cinfo); - (*cinfo->dest->term_destination) (cinfo); - /* We can use jpeg_abort to release memory and reset global_state */ - jpeg_abort((j_common_ptr) cinfo); -} - - -/* - * Write a special marker. - * This is only recommended for writing COM or APPn markers. - * Must be called after jpeg_start_compress() and before - * first call to jpeg_write_scanlines() or jpeg_write_raw_data(). - */ - -GLOBAL void -jpeg_write_marker (j_compress_ptr cinfo, int marker, - const JOCTET *dataptr, unsigned int datalen) -{ - if (cinfo->next_scanline != 0 || - (cinfo->global_state != CSTATE_SCANNING && - cinfo->global_state != CSTATE_RAW_OK)) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - - (*cinfo->marker->write_any_marker) (cinfo, marker, dataptr, datalen); -} - - -/* - * Alternate compression function: just write an abbreviated table file. - * Before calling this, all parameters and a data destination must be set up. - * - * To produce a pair of files containing abbreviated tables and abbreviated - * image data, one would proceed as follows: - * - * initialize JPEG object - * set JPEG parameters - * set destination to table file - * jpeg_write_tables(cinfo); - * set destination to image file - * jpeg_start_compress(cinfo, FALSE); - * write data... - * jpeg_finish_compress(cinfo); - * - * jpeg_write_tables has the side effect of marking all tables written - * (same as jpeg_suppress_tables(..., TRUE)). Thus a subsequent start_compress - * will not re-emit the tables unless it is passed write_all_tables=TRUE. - */ - -GLOBAL void -jpeg_write_tables (j_compress_ptr cinfo) -{ - if (cinfo->global_state != CSTATE_START) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - - /* (Re)initialize error mgr and destination modules */ - (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo); - (*cinfo->dest->init_destination) (cinfo); - /* Initialize the marker writer ... bit of a crock to do it here. */ - jinit_marker_writer(cinfo); - /* Write them tables! */ - (*cinfo->marker->write_tables_only) (cinfo); - /* And clean up. */ - (*cinfo->dest->term_destination) (cinfo); - /* We can use jpeg_abort to release memory ... is this necessary? */ - jpeg_abort((j_common_ptr) cinfo); -} - - -/* - * Abort processing of a JPEG compression operation, - * but don't destroy the object itself. - */ - -GLOBAL void -jpeg_abort_compress (j_compress_ptr cinfo) -{ - jpeg_abort((j_common_ptr) cinfo); /* use common routine */ -} diff --git a/jpeg/jccoefct.c b/jpeg/jccoefct.c deleted file mode 100644 index 2ca1f37451d57d6c1afe72813213b35d4356e111..0000000000000000000000000000000000000000 --- a/jpeg/jccoefct.c +++ /dev/null @@ -1,414 +0,0 @@ -/* - * jccoefct.c - * - * Copyright (C) 1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains the coefficient buffer controller for compression. - * This controller is the top level of the JPEG compressor proper. - * The coefficient buffer lies between forward-DCT and entropy encoding steps. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* We use a full-image coefficient buffer when doing Huffman optimization, - * and also for writing multiple-scan JPEG files. In all cases, the DCT - * step is run during the first pass, and subsequent passes need only read - * the buffered coefficients. - */ -#ifdef ENTROPY_OPT_SUPPORTED -#define FULL_COEF_BUFFER_SUPPORTED -#else -#ifdef C_MULTISCAN_FILES_SUPPORTED -#define FULL_COEF_BUFFER_SUPPORTED -#endif -#endif - - -/* Private buffer controller object */ - -typedef struct { - struct jpeg_c_coef_controller pub; /* public fields */ - - JDIMENSION MCU_row_num; /* keep track of MCU row # within image */ - - /* For single-pass compression, it's sufficient to buffer just one MCU - * (although this may prove a bit slow in practice). We allocate a - * workspace of MAX_BLOCKS_IN_MCU coefficient blocks, and reuse it for each - * MCU constructed and sent. (On 80x86, the workspace is FAR even though - * it's not really very big; this is to keep the module interfaces unchanged - * when a large coefficient buffer is necessary.) - * In multi-pass modes, this array points to the current MCU's blocks - * within the virtual arrays. - */ - JBLOCKROW MCU_buffer[MAX_BLOCKS_IN_MCU]; - - /* In multi-pass modes, we need a virtual block array for each component. */ - jvirt_barray_ptr whole_image[MAX_COMPONENTS]; -} my_coef_controller; - -typedef my_coef_controller * my_coef_ptr; - - -/* Forward declarations */ -METHODDEF void compress_data - JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION *in_mcu_ctr)); -#ifdef FULL_COEF_BUFFER_SUPPORTED -METHODDEF void compress_first_pass - JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION *in_mcu_ctr)); -METHODDEF void compress_output - JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION *in_mcu_ctr)); -#endif - - -/* - * Initialize for a processing pass. - */ - -METHODDEF void -start_pass_coef (j_compress_ptr cinfo, J_BUF_MODE pass_mode) -{ - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - - coef->MCU_row_num = 0; - - switch (pass_mode) { - case JBUF_PASS_THRU: - if (coef->whole_image[0] != NULL) - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - coef->pub.compress_data = compress_data; - break; -#ifdef FULL_COEF_BUFFER_SUPPORTED - case JBUF_SAVE_AND_PASS: - if (coef->whole_image[0] == NULL) - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - coef->pub.compress_data = compress_first_pass; - break; - case JBUF_CRANK_DEST: - if (coef->whole_image[0] == NULL) - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - coef->pub.compress_data = compress_output; - break; -#endif - default: - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - break; - } -} - - -/* - * Process some data in the single-pass case. - * Up to one MCU row is processed (less if suspension is forced). - * - * NB: input_buf contains a plane for each component in image. - * For single pass, this is the same as the components in the scan. - */ - -METHODDEF void -compress_data (j_compress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION *in_mcu_ctr) -{ - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - JDIMENSION MCU_col_num; /* index of current MCU within row */ - JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1; - JDIMENSION last_MCU_row = cinfo->MCU_rows_in_scan - 1; - int blkn, bi, ci, yindex, blockcnt; - JDIMENSION ypos, xpos; - jpeg_component_info *compptr; - - /* Loop to write as much as one whole MCU row */ - - for (MCU_col_num = *in_mcu_ctr; MCU_col_num <= last_MCU_col; MCU_col_num++) { - /* Determine where data comes from in input_buf and do the DCT thing. - * Each call on forward_DCT processes a horizontal row of DCT blocks - * as wide as an MCU; we rely on having allocated the MCU_buffer[] blocks - * sequentially. Dummy blocks at the right or bottom edge are filled in - * specially. The data in them does not matter for image reconstruction, - * so we fill them with values that will encode to the smallest amount of - * data, viz: all zeroes in the AC entries, DC entries equal to previous - * block's DC value. (Thanks to Thomas Kinsman for this idea.) - */ - blkn = 0; - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - blockcnt = (MCU_col_num < last_MCU_col) ? compptr->MCU_width - : compptr->last_col_width; - xpos = MCU_col_num * compptr->MCU_sample_width; - ypos = 0; - for (yindex = 0; yindex < compptr->MCU_height; yindex++) { - if (coef->MCU_row_num < last_MCU_row || - yindex < compptr->last_row_height) { - (*cinfo->fdct->forward_DCT) (cinfo, compptr, - input_buf[ci], coef->MCU_buffer[blkn], - ypos, xpos, (JDIMENSION) blockcnt); - if (blockcnt < compptr->MCU_width) { - /* Create some dummy blocks at the right edge of the image. */ - jzero_far((void FAR *) coef->MCU_buffer[blkn + blockcnt], - (compptr->MCU_width - blockcnt) * SIZEOF(JBLOCK)); - for (bi = blockcnt; bi < compptr->MCU_width; bi++) { - coef->MCU_buffer[blkn+bi][0][0] = coef->MCU_buffer[blkn+bi-1][0][0]; - } - } - } else { - /* Create a whole row of dummy blocks at the bottom of the image. */ - jzero_far((void FAR *) coef->MCU_buffer[blkn], - compptr->MCU_width * SIZEOF(JBLOCK)); - for (bi = 0; bi < compptr->MCU_width; bi++) { - coef->MCU_buffer[blkn+bi][0][0] = coef->MCU_buffer[blkn-1][0][0]; - } - } - blkn += compptr->MCU_width; - ypos += DCTSIZE; - } - } - /* Try to write the MCU. In event of a suspension failure, we will - * re-DCT the MCU on restart (a bit inefficient, could be fixed...) - */ - if (! (*cinfo->entropy->encode_mcu) (cinfo, coef->MCU_buffer)) - break; /* suspension forced; exit loop */ - } - if (MCU_col_num > last_MCU_col) - coef->MCU_row_num++; /* advance if we finished the row */ - *in_mcu_ctr = MCU_col_num; -} - - -#ifdef FULL_COEF_BUFFER_SUPPORTED - -/* - * Process some data in the first pass of a multi-pass case. - * We process the equivalent of one fully interleaved MCU row ("iMCU" row) - * per call, ie, v_samp_factor block rows for each component in the image. - * This amount of data is read from the source buffer, DCT'd and quantized, - * and saved into the virtual arrays. We also generate suitable dummy blocks - * as needed at the right and lower edges. (The dummy blocks are constructed - * in the virtual arrays, which have been padded appropriately.) This makes - * it possible for subsequent passes not to worry about real vs. dummy blocks. - * - * We must also emit the data to the entropy encoder. This is conveniently - * done by calling compress_output() after we've loaded the current strip - * of the virtual arrays. - * - * NB: input_buf contains a plane for each component in image. All - * components are DCT'd and loaded into the virtual arrays in this pass. - * However, it may be that only a subset of the components are emitted to - * the entropy encoder during this first pass; be careful about looking - * at the scan-dependent variables (MCU dimensions, etc). - */ - -METHODDEF void -compress_first_pass (j_compress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION *in_mcu_ctr) -{ - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - JDIMENSION last_MCU_row = cinfo->total_iMCU_rows - 1; - JDIMENSION blocks_across, MCUs_across, MCUindex; - int bi, ci, h_samp_factor, block_row, block_rows, ndummy; - JCOEF lastDC; - jpeg_component_info *compptr; - JBLOCKARRAY buffer; - JBLOCKROW thisblockrow, lastblockrow; - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - /* Align the virtual buffer for this component. */ - buffer = (*cinfo->mem->access_virt_barray) - ((j_common_ptr) cinfo, coef->whole_image[ci], - coef->MCU_row_num * compptr->v_samp_factor, TRUE); - /* Count non-dummy DCT block rows in this iMCU row. */ - if (coef->MCU_row_num < last_MCU_row) - block_rows = compptr->v_samp_factor; - else { - block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor); - if (block_rows == 0) block_rows = compptr->v_samp_factor; - } - blocks_across = compptr->width_in_blocks; - h_samp_factor = compptr->h_samp_factor; - /* Count number of dummy blocks to be added at the right margin. */ - ndummy = (int) (blocks_across % h_samp_factor); - if (ndummy > 0) - ndummy = h_samp_factor - ndummy; - /* Perform DCT for all non-dummy blocks in this iMCU row. Each call - * on forward_DCT processes a complete horizontal row of DCT blocks. - */ - for (block_row = 0; block_row < block_rows; block_row++) { - thisblockrow = buffer[block_row]; - (*cinfo->fdct->forward_DCT) (cinfo, compptr, - input_buf[ci], thisblockrow, - (JDIMENSION) (block_row * DCTSIZE), - (JDIMENSION) 0, blocks_across); - if (ndummy > 0) { - /* Create dummy blocks at the right edge of the image. */ - thisblockrow += blocks_across; /* => first dummy block */ - jzero_far((void FAR *) thisblockrow, ndummy * SIZEOF(JBLOCK)); - lastDC = thisblockrow[-1][0]; - for (bi = 0; bi < ndummy; bi++) { - thisblockrow[bi][0] = lastDC; - } - } - } - /* If at end of image, create dummy block rows as needed. - * The tricky part here is that within each MCU, we want the DC values - * of the dummy blocks to match the last real block's DC value. - * This squeezes a few more bytes out of the resulting file... - */ - if (coef->MCU_row_num == last_MCU_row) { - blocks_across += ndummy; /* include lower right corner */ - MCUs_across = blocks_across / h_samp_factor; - for (block_row = block_rows; block_row < compptr->v_samp_factor; - block_row++) { - thisblockrow = buffer[block_row]; - lastblockrow = buffer[block_row-1]; - jzero_far((void FAR *) thisblockrow, - (size_t) (blocks_across * SIZEOF(JBLOCK))); - for (MCUindex = 0; MCUindex < MCUs_across; MCUindex++) { - lastDC = lastblockrow[h_samp_factor-1][0]; - for (bi = 0; bi < h_samp_factor; bi++) { - thisblockrow[bi][0] = lastDC; - } - thisblockrow += h_samp_factor; /* advance to next MCU in row */ - lastblockrow += h_samp_factor; - } - } - } - } - /* NB: compress_output will increment MCU_row_num */ - - /* Emit data to the entropy encoder, sharing code with subsequent passes */ - compress_output(cinfo, input_buf, in_mcu_ctr); -} - - -/* - * Process some data in subsequent passes of a multi-pass case. - * We process the equivalent of one fully interleaved MCU row ("iMCU" row) - * per call, ie, v_samp_factor block rows for each component in the scan. - * The data is obtained from the virtual arrays and fed to the entropy coder. - * - * Note that output suspension is not supported during multi-pass operation, - * so the complete MCU row will always be emitted to the entropy encoder - * before returning. - * - * NB: input_buf is ignored; it is likely to be a NULL pointer. - */ - -METHODDEF void -compress_output (j_compress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION *in_mcu_ctr) -{ - my_coef_ptr coef = (my_coef_ptr) cinfo->coef; - JDIMENSION MCU_col_num; /* index of current MCU within row */ - int blkn, ci, xindex, yindex, yoffset, num_MCU_rows; - JDIMENSION remaining_rows, start_col; - JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN]; - JBLOCKROW buffer_ptr; - jpeg_component_info *compptr; - - /* Align the virtual buffers for the components used in this scan. - * NB: during first pass, this is safe only because the buffers will - * already be aligned properly, so jmemmgr.c won't need to do any I/O. - */ - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - buffer[ci] = (*cinfo->mem->access_virt_barray) - ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index], - coef->MCU_row_num * compptr->v_samp_factor, FALSE); - } - - /* In an interleaved scan, we process exactly one MCU row. - * In a noninterleaved scan, we need to process v_samp_factor MCU rows, - * each of which contains a single block row. - */ - if (cinfo->comps_in_scan == 1) { - compptr = cinfo->cur_comp_info[0]; - num_MCU_rows = compptr->v_samp_factor; - /* but watch out for the bottom of the image */ - remaining_rows = cinfo->MCU_rows_in_scan - - coef->MCU_row_num * compptr->v_samp_factor; - if (remaining_rows < (JDIMENSION) num_MCU_rows) - num_MCU_rows = (int) remaining_rows; - } else { - num_MCU_rows = 1; - } - - /* Loop to process one whole iMCU row */ - for (yoffset = 0; yoffset < num_MCU_rows; yoffset++) { - for (MCU_col_num = 0; MCU_col_num < cinfo->MCUs_per_row; MCU_col_num++) { - /* Construct list of pointers to DCT blocks belonging to this MCU */ - blkn = 0; /* index of current DCT block within MCU */ - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - start_col = MCU_col_num * compptr->MCU_width; - for (yindex = 0; yindex < compptr->MCU_height; yindex++) { - buffer_ptr = buffer[ci][yindex+yoffset] + start_col; - for (xindex = 0; xindex < compptr->MCU_width; xindex++) { - coef->MCU_buffer[blkn++] = buffer_ptr++; - } - } - } - /* Try to write the MCU. */ - if (! (*cinfo->entropy->encode_mcu) (cinfo, coef->MCU_buffer)) { - ERREXIT(cinfo, JERR_CANT_SUSPEND); /* not supported */ - } - } - } - - coef->MCU_row_num++; /* advance to next iMCU row */ - *in_mcu_ctr = cinfo->MCUs_per_row; -} - -#endif /* FULL_COEF_BUFFER_SUPPORTED */ - - -/* - * Initialize coefficient buffer controller. - */ - -GLOBAL void -jinit_c_coef_controller (j_compress_ptr cinfo, boolean need_full_buffer) -{ - my_coef_ptr coef; - int ci, i; - jpeg_component_info *compptr; - JBLOCKROW buffer; - - coef = (my_coef_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_coef_controller)); - cinfo->coef = (struct jpeg_c_coef_controller *) coef; - coef->pub.start_pass = start_pass_coef; - - /* Create the coefficient buffer. */ - if (need_full_buffer) { -#ifdef FULL_COEF_BUFFER_SUPPORTED - /* Allocate a full-image virtual array for each component, */ - /* padded to a multiple of samp_factor DCT blocks in each direction. */ - /* Note memmgr implicitly pads the vertical direction. */ - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - coef->whole_image[ci] = (*cinfo->mem->request_virt_barray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) jround_up((long) compptr->width_in_blocks, - (long) compptr->h_samp_factor), - compptr->height_in_blocks, - (JDIMENSION) compptr->v_samp_factor); - } -#else - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); -#endif - } else { - /* We only need a single-MCU buffer. */ - buffer = (JBLOCKROW) - (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, - MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); - for (i = 0; i < MAX_BLOCKS_IN_MCU; i++) { - coef->MCU_buffer[i] = buffer + i; - } - coef->whole_image[0] = NULL; /* flag for no virtual arrays */ - } -} diff --git a/jpeg/jccolor.c b/jpeg/jccolor.c deleted file mode 100644 index 4ab3d7eaa2a56debd931e1e4d94e26a50719f6d6..0000000000000000000000000000000000000000 --- a/jpeg/jccolor.c +++ /dev/null @@ -1,449 +0,0 @@ -/* - * jccolor.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains input colorspace conversion routines. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* Private subobject */ - -typedef struct { - struct jpeg_color_converter pub; /* public fields */ - - /* Private state for RGB->YCC conversion */ - INT32 * rgb_ycc_tab; /* => table for RGB to YCbCr conversion */ -} my_color_converter; - -typedef my_color_converter * my_cconvert_ptr; - - -/**************** RGB -> YCbCr conversion: most common case **************/ - -/* - * YCbCr is defined per CCIR 601-1, except that Cb and Cr are - * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. - * The conversion equations to be implemented are therefore - * Y = 0.29900 * R + 0.58700 * G + 0.11400 * B - * Cb = -0.16874 * R - 0.33126 * G + 0.50000 * B + MAXJSAMPLE/2 - * Cr = 0.50000 * R - 0.41869 * G - 0.08131 * B + MAXJSAMPLE/2 - * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.) - * - * To avoid floating-point arithmetic, we represent the fractional constants - * as integers scaled up by 2^16 (about 4 digits precision); we have to divide - * the products by 2^16, with appropriate rounding, to get the correct answer. - * - * For even more speed, we avoid doing any multiplications in the inner loop - * by precalculating the constants times R,G,B for all possible values. - * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table); - * for 12-bit samples it is still acceptable. It's not very reasonable for - * 16-bit samples, but if you want lossless storage you shouldn't be changing - * colorspace anyway. - * The MAXJSAMPLE/2 offsets and the rounding fudge-factor of 0.5 are included - * in the tables to save adding them separately in the inner loop. - */ - -#define SCALEBITS 16 /* speediest right-shift on some machines */ -#define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) -#define FIX(x) ((INT32) ((x) * (1L<<SCALEBITS) + 0.5)) - -/* We allocate one big table and divide it up into eight parts, instead of - * doing eight alloc_small requests. This lets us use a single table base - * address, which can be held in a register in the inner loops on many - * machines (more than can hold all eight addresses, anyway). - */ - -#define R_Y_OFF 0 /* offset to R => Y section */ -#define G_Y_OFF (1*(MAXJSAMPLE+1)) /* offset to G => Y section */ -#define B_Y_OFF (2*(MAXJSAMPLE+1)) /* etc. */ -#define R_CB_OFF (3*(MAXJSAMPLE+1)) -#define G_CB_OFF (4*(MAXJSAMPLE+1)) -#define B_CB_OFF (5*(MAXJSAMPLE+1)) -#define R_CR_OFF B_CB_OFF /* B=>Cb, R=>Cr are the same */ -#define G_CR_OFF (6*(MAXJSAMPLE+1)) -#define B_CR_OFF (7*(MAXJSAMPLE+1)) -#define TABLE_SIZE (8*(MAXJSAMPLE+1)) - - -/* - * Initialize for RGB->YCC colorspace conversion. - */ - -METHODDEF void -rgb_ycc_start (j_compress_ptr cinfo) -{ - my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - INT32 * rgb_ycc_tab; - INT32 i; - - /* Allocate and fill in the conversion tables. */ - cconvert->rgb_ycc_tab = rgb_ycc_tab = (INT32 *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (TABLE_SIZE * SIZEOF(INT32))); - - for (i = 0; i <= MAXJSAMPLE; i++) { - rgb_ycc_tab[i+R_Y_OFF] = FIX(0.29900) * i; - rgb_ycc_tab[i+G_Y_OFF] = FIX(0.58700) * i; - rgb_ycc_tab[i+B_Y_OFF] = FIX(0.11400) * i + ONE_HALF; - rgb_ycc_tab[i+R_CB_OFF] = (-FIX(0.16874)) * i; - rgb_ycc_tab[i+G_CB_OFF] = (-FIX(0.33126)) * i; - rgb_ycc_tab[i+B_CB_OFF] = FIX(0.50000) * i + ONE_HALF*(MAXJSAMPLE+1); -/* B=>Cb and R=>Cr tables are the same - rgb_ycc_tab[i+R_CR_OFF] = FIX(0.50000) * i + ONE_HALF*(MAXJSAMPLE+1); -*/ - rgb_ycc_tab[i+G_CR_OFF] = (-FIX(0.41869)) * i; - rgb_ycc_tab[i+B_CR_OFF] = (-FIX(0.08131)) * i; - } -} - - -/* - * Convert some rows of samples to the JPEG colorspace. - * - * Note that we change from the application's interleaved-pixel format - * to our internal noninterleaved, one-plane-per-component format. - * The input buffer is therefore three times as wide as the output buffer. - * - * A starting row offset is provided only for the output buffer. The caller - * can easily adjust the passed input_buf value to accommodate any row - * offset required on that side. - */ - -METHODDEF void -rgb_ycc_convert (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JSAMPIMAGE output_buf, - JDIMENSION output_row, int num_rows) -{ - my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - register int r, g, b; - register INT32 * ctab = cconvert->rgb_ycc_tab; - register JSAMPROW inptr; - register JSAMPROW outptr0, outptr1, outptr2; - register JDIMENSION col; - JDIMENSION num_cols = cinfo->image_width; - - while (--num_rows >= 0) { - inptr = *input_buf++; - outptr0 = output_buf[0][output_row]; - outptr1 = output_buf[1][output_row]; - outptr2 = output_buf[2][output_row]; - output_row++; - for (col = 0; col < num_cols; col++) { - r = GETJSAMPLE(inptr[RGB_RED]); - g = GETJSAMPLE(inptr[RGB_GREEN]); - b = GETJSAMPLE(inptr[RGB_BLUE]); - inptr += RGB_PIXELSIZE; - /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations - * must be too; we do not need an explicit range-limiting operation. - * Hence the value being shifted is never negative, and we don't - * need the general RIGHT_SHIFT macro. - */ - /* Y */ - outptr0[col] = (JSAMPLE) - ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) - >> SCALEBITS); - /* Cb */ - outptr1[col] = (JSAMPLE) - ((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF]) - >> SCALEBITS); - /* Cr */ - outptr2[col] = (JSAMPLE) - ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF]) - >> SCALEBITS); - } - } -} - - -/**************** Cases other than RGB -> YCbCr **************/ - - -/* - * Convert some rows of samples to the JPEG colorspace. - * This version handles RGB->grayscale conversion, which is the same - * as the RGB->Y portion of RGB->YCbCr. - * We assume rgb_ycc_start has been called (we only use the Y tables). - */ - -METHODDEF void -rgb_gray_convert (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JSAMPIMAGE output_buf, - JDIMENSION output_row, int num_rows) -{ - my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - register int r, g, b; - register INT32 * ctab = cconvert->rgb_ycc_tab; - register JSAMPROW inptr; - register JSAMPROW outptr; - register JDIMENSION col; - JDIMENSION num_cols = cinfo->image_width; - - while (--num_rows >= 0) { - inptr = *input_buf++; - outptr = output_buf[0][output_row]; - output_row++; - for (col = 0; col < num_cols; col++) { - r = GETJSAMPLE(inptr[RGB_RED]); - g = GETJSAMPLE(inptr[RGB_GREEN]); - b = GETJSAMPLE(inptr[RGB_BLUE]); - inptr += RGB_PIXELSIZE; - /* Y */ - outptr[col] = (JSAMPLE) - ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) - >> SCALEBITS); - } - } -} - - -/* - * Convert some rows of samples to the JPEG colorspace. - * This version handles Adobe-style CMYK->YCCK conversion, - * where we convert R=1-C, G=1-M, and B=1-Y to YCbCr using the same - * conversion as above, while passing K (black) unchanged. - * We assume rgb_ycc_start has been called. - */ - -METHODDEF void -cmyk_ycck_convert (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JSAMPIMAGE output_buf, - JDIMENSION output_row, int num_rows) -{ - my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - register int r, g, b; - register INT32 * ctab = cconvert->rgb_ycc_tab; - register JSAMPROW inptr; - register JSAMPROW outptr0, outptr1, outptr2, outptr3; - register JDIMENSION col; - JDIMENSION num_cols = cinfo->image_width; - - while (--num_rows >= 0) { - inptr = *input_buf++; - outptr0 = output_buf[0][output_row]; - outptr1 = output_buf[1][output_row]; - outptr2 = output_buf[2][output_row]; - outptr3 = output_buf[3][output_row]; - output_row++; - for (col = 0; col < num_cols; col++) { - r = MAXJSAMPLE - GETJSAMPLE(inptr[0]); - g = MAXJSAMPLE - GETJSAMPLE(inptr[1]); - b = MAXJSAMPLE - GETJSAMPLE(inptr[2]); - /* K passes through as-is */ - outptr3[col] = inptr[3]; /* don't need GETJSAMPLE here */ - inptr += 4; - /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations - * must be too; we do not need an explicit range-limiting operation. - * Hence the value being shifted is never negative, and we don't - * need the general RIGHT_SHIFT macro. - */ - /* Y */ - outptr0[col] = (JSAMPLE) - ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) - >> SCALEBITS); - /* Cb */ - outptr1[col] = (JSAMPLE) - ((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF]) - >> SCALEBITS); - /* Cr */ - outptr2[col] = (JSAMPLE) - ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF]) - >> SCALEBITS); - } - } -} - - -/* - * Convert some rows of samples to the JPEG colorspace. - * This version handles grayscale output with no conversion. - * The source can be either plain grayscale or YCbCr (since Y == gray). - */ - -METHODDEF void -grayscale_convert (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JSAMPIMAGE output_buf, - JDIMENSION output_row, int num_rows) -{ - register JSAMPROW inptr; - register JSAMPROW outptr; - register JDIMENSION col; - JDIMENSION num_cols = cinfo->image_width; - int instride = cinfo->input_components; - - while (--num_rows >= 0) { - inptr = *input_buf++; - outptr = output_buf[0][output_row]; - output_row++; - for (col = 0; col < num_cols; col++) { - outptr[col] = inptr[0]; /* don't need GETJSAMPLE() here */ - inptr += instride; - } - } -} - - -/* - * Convert some rows of samples to the JPEG colorspace. - * This version handles multi-component colorspaces without conversion. - * We assume input_components == num_components. - */ - -METHODDEF void -null_convert (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JSAMPIMAGE output_buf, - JDIMENSION output_row, int num_rows) -{ - register JSAMPROW inptr; - register JSAMPROW outptr; - register JDIMENSION col; - register int ci; - int nc = cinfo->num_components; - JDIMENSION num_cols = cinfo->image_width; - - while (--num_rows >= 0) { - /* It seems fastest to make a separate pass for each component. */ - for (ci = 0; ci < nc; ci++) { - inptr = *input_buf; - outptr = output_buf[ci][output_row]; - for (col = 0; col < num_cols; col++) { - outptr[col] = inptr[ci]; /* don't need GETJSAMPLE() here */ - inptr += nc; - } - } - input_buf++; - output_row++; - } -} - - -/* - * Empty method for start_pass. - */ - -METHODDEF void -null_method (j_compress_ptr cinfo) -{ - /* no work needed */ -} - - -/* - * Module initialization routine for input colorspace conversion. - */ - -GLOBAL void -jinit_color_converter (j_compress_ptr cinfo) -{ - my_cconvert_ptr cconvert; - - cconvert = (my_cconvert_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_color_converter)); - cinfo->cconvert = (struct jpeg_color_converter *) cconvert; - /* set start_pass to null method until we find out differently */ - cconvert->pub.start_pass = null_method; - - /* Make sure input_components agrees with in_color_space */ - switch (cinfo->in_color_space) { - case JCS_GRAYSCALE: - if (cinfo->input_components != 1) - ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); - break; - - case JCS_RGB: -#if RGB_PIXELSIZE != 3 - if (cinfo->input_components != RGB_PIXELSIZE) - ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); - break; -#endif /* else share code with YCbCr */ - - case JCS_YCbCr: - if (cinfo->input_components != 3) - ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); - break; - - case JCS_CMYK: - case JCS_YCCK: - if (cinfo->input_components != 4) - ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); - break; - - default: /* JCS_UNKNOWN can be anything */ - if (cinfo->input_components < 1) - ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); - break; - } - - /* Check num_components, set conversion method based on requested space */ - switch (cinfo->jpeg_color_space) { - case JCS_GRAYSCALE: - if (cinfo->num_components != 1) - ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - if (cinfo->in_color_space == JCS_GRAYSCALE) - cconvert->pub.color_convert = grayscale_convert; - else if (cinfo->in_color_space == JCS_RGB) { - cconvert->pub.start_pass = rgb_ycc_start; - cconvert->pub.color_convert = rgb_gray_convert; - } else if (cinfo->in_color_space == JCS_YCbCr) - cconvert->pub.color_convert = grayscale_convert; - else - ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); - break; - - case JCS_RGB: - if (cinfo->num_components != 3) - ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - if (cinfo->in_color_space == JCS_RGB && RGB_PIXELSIZE == 3) - cconvert->pub.color_convert = null_convert; - else - ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); - break; - - case JCS_YCbCr: - if (cinfo->num_components != 3) - ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - if (cinfo->in_color_space == JCS_RGB) { - cconvert->pub.start_pass = rgb_ycc_start; - cconvert->pub.color_convert = rgb_ycc_convert; - } else if (cinfo->in_color_space == JCS_YCbCr) - cconvert->pub.color_convert = null_convert; - else - ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); - break; - - case JCS_CMYK: - if (cinfo->num_components != 4) - ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - if (cinfo->in_color_space == JCS_CMYK) - cconvert->pub.color_convert = null_convert; - else - ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); - break; - - case JCS_YCCK: - if (cinfo->num_components != 4) - ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - if (cinfo->in_color_space == JCS_CMYK) { - cconvert->pub.start_pass = rgb_ycc_start; - cconvert->pub.color_convert = cmyk_ycck_convert; - } else if (cinfo->in_color_space == JCS_YCCK) - cconvert->pub.color_convert = null_convert; - else - ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); - break; - - default: /* allow null conversion of JCS_UNKNOWN */ - if (cinfo->jpeg_color_space != cinfo->in_color_space || - cinfo->num_components != cinfo->input_components) - ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); - cconvert->pub.color_convert = null_convert; - break; - } -} diff --git a/jpeg/jcdctmgr.c b/jpeg/jcdctmgr.c deleted file mode 100644 index b29121e129fe5b6478577673260c50fc4a22a6c2..0000000000000000000000000000000000000000 --- a/jpeg/jcdctmgr.c +++ /dev/null @@ -1,405 +0,0 @@ -/* - * jcdctmgr.c - * - * Copyright (C) 1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains the forward-DCT management logic. - * This code selects a particular DCT implementation to be used, - * and it performs related housekeeping chores including coefficient - * quantization. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jdct.h" /* Private declarations for DCT subsystem */ - - -/* Private subobject for this module */ - -typedef struct { - struct jpeg_forward_dct pub; /* public fields */ - - /* Pointer to the DCT routine actually in use */ - forward_DCT_method_ptr do_dct; - - /* The actual post-DCT divisors --- not identical to the quant table - * entries, because of scaling (especially for an unnormalized DCT). - * Each table is given in zigzag order. - */ - DCTELEM * divisors[NUM_QUANT_TBLS]; - -#ifdef DCT_FLOAT_SUPPORTED - /* Same as above for the floating-point case. */ - float_DCT_method_ptr do_float_dct; - FAST_FLOAT * float_divisors[NUM_QUANT_TBLS]; -#endif -} my_fdct_controller; - -typedef my_fdct_controller * my_fdct_ptr; - - -/* ZAG[i] is the natural-order position of the i'th element of zigzag order. */ - -static const int ZAG[DCTSIZE2] = { - 0, 1, 8, 16, 9, 2, 3, 10, - 17, 24, 32, 25, 18, 11, 4, 5, - 12, 19, 26, 33, 40, 48, 41, 34, - 27, 20, 13, 6, 7, 14, 21, 28, - 35, 42, 49, 56, 57, 50, 43, 36, - 29, 22, 15, 23, 30, 37, 44, 51, - 58, 59, 52, 45, 38, 31, 39, 46, - 53, 60, 61, 54, 47, 55, 62, 63 -}; - - -/* - * Initialize for a processing pass. - * Verify that all referenced Q-tables are present, and set up - * the divisor table for each one. - * In the current implementation, DCT of all components is done during - * the first pass, even if only some components will be output in the - * first scan. Hence all components should be examined here. - */ - -METHODDEF void -start_pass_fdctmgr (j_compress_ptr cinfo) -{ - my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct; - int ci, qtblno, i; - jpeg_component_info *compptr; - JQUANT_TBL * qtbl; - DCTELEM * dtbl; - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - qtblno = compptr->quant_tbl_no; - /* Make sure specified quantization table is present */ - if (qtblno < 0 || qtblno >= NUM_QUANT_TBLS || - cinfo->quant_tbl_ptrs[qtblno] == NULL) - ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno); - qtbl = cinfo->quant_tbl_ptrs[qtblno]; - /* Compute divisors for this quant table */ - /* We may do this more than once for same table, but it's not a big deal */ - switch (cinfo->dct_method) { -#ifdef DCT_ISLOW_SUPPORTED - case JDCT_ISLOW: - /* For LL&M IDCT method, divisors are equal to raw quantization - * coefficients multiplied by 8 (to counteract scaling). - */ - if (fdct->divisors[qtblno] == NULL) { - fdct->divisors[qtblno] = (DCTELEM *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - DCTSIZE2 * SIZEOF(DCTELEM)); - } - dtbl = fdct->divisors[qtblno]; - for (i = 0; i < DCTSIZE2; i++) { - dtbl[i] = ((DCTELEM) qtbl->quantval[i]) << 3; - } - break; -#endif -#ifdef DCT_IFAST_SUPPORTED - case JDCT_IFAST: - { - /* For AA&N IDCT method, divisors are equal to quantization - * coefficients scaled by scalefactor[row]*scalefactor[col], where - * scalefactor[0] = 1 - * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 - * We apply a further scale factor of 8. - */ -#define CONST_BITS 14 - static const INT16 aanscales[DCTSIZE2] = { - /* precomputed values scaled up by 14 bits: in natural order */ - 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, - 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270, - 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906, - 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315, - 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, - 12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552, - 8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446, - 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247 - }; - SHIFT_TEMPS - - if (fdct->divisors[qtblno] == NULL) { - fdct->divisors[qtblno] = (DCTELEM *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - DCTSIZE2 * SIZEOF(DCTELEM)); - } - dtbl = fdct->divisors[qtblno]; - for (i = 0; i < DCTSIZE2; i++) { - dtbl[i] = (DCTELEM) - DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i], - (INT32) aanscales[ZAG[i]]), - CONST_BITS-3); - } - } - break; -#endif -#ifdef DCT_FLOAT_SUPPORTED - case JDCT_FLOAT: - { - /* For float AA&N IDCT method, divisors are equal to quantization - * coefficients scaled by scalefactor[row]*scalefactor[col], where - * scalefactor[0] = 1 - * scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 - * We apply a further scale factor of 8. - * What's actually stored is 1/divisor so that the inner loop can - * use a multiplication rather than a division. - */ - FAST_FLOAT * fdtbl; - int row, col; - static const double aanscalefactor[DCTSIZE] = { - 1.0, 1.387039845, 1.306562965, 1.175875602, - 1.0, 0.785694958, 0.541196100, 0.275899379 - }; - - if (fdct->float_divisors[qtblno] == NULL) { - fdct->float_divisors[qtblno] = (FAST_FLOAT *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - DCTSIZE2 * SIZEOF(FAST_FLOAT)); - } - fdtbl = fdct->float_divisors[qtblno]; - for (i = 0; i < DCTSIZE2; i++) { - row = ZAG[i] >> 3; - col = ZAG[i] & 7; - fdtbl[i] = (FAST_FLOAT) - (1.0 / (((double) qtbl->quantval[i] * - aanscalefactor[row] * aanscalefactor[col] * 8.0))); - } - } - break; -#endif - default: - ERREXIT(cinfo, JERR_NOT_COMPILED); - break; - } - } -} - - -/* - * Perform forward DCT on one or more blocks of a component. - * - * The input samples are taken from the sample_data[] array starting at - * position start_row/start_col, and moving to the right for any additional - * blocks. The quantized, zigzagged coefficients are returned in coef_blocks[]. - */ - -METHODDEF void -forward_DCT (j_compress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY sample_data, JBLOCKROW coef_blocks, - JDIMENSION start_row, JDIMENSION start_col, - JDIMENSION num_blocks) -/* This version is used for integer DCT implementations. */ -{ - /* This routine is heavily used, so it's worth coding it tightly. */ - my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct; - forward_DCT_method_ptr do_dct = fdct->do_dct; - DCTELEM * divisors = fdct->divisors[compptr->quant_tbl_no]; - DCTELEM workspace[DCTSIZE2]; /* work area for FDCT subroutine */ - JDIMENSION bi; - - sample_data += start_row; /* fold in the vertical offset once */ - - for (bi = 0; bi < num_blocks; bi++, start_col += DCTSIZE) { - /* Load data into workspace, applying unsigned->signed conversion */ - { register DCTELEM *workspaceptr; - register JSAMPROW elemptr; - register int elemr; - - workspaceptr = workspace; - for (elemr = 0; elemr < DCTSIZE; elemr++) { - elemptr = sample_data[elemr] + start_col; -#if DCTSIZE == 8 /* unroll the inner loop */ - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; -#else - { register int elemc; - for (elemc = DCTSIZE; elemc > 0; elemc--) { - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - } - } -#endif - } - } - - /* Perform the DCT */ - (*do_dct) (workspace); - - /* Quantize/descale the coefficients, and store into coef_blocks[] */ - { register DCTELEM temp, qval; - register int i; - register JCOEFPTR output_ptr = coef_blocks[bi]; - - for (i = 0; i < DCTSIZE2; i++) { - qval = divisors[i]; - temp = workspace[ZAG[i]]; -#if 0 -/* SRS Hack to get values */ - if (bi==0) { - printf("%d ",temp); - if ((i+1)%8==0) printf("\n"); - } -#endif - /* Divide the coefficient value by qval, ensuring proper rounding. - * Since C does not specify the direction of rounding for negative - * quotients, we have to force the dividend positive for portability. - * - * In most files, at least half of the output values will be zero - * (at default quantization settings, more like three-quarters...) - * so we should ensure that this case is fast. On many machines, - * a comparison is enough cheaper than a divide to make a special test - * a win. Since both inputs will be nonnegative, we need only test - * for a < b to discover whether a/b is 0. - * If your machine's division is fast enough, define FAST_DIVIDE. - */ -#ifdef FAST_DIVIDE -#define DIVIDE_BY(a,b) a /= b -#else -#define DIVIDE_BY(a,b) if (a >= b) a /= b; else a = 0 -#endif - if (temp < 0) { - temp = -temp; - temp += qval>>1; /* for rounding */ - DIVIDE_BY(temp, qval); - temp = -temp; - } else { - temp += qval>>1; /* for rounding */ - DIVIDE_BY(temp, qval); - } - output_ptr[i] = (JCOEF) temp; - } - } - } -} - - -#ifdef DCT_FLOAT_SUPPORTED - -METHODDEF void -forward_DCT_float (j_compress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY sample_data, JBLOCKROW coef_blocks, - JDIMENSION start_row, JDIMENSION start_col, - JDIMENSION num_blocks) -/* This version is used for floating-point DCT implementations. */ -{ - /* This routine is heavily used, so it's worth coding it tightly. */ - my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct; - float_DCT_method_ptr do_dct = fdct->do_float_dct; - FAST_FLOAT * divisors = fdct->float_divisors[compptr->quant_tbl_no]; - FAST_FLOAT workspace[DCTSIZE2]; /* work area for FDCT subroutine */ - JDIMENSION bi; - - sample_data += start_row; /* fold in the vertical offset once */ - - for (bi = 0; bi < num_blocks; bi++, start_col += DCTSIZE) { - /* Load data into workspace, applying unsigned->signed conversion */ - { register FAST_FLOAT *workspaceptr; - register JSAMPROW elemptr; - register int elemr; - - workspaceptr = workspace; - for (elemr = 0; elemr < DCTSIZE; elemr++) { - elemptr = sample_data[elemr] + start_col; -#if DCTSIZE == 8 /* unroll the inner loop */ - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; -#else - { register int elemc; - for (elemc = DCTSIZE; elemc > 0; elemc--) { - *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; - } - } -#endif - } - } - - /* Perform the DCT */ - (*do_dct) (workspace); - - /* Quantize/descale the coefficients, and store into coef_blocks[] */ - { register FAST_FLOAT temp; - register int i; - register JCOEFPTR output_ptr = coef_blocks[bi]; - - for (i = 0; i < DCTSIZE2; i++) { - /* Apply the quantization and scaling factor */ - temp = workspace[ZAG[i]] * divisors[i]; - /* Round to nearest integer. - * Since C does not specify the direction of rounding for negative - * quotients, we have to force the dividend positive for portability. - * The maximum coefficient size is +-16K (for 12-bit data), so this - * code should work for either 16-bit or 32-bit ints. - */ - output_ptr[i] = (JCOEF) ((int) (temp + (FAST_FLOAT) 16384.5) - 16384); - } - } - } -} - -#endif /* DCT_FLOAT_SUPPORTED */ - - -/* - * Initialize FDCT manager. - */ - -GLOBAL void -jinit_forward_dct (j_compress_ptr cinfo) -{ - my_fdct_ptr fdct; - int i; - - fdct = (my_fdct_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_fdct_controller)); - cinfo->fdct = (struct jpeg_forward_dct *) fdct; - fdct->pub.start_pass = start_pass_fdctmgr; - - switch (cinfo->dct_method) { -#ifdef DCT_ISLOW_SUPPORTED - case JDCT_ISLOW: - fdct->pub.forward_DCT = forward_DCT; - fdct->do_dct = jpeg_fdct_islow; - break; -#endif -#ifdef DCT_IFAST_SUPPORTED - case JDCT_IFAST: - fdct->pub.forward_DCT = forward_DCT; - fdct->do_dct = jpeg_fdct_ifast; - break; -#endif -#ifdef DCT_FLOAT_SUPPORTED - case JDCT_FLOAT: - fdct->pub.forward_DCT = forward_DCT_float; - fdct->do_float_dct = jpeg_fdct_float; - break; -#endif - default: - ERREXIT(cinfo, JERR_NOT_COMPILED); - break; - } - - /* Mark divisor tables unallocated */ - for (i = 0; i < NUM_QUANT_TBLS; i++) { - fdct->divisors[i] = NULL; -#ifdef DCT_FLOAT_SUPPORTED - fdct->float_divisors[i] = NULL; -#endif - } -} diff --git a/jpeg/jchuff.c b/jpeg/jchuff.c deleted file mode 100644 index 9ddefc5c9cf73824dc55636cbbdf6c7d5118e7e9..0000000000000000000000000000000000000000 --- a/jpeg/jchuff.c +++ /dev/null @@ -1,847 +0,0 @@ -/* - * jchuff.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains Huffman entropy encoding routines. - * - * Much of the complexity here has to do with supporting output suspension. - * If the data destination module demands suspension, we want to be able to - * back up to the start of the current MCU. To do this, we copy state - * variables into local working storage, and update them back to the - * permanent JPEG objects only upon successful completion of an MCU. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* Derived data constructed for each Huffman table */ - -typedef struct { - unsigned int ehufco[256]; /* code for each symbol */ - char ehufsi[256]; /* length of code for each symbol */ - /* If no code has been allocated for a symbol S, ehufsi[S] contains 0 */ -} C_DERIVED_TBL; - -/* Expanded entropy encoder object for Huffman encoding. - * - * The savable_state subrecord contains fields that change within an MCU, - * but must not be updated permanently until we complete the MCU. - */ - -typedef struct { - INT32 put_buffer; /* current bit-accumulation buffer */ - int put_bits; /* # of bits now in it */ - int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */ -} savable_state; - -/* This macro is to work around compilers with missing or broken - * structure assignment. You'll need to fix this code if you have - * such a compiler and you change MAX_COMPS_IN_SCAN. - */ - -#ifndef NO_STRUCT_ASSIGN -#define ASSIGN_STATE(dest,src) ((dest) = (src)) -#else -#if MAX_COMPS_IN_SCAN == 4 -#define ASSIGN_STATE(dest,src) \ - ((dest).put_buffer = (src).put_buffer, \ - (dest).put_bits = (src).put_bits, \ - (dest).last_dc_val[0] = (src).last_dc_val[0], \ - (dest).last_dc_val[1] = (src).last_dc_val[1], \ - (dest).last_dc_val[2] = (src).last_dc_val[2], \ - (dest).last_dc_val[3] = (src).last_dc_val[3]) -#endif -#endif - - -typedef struct { - struct jpeg_entropy_encoder pub; /* public fields */ - - savable_state saved; /* Bit buffer & DC state at start of MCU */ - - /* These fields are NOT loaded into local working state. */ - unsigned int restarts_to_go; /* MCUs left in this restart interval */ - int next_restart_num; /* next restart number to write (0-7) */ - - /* Pointers to derived tables (these workspaces have image lifespan) */ - C_DERIVED_TBL * dc_derived_tbls[NUM_HUFF_TBLS]; - C_DERIVED_TBL * ac_derived_tbls[NUM_HUFF_TBLS]; - -#ifdef ENTROPY_OPT_SUPPORTED /* Statistics tables for optimization */ - long * dc_count_ptrs[NUM_HUFF_TBLS]; - long * ac_count_ptrs[NUM_HUFF_TBLS]; -#endif -} huff_entropy_encoder; - -typedef huff_entropy_encoder * huff_entropy_ptr; - -/* Working state while writing an MCU. - * This struct contains all the fields that are needed by subroutines. - */ - -typedef struct { - JOCTET * next_output_byte; /* => next byte to write in buffer */ - size_t free_in_buffer; /* # of byte spaces remaining in buffer */ - savable_state cur; /* Current bit buffer & DC state */ - j_compress_ptr cinfo; /* dump_buffer needs access to this */ -} working_state; - - -/* Forward declarations */ -METHODDEF boolean encode_mcu_huff JPP((j_compress_ptr cinfo, - JBLOCKROW *MCU_data)); -METHODDEF void finish_pass_huff JPP((j_compress_ptr cinfo)); -#ifdef ENTROPY_OPT_SUPPORTED -METHODDEF boolean encode_mcu_gather JPP((j_compress_ptr cinfo, - JBLOCKROW *MCU_data)); -METHODDEF void finish_pass_gather JPP((j_compress_ptr cinfo)); -#endif -LOCAL void fix_huff_tbl JPP((j_compress_ptr cinfo, JHUFF_TBL * htbl, - C_DERIVED_TBL ** pdtbl)); - - -/* - * Initialize for a Huffman-compressed scan. - * If gather_statistics is TRUE, we do not output anything during the scan, - * just count the Huffman symbols used and generate Huffman code tables. - */ - -METHODDEF void -start_pass_huff (j_compress_ptr cinfo, boolean gather_statistics) -{ - huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; - int ci, dctbl, actbl; - jpeg_component_info * compptr; - - if (gather_statistics) { -#ifdef ENTROPY_OPT_SUPPORTED - entropy->pub.encode_mcu = encode_mcu_gather; - entropy->pub.finish_pass = finish_pass_gather; -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif - } else { - entropy->pub.encode_mcu = encode_mcu_huff; - entropy->pub.finish_pass = finish_pass_huff; - } - - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - dctbl = compptr->dc_tbl_no; - actbl = compptr->ac_tbl_no; - /* Make sure requested tables are present */ - /* (In gather mode, tables need not be allocated yet) */ - if (dctbl < 0 || dctbl >= NUM_HUFF_TBLS || - (cinfo->dc_huff_tbl_ptrs[dctbl] == NULL && !gather_statistics)) - ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, dctbl); - if (actbl < 0 || actbl >= NUM_HUFF_TBLS || - (cinfo->ac_huff_tbl_ptrs[actbl] == NULL && !gather_statistics)) - ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, actbl); - if (gather_statistics) { -#ifdef ENTROPY_OPT_SUPPORTED - /* Allocate and zero the statistics tables */ - /* Note that gen_huff_coding expects 257 entries in each table! */ - if (entropy->dc_count_ptrs[dctbl] == NULL) - entropy->dc_count_ptrs[dctbl] = (long *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - 257 * SIZEOF(long)); - MEMZERO(entropy->dc_count_ptrs[dctbl], 257 * SIZEOF(long)); - if (entropy->ac_count_ptrs[actbl] == NULL) - entropy->ac_count_ptrs[actbl] = (long *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - 257 * SIZEOF(long)); - MEMZERO(entropy->ac_count_ptrs[actbl], 257 * SIZEOF(long)); -#endif - } else { - /* Compute derived values for Huffman tables */ - /* We may do this more than once for a table, but it's not expensive */ - fix_huff_tbl(cinfo, cinfo->dc_huff_tbl_ptrs[dctbl], - & entropy->dc_derived_tbls[dctbl]); - fix_huff_tbl(cinfo, cinfo->ac_huff_tbl_ptrs[actbl], - & entropy->ac_derived_tbls[actbl]); - } - /* Initialize DC predictions to 0 */ - entropy->saved.last_dc_val[ci] = 0; - } - - /* Initialize bit buffer to empty */ - entropy->saved.put_buffer = 0; - entropy->saved.put_bits = 0; - - /* Initialize restart stuff */ - entropy->restarts_to_go = cinfo->restart_interval; - entropy->next_restart_num = 0; -} - - -LOCAL void -fix_huff_tbl (j_compress_ptr cinfo, JHUFF_TBL * htbl, C_DERIVED_TBL ** pdtbl) -/* Compute the derived values for a Huffman table */ -{ - C_DERIVED_TBL *dtbl; - int p, i, l, lastp, si; - char huffsize[257]; - unsigned int huffcode[257]; - unsigned int code; - - /* Allocate a workspace if we haven't already done so. */ - if (*pdtbl == NULL) - *pdtbl = (C_DERIVED_TBL *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(C_DERIVED_TBL)); - dtbl = *pdtbl; - - /* Figure C.1: make table of Huffman code length for each symbol */ - /* Note that this is in code-length order. */ - - p = 0; - for (l = 1; l <= 16; l++) { - for (i = 1; i <= (int) htbl->bits[l]; i++) - huffsize[p++] = (char) l; - } - huffsize[p] = 0; - lastp = p; - - /* Figure C.2: generate the codes themselves */ - /* Note that this is in code-length order. */ - - code = 0; - si = huffsize[0]; - p = 0; - while (huffsize[p]) { - while (((int) huffsize[p]) == si) { - huffcode[p++] = code; - code++; - } - code <<= 1; - si++; - } - - /* Figure C.3: generate encoding tables */ - /* These are code and size indexed by symbol value */ - - /* Set any codeless symbols to have code length 0; - * this allows emit_bits to detect any attempt to emit such symbols. - */ - MEMZERO(dtbl->ehufsi, SIZEOF(dtbl->ehufsi)); - - for (p = 0; p < lastp; p++) { - dtbl->ehufco[htbl->huffval[p]] = huffcode[p]; - dtbl->ehufsi[htbl->huffval[p]] = huffsize[p]; - } -} - - -/* Outputting bytes to the file */ - -/* Emit a byte, taking 'action' if must suspend. */ -#define emit_byte(state,val,action) \ - { *(state)->next_output_byte++ = (JOCTET) (val); \ - if (--(state)->free_in_buffer == 0) \ - if (! dump_buffer(state)) \ - { action; } } - - -LOCAL boolean -dump_buffer (working_state * state) -/* Empty the output buffer; return TRUE if successful, FALSE if must suspend */ -{ - struct jpeg_destination_mgr * dest = state->cinfo->dest; - - if (! (*dest->empty_output_buffer) (state->cinfo)) - return FALSE; - /* After a successful buffer dump, must reset buffer pointers */ - state->next_output_byte = dest->next_output_byte; - state->free_in_buffer = dest->free_in_buffer; - return TRUE; -} - - -/* Outputting bits to the file */ - -/* Only the right 24 bits of put_buffer are used; the valid bits are - * left-justified in this part. At most 16 bits can be passed to emit_bits - * in one call, and we never retain more than 7 bits in put_buffer - * between calls, so 24 bits are sufficient. - */ - -INLINE -LOCAL boolean -emit_bits (working_state * state, unsigned int code, int size) -/* Emit some bits; return TRUE if successful, FALSE if must suspend */ -{ - /* This routine is heavily used, so it's worth coding tightly. */ - register INT32 put_buffer = (INT32) code; - register int put_bits = state->cur.put_bits; - - /* if size is 0, caller used an invalid Huffman table entry */ - if (size == 0) - ERREXIT(state->cinfo, JERR_HUFF_MISSING_CODE); - - put_buffer &= (((INT32) 1)<<size) - 1; /* mask off any extra bits in code */ - - put_bits += size; /* new number of bits in buffer */ - - put_buffer <<= 24 - put_bits; /* align incoming bits */ - - put_buffer |= state->cur.put_buffer; /* and merge with old buffer contents */ - - while (put_bits >= 8) { - int c = (int) ((put_buffer >> 16) & 0xFF); - - emit_byte(state, c, return FALSE); - if (c == 0xFF) { /* need to stuff a zero byte? */ - emit_byte(state, 0, return FALSE); - } - put_buffer <<= 8; - put_bits -= 8; - } - - state->cur.put_buffer = put_buffer; /* update state variables */ - state->cur.put_bits = put_bits; - - return TRUE; -} - - -LOCAL boolean -flush_bits (working_state * state) -{ - if (! emit_bits(state, 0x7F, 7)) /* fill any partial byte with ones */ - return FALSE; - state->cur.put_buffer = 0; /* and reset bit-buffer to empty */ - state->cur.put_bits = 0; - return TRUE; -} - - -/* Encode a single block's worth of coefficients */ - -LOCAL boolean -encode_one_block (working_state * state, JCOEFPTR block, int last_dc_val, - C_DERIVED_TBL *dctbl, C_DERIVED_TBL *actbl) -{ - register int temp, temp2; - register int nbits; - register int k, r, i; - - /* Encode the DC coefficient difference per section F.1.2.1 */ - - temp = temp2 = block[0] - last_dc_val; - - if (temp < 0) { - temp = -temp; /* temp is abs value of input */ - /* For a negative input, want temp2 = bitwise complement of abs(input) */ - /* This code assumes we are on a two's complement machine */ - temp2--; - } - - /* Find the number of bits needed for the magnitude of the coefficient */ - nbits = 0; - while (temp) { - nbits++; - temp >>= 1; - } - - /* Emit the Huffman-coded symbol for the number of bits */ - if (! emit_bits(state, dctbl->ehufco[nbits], dctbl->ehufsi[nbits])) - return FALSE; - - /* Emit that number of bits of the value, if positive, */ - /* or the complement of its magnitude, if negative. */ - if (nbits) /* emit_bits rejects calls with size 0 */ - if (! emit_bits(state, (unsigned int) temp2, nbits)) - return FALSE; - - /* Encode the AC coefficients per section F.1.2.2 */ - - r = 0; /* r = run length of zeros */ - - for (k = 1; k < DCTSIZE2; k++) { - if ((temp = block[k]) == 0) { - r++; - } else { - /* if run length > 15, must emit special run-length-16 codes (0xF0) */ - while (r > 15) { - if (! emit_bits(state, actbl->ehufco[0xF0], actbl->ehufsi[0xF0])) - return FALSE; - r -= 16; - } - - temp2 = temp; - if (temp < 0) { - temp = -temp; /* temp is abs value of input */ - /* This code assumes we are on a two's complement machine */ - temp2--; - } - - /* Find the number of bits needed for the magnitude of the coefficient */ - nbits = 1; /* there must be at least one 1 bit */ - while ((temp >>= 1)) - nbits++; - - /* Emit Huffman symbol for run length / number of bits */ - i = (r << 4) + nbits; - if (! emit_bits(state, actbl->ehufco[i], actbl->ehufsi[i])) - return FALSE; - - /* Emit that number of bits of the value, if positive, */ - /* or the complement of its magnitude, if negative. */ - if (! emit_bits(state, (unsigned int) temp2, nbits)) - return FALSE; - - r = 0; - } - } - - /* If the last coef(s) were zero, emit an end-of-block code */ - if (r > 0) - if (! emit_bits(state, actbl->ehufco[0], actbl->ehufsi[0])) - return FALSE; - - return TRUE; -} - - -/* - * Emit a restart marker & resynchronize predictions. - */ - -LOCAL boolean -emit_restart (working_state * state, int restart_num) -{ - int ci; - - if (! flush_bits(state)) - return FALSE; - - emit_byte(state, 0xFF, return FALSE); - emit_byte(state, JPEG_RST0 + restart_num, return FALSE); - - /* Re-initialize DC predictions to 0 */ - for (ci = 0; ci < state->cinfo->comps_in_scan; ci++) - state->cur.last_dc_val[ci] = 0; - - /* The restart counter is not updated until we successfully write the MCU. */ - - return TRUE; -} - - -/* - * Encode and output one MCU's worth of Huffman-compressed coefficients. - */ - -METHODDEF boolean -encode_mcu_huff (j_compress_ptr cinfo, JBLOCKROW *MCU_data) -{ - huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; - working_state state; - int blkn, ci; - jpeg_component_info * compptr; - - /* Load up working state */ - state.next_output_byte = cinfo->dest->next_output_byte; - state.free_in_buffer = cinfo->dest->free_in_buffer; - ASSIGN_STATE(state.cur, entropy->saved); - state.cinfo = cinfo; - - /* Emit restart marker if needed */ - if (cinfo->restart_interval) { - if (entropy->restarts_to_go == 0) - if (! emit_restart(&state, entropy->next_restart_num)) - return FALSE; - } - - /* Encode the MCU data blocks */ - for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { - ci = cinfo->MCU_membership[blkn]; - compptr = cinfo->cur_comp_info[ci]; - if (! encode_one_block(&state, - MCU_data[blkn][0], state.cur.last_dc_val[ci], - entropy->dc_derived_tbls[compptr->dc_tbl_no], - entropy->ac_derived_tbls[compptr->ac_tbl_no])) - return FALSE; - /* Update last_dc_val */ - state.cur.last_dc_val[ci] = MCU_data[blkn][0][0]; - } - - /* Completed MCU, so update state */ - cinfo->dest->next_output_byte = state.next_output_byte; - cinfo->dest->free_in_buffer = state.free_in_buffer; - ASSIGN_STATE(entropy->saved, state.cur); - - /* Update restart-interval state too */ - if (cinfo->restart_interval) { - if (entropy->restarts_to_go == 0) { - entropy->restarts_to_go = cinfo->restart_interval; - entropy->next_restart_num++; - entropy->next_restart_num &= 7; - } - entropy->restarts_to_go--; - } - - return TRUE; -} - - -/* - * Finish up at the end of a Huffman-compressed scan. - */ - -METHODDEF void -finish_pass_huff (j_compress_ptr cinfo) -{ - huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; - working_state state; - - /* Load up working state ... flush_bits needs it */ - state.next_output_byte = cinfo->dest->next_output_byte; - state.free_in_buffer = cinfo->dest->free_in_buffer; - ASSIGN_STATE(state.cur, entropy->saved); - state.cinfo = cinfo; - - /* Flush out the last data */ - if (! flush_bits(&state)) - ERREXIT(cinfo, JERR_CANT_SUSPEND); - - /* Update state */ - cinfo->dest->next_output_byte = state.next_output_byte; - cinfo->dest->free_in_buffer = state.free_in_buffer; - ASSIGN_STATE(entropy->saved, state.cur); -} - - -/* - * Huffman coding optimization. - * - * This actually is optimization, in the sense that we find the best possible - * Huffman table(s) for the given data. We first scan the supplied data and - * count the number of uses of each symbol that is to be Huffman-coded. - * (This process must agree with the code above.) Then we build an - * optimal Huffman coding tree for the observed counts. - * - * The JPEG standard requires Huffman codes to be no more than 16 bits long. - * If some symbols have a very small but nonzero probability, the Huffman tree - * must be adjusted to meet the code length restriction. We currently use - * the adjustment method suggested in the JPEG spec. This method is *not* - * optimal; it may not choose the best possible limited-length code. But - * since the symbols involved are infrequently used, it's not clear that - * going to extra trouble is worthwhile. - */ - -#ifdef ENTROPY_OPT_SUPPORTED - - -/* Process a single block's worth of coefficients */ - -LOCAL void -htest_one_block (JCOEFPTR block, int last_dc_val, - long dc_counts[], long ac_counts[]) -{ - register int temp; - register int nbits; - register int k, r; - - /* Encode the DC coefficient difference per section F.1.2.1 */ - - temp = block[0] - last_dc_val; - if (temp < 0) - temp = -temp; - - /* Find the number of bits needed for the magnitude of the coefficient */ - nbits = 0; - while (temp) { - nbits++; - temp >>= 1; - } - - /* Count the Huffman symbol for the number of bits */ - dc_counts[nbits]++; - - /* Encode the AC coefficients per section F.1.2.2 */ - - r = 0; /* r = run length of zeros */ - - for (k = 1; k < DCTSIZE2; k++) { - if ((temp = block[k]) == 0) { - r++; - } else { - /* if run length > 15, must emit special run-length-16 codes (0xF0) */ - while (r > 15) { - ac_counts[0xF0]++; - r -= 16; - } - - /* Find the number of bits needed for the magnitude of the coefficient */ - if (temp < 0) - temp = -temp; - - /* Find the number of bits needed for the magnitude of the coefficient */ - nbits = 1; /* there must be at least one 1 bit */ - while ((temp >>= 1)) - nbits++; - - /* Count Huffman symbol for run length / number of bits */ - ac_counts[(r << 4) + nbits]++; - - r = 0; - } - } - - /* If the last coef(s) were zero, emit an end-of-block code */ - if (r > 0) - ac_counts[0]++; -} - - -/* - * Trial-encode one MCU's worth of Huffman-compressed coefficients. - * No data is actually output, so no suspension return is possible. - */ - -METHODDEF boolean -encode_mcu_gather (j_compress_ptr cinfo, JBLOCKROW *MCU_data) -{ - huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; - int blkn, ci; - jpeg_component_info * compptr; - - /* Take care of restart intervals if needed */ - if (cinfo->restart_interval) { - if (entropy->restarts_to_go == 0) { - /* Re-initialize DC predictions to 0 */ - for (ci = 0; ci < cinfo->comps_in_scan; ci++) - entropy->saved.last_dc_val[ci] = 0; - /* Update restart state */ - entropy->restarts_to_go = cinfo->restart_interval; - } - entropy->restarts_to_go--; - } - - for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) { - ci = cinfo->MCU_membership[blkn]; - compptr = cinfo->cur_comp_info[ci]; - htest_one_block(MCU_data[blkn][0], entropy->saved.last_dc_val[ci], - entropy->dc_count_ptrs[compptr->dc_tbl_no], - entropy->ac_count_ptrs[compptr->ac_tbl_no]); - entropy->saved.last_dc_val[ci] = MCU_data[blkn][0][0]; - } - - return TRUE; -} - - -/* Generate the optimal coding for the given counts, initialize htbl */ - -LOCAL void -gen_huff_coding (j_compress_ptr cinfo, JHUFF_TBL *htbl, long freq[]) -{ -#define MAX_CLEN 32 /* assumed maximum initial code length */ - UINT8 bits[MAX_CLEN+1]; /* bits[k] = # of symbols with code length k */ - int codesize[257]; /* codesize[k] = code length of symbol k */ - int others[257]; /* next symbol in current branch of tree */ - int c1, c2; - int p, i, j; - long v; - - /* This algorithm is explained in section K.2 of the JPEG standard */ - - MEMZERO(bits, SIZEOF(bits)); - MEMZERO(codesize, SIZEOF(codesize)); - for (i = 0; i < 257; i++) - others[i] = -1; /* init links to empty */ - - freq[256] = 1; /* make sure there is a nonzero count */ - /* Including the pseudo-symbol 256 in the Huffman procedure guarantees - * that no real symbol is given code-value of all ones, because 256 - * will be placed in the largest codeword category. - */ - - /* Huffman's basic algorithm to assign optimal code lengths to symbols */ - - for (;;) { - /* Find the smallest nonzero frequency, set c1 = its symbol */ - /* In case of ties, take the larger symbol number */ - c1 = -1; - v = 1000000000L; - for (i = 0; i <= 256; i++) { - if (freq[i] && freq[i] <= v) { - v = freq[i]; - c1 = i; - } - } - - /* Find the next smallest nonzero frequency, set c2 = its symbol */ - /* In case of ties, take the larger symbol number */ - c2 = -1; - v = 1000000000L; - for (i = 0; i <= 256; i++) { - if (freq[i] && freq[i] <= v && i != c1) { - v = freq[i]; - c2 = i; - } - } - - /* Done if we've merged everything into one frequency */ - if (c2 < 0) - break; - - /* Else merge the two counts/trees */ - freq[c1] += freq[c2]; - freq[c2] = 0; - - /* Increment the codesize of everything in c1's tree branch */ - codesize[c1]++; - while (others[c1] >= 0) { - c1 = others[c1]; - codesize[c1]++; - } - - others[c1] = c2; /* chain c2 onto c1's tree branch */ - - /* Increment the codesize of everything in c2's tree branch */ - codesize[c2]++; - while (others[c2] >= 0) { - c2 = others[c2]; - codesize[c2]++; - } - } - - /* Now count the number of symbols of each code length */ - for (i = 0; i <= 256; i++) { - if (codesize[i]) { - /* The JPEG standard seems to think that this can't happen, */ - /* but I'm paranoid... */ - if (codesize[i] > MAX_CLEN) - ERREXIT(cinfo, JERR_HUFF_CLEN_OVERFLOW); - - bits[codesize[i]]++; - } - } - - /* JPEG doesn't allow symbols with code lengths over 16 bits, so if the pure - * Huffman procedure assigned any such lengths, we must adjust the coding. - * Here is what the JPEG spec says about how this next bit works: - * Since symbols are paired for the longest Huffman code, the symbols are - * removed from this length category two at a time. The prefix for the pair - * (which is one bit shorter) is allocated to one of the pair; then, - * skipping the BITS entry for that prefix length, a code word from the next - * shortest nonzero BITS entry is converted into a prefix for two code words - * one bit longer. - */ - - for (i = MAX_CLEN; i > 16; i--) { - while (bits[i] > 0) { - j = i - 2; /* find length of new prefix to be used */ - while (bits[j] == 0) - j--; - - bits[i] -= 2; /* remove two symbols */ - bits[i-1]++; /* one goes in this length */ - bits[j+1] += 2; /* two new symbols in this length */ - bits[j]--; /* symbol of this length is now a prefix */ - } - } - - /* Remove the count for the pseudo-symbol 256 from the largest codelength */ - while (bits[i] == 0) /* find largest codelength still in use */ - i--; - bits[i]--; - - /* Return final symbol counts (only for lengths 0..16) */ - MEMCOPY(htbl->bits, bits, SIZEOF(htbl->bits)); - - /* Return a list of the symbols sorted by code length */ - /* It's not real clear to me why we don't need to consider the codelength - * changes made above, but the JPEG spec seems to think this works. - */ - p = 0; - for (i = 1; i <= MAX_CLEN; i++) { - for (j = 0; j <= 255; j++) { - if (codesize[j] == i) { - htbl->huffval[p] = (UINT8) j; - p++; - } - } - } - - /* Set sent_table FALSE so updated table will be written to JPEG file. */ - htbl->sent_table = FALSE; -} - - -/* - * Finish up a statistics-gathering pass and create the new Huffman tables. - */ - -METHODDEF void -finish_pass_gather (j_compress_ptr cinfo) -{ - huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy; - int ci, dctbl, actbl; - jpeg_component_info * compptr; - JHUFF_TBL **htblptr; - boolean did_dc[NUM_HUFF_TBLS]; - boolean did_ac[NUM_HUFF_TBLS]; - - /* It's important not to apply gen_huff_coding more than once per table, - * because it clobbers the input frequency counts! - */ - MEMZERO(did_dc, SIZEOF(did_dc)); - MEMZERO(did_ac, SIZEOF(did_ac)); - - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - dctbl = compptr->dc_tbl_no; - actbl = compptr->ac_tbl_no; - if (! did_dc[dctbl]) { - htblptr = & cinfo->dc_huff_tbl_ptrs[dctbl]; - if (*htblptr == NULL) - *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); - gen_huff_coding(cinfo, *htblptr, entropy->dc_count_ptrs[dctbl]); - did_dc[dctbl] = TRUE; - } - if (! did_ac[actbl]) { - htblptr = & cinfo->ac_huff_tbl_ptrs[actbl]; - if (*htblptr == NULL) - *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); - gen_huff_coding(cinfo, *htblptr, entropy->ac_count_ptrs[actbl]); - did_ac[actbl] = TRUE; - } - } -} - - -#endif /* ENTROPY_OPT_SUPPORTED */ - - -/* - * Module initialization routine for Huffman entropy encoding. - */ - -GLOBAL void -jinit_huff_encoder (j_compress_ptr cinfo) -{ - huff_entropy_ptr entropy; - int i; - - entropy = (huff_entropy_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(huff_entropy_encoder)); - cinfo->entropy = (struct jpeg_entropy_encoder *) entropy; - entropy->pub.start_pass = start_pass_huff; - - /* Mark tables unallocated */ - for (i = 0; i < NUM_HUFF_TBLS; i++) { - entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL; -#ifdef ENTROPY_OPT_SUPPORTED - entropy->dc_count_ptrs[i] = entropy->ac_count_ptrs[i] = NULL; -#endif - } -} diff --git a/jpeg/jcmainct.c b/jpeg/jcmainct.c deleted file mode 100644 index 5359268b57820c2284e2653f7fbebfb7113dd2b7..0000000000000000000000000000000000000000 --- a/jpeg/jcmainct.c +++ /dev/null @@ -1,298 +0,0 @@ -/* - * jcmainct.c - * - * Copyright (C) 1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains the main buffer controller for compression. - * The main buffer lies between the pre-processor and the JPEG - * compressor proper; it holds downsampled data in the JPEG colorspace. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* Note: currently, there is no operating mode in which a full-image buffer - * is needed at this step. If there were, that mode could not be used with - * "raw data" input, since this module is bypassed in that case. However, - * we've left the code here for possible use in special applications. - */ -#undef FULL_MAIN_BUFFER_SUPPORTED - - -/* Private buffer controller object */ - -typedef struct { - struct jpeg_c_main_controller pub; /* public fields */ - - JDIMENSION cur_mcu_row; /* number of current iMCU row */ - JDIMENSION rowgroup_ctr; /* counts row groups received in iMCU row */ - JDIMENSION mcu_ctr; /* counts MCUs output from current row */ - boolean suspended; /* remember if we suspended output */ - J_BUF_MODE pass_mode; /* current operating mode */ - - /* If using just a strip buffer, this points to the entire set of buffers - * (we allocate one for each component). In the full-image case, this - * points to the currently accessible strips of the virtual arrays. - */ - JSAMPARRAY buffer[MAX_COMPONENTS]; - -#ifdef FULL_MAIN_BUFFER_SUPPORTED - /* If using full-image storage, this array holds pointers to virtual-array - * control blocks for each component. Unused if not full-image storage. - */ - jvirt_sarray_ptr whole_image[MAX_COMPONENTS]; -#endif -} my_main_controller; - -typedef my_main_controller * my_main_ptr; - - -/* Forward declarations */ -METHODDEF void process_data_simple_main - JPP((j_compress_ptr cinfo, JSAMPARRAY input_buf, - JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail)); -#ifdef FULL_MAIN_BUFFER_SUPPORTED -METHODDEF void process_data_buffer_main - JPP((j_compress_ptr cinfo, JSAMPARRAY input_buf, - JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail)); -#endif - - -/* - * Initialize for a processing pass. - */ - -METHODDEF void -start_pass_main (j_compress_ptr cinfo, J_BUF_MODE pass_mode) -{ - my_main_ptr main = (my_main_ptr) cinfo->main; - - /* Do nothing in raw-data mode. */ - if (cinfo->raw_data_in) - return; - - main->cur_mcu_row = 0; /* initialize counters */ - main->rowgroup_ctr = 0; - main->mcu_ctr = 0; - main->suspended = FALSE; - main->pass_mode = pass_mode; /* save mode for use by process_data */ - - switch (pass_mode) { - case JBUF_PASS_THRU: -#ifdef FULL_MAIN_BUFFER_SUPPORTED - if (main->whole_image[0] != NULL) - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); -#endif - main->pub.process_data = process_data_simple_main; - break; -#ifdef FULL_MAIN_BUFFER_SUPPORTED - case JBUF_SAVE_SOURCE: - case JBUF_CRANK_DEST: - case JBUF_SAVE_AND_PASS: - if (main->whole_image[0] == NULL) - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - main->pub.process_data = process_data_buffer_main; - break; -#endif - default: - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - break; - } -} - - -/* - * Process some data. - * This routine handles the simple pass-through mode, - * where we have only a strip buffer. - */ - -METHODDEF void -process_data_simple_main (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, - JDIMENSION in_rows_avail) -{ - my_main_ptr main = (my_main_ptr) cinfo->main; - - while (main->cur_mcu_row < cinfo->total_iMCU_rows) { - /* Read input data if we haven't filled the main buffer yet */ - if (main->rowgroup_ctr < DCTSIZE) - (*cinfo->prep->pre_process_data) (cinfo, - input_buf, in_row_ctr, in_rows_avail, - main->buffer, &main->rowgroup_ctr, - (JDIMENSION) DCTSIZE); - - /* If we don't have a full iMCU row buffered, return to application for - * more data. Note that preprocessor will always pad to fill the iMCU row - * at the bottom of the image. - */ - if (main->rowgroup_ctr != DCTSIZE) - return; - - /* Send the completed row to the compressor */ - (*cinfo->coef->compress_data) (cinfo, main->buffer, &main->mcu_ctr); - - /* If compressor did not consume the whole row, then we must need to - * suspend processing and return to the application. In this situation - * we pretend we didn't yet consume the last input row; otherwise, if - * it happened to be the last row of the image, the application would - * think we were done. - */ - if (main->mcu_ctr < cinfo->MCUs_per_row) { - if (! main->suspended) { - (*in_row_ctr)--; - main->suspended = TRUE; - } - return; - } - /* We did finish the row. Undo our little suspension hack if a previous - * call suspended; then mark the main buffer empty. - */ - if (main->suspended) { - (*in_row_ctr)++; - main->suspended = FALSE; - } - main->mcu_ctr = 0; - main->rowgroup_ctr = 0; - main->cur_mcu_row++; - } -} - - -#ifdef FULL_MAIN_BUFFER_SUPPORTED - -/* - * Process some data. - * This routine handles all of the modes that use a full-size buffer. - */ - -METHODDEF void -process_data_buffer_main (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, - JDIMENSION in_rows_avail) -{ - my_main_ptr main = (my_main_ptr) cinfo->main; - int ci; - jpeg_component_info *compptr; - boolean writing = (main->pass_mode != JBUF_CRANK_DEST); - - while (main->cur_mcu_row < cinfo->total_iMCU_rows) { - /* Realign the virtual buffers if at the start of an iMCU row. */ - if (main->rowgroup_ctr == 0) { - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - main->buffer[ci] = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, main->whole_image[ci], - main->cur_mcu_row * (compptr->v_samp_factor * DCTSIZE), writing); - } - /* In a read pass, pretend we just read some source data. */ - if (! writing) { - *in_row_ctr += cinfo->max_v_samp_factor * DCTSIZE; - main->rowgroup_ctr = DCTSIZE; - } - } - - /* If a write pass, read input data until the current iMCU row is full. */ - /* Note: preprocessor will pad if necessary to fill the last iMCU row. */ - if (writing) { - (*cinfo->prep->pre_process_data) (cinfo, - input_buf, in_row_ctr, in_rows_avail, - main->buffer, &main->rowgroup_ctr, - (JDIMENSION) DCTSIZE); - /* Return to application if we need more data to fill the iMCU row. */ - if (main->rowgroup_ctr < DCTSIZE) - return; - } - - /* Emit data, unless this is a sink-only pass. */ - if (main->pass_mode != JBUF_SAVE_SOURCE) { - (*cinfo->coef->compress_data) (cinfo, main->buffer, &main->mcu_ctr); - /* If compressor did not consume the whole row, then we must need to - * suspend processing and return to the application. In this situation - * we pretend we didn't yet consume the last input row; otherwise, if - * it happened to be the last row of the image, the application would - * think we were done. - */ - if (main->mcu_ctr < cinfo->MCUs_per_row) { - if (! main->suspended) { - (*in_row_ctr)--; - main->suspended = TRUE; - } - return; - } - /* We did finish the row. Undo our little suspension hack if a previous - * call suspended; then mark the main buffer empty. - */ - if (main->suspended) { - (*in_row_ctr)++; - main->suspended = FALSE; - } - } - - /* If get here, we are done with this iMCU row. Mark buffer empty. */ - main->mcu_ctr = 0; - main->rowgroup_ctr = 0; - main->cur_mcu_row++; - } -} - -#endif /* FULL_MAIN_BUFFER_SUPPORTED */ - - -/* - * Initialize main buffer controller. - */ - -GLOBAL void -jinit_c_main_controller (j_compress_ptr cinfo, boolean need_full_buffer) -{ - my_main_ptr main; - int ci; - jpeg_component_info *compptr; - - main = (my_main_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_main_controller)); - cinfo->main = (struct jpeg_c_main_controller *) main; - main->pub.start_pass = start_pass_main; - - /* We don't need to create a buffer in raw-data mode. */ - if (cinfo->raw_data_in) - return; - - /* Create the buffer. It holds downsampled data, so each component - * may be of a different size. - */ - if (need_full_buffer) { -#ifdef FULL_MAIN_BUFFER_SUPPORTED - /* Allocate a full-image virtual array for each component */ - /* Note we implicitly pad the bottom to a multiple of the iMCU height */ - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - main->whole_image[ci] = (*cinfo->mem->request_virt_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - compptr->width_in_blocks * DCTSIZE, - compptr->height_in_blocks * DCTSIZE, - (JDIMENSION) (compptr->v_samp_factor * DCTSIZE)); - } -#else - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); -#endif - } else { -#ifdef FULL_MAIN_BUFFER_SUPPORTED - main->whole_image[0] = NULL; /* flag for no virtual arrays */ -#endif - /* Allocate a strip buffer for each component */ - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - main->buffer[ci] = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - compptr->width_in_blocks * DCTSIZE, - (JDIMENSION) (compptr->v_samp_factor * DCTSIZE)); - } - } -} diff --git a/jpeg/jcmarker.c b/jpeg/jcmarker.c deleted file mode 100644 index 54546585e1f2797c6e8150e75d8215305a7195b0..0000000000000000000000000000000000000000 --- a/jpeg/jcmarker.c +++ /dev/null @@ -1,605 +0,0 @@ -/* - * jcmarker.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to write JPEG datastream markers. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -typedef enum { /* JPEG marker codes */ - M_SOF0 = 0xc0, - M_SOF1 = 0xc1, - M_SOF2 = 0xc2, - M_SOF3 = 0xc3, - - M_SOF5 = 0xc5, - M_SOF6 = 0xc6, - M_SOF7 = 0xc7, - - M_JPG = 0xc8, - M_SOF9 = 0xc9, - M_SOF10 = 0xca, - M_SOF11 = 0xcb, - - M_SOF13 = 0xcd, - M_SOF14 = 0xce, - M_SOF15 = 0xcf, - - M_DHT = 0xc4, - - M_DAC = 0xcc, - - M_RST0 = 0xd0, - M_RST1 = 0xd1, - M_RST2 = 0xd2, - M_RST3 = 0xd3, - M_RST4 = 0xd4, - M_RST5 = 0xd5, - M_RST6 = 0xd6, - M_RST7 = 0xd7, - - M_SOI = 0xd8, - M_EOI = 0xd9, - M_SOS = 0xda, - M_DQT = 0xdb, - M_DNL = 0xdc, - M_DRI = 0xdd, - M_DHP = 0xde, - M_EXP = 0xdf, - - M_APP0 = 0xe0, - M_APP1 = 0xe1, - M_APP2 = 0xe2, - M_APP3 = 0xe3, - M_APP4 = 0xe4, - M_APP5 = 0xe5, - M_APP6 = 0xe6, - M_APP7 = 0xe7, - M_APP8 = 0xe8, - M_APP9 = 0xe9, - M_APP10 = 0xea, - M_APP11 = 0xeb, - M_APP12 = 0xec, - M_APP13 = 0xed, - M_APP14 = 0xee, - M_APP15 = 0xef, - - M_JPG0 = 0xf0, - M_JPG13 = 0xfd, - M_COM = 0xfe, - - M_TEM = 0x01, - - M_ERROR = 0x100 -} JPEG_MARKER; - - -/* - * Basic output routines. - * - * Note that we do not support suspension while writing a marker. - * Therefore, an application using suspension must ensure that there is - * enough buffer space for the initial markers (typ. 600-700 bytes) before - * calling jpeg_start_compress, and enough space to write the trailing EOI - * (a few bytes) before calling jpeg_finish_compress. Multipass compression - * modes are not supported at all with suspension, so those two are the only - * points where markers will be written. - */ - -LOCAL void -emit_byte (j_compress_ptr cinfo, int val) -/* Emit a byte */ -{ - struct jpeg_destination_mgr * dest = cinfo->dest; - - *(dest->next_output_byte)++ = (JOCTET) val; - if (--dest->free_in_buffer == 0) { - if (! (*dest->empty_output_buffer) (cinfo)) - ERREXIT(cinfo, JERR_CANT_SUSPEND); - } -} - - -LOCAL void -emit_marker (j_compress_ptr cinfo, JPEG_MARKER mark) -/* Emit a marker code */ -{ - emit_byte(cinfo, 0xFF); - emit_byte(cinfo, (int) mark); -} - - -LOCAL void -emit_2bytes (j_compress_ptr cinfo, int value) -/* Emit a 2-byte integer; these are always MSB first in JPEG files */ -{ - emit_byte(cinfo, (value >> 8) & 0xFF); - emit_byte(cinfo, value & 0xFF); -} - - -/* - * Routines to write specific marker types. - */ - -LOCAL int -emit_dqt (j_compress_ptr cinfo, int index) -/* Emit a DQT marker */ -/* Returns the precision used (0 = 8bits, 1 = 16bits) for baseline checking */ -{ - JQUANT_TBL * qtbl = cinfo->quant_tbl_ptrs[index]; - int prec; - int i; - - if (qtbl == NULL) - ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, index); - - prec = 0; - for (i = 0; i < DCTSIZE2; i++) { - if (qtbl->quantval[i] > 255) - prec = 1; - } - - if (! qtbl->sent_table) { - emit_marker(cinfo, M_DQT); - - emit_2bytes(cinfo, prec ? DCTSIZE2*2 + 1 + 2 : DCTSIZE2 + 1 + 2); - - emit_byte(cinfo, index + (prec<<4)); - - for (i = 0; i < DCTSIZE2; i++) { - if (prec) - emit_byte(cinfo, qtbl->quantval[i] >> 8); - emit_byte(cinfo, qtbl->quantval[i] & 0xFF); - } - - qtbl->sent_table = TRUE; - } - - return prec; -} - - -LOCAL void -emit_dht (j_compress_ptr cinfo, int index, boolean is_ac) -/* Emit a DHT marker */ -{ - JHUFF_TBL * htbl; - int length, i; - - if (is_ac) { - htbl = cinfo->ac_huff_tbl_ptrs[index]; - index += 0x10; /* output index has AC bit set */ - } else { - htbl = cinfo->dc_huff_tbl_ptrs[index]; - } - - if (htbl == NULL) - ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, index); - - if (! htbl->sent_table) { - emit_marker(cinfo, M_DHT); - - length = 0; - for (i = 1; i <= 16; i++) - length += htbl->bits[i]; - - emit_2bytes(cinfo, length + 2 + 1 + 16); - emit_byte(cinfo, index); - - for (i = 1; i <= 16; i++) - emit_byte(cinfo, htbl->bits[i]); - - for (i = 0; i < length; i++) - emit_byte(cinfo, htbl->huffval[i]); - - htbl->sent_table = TRUE; - } -} - - -LOCAL void -emit_dac (j_compress_ptr cinfo) -/* Emit a DAC marker */ -/* Since the useful info is so small, we want to emit all the tables in */ -/* one DAC marker. Therefore this routine does its own scan of the table. */ -{ -#ifdef C_ARITH_CODING_SUPPORTED - char dc_in_use[NUM_ARITH_TBLS]; - char ac_in_use[NUM_ARITH_TBLS]; - int length, i; - jpeg_component_info *compptr; - - for (i = 0; i < NUM_ARITH_TBLS; i++) - dc_in_use[i] = ac_in_use[i] = 0; - - for (i = 0; i < cinfo->comps_in_scan; i++) { - compptr = cinfo->cur_comp_info[i]; - dc_in_use[compptr->dc_tbl_no] = 1; - ac_in_use[compptr->ac_tbl_no] = 1; - } - - length = 0; - for (i = 0; i < NUM_ARITH_TBLS; i++) - length += dc_in_use[i] + ac_in_use[i]; - - emit_marker(cinfo, M_DAC); - - emit_2bytes(cinfo, length*2 + 2); - - for (i = 0; i < NUM_ARITH_TBLS; i++) { - if (dc_in_use[i]) { - emit_byte(cinfo, i); - emit_byte(cinfo, cinfo->arith_dc_L[i] + (cinfo->arith_dc_U[i]<<4)); - } - if (ac_in_use[i]) { - emit_byte(cinfo, i + 0x10); - emit_byte(cinfo, cinfo->arith_ac_K[i]); - } - } -#endif /* C_ARITH_CODING_SUPPORTED */ -} - - -LOCAL void -emit_dri (j_compress_ptr cinfo) -/* Emit a DRI marker */ -{ - emit_marker(cinfo, M_DRI); - - emit_2bytes(cinfo, 4); /* fixed length */ - - emit_2bytes(cinfo, (int) cinfo->restart_interval); -} - - -LOCAL void -emit_sof (j_compress_ptr cinfo, JPEG_MARKER code) -/* Emit a SOF marker */ -{ - int ci; - jpeg_component_info *compptr; - - emit_marker(cinfo, code); - - emit_2bytes(cinfo, 3 * cinfo->num_components + 2 + 5 + 1); /* length */ - - /* Make sure image isn't bigger than SOF field can handle */ - if ((long) cinfo->image_height > 65535L || - (long) cinfo->image_width > 65535L) - ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) 65535); - - emit_byte(cinfo, cinfo->data_precision); - emit_2bytes(cinfo, (int) cinfo->image_height); - emit_2bytes(cinfo, (int) cinfo->image_width); - - emit_byte(cinfo, cinfo->num_components); - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - emit_byte(cinfo, compptr->component_id); - emit_byte(cinfo, (compptr->h_samp_factor << 4) + compptr->v_samp_factor); - emit_byte(cinfo, compptr->quant_tbl_no); - } -} - - -LOCAL void -emit_sos (j_compress_ptr cinfo) -/* Emit a SOS marker */ -{ - int i; - jpeg_component_info *compptr; - - emit_marker(cinfo, M_SOS); - - emit_2bytes(cinfo, 2 * cinfo->comps_in_scan + 2 + 1 + 3); /* length */ - - emit_byte(cinfo, cinfo->comps_in_scan); - - for (i = 0; i < cinfo->comps_in_scan; i++) { - compptr = cinfo->cur_comp_info[i]; - emit_byte(cinfo, compptr->component_id); - emit_byte(cinfo, (compptr->dc_tbl_no << 4) + compptr->ac_tbl_no); - } - - emit_byte(cinfo, 0); /* Spectral selection start */ - emit_byte(cinfo, DCTSIZE2-1); /* Spectral selection end */ - emit_byte(cinfo, 0); /* Successive approximation */ -} - - -LOCAL void -emit_jfif_app0 (j_compress_ptr cinfo) -/* Emit a JFIF-compliant APP0 marker */ -{ - /* - * Length of APP0 block (2 bytes) - * Block ID (4 bytes - ASCII "JFIF") - * Zero byte (1 byte to terminate the ID string) - * Version Major, Minor (2 bytes - 0x01, 0x01) - * Units (1 byte - 0x00 = none, 0x01 = inch, 0x02 = cm) - * Xdpu (2 bytes - dots per unit horizontal) - * Ydpu (2 bytes - dots per unit vertical) - * Thumbnail X size (1 byte) - * Thumbnail Y size (1 byte) - */ - - emit_marker(cinfo, M_APP0); - - emit_2bytes(cinfo, 2 + 4 + 1 + 2 + 1 + 2 + 2 + 1 + 1); /* length */ - - emit_byte(cinfo, 0x4A); /* Identifier: ASCII "JFIF" */ - emit_byte(cinfo, 0x46); - emit_byte(cinfo, 0x49); - emit_byte(cinfo, 0x46); - emit_byte(cinfo, 0); - /* We currently emit version code 1.01 since we use no 1.02 features. - * This may avoid complaints from some older decoders. - */ - emit_byte(cinfo, 1); /* Major version */ - emit_byte(cinfo, 1); /* Minor version */ - emit_byte(cinfo, cinfo->density_unit); /* Pixel size information */ - emit_2bytes(cinfo, (int) cinfo->X_density); - emit_2bytes(cinfo, (int) cinfo->Y_density); - emit_byte(cinfo, 0); /* No thumbnail image */ - emit_byte(cinfo, 0); -} - - -LOCAL void -emit_adobe_app14 (j_compress_ptr cinfo) -/* Emit an Adobe APP14 marker */ -{ - /* - * Length of APP14 block (2 bytes) - * Block ID (5 bytes - ASCII "Adobe") - * Version Number (2 bytes - currently 100) - * Flags0 (2 bytes - currently 0) - * Flags1 (2 bytes - currently 0) - * Color transform (1 byte) - * - * Although Adobe TN 5116 mentions Version = 101, all the Adobe files - * now in circulation seem to use Version = 100, so that's what we write. - * - * We write the color transform byte as 1 if the JPEG color space is - * YCbCr, 2 if it's YCCK, 0 otherwise. Adobe's definition has to do with - * whether the encoder performed a transformation, which is pretty useless. - */ - - emit_marker(cinfo, M_APP14); - - emit_2bytes(cinfo, 2 + 5 + 2 + 2 + 2 + 1); /* length */ - - emit_byte(cinfo, 0x41); /* Identifier: ASCII "Adobe" */ - emit_byte(cinfo, 0x64); - emit_byte(cinfo, 0x6F); - emit_byte(cinfo, 0x62); - emit_byte(cinfo, 0x65); - emit_2bytes(cinfo, 100); /* Version */ - emit_2bytes(cinfo, 0); /* Flags0 */ - emit_2bytes(cinfo, 0); /* Flags1 */ - switch (cinfo->jpeg_color_space) { - case JCS_YCbCr: - emit_byte(cinfo, 1); /* Color transform = 1 */ - break; - case JCS_YCCK: - emit_byte(cinfo, 2); /* Color transform = 2 */ - break; - default: - emit_byte(cinfo, 0); /* Color transform = 0 */ - break; - } -} - - -/* - * This routine is exported for possible use by applications. - * The intended use is to emit COM or APPn markers after calling - * jpeg_start_compress() and before the first jpeg_write_scanlines() call - * (hence, after write_file_header but before write_frame_header). - * Other uses are not guaranteed to produce desirable results. - */ - -METHODDEF void -write_any_marker (j_compress_ptr cinfo, int marker, - const JOCTET *dataptr, unsigned int datalen) -/* Emit an arbitrary marker with parameters */ -{ - if (datalen <= (unsigned int) 65533) { /* safety check */ - emit_marker(cinfo, (JPEG_MARKER) marker); - - emit_2bytes(cinfo, (int) (datalen + 2)); /* total length */ - - while (datalen--) { - emit_byte(cinfo, *dataptr); - dataptr++; - } - } -} - - -/* - * Write datastream header. - * This consists of an SOI and optional APPn markers. - * We recommend use of the JFIF marker, but not the Adobe marker, - * when using YCbCr or grayscale data. The JFIF marker should NOT - * be used for any other JPEG colorspace. The Adobe marker is helpful - * to distinguish RGB, CMYK, and YCCK colorspaces. - * Note that an application can write additional header markers after - * jpeg_start_decompress returns. - */ - -METHODDEF void -write_file_header (j_compress_ptr cinfo) -{ - emit_marker(cinfo, M_SOI); /* first the SOI */ - - if (cinfo->write_JFIF_header) /* next an optional JFIF APP0 */ - emit_jfif_app0(cinfo); - if (cinfo->write_Adobe_marker) /* next an optional Adobe APP14 */ - emit_adobe_app14(cinfo); -} - - -/* - * Write frame header. - * This consists of DQT and SOFn markers. - * Note that we do not emit the SOF until we have emitted the DQT(s). - * This avoids compatibility problems with incorrect implementations that - * try to error-check the quant table numbers as soon as they see the SOF. - */ - -METHODDEF void -write_frame_header (j_compress_ptr cinfo) -{ - int ci, prec; - boolean is_baseline; - jpeg_component_info *compptr; - - /* Emit DQT for each quantization table. - * Note that emit_dqt() suppresses any duplicate tables. - */ - prec = 0; - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - prec += emit_dqt(cinfo, compptr->quant_tbl_no); - } - /* now prec is nonzero iff there are any 16-bit quant tables. */ - - /* Check for a non-baseline specification. - * Note we assume that Huffman table numbers won't be changed later. - */ - is_baseline = TRUE; - if (cinfo->arith_code || (cinfo->data_precision != 8)) - is_baseline = FALSE; - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - if (compptr->dc_tbl_no > 1 || compptr->ac_tbl_no > 1) - is_baseline = FALSE; - } - if (prec && is_baseline) { - is_baseline = FALSE; - /* If it's baseline except for quantizer size, warn the user */ - TRACEMS(cinfo, 0, JTRC_16BIT_TABLES); - } - - /* Emit the proper SOF marker */ - if (cinfo->arith_code) - emit_sof(cinfo, M_SOF9); /* SOF code for arithmetic coding */ - else if (is_baseline) - emit_sof(cinfo, M_SOF0); /* SOF code for baseline implementation */ - else - emit_sof(cinfo, M_SOF1); /* SOF code for non-baseline Huffman file */ -} - - -/* - * Write scan header. - * This consists of DHT or DAC markers, optional DRI, and SOS. - * Compressed data will be written following the SOS. - */ - -METHODDEF void -write_scan_header (j_compress_ptr cinfo) -{ - int i; - jpeg_component_info *compptr; - - if (cinfo->arith_code) { - /* Emit arith conditioning info. We may have some duplication - * if the file has multiple scans, but it's so small it's hardly - * worth worrying about. - */ - emit_dac(cinfo); - } else { - /* Emit Huffman tables. - * Note that emit_dht() suppresses any duplicate tables. - */ - for (i = 0; i < cinfo->comps_in_scan; i++) { - compptr = cinfo->cur_comp_info[i]; - emit_dht(cinfo, compptr->dc_tbl_no, FALSE); - emit_dht(cinfo, compptr->ac_tbl_no, TRUE); - } - } - - /* Emit DRI if required --- note that DRI value could change for each scan. - * If it doesn't, a tiny amount of space is wasted in multiple-scan files. - * We assume DRI will never be nonzero for one scan and zero for a later one. - */ - if (cinfo->restart_interval) - emit_dri(cinfo); - - emit_sos(cinfo); -} - - -/* - * Write datastream trailer. - */ - -METHODDEF void -write_file_trailer (j_compress_ptr cinfo) -{ - emit_marker(cinfo, M_EOI); -} - - -/* - * Write an abbreviated table-specification datastream. - * This consists of SOI, DQT and DHT tables, and EOI. - * Any table that is defined and not marked sent_table = TRUE will be - * emitted. Note that all tables will be marked sent_table = TRUE at exit. - */ - -METHODDEF void -write_tables_only (j_compress_ptr cinfo) -{ - int i; - - emit_marker(cinfo, M_SOI); - - for (i = 0; i < NUM_QUANT_TBLS; i++) { - if (cinfo->quant_tbl_ptrs[i] != NULL) - (void) emit_dqt(cinfo, i); - } - - if (! cinfo->arith_code) { - for (i = 0; i < NUM_HUFF_TBLS; i++) { - if (cinfo->dc_huff_tbl_ptrs[i] != NULL) - emit_dht(cinfo, i, FALSE); - if (cinfo->ac_huff_tbl_ptrs[i] != NULL) - emit_dht(cinfo, i, TRUE); - } - } - - emit_marker(cinfo, M_EOI); -} - - -/* - * Initialize the marker writer module. - */ - -GLOBAL void -jinit_marker_writer (j_compress_ptr cinfo) -{ - /* Create the subobject */ - cinfo->marker = (struct jpeg_marker_writer *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(struct jpeg_marker_writer)); - /* Initialize method pointers */ - cinfo->marker->write_any_marker = write_any_marker; - cinfo->marker->write_file_header = write_file_header; - cinfo->marker->write_frame_header = write_frame_header; - cinfo->marker->write_scan_header = write_scan_header; - cinfo->marker->write_file_trailer = write_file_trailer; - cinfo->marker->write_tables_only = write_tables_only; -} diff --git a/jpeg/jcmaster.c b/jpeg/jcmaster.c deleted file mode 100644 index d9b5c032a61a980857d6637dae2dd8414e67a1ba..0000000000000000000000000000000000000000 --- a/jpeg/jcmaster.c +++ /dev/null @@ -1,387 +0,0 @@ -/* - * jcmaster.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains master control logic for the JPEG compressor. - * These routines are concerned with selecting the modules to be executed - * and with determining the number of passes and the work to be done in each - * pass. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* Private state */ - -typedef struct { - struct jpeg_comp_master pub; /* public fields */ - - int pass_number; /* eventually need more complex state... */ -} my_comp_master; - -typedef my_comp_master * my_master_ptr; - - -/* - * Support routines that do various essential calculations. - */ - -LOCAL void -initial_setup (j_compress_ptr cinfo) -/* Do computations that are needed before master selection phase */ -{ - int ci; - jpeg_component_info *compptr; - long samplesperrow; - JDIMENSION jd_samplesperrow; - - /* Sanity check on image dimensions */ - if (cinfo->image_height <= 0 || cinfo->image_width <= 0 - || cinfo->num_components <= 0 || cinfo->input_components <= 0) - ERREXIT(cinfo, JERR_EMPTY_IMAGE); - - /* Make sure image isn't bigger than I can handle */ - if ((long) cinfo->image_height > (long) JPEG_MAX_DIMENSION || - (long) cinfo->image_width > (long) JPEG_MAX_DIMENSION) - ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION); - - /* Width of an input scanline must be representable as JDIMENSION. */ - samplesperrow = (long) cinfo->image_width * (long) cinfo->input_components; - jd_samplesperrow = (JDIMENSION) samplesperrow; - if ((long) jd_samplesperrow != samplesperrow) - ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); - - /* For now, precision must match compiled-in value... */ - if (cinfo->data_precision != BITS_IN_JSAMPLE) - ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision); - - /* Check that number of components won't exceed internal array sizes */ - if (cinfo->num_components > MAX_COMPONENTS) - ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, - MAX_COMPONENTS); - - /* Compute maximum sampling factors; check factor validity */ - cinfo->max_h_samp_factor = 1; - cinfo->max_v_samp_factor = 1; - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - if (compptr->h_samp_factor<=0 || compptr->h_samp_factor>MAX_SAMP_FACTOR || - compptr->v_samp_factor<=0 || compptr->v_samp_factor>MAX_SAMP_FACTOR) - ERREXIT(cinfo, JERR_BAD_SAMPLING); - cinfo->max_h_samp_factor = MAX(cinfo->max_h_samp_factor, - compptr->h_samp_factor); - cinfo->max_v_samp_factor = MAX(cinfo->max_v_samp_factor, - compptr->v_samp_factor); - } - - /* Compute dimensions of components */ - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - /* For compression, we never do DCT scaling. */ - compptr->DCT_scaled_size = DCTSIZE; - /* Size in DCT blocks */ - compptr->width_in_blocks = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, - (long) (cinfo->max_h_samp_factor * DCTSIZE)); - compptr->height_in_blocks = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, - (long) (cinfo->max_v_samp_factor * DCTSIZE)); - /* Size in samples */ - compptr->downsampled_width = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor, - (long) cinfo->max_h_samp_factor); - compptr->downsampled_height = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor, - (long) cinfo->max_v_samp_factor); - /* Mark component needed (this flag isn't actually used for compression) */ - compptr->component_needed = TRUE; - } - - /* Compute number of fully interleaved MCU rows (number of times that - * main controller will call coefficient controller). - */ - cinfo->total_iMCU_rows = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height, - (long) (cinfo->max_v_samp_factor*DCTSIZE)); -} - - -LOCAL void -per_scan_setup (j_compress_ptr cinfo) -/* Do computations that are needed before processing a JPEG scan */ -/* cinfo->comps_in_scan and cinfo->cur_comp_info[] are already set */ -{ - int ci, mcublks, tmp; - jpeg_component_info *compptr; - - if (cinfo->comps_in_scan == 1) { - - /* Noninterleaved (single-component) scan */ - compptr = cinfo->cur_comp_info[0]; - - /* Overall image size in MCUs */ - cinfo->MCUs_per_row = compptr->width_in_blocks; - cinfo->MCU_rows_in_scan = compptr->height_in_blocks; - - /* For noninterleaved scan, always one block per MCU */ - compptr->MCU_width = 1; - compptr->MCU_height = 1; - compptr->MCU_blocks = 1; - compptr->MCU_sample_width = DCTSIZE; - compptr->last_col_width = 1; - compptr->last_row_height = 1; - - /* Prepare array describing MCU composition */ - cinfo->blocks_in_MCU = 1; - cinfo->MCU_membership[0] = 0; - - } else { - - /* Interleaved (multi-component) scan */ - if (cinfo->comps_in_scan <= 0 || cinfo->comps_in_scan > MAX_COMPS_IN_SCAN) - ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->comps_in_scan, - MAX_COMPS_IN_SCAN); - - /* Overall image size in MCUs */ - cinfo->MCUs_per_row = (JDIMENSION) - jdiv_round_up((long) cinfo->image_width, - (long) (cinfo->max_h_samp_factor*DCTSIZE)); - cinfo->MCU_rows_in_scan = (JDIMENSION) - jdiv_round_up((long) cinfo->image_height, - (long) (cinfo->max_v_samp_factor*DCTSIZE)); - - cinfo->blocks_in_MCU = 0; - - for (ci = 0; ci < cinfo->comps_in_scan; ci++) { - compptr = cinfo->cur_comp_info[ci]; - /* Sampling factors give # of blocks of component in each MCU */ - compptr->MCU_width = compptr->h_samp_factor; - compptr->MCU_height = compptr->v_samp_factor; - compptr->MCU_blocks = compptr->MCU_width * compptr->MCU_height; - compptr->MCU_sample_width = compptr->MCU_width * DCTSIZE; - /* Figure number of non-dummy blocks in last MCU column & row */ - tmp = (int) (compptr->width_in_blocks % compptr->MCU_width); - if (tmp == 0) tmp = compptr->MCU_width; - compptr->last_col_width = tmp; - tmp = (int) (compptr->height_in_blocks % compptr->MCU_height); - if (tmp == 0) tmp = compptr->MCU_height; - compptr->last_row_height = tmp; - /* Prepare array describing MCU composition */ - mcublks = compptr->MCU_blocks; - if (cinfo->blocks_in_MCU + mcublks > MAX_BLOCKS_IN_MCU) - ERREXIT(cinfo, JERR_BAD_MCU_SIZE); - while (mcublks-- > 0) { - cinfo->MCU_membership[cinfo->blocks_in_MCU++] = ci; - } - } - - } - - /* Convert restart specified in rows to actual MCU count. */ - /* Note that count must fit in 16 bits, so we provide limiting. */ - if (cinfo->restart_in_rows > 0) { - long nominal = (long) cinfo->restart_in_rows * (long) cinfo->MCUs_per_row; - cinfo->restart_interval = (unsigned int) MIN(nominal, 65535L); - } -} - - -/* - * Master selection of compression modules. - * This is done once at the start of processing an image. We determine - * which modules will be used and give them appropriate initialization calls. - */ - -LOCAL void -master_selection (j_compress_ptr cinfo) -{ - my_master_ptr master = (my_master_ptr) cinfo->master; - - initial_setup(cinfo); - master->pass_number = 0; - - /* There's not a lot of smarts here right now, but it'll get more - * complicated when we have multiple implementations available... - */ - - /* Preprocessing */ - if (! cinfo->raw_data_in) { - jinit_color_converter(cinfo); - jinit_downsampler(cinfo); - jinit_c_prep_controller(cinfo, FALSE /* never need full buffer here */); - } - /* Forward DCT */ - jinit_forward_dct(cinfo); - /* Entropy encoding: either Huffman or arithmetic coding. */ - if (cinfo->arith_code) { -#ifdef C_ARITH_CODING_SUPPORTED - jinit_arith_encoder(cinfo); -#else - ERREXIT(cinfo, JERR_ARITH_NOTIMPL); -#endif - } else - jinit_huff_encoder(cinfo); - - /* For now, a full buffer is needed only for Huffman optimization. */ - jinit_c_coef_controller(cinfo, cinfo->optimize_coding); - jinit_c_main_controller(cinfo, FALSE /* never need full buffer here */); - - jinit_marker_writer(cinfo); - - /* We can now tell the memory manager to allocate virtual arrays. */ - (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo); - - /* Write the datastream header (SOI) immediately. - * Frame and scan headers are postponed till later. - * This lets application insert special markers after the SOI. - */ - (*cinfo->marker->write_file_header) (cinfo); -} - - -/* - * Per-pass setup. - * This is called at the beginning of each pass. We determine which modules - * will be active during this pass and give them appropriate start_pass calls. - * We also set is_last_pass to indicate whether any more passes will be - * required. - */ - -METHODDEF void -prepare_for_pass (j_compress_ptr cinfo) -{ - my_master_ptr master = (my_master_ptr) cinfo->master; - int ci; - int npasses; - - /* ???? JUST A QUICK CROCK FOR NOW ??? */ - - /* For now, handle only single interleaved output scan; */ - /* we support two passes for Huffman optimization. */ - - /* Prepare for single scan containing all components */ - if (cinfo->num_components > MAX_COMPS_IN_SCAN) - ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, - MAX_COMPS_IN_SCAN); - cinfo->comps_in_scan = cinfo->num_components; - for (ci = 0; ci < cinfo->num_components; ci++) { - cinfo->cur_comp_info[ci] = &cinfo->comp_info[ci]; - } - - per_scan_setup(cinfo); - - if (! cinfo->optimize_coding) { - /* Standard single-pass case */ - npasses = 1; - master->pub.call_pass_startup = TRUE; - master->pub.is_last_pass = TRUE; - if (! cinfo->raw_data_in) { - (*cinfo->cconvert->start_pass) (cinfo); - (*cinfo->downsample->start_pass) (cinfo); - (*cinfo->prep->start_pass) (cinfo, JBUF_PASS_THRU); - } - (*cinfo->fdct->start_pass) (cinfo); - (*cinfo->entropy->start_pass) (cinfo, FALSE); - (*cinfo->coef->start_pass) (cinfo, JBUF_PASS_THRU); - (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU); - } else { - npasses = 2; - switch (master->pass_number) { - case 0: - /* Huffman optimization: run all modules, gather statistics */ - master->pub.call_pass_startup = FALSE; - master->pub.is_last_pass = FALSE; - if (! cinfo->raw_data_in) { - (*cinfo->cconvert->start_pass) (cinfo); - (*cinfo->downsample->start_pass) (cinfo); - (*cinfo->prep->start_pass) (cinfo, JBUF_PASS_THRU); - } - (*cinfo->fdct->start_pass) (cinfo); - (*cinfo->entropy->start_pass) (cinfo, TRUE); - (*cinfo->coef->start_pass) (cinfo, JBUF_SAVE_AND_PASS); - (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU); - break; - case 1: - /* Second pass: reread data from coefficient buffer */ - master->pub.is_last_pass = TRUE; - (*cinfo->entropy->start_pass) (cinfo, FALSE); - (*cinfo->coef->start_pass) (cinfo, JBUF_CRANK_DEST); - /* We emit frame/scan headers now */ - (*cinfo->marker->write_frame_header) (cinfo); - (*cinfo->marker->write_scan_header) (cinfo); - break; - } - } - - /* Set up progress monitor's pass info if present */ - if (cinfo->progress != NULL) { - cinfo->progress->completed_passes = master->pass_number; - cinfo->progress->total_passes = npasses; - } - - master->pass_number++; -} - - -/* - * Special start-of-pass hook. - * This is called by jpeg_write_scanlines if call_pass_startup is TRUE. - * In single-pass processing, we need this hook because we don't want to - * write frame/scan headers during jpeg_start_compress; we want to let the - * application write COM markers etc. between jpeg_start_compress and the - * jpeg_write_scanlines loop. - * In multi-pass processing, this routine is not used. - */ - -METHODDEF void -pass_startup (j_compress_ptr cinfo) -{ - cinfo->master->call_pass_startup = FALSE; /* reset flag so call only once */ - - (*cinfo->marker->write_frame_header) (cinfo); - (*cinfo->marker->write_scan_header) (cinfo); -} - - -/* - * Finish up at end of pass. - */ - -METHODDEF void -finish_pass_master (j_compress_ptr cinfo) -{ - /* More complex logic later ??? */ - - /* The entropy coder needs an end-of-pass call, either to analyze - * statistics or to flush its output buffer. - */ - (*cinfo->entropy->finish_pass) (cinfo); -} - - -/* - * Initialize master compression control. - * This creates my own subrecord and also performs the master selection phase, - * which causes other modules to create their subrecords. - */ - -GLOBAL void -jinit_master_compress (j_compress_ptr cinfo) -{ - my_master_ptr master; - - master = (my_master_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_comp_master)); - cinfo->master = (struct jpeg_comp_master *) master; - master->pub.prepare_for_pass = prepare_for_pass; - master->pub.pass_startup = pass_startup; - master->pub.finish_pass = finish_pass_master; - - master_selection(cinfo); -} diff --git a/jpeg/jcomapi.c b/jpeg/jcomapi.c deleted file mode 100644 index c10903f0753fb11a64d9c05fd5436f3985f66939..0000000000000000000000000000000000000000 --- a/jpeg/jcomapi.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - * jcomapi.c - * - * Copyright (C) 1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains application interface routines that are used for both - * compression and decompression. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* - * Abort processing of a JPEG compression or decompression operation, - * but don't destroy the object itself. - * - * For this, we merely clean up all the nonpermanent memory pools. - * Note that temp files (virtual arrays) are not allowed to belong to - * the permanent pool, so we will be able to close all temp files here. - * Closing a data source or destination, if necessary, is the application's - * responsibility. - */ - -GLOBAL void -jpeg_abort (j_common_ptr cinfo) -{ - int pool; - - /* Releasing pools in reverse order might help avoid fragmentation - * with some (brain-damaged) malloc libraries. - */ - for (pool = JPOOL_NUMPOOLS-1; pool > JPOOL_PERMANENT; pool--) { - (*cinfo->mem->free_pool) (cinfo, pool); - } - - /* Reset overall state for possible reuse of object */ - cinfo->global_state = (cinfo->is_decompressor ? DSTATE_START : CSTATE_START); -} - - -/* - * Destruction of a JPEG object. - * - * Everything gets deallocated except the master jpeg_compress_struct itself - * and the error manager struct. Both of these are supplied by the application - * and must be freed, if necessary, by the application. (Often they are on - * the stack and so don't need to be freed anyway.) - * Closing a data source or destination, if necessary, is the application's - * responsibility. - */ - -GLOBAL void -jpeg_destroy (j_common_ptr cinfo) -{ - /* We need only tell the memory manager to release everything. */ - /* NB: mem pointer is NULL if memory mgr failed to initialize. */ - if (cinfo->mem != NULL) - (*cinfo->mem->self_destruct) (cinfo); - cinfo->mem = NULL; /* be safe if jpeg_destroy is called twice */ - cinfo->global_state = 0; /* mark it destroyed */ -} - - -/* - * Convenience routines for allocating quantization and Huffman tables. - * (Would jutils.c be a more reasonable place to put these?) - */ - -GLOBAL JQUANT_TBL * -jpeg_alloc_quant_table (j_common_ptr cinfo) -{ - JQUANT_TBL *tbl; - - tbl = (JQUANT_TBL *) - (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JQUANT_TBL)); - tbl->sent_table = FALSE; /* make sure this is false in any new table */ - return tbl; -} - - -GLOBAL JHUFF_TBL * -jpeg_alloc_huff_table (j_common_ptr cinfo) -{ - JHUFF_TBL *tbl; - - tbl = (JHUFF_TBL *) - (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JHUFF_TBL)); - tbl->sent_table = FALSE; /* make sure this is false in any new table */ - return tbl; -} diff --git a/jpeg/jconfig.h b/jpeg/jconfig.h deleted file mode 100644 index 57de4db48bafa8ef69fb927b1817fe51903d012a..0000000000000000000000000000000000000000 --- a/jpeg/jconfig.h +++ /dev/null @@ -1,45 +0,0 @@ -/* jconfig.h. Generated automatically by configure. */ -/* jconfig.auto --- source file edited by configure script */ -/* see jconfig.doc for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -#undef void -#undef const -#undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#undef NEED_FAR_POINTERS -#undef NEED_SHORT_EXTERNAL_NAMES -/* Define this if you get warnings about undefined structures. */ -#undef INCOMPLETE_TYPES_BROKEN - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED -#define INLINE inline -/* These are for configuring the JPEG memory manager. */ -#undef DEFAULT_MAX_MEM -#undef NO_MKTEMP - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#undef TWO_FILE_COMMANDLINE -#undef NEED_SIGNAL_CATCHER -#undef DONT_USE_B_MODE - -/* Define this if you want percent-done progress reports from cjpeg/djpeg. */ -#undef PROGRESS_REPORT - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/jpeg/jcparam.c b/jpeg/jcparam.c deleted file mode 100644 index 234aa56fd54c2a386cac9fc654986ff7d6656ce8..0000000000000000000000000000000000000000 --- a/jpeg/jcparam.c +++ /dev/null @@ -1,443 +0,0 @@ -/* - * jcparam.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains optional default-setting code for the JPEG compressor. - * Applications do not have to use this file, but those that don't use it - * must know a lot more about the innards of the JPEG code. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* - * Quantization table setup routines - */ - -GLOBAL void -jpeg_add_quant_table (j_compress_ptr cinfo, int which_tbl, - const unsigned int *basic_table, - int scale_factor, boolean force_baseline) -/* Define a quantization table equal to the basic_table times - * a scale factor (given as a percentage). - * If force_baseline is TRUE, the computed quantization table entries - * are limited to 1..255 for JPEG baseline compatibility. - */ -{ - JQUANT_TBL ** qtblptr = & cinfo->quant_tbl_ptrs[which_tbl]; - int i; - long temp; - - /* Safety check to ensure start_compress not called yet. */ - if (cinfo->global_state != CSTATE_START) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - - if (*qtblptr == NULL) - *qtblptr = jpeg_alloc_quant_table((j_common_ptr) cinfo); - - for (i = 0; i < DCTSIZE2; i++) { - temp = ((long) basic_table[i] * scale_factor + 50L) / 100L; - /* limit the values to the valid range */ - if (temp <= 0L) temp = 1L; - if (temp > 32767L) temp = 32767L; /* max quantizer needed for 12 bits */ - if (force_baseline && temp > 255L) - temp = 255L; /* limit to baseline range if requested */ - (*qtblptr)->quantval[i] = (UINT16) temp; - } - - /* Initialize sent_table FALSE so table will be written to JPEG file. */ - (*qtblptr)->sent_table = FALSE; -} - - -GLOBAL void -jpeg_set_linear_quality (j_compress_ptr cinfo, int scale_factor, - boolean force_baseline) -/* Set or change the 'quality' (quantization) setting, using default tables - * and a straight percentage-scaling quality scale. In most cases it's better - * to use jpeg_set_quality (below); this entry point is provided for - * applications that insist on a linear percentage scaling. - */ -{ - /* This is the sample quantization table given in the JPEG spec section K.1, - * but expressed in zigzag order (as are all of our quant. tables). - * The spec says that the values given produce "good" quality, and - * when divided by 2, "very good" quality. - */ - static const unsigned int std_luminance_quant_tbl[DCTSIZE2] = { - 16, 11, 12, 14, 12, 10, 16, 14, - 13, 14, 18, 17, 16, 19, 24, 40, - 26, 24, 22, 22, 24, 49, 35, 37, - 29, 40, 58, 51, 61, 60, 57, 51, - 56, 55, 64, 72, 92, 78, 64, 68, - 87, 69, 55, 56, 80, 109, 81, 87, - 95, 98, 103, 104, 103, 62, 77, 113, - 121, 112, 100, 120, 92, 101, 103, 99 - }; - static const unsigned int std_chrominance_quant_tbl[DCTSIZE2] = { - 17, 18, 18, 24, 21, 24, 47, 26, - 26, 47, 99, 66, 56, 66, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99 - }; - - /* Set up two quantization tables using the specified scaling */ - jpeg_add_quant_table(cinfo, 0, std_luminance_quant_tbl, - scale_factor, force_baseline); - jpeg_add_quant_table(cinfo, 1, std_chrominance_quant_tbl, - scale_factor, force_baseline); -} - - -GLOBAL int -jpeg_quality_scaling (int quality) -/* Convert a user-specified quality rating to a percentage scaling factor - * for an underlying quantization table, using our recommended scaling curve. - * The input 'quality' factor should be 0 (terrible) to 100 (very good). - */ -{ - /* Safety limit on quality factor. Convert 0 to 1 to avoid zero divide. */ - if (quality <= 0) quality = 1; - if (quality > 100) quality = 100; - - /* The basic table is used as-is (scaling 100) for a quality of 50. - * Qualities 50..100 are converted to scaling percentage 200 - 2*Q; - * note that at Q=100 the scaling is 0, which will cause j_add_quant_table - * to make all the table entries 1 (hence, no quantization loss). - * Qualities 1..50 are converted to scaling percentage 5000/Q. - */ - if (quality < 50) - quality = 5000 / quality; - else - quality = 200 - quality*2; - - return quality; -} - - -GLOBAL void -jpeg_set_quality (j_compress_ptr cinfo, int quality, boolean force_baseline) -/* Set or change the 'quality' (quantization) setting, using default tables. - * This is the standard quality-adjusting entry point for typical user - * interfaces; only those who want detailed control over quantization tables - * would use the preceding three routines directly. - */ -{ - /* Convert user 0-100 rating to percentage scaling */ - quality = jpeg_quality_scaling(quality); - - /* Set up standard quality tables */ - jpeg_set_linear_quality(cinfo, quality, force_baseline); -} - - -/* - * Huffman table setup routines - */ - -LOCAL void -add_huff_table (j_compress_ptr cinfo, - JHUFF_TBL **htblptr, const UINT8 *bits, const UINT8 *val) -/* Define a Huffman table */ -{ - if (*htblptr == NULL) - *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo); - - MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits)); - MEMCOPY((*htblptr)->huffval, val, SIZEOF((*htblptr)->huffval)); - - /* Initialize sent_table FALSE so table will be written to JPEG file. */ - (*htblptr)->sent_table = FALSE; -} - - -LOCAL void -std_huff_tables (j_compress_ptr cinfo) -/* Set up the standard Huffman tables (cf. JPEG standard section K.3) */ -/* IMPORTANT: these are only valid for 8-bit data precision! */ -{ - static const UINT8 bits_dc_luminance[17] = - { /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }; - static const UINT8 val_dc_luminance[] = - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; - - static const UINT8 bits_dc_chrominance[17] = - { /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 }; - static const UINT8 val_dc_chrominance[] = - { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; - - static const UINT8 bits_ac_luminance[17] = - { /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d }; - static const UINT8 val_ac_luminance[] = - { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, - 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, - 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, - 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, - 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, - 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, - 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, - 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, - 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, - 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, - 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, - 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, - 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, - 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, - 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, - 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, - 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, - 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, - 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, - 0xf9, 0xfa }; - - static const UINT8 bits_ac_chrominance[17] = - { /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77 }; - static const UINT8 val_ac_chrominance[] = - { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, - 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, - 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, - 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, - 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, - 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, - 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, - 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, - 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, - 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, - 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, - 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, - 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, - 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, - 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, - 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, - 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, - 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, - 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, - 0xf9, 0xfa }; - - add_huff_table(cinfo, &cinfo->dc_huff_tbl_ptrs[0], - bits_dc_luminance, val_dc_luminance); - add_huff_table(cinfo, &cinfo->ac_huff_tbl_ptrs[0], - bits_ac_luminance, val_ac_luminance); - add_huff_table(cinfo, &cinfo->dc_huff_tbl_ptrs[1], - bits_dc_chrominance, val_dc_chrominance); - add_huff_table(cinfo, &cinfo->ac_huff_tbl_ptrs[1], - bits_ac_chrominance, val_ac_chrominance); -} - - -/* - * Default parameter setup for compression. - * - * Applications that don't choose to use this routine must do their - * own setup of all these parameters. Alternately, you can call this - * to establish defaults and then alter parameters selectively. This - * is the recommended approach since, if we add any new parameters, - * your code will still work (they'll be set to reasonable defaults). - */ - -GLOBAL void -jpeg_set_defaults (j_compress_ptr cinfo) -{ - int i; - - /* Safety check to ensure start_compress not called yet. */ - if (cinfo->global_state != CSTATE_START) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - - /* Allocate comp_info array large enough for maximum component count. - * Array is made permanent in case application wants to compress - * multiple images at same param settings. - */ - if (cinfo->comp_info == NULL) - cinfo->comp_info = (jpeg_component_info *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, - MAX_COMPONENTS * SIZEOF(jpeg_component_info)); - - /* Initialize everything not dependent on the color space */ - - cinfo->data_precision = BITS_IN_JSAMPLE; - /* Set up two quantization tables using default quality of 75 */ - jpeg_set_quality(cinfo, 75, TRUE); - /* Set up two Huffman tables */ - std_huff_tables(cinfo); - - /* Initialize default arithmetic coding conditioning */ - for (i = 0; i < NUM_ARITH_TBLS; i++) { - cinfo->arith_dc_L[i] = 0; - cinfo->arith_dc_U[i] = 1; - cinfo->arith_ac_K[i] = 5; - } - - /* Expect normal source image, not raw downsampled data */ - cinfo->raw_data_in = FALSE; - - /* Use Huffman coding, not arithmetic coding, by default */ - cinfo->arith_code = FALSE; - - /* Color images are interleaved by default */ - cinfo->interleave = TRUE; - - /* By default, don't do extra passes to optimize entropy coding */ - cinfo->optimize_coding = FALSE; - /* The standard Huffman tables are only valid for 8-bit data precision. - * If the precision is higher, force optimization on so that usable - * tables will be computed. This test can be removed if default tables - * are supplied that are valid for the desired precision. - */ - if (cinfo->data_precision > 8) - cinfo->optimize_coding = TRUE; - - /* By default, use the simpler non-cosited sampling alignment */ - cinfo->CCIR601_sampling = FALSE; - - /* No input smoothing */ - cinfo->smoothing_factor = 0; - - /* DCT algorithm preference */ - cinfo->dct_method = JDCT_DEFAULT; - - /* No restart markers */ - cinfo->restart_interval = 0; - cinfo->restart_in_rows = 0; - - /* Fill in default JFIF marker parameters. Note that whether the marker - * will actually be written is determined by jpeg_set_colorspace. - */ - cinfo->density_unit = 0; /* Pixel size is unknown by default */ - cinfo->X_density = 1; /* Pixel aspect ratio is square by default */ - cinfo->Y_density = 1; - - /* Choose JPEG colorspace based on input space, set defaults accordingly */ - - jpeg_default_colorspace(cinfo); -} - - -/* - * Select an appropriate JPEG colorspace for in_color_space. - */ - -GLOBAL void -jpeg_default_colorspace (j_compress_ptr cinfo) -{ - switch (cinfo->in_color_space) { - case JCS_GRAYSCALE: - jpeg_set_colorspace(cinfo, JCS_GRAYSCALE); - break; - case JCS_RGB: - jpeg_set_colorspace(cinfo, JCS_YCbCr); - break; - case JCS_YCbCr: - jpeg_set_colorspace(cinfo, JCS_YCbCr); - break; - case JCS_CMYK: - jpeg_set_colorspace(cinfo, JCS_CMYK); /* By default, no translation */ - break; - case JCS_YCCK: - jpeg_set_colorspace(cinfo, JCS_YCCK); - break; - case JCS_UNKNOWN: - jpeg_set_colorspace(cinfo, JCS_UNKNOWN); - break; - default: - ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); - } -} - - -/* - * Set the JPEG colorspace, and choose colorspace-dependent default values. - */ - -GLOBAL void -jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace) -{ - jpeg_component_info * compptr; - int ci; - -#define SET_COMP(index,id,hsamp,vsamp,quant,dctbl,actbl) \ - (compptr = &cinfo->comp_info[index], \ - compptr->component_index = (index), \ - compptr->component_id = (id), \ - compptr->h_samp_factor = (hsamp), \ - compptr->v_samp_factor = (vsamp), \ - compptr->quant_tbl_no = (quant), \ - compptr->dc_tbl_no = (dctbl), \ - compptr->ac_tbl_no = (actbl) ) - - /* Safety check to ensure start_compress not called yet. */ - if (cinfo->global_state != CSTATE_START) - ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state); - - /* For all colorspaces, we use Q and Huff tables 0 for luminance components, - * tables 1 for chrominance components. - */ - - cinfo->jpeg_color_space = colorspace; - - cinfo->write_JFIF_header = FALSE; /* No marker for non-JFIF colorspaces */ - cinfo->write_Adobe_marker = FALSE; /* write no Adobe marker by default */ - - switch (colorspace) { - case JCS_GRAYSCALE: - cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */ - cinfo->num_components = 1; - /* JFIF specifies component ID 1 */ - SET_COMP(0, 1, 1,1, 0, 0,0); - break; - case JCS_RGB: - cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag RGB */ - cinfo->num_components = 3; - SET_COMP(0, 'R', 1,1, 0, 0,0); - SET_COMP(1, 'G', 1,1, 0, 0,0); - SET_COMP(2, 'B', 1,1, 0, 0,0); - break; - case JCS_YCbCr: - cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */ - cinfo->num_components = 3; - /* JFIF specifies component IDs 1,2,3 */ - /* We default to 2x2 subsamples of chrominance */ - SET_COMP(0, 1, 2,2, 0, 0,0); - SET_COMP(1, 2, 1,1, 1, 1,1); - SET_COMP(2, 3, 1,1, 1, 1,1); - break; - case JCS_CMYK: - cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag CMYK */ - cinfo->num_components = 4; - SET_COMP(0, 'C', 1,1, 0, 0,0); - SET_COMP(1, 'M', 1,1, 0, 0,0); - SET_COMP(2, 'Y', 1,1, 0, 0,0); - SET_COMP(3, 'K', 1,1, 0, 0,0); - break; - case JCS_YCCK: - cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag YCCK */ - cinfo->num_components = 4; - SET_COMP(0, 1, 2,2, 0, 0,0); - SET_COMP(1, 2, 1,1, 1, 1,1); - SET_COMP(2, 3, 1,1, 1, 1,1); - SET_COMP(3, 4, 2,2, 0, 0,0); - break; - case JCS_UNKNOWN: - cinfo->num_components = cinfo->input_components; - if (cinfo->num_components < 1 || cinfo->num_components > MAX_COMPONENTS) - ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components, - MAX_COMPONENTS); - for (ci = 0; ci < cinfo->num_components; ci++) { - SET_COMP(ci, ci, 1,1, 0, 0,0); - } - break; - default: - ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - } -} diff --git a/jpeg/jcprepct.c b/jpeg/jcprepct.c deleted file mode 100644 index 7e6094623eaf1ae5e44d21383310140746d11314..0000000000000000000000000000000000000000 --- a/jpeg/jcprepct.c +++ /dev/null @@ -1,371 +0,0 @@ -/* - * jcprepct.c - * - * Copyright (C) 1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains the compression preprocessing controller. - * This controller manages the color conversion, downsampling, - * and edge expansion steps. - * - * Most of the complexity here is associated with buffering input rows - * as required by the downsampler. See the comments at the head of - * jcsample.c for the downsampler's needs. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* At present, jcsample.c can request context rows only for smoothing. - * In the future, we might also need context rows for CCIR601 sampling - * or other more-complex downsampling procedures. The code to support - * context rows should be compiled only if needed. - */ -#ifdef INPUT_SMOOTHING_SUPPORTED -#define CONTEXT_ROWS_SUPPORTED -#endif - - -/* - * For the simple (no-context-row) case, we just need to buffer one - * row group's worth of pixels for the downsampling step. At the bottom of - * the image, we pad to a full row group by replicating the last pixel row. - * The downsampler's last output row is then replicated if needed to pad - * out to a full iMCU row. - * - * When providing context rows, we must buffer three row groups' worth of - * pixels. Three row groups are physically allocated, but the row pointer - * arrays are made five row groups high, with the extra pointers above and - * below "wrapping around" to point to the last and first real row groups. - * This allows the downsampler to access the proper context rows. - * At the top and bottom of the image, we create dummy context rows by - * copying the first or last real pixel row. This copying could be avoided - * by pointer hacking as is done in jdmainct.c, but it doesn't seem worth the - * trouble on the compression side. - */ - - -/* Private buffer controller object */ - -typedef struct { - struct jpeg_c_prep_controller pub; /* public fields */ - - /* Downsampling input buffer. This buffer holds color-converted data - * until we have enough to do a downsample step. - */ - JSAMPARRAY color_buf[MAX_COMPONENTS]; - - JDIMENSION rows_to_go; /* counts rows remaining in source image */ - int next_buf_row; /* index of next row to store in color_buf */ - -#ifdef CONTEXT_ROWS_SUPPORTED /* only needed for context case */ - int this_row_group; /* starting row index of group to process */ - int next_buf_stop; /* downsample when we reach this index */ -#endif -} my_prep_controller; - -typedef my_prep_controller * my_prep_ptr; - - -/* - * Initialize for a processing pass. - */ - -METHODDEF void -start_pass_prep (j_compress_ptr cinfo, J_BUF_MODE pass_mode) -{ - my_prep_ptr prep = (my_prep_ptr) cinfo->prep; - - if (pass_mode != JBUF_PASS_THRU) - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - - /* Initialize total-height counter for detecting bottom of image */ - prep->rows_to_go = cinfo->image_height; - /* Mark the conversion buffer empty */ - prep->next_buf_row = 0; -#ifdef CONTEXT_ROWS_SUPPORTED - /* Preset additional state variables for context mode. - * These aren't used in non-context mode, so we needn't test which mode. - */ - prep->this_row_group = 0; - /* Set next_buf_stop to stop after two row groups have been read in. */ - prep->next_buf_stop = 2 * cinfo->max_v_samp_factor; -#endif -} - - -/* - * Expand an image vertically from height input_rows to height output_rows, - * by duplicating the bottom row. - */ - -LOCAL void -expand_bottom_edge (JSAMPARRAY image_data, JDIMENSION num_cols, - int input_rows, int output_rows) -{ - register int row; - - for (row = input_rows; row < output_rows; row++) { - jcopy_sample_rows(image_data, input_rows-1, image_data, row, - 1, num_cols); - } -} - - -/* - * Process some data in the simple no-context case. - * - * Preprocessor output data is counted in "row groups". A row group - * is defined to be v_samp_factor sample rows of each component. - * Downsampling will produce this much data from each max_v_samp_factor - * input rows. - */ - -METHODDEF void -pre_process_data (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, - JDIMENSION in_rows_avail, - JSAMPIMAGE output_buf, JDIMENSION *out_row_group_ctr, - JDIMENSION out_row_groups_avail) -{ - my_prep_ptr prep = (my_prep_ptr) cinfo->prep; - int numrows, ci; - JDIMENSION inrows; - jpeg_component_info * compptr; - - while (*in_row_ctr < in_rows_avail && - *out_row_group_ctr < out_row_groups_avail) { - /* Do color conversion to fill the conversion buffer. */ - inrows = in_rows_avail - *in_row_ctr; - numrows = cinfo->max_v_samp_factor - prep->next_buf_row; - numrows = (int) MIN((JDIMENSION) numrows, inrows); - (*cinfo->cconvert->color_convert) (cinfo, input_buf + *in_row_ctr, - prep->color_buf, - (JDIMENSION) prep->next_buf_row, - numrows); - *in_row_ctr += numrows; - prep->next_buf_row += numrows; - prep->rows_to_go -= numrows; - /* If at bottom of image, pad to fill the conversion buffer. */ - if (prep->rows_to_go == 0 && - prep->next_buf_row < cinfo->max_v_samp_factor) { - for (ci = 0; ci < cinfo->num_components; ci++) { - expand_bottom_edge(prep->color_buf[ci], cinfo->image_width, - prep->next_buf_row, cinfo->max_v_samp_factor); - } - prep->next_buf_row = cinfo->max_v_samp_factor; - } - /* If we've filled the conversion buffer, empty it. */ - if (prep->next_buf_row == cinfo->max_v_samp_factor) { - (*cinfo->downsample->downsample) (cinfo, - prep->color_buf, (JDIMENSION) 0, - output_buf, *out_row_group_ctr); - prep->next_buf_row = 0; - (*out_row_group_ctr)++; - } - /* If at bottom of image, pad the output to a full iMCU height. - * Note we assume the caller is providing a one-iMCU-height output buffer! - */ - if (prep->rows_to_go == 0 && - *out_row_group_ctr < out_row_groups_avail) { - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - expand_bottom_edge(output_buf[ci], - compptr->width_in_blocks * DCTSIZE, - (int) (*out_row_group_ctr * compptr->v_samp_factor), - (int) (out_row_groups_avail * compptr->v_samp_factor)); - } - *out_row_group_ctr = out_row_groups_avail; - break; /* can exit outer loop without test */ - } - } -} - - -#ifdef CONTEXT_ROWS_SUPPORTED - -/* - * Process some data in the context case. - */ - -METHODDEF void -pre_process_context (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, - JDIMENSION in_rows_avail, - JSAMPIMAGE output_buf, JDIMENSION *out_row_group_ctr, - JDIMENSION out_row_groups_avail) -{ - my_prep_ptr prep = (my_prep_ptr) cinfo->prep; - int numrows, ci; - int buf_height = cinfo->max_v_samp_factor * 3; - JDIMENSION inrows; - jpeg_component_info * compptr; - - while (*out_row_group_ctr < out_row_groups_avail) { - if (*in_row_ctr < in_rows_avail) { - /* Do color conversion to fill the conversion buffer. */ - inrows = in_rows_avail - *in_row_ctr; - numrows = prep->next_buf_stop - prep->next_buf_row; - numrows = (int) MIN((JDIMENSION) numrows, inrows); - (*cinfo->cconvert->color_convert) (cinfo, input_buf + *in_row_ctr, - prep->color_buf, - (JDIMENSION) prep->next_buf_row, - numrows); - /* Pad at top of image, if first time through */ - if (prep->rows_to_go == cinfo->image_height) { - for (ci = 0; ci < cinfo->num_components; ci++) { - int row; - for (row = 1; row <= cinfo->max_v_samp_factor; row++) { - jcopy_sample_rows(prep->color_buf[ci], 0, - prep->color_buf[ci], -row, - 1, cinfo->image_width); - } - } - } - *in_row_ctr += numrows; - prep->next_buf_row += numrows; - prep->rows_to_go -= numrows; - } else { - /* Return for more data, unless we are at the bottom of the image. */ - if (prep->rows_to_go != 0) - break; - } - /* If at bottom of image, pad to fill the conversion buffer. */ - if (prep->rows_to_go == 0 && - prep->next_buf_row < prep->next_buf_stop) { - for (ci = 0; ci < cinfo->num_components; ci++) { - expand_bottom_edge(prep->color_buf[ci], cinfo->image_width, - prep->next_buf_row, prep->next_buf_stop); - } - prep->next_buf_row = prep->next_buf_stop; - } - /* If we've gotten enough data, downsample a row group. */ - if (prep->next_buf_row == prep->next_buf_stop) { - (*cinfo->downsample->downsample) (cinfo, - prep->color_buf, - (JDIMENSION) prep->this_row_group, - output_buf, *out_row_group_ctr); - (*out_row_group_ctr)++; - /* Advance pointers with wraparound as necessary. */ - prep->this_row_group += cinfo->max_v_samp_factor; - if (prep->this_row_group >= buf_height) - prep->this_row_group = 0; - if (prep->next_buf_row >= buf_height) - prep->next_buf_row = 0; - prep->next_buf_stop = prep->next_buf_row + cinfo->max_v_samp_factor; - } - /* If at bottom of image, pad the output to a full iMCU height. - * Note we assume the caller is providing a one-iMCU-height output buffer! - */ - if (prep->rows_to_go == 0 && - *out_row_group_ctr < out_row_groups_avail) { - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - expand_bottom_edge(output_buf[ci], - compptr->width_in_blocks * DCTSIZE, - (int) (*out_row_group_ctr * compptr->v_samp_factor), - (int) (out_row_groups_avail * compptr->v_samp_factor)); - } - *out_row_group_ctr = out_row_groups_avail; - break; /* can exit outer loop without test */ - } - } -} - - -/* - * Create the wrapped-around downsampling input buffer needed for context mode. - */ - -LOCAL void -create_context_buffer (j_compress_ptr cinfo) -{ - my_prep_ptr prep = (my_prep_ptr) cinfo->prep; - int rgroup_height = cinfo->max_v_samp_factor; - int ci, i; - jpeg_component_info * compptr; - JSAMPARRAY true_buffer, fake_buffer; - - /* Grab enough space for fake row pointers for all the components; - * we need five row groups' worth of pointers for each component. - */ - fake_buffer = (JSAMPARRAY) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (cinfo->num_components * 5 * rgroup_height) * - SIZEOF(JSAMPROW)); - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - /* Allocate the actual buffer space (3 row groups) for this component. - * We make the buffer wide enough to allow the downsampler to edge-expand - * horizontally within the buffer, if it so chooses. - */ - true_buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) (((long) compptr->width_in_blocks * DCTSIZE * - cinfo->max_h_samp_factor) / compptr->h_samp_factor), - (JDIMENSION) (3 * rgroup_height)); - /* Copy true buffer row pointers into the middle of the fake row array */ - MEMCOPY(fake_buffer + rgroup_height, true_buffer, - 3 * rgroup_height * SIZEOF(JSAMPROW)); - /* Fill in the above and below wraparound pointers */ - for (i = 0; i < rgroup_height; i++) { - fake_buffer[i] = true_buffer[2 * rgroup_height + i]; - fake_buffer[4 * rgroup_height + i] = true_buffer[i]; - } - prep->color_buf[ci] = fake_buffer + rgroup_height; - fake_buffer += 5 * rgroup_height; /* point to space for next component */ - } -} - -#endif /* CONTEXT_ROWS_SUPPORTED */ - - -/* - * Initialize preprocessing controller. - */ - -GLOBAL void -jinit_c_prep_controller (j_compress_ptr cinfo, boolean need_full_buffer) -{ - my_prep_ptr prep; - int ci; - jpeg_component_info * compptr; - - if (need_full_buffer) /* safety check */ - ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - - prep = (my_prep_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_prep_controller)); - cinfo->prep = (struct jpeg_c_prep_controller *) prep; - prep->pub.start_pass = start_pass_prep; - - /* Allocate the color conversion buffer. - * We make the buffer wide enough to allow the downsampler to edge-expand - * horizontally within the buffer, if it so chooses. - */ - if (cinfo->downsample->need_context_rows) { - /* Set up to provide context rows */ -#ifdef CONTEXT_ROWS_SUPPORTED - prep->pub.pre_process_data = pre_process_context; - create_context_buffer(cinfo); -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif - } else { - /* No context, just make it tall enough for one row group */ - prep->pub.pre_process_data = pre_process_data; - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - prep->color_buf[ci] = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) (((long) compptr->width_in_blocks * DCTSIZE * - cinfo->max_h_samp_factor) / compptr->h_samp_factor), - (JDIMENSION) cinfo->max_v_samp_factor); - } - } -} diff --git a/jpeg/jcsample.c b/jpeg/jcsample.c deleted file mode 100644 index bf0fb46bbfee155b5b7cfbbb66c17bd09d66ab94..0000000000000000000000000000000000000000 --- a/jpeg/jcsample.c +++ /dev/null @@ -1,519 +0,0 @@ -/* - * jcsample.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains downsampling routines. - * - * Downsampling input data is counted in "row groups". A row group - * is defined to be max_v_samp_factor pixel rows of each component, - * from which the downsampler produces v_samp_factor sample rows. - * A single row group is processed in each call to the downsampler module. - * - * The downsampler is responsible for edge-expansion of its output data - * to fill an integral number of DCT blocks horizontally. The source buffer - * may be modified if it is helpful for this purpose (the source buffer is - * allocated wide enough to correspond to the desired output width). - * The caller (the prep controller) is responsible for vertical padding. - * - * The downsampler may request "context rows" by setting need_context_rows - * during startup. In this case, the input arrays will contain at least - * one row group's worth of pixels above and below the passed-in data; - * the caller will create dummy rows at image top and bottom by replicating - * the first or last real pixel row. - * - * An excellent reference for image resampling is - * Digital Image Warping, George Wolberg, 1990. - * Pub. by IEEE Computer Society Press, Los Alamitos, CA. ISBN 0-8186-8944-7. - * - * The downsampling algorithm used here is a simple average of the source - * pixels covered by the output pixel. The hi-falutin sampling literature - * refers to this as a "box filter". In general the characteristics of a box - * filter are not very good, but for the specific cases we normally use (1:1 - * and 2:1 ratios) the box is equivalent to a "triangle filter" which is not - * nearly so bad. If you intend to use other sampling ratios, you'd be well - * advised to improve this code. - * - * A simple input-smoothing capability is provided. This is mainly intended - * for cleaning up color-dithered GIF input files (if you find it inadequate, - * we suggest using an external filtering program such as pnmconvol). When - * enabled, each input pixel P is replaced by a weighted sum of itself and its - * eight neighbors. P's weight is 1-8*SF and each neighbor's weight is SF, - * where SF = (smoothing_factor / 1024). - * Currently, smoothing is only supported for 2h2v sampling factors. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* Pointer to routine to downsample a single component */ -typedef JMETHOD(void, downsample1_ptr, - (j_compress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY output_data)); - -/* Private subobject */ - -typedef struct { - struct jpeg_downsampler pub; /* public fields */ - - /* Downsampling method pointers, one per component */ - downsample1_ptr methods[MAX_COMPONENTS]; -} my_downsampler; - -typedef my_downsampler * my_downsample_ptr; - - -/* - * Initialize for a downsampling pass. - */ - -METHODDEF void -start_pass_downsample (j_compress_ptr cinfo) -{ - /* no work for now */ -} - - -/* - * Expand a component horizontally from width input_cols to width output_cols, - * by duplicating the rightmost samples. - */ - -LOCAL void -expand_right_edge (JSAMPARRAY image_data, int num_rows, - JDIMENSION input_cols, JDIMENSION output_cols) -{ - register JSAMPROW ptr; - register JSAMPLE pixval; - register int count; - int row; - int numcols = (int) (output_cols - input_cols); - - if (numcols > 0) { - for (row = 0; row < num_rows; row++) { - ptr = image_data[row] + input_cols; - pixval = ptr[-1]; /* don't need GETJSAMPLE() here */ - for (count = numcols; count > 0; count--) - *ptr++ = pixval; - } - } -} - - -/* - * Do downsampling for a whole row group (all components). - * - * In this version we simply downsample each component independently. - */ - -METHODDEF void -sep_downsample (j_compress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION in_row_index, - JSAMPIMAGE output_buf, JDIMENSION out_row_group_index) -{ - my_downsample_ptr downsample = (my_downsample_ptr) cinfo->downsample; - int ci; - jpeg_component_info * compptr; - JSAMPARRAY in_ptr, out_ptr; - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - in_ptr = input_buf[ci] + in_row_index; - out_ptr = output_buf[ci] + (out_row_group_index * compptr->v_samp_factor); - (*downsample->methods[ci]) (cinfo, compptr, in_ptr, out_ptr); - } -} - - -/* - * Downsample pixel values of a single component. - * One row group is processed per call. - * This version handles arbitrary integral sampling ratios, without smoothing. - * Note that this version is not actually used for customary sampling ratios. - */ - -METHODDEF void -int_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY output_data) -{ - int inrow, outrow, h_expand, v_expand, numpix, numpix2, h, v; - JDIMENSION outcol, outcol_h; /* outcol_h == outcol*h_expand */ - JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; - JSAMPROW inptr, outptr; - INT32 outvalue; - - h_expand = cinfo->max_h_samp_factor / compptr->h_samp_factor; - v_expand = cinfo->max_v_samp_factor / compptr->v_samp_factor; - numpix = h_expand * v_expand; - numpix2 = numpix/2; - - /* Expand input data enough to let all the output samples be generated - * by the standard loop. Special-casing padded output would be more - * efficient. - */ - expand_right_edge(input_data, cinfo->max_v_samp_factor, - cinfo->image_width, output_cols * h_expand); - - inrow = 0; - for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { - outptr = output_data[outrow]; - for (outcol = 0, outcol_h = 0; outcol < output_cols; - outcol++, outcol_h += h_expand) { - outvalue = 0; - for (v = 0; v < v_expand; v++) { - inptr = input_data[inrow+v] + outcol_h; - for (h = 0; h < h_expand; h++) { - outvalue += (INT32) GETJSAMPLE(*inptr++); - } - } - *outptr++ = (JSAMPLE) ((outvalue + numpix2) / numpix); - } - inrow += v_expand; - } -} - - -/* - * Downsample pixel values of a single component. - * This version handles the special case of a full-size component, - * without smoothing. - */ - -METHODDEF void -fullsize_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY output_data) -{ - /* Copy the data */ - jcopy_sample_rows(input_data, 0, output_data, 0, - cinfo->max_v_samp_factor, cinfo->image_width); - /* Edge-expand */ - expand_right_edge(output_data, cinfo->max_v_samp_factor, - cinfo->image_width, compptr->width_in_blocks * DCTSIZE); -} - - -/* - * Downsample pixel values of a single component. - * This version handles the common case of 2:1 horizontal and 1:1 vertical, - * without smoothing. - * - * A note about the "bias" calculations: when rounding fractional values to - * integer, we do not want to always round 0.5 up to the next integer. - * If we did that, we'd introduce a noticeable bias towards larger values. - * Instead, this code is arranged so that 0.5 will be rounded up or down at - * alternate pixel locations (a simple ordered dither pattern). - */ - -METHODDEF void -h2v1_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY output_data) -{ - int outrow; - JDIMENSION outcol; - JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; - register JSAMPROW inptr, outptr; - register int bias; - - /* Expand input data enough to let all the output samples be generated - * by the standard loop. Special-casing padded output would be more - * efficient. - */ - expand_right_edge(input_data, cinfo->max_v_samp_factor, - cinfo->image_width, output_cols * 2); - - for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { - outptr = output_data[outrow]; - inptr = input_data[outrow]; - bias = 0; /* bias = 0,1,0,1,... for successive samples */ - for (outcol = 0; outcol < output_cols; outcol++) { - *outptr++ = (JSAMPLE) ((GETJSAMPLE(*inptr) + GETJSAMPLE(inptr[1]) - + bias) >> 1); - bias ^= 1; /* 0=>1, 1=>0 */ - inptr += 2; - } - } -} - - -/* - * Downsample pixel values of a single component. - * This version handles the standard case of 2:1 horizontal and 2:1 vertical, - * without smoothing. - */ - -METHODDEF void -h2v2_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY output_data) -{ - int inrow, outrow; - JDIMENSION outcol; - JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; - register JSAMPROW inptr0, inptr1, outptr; - register int bias; - - /* Expand input data enough to let all the output samples be generated - * by the standard loop. Special-casing padded output would be more - * efficient. - */ - expand_right_edge(input_data, cinfo->max_v_samp_factor, - cinfo->image_width, output_cols * 2); - - inrow = 0; - for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { - outptr = output_data[outrow]; - inptr0 = input_data[inrow]; - inptr1 = input_data[inrow+1]; - bias = 1; /* bias = 1,2,1,2,... for successive samples */ - for (outcol = 0; outcol < output_cols; outcol++) { - *outptr++ = (JSAMPLE) ((GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + - GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]) - + bias) >> 2); - bias ^= 3; /* 1=>2, 2=>1 */ - inptr0 += 2; inptr1 += 2; - } - inrow += 2; - } -} - - -#ifdef INPUT_SMOOTHING_SUPPORTED - -/* - * Downsample pixel values of a single component. - * This version handles the standard case of 2:1 horizontal and 2:1 vertical, - * with smoothing. One row of context is required. - */ - -METHODDEF void -h2v2_smooth_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr, - JSAMPARRAY input_data, JSAMPARRAY output_data) -{ - int inrow, outrow; - JDIMENSION colctr; - JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; - register JSAMPROW inptr0, inptr1, above_ptr, below_ptr, outptr; - INT32 membersum, neighsum, memberscale, neighscale; - - /* Expand input data enough to let all the output samples be generated - * by the standard loop. Special-casing padded output would be more - * efficient. - */ - expand_right_edge(input_data - 1, cinfo->max_v_samp_factor + 2, - cinfo->image_width, output_cols * 2); - - /* We don't bother to form the individual "smoothed" input pixel values; - * we can directly compute the output which is the average of the four - * smoothed values. Each of the four member pixels contributes a fraction - * (1-8*SF) to its own smoothed image and a fraction SF to each of the three - * other smoothed pixels, therefore a total fraction (1-5*SF)/4 to the final - * output. The four corner-adjacent neighbor pixels contribute a fraction - * SF to just one smoothed pixel, or SF/4 to the final output; while the - * eight edge-adjacent neighbors contribute SF to each of two smoothed - * pixels, or SF/2 overall. In order to use integer arithmetic, these - * factors are scaled by 2^16 = 65536. - * Also recall that SF = smoothing_factor / 1024. - */ - - memberscale = 16384 - cinfo->smoothing_factor * 80; /* scaled (1-5*SF)/4 */ - neighscale = cinfo->smoothing_factor * 16; /* scaled SF/4 */ - - inrow = 0; - for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { - outptr = output_data[outrow]; - inptr0 = input_data[inrow]; - inptr1 = input_data[inrow+1]; - above_ptr = input_data[inrow-1]; - below_ptr = input_data[inrow+2]; - - /* Special case for first column: pretend column -1 is same as column 0 */ - membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + - GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]); - neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) + - GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) + - GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[2]) + - GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[2]); - neighsum += neighsum; - neighsum += GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[2]) + - GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[2]); - membersum = membersum * memberscale + neighsum * neighscale; - *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); - inptr0 += 2; inptr1 += 2; above_ptr += 2; below_ptr += 2; - - for (colctr = output_cols - 2; colctr > 0; colctr--) { - /* sum of pixels directly mapped to this output element */ - membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + - GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]); - /* sum of edge-neighbor pixels */ - neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) + - GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) + - GETJSAMPLE(inptr0[-1]) + GETJSAMPLE(inptr0[2]) + - GETJSAMPLE(inptr1[-1]) + GETJSAMPLE(inptr1[2]); - /* The edge-neighbors count twice as much as corner-neighbors */ - neighsum += neighsum; - /* Add in the corner-neighbors */ - neighsum += GETJSAMPLE(above_ptr[-1]) + GETJSAMPLE(above_ptr[2]) + - GETJSAMPLE(below_ptr[-1]) + GETJSAMPLE(below_ptr[2]); - /* form final output scaled up by 2^16 */ - membersum = membersum * memberscale + neighsum * neighscale; - /* round, descale and output it */ - *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); - inptr0 += 2; inptr1 += 2; above_ptr += 2; below_ptr += 2; - } - - /* Special case for last column */ - membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) + - GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]); - neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) + - GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) + - GETJSAMPLE(inptr0[-1]) + GETJSAMPLE(inptr0[1]) + - GETJSAMPLE(inptr1[-1]) + GETJSAMPLE(inptr1[1]); - neighsum += neighsum; - neighsum += GETJSAMPLE(above_ptr[-1]) + GETJSAMPLE(above_ptr[1]) + - GETJSAMPLE(below_ptr[-1]) + GETJSAMPLE(below_ptr[1]); - membersum = membersum * memberscale + neighsum * neighscale; - *outptr = (JSAMPLE) ((membersum + 32768) >> 16); - - inrow += 2; - } -} - - -/* - * Downsample pixel values of a single component. - * This version handles the special case of a full-size component, - * with smoothing. One row of context is required. - */ - -METHODDEF void -fullsize_smooth_downsample (j_compress_ptr cinfo, jpeg_component_info *compptr, - JSAMPARRAY input_data, JSAMPARRAY output_data) -{ - int outrow; - JDIMENSION colctr; - JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; - register JSAMPROW inptr, above_ptr, below_ptr, outptr; - INT32 membersum, neighsum, memberscale, neighscale; - int colsum, lastcolsum, nextcolsum; - - /* Expand input data enough to let all the output samples be generated - * by the standard loop. Special-casing padded output would be more - * efficient. - */ - expand_right_edge(input_data - 1, cinfo->max_v_samp_factor + 2, - cinfo->image_width, output_cols); - - /* Each of the eight neighbor pixels contributes a fraction SF to the - * smoothed pixel, while the main pixel contributes (1-8*SF). In order - * to use integer arithmetic, these factors are multiplied by 2^16 = 65536. - * Also recall that SF = smoothing_factor / 1024. - */ - - memberscale = 65536L - cinfo->smoothing_factor * 512L; /* scaled 1-8*SF */ - neighscale = cinfo->smoothing_factor * 64; /* scaled SF */ - - for (outrow = 0; outrow < compptr->v_samp_factor; outrow++) { - outptr = output_data[outrow]; - inptr = input_data[outrow]; - above_ptr = input_data[outrow-1]; - below_ptr = input_data[outrow+1]; - - /* Special case for first column */ - colsum = GETJSAMPLE(*above_ptr++) + GETJSAMPLE(*below_ptr++) + - GETJSAMPLE(*inptr); - membersum = GETJSAMPLE(*inptr++); - nextcolsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(*below_ptr) + - GETJSAMPLE(*inptr); - neighsum = colsum + (colsum - membersum) + nextcolsum; - membersum = membersum * memberscale + neighsum * neighscale; - *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); - lastcolsum = colsum; colsum = nextcolsum; - - for (colctr = output_cols - 2; colctr > 0; colctr--) { - membersum = GETJSAMPLE(*inptr++); - above_ptr++; below_ptr++; - nextcolsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(*below_ptr) + - GETJSAMPLE(*inptr); - neighsum = lastcolsum + (colsum - membersum) + nextcolsum; - membersum = membersum * memberscale + neighsum * neighscale; - *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16); - lastcolsum = colsum; colsum = nextcolsum; - } - - /* Special case for last column */ - membersum = GETJSAMPLE(*inptr); - neighsum = lastcolsum + (colsum - membersum) + colsum; - membersum = membersum * memberscale + neighsum * neighscale; - *outptr = (JSAMPLE) ((membersum + 32768) >> 16); - - } -} - -#endif /* INPUT_SMOOTHING_SUPPORTED */ - - -/* - * Module initialization routine for downsampling. - * Note that we must select a routine for each component. - */ - -GLOBAL void -jinit_downsampler (j_compress_ptr cinfo) -{ - my_downsample_ptr downsample; - int ci; - jpeg_component_info * compptr; - boolean smoothok = TRUE; - - downsample = (my_downsample_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(my_downsampler)); - cinfo->downsample = (struct jpeg_downsampler *) downsample; - downsample->pub.start_pass = start_pass_downsample; - downsample->pub.downsample = sep_downsample; - downsample->pub.need_context_rows = FALSE; - - if (cinfo->CCIR601_sampling) - ERREXIT(cinfo, JERR_CCIR601_NOTIMPL); - - /* Verify we can handle the sampling factors, and set up method pointers */ - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { - if (compptr->h_samp_factor == cinfo->max_h_samp_factor && - compptr->v_samp_factor == cinfo->max_v_samp_factor) { -#ifdef INPUT_SMOOTHING_SUPPORTED - if (cinfo->smoothing_factor) { - downsample->methods[ci] = fullsize_smooth_downsample; - downsample->pub.need_context_rows = TRUE; - } else -#endif - downsample->methods[ci] = fullsize_downsample; - } else if (compptr->h_samp_factor * 2 == cinfo->max_h_samp_factor && - compptr->v_samp_factor == cinfo->max_v_samp_factor) { - smoothok = FALSE; - downsample->methods[ci] = h2v1_downsample; - } else if (compptr->h_samp_factor * 2 == cinfo->max_h_samp_factor && - compptr->v_samp_factor * 2 == cinfo->max_v_samp_factor) { -#ifdef INPUT_SMOOTHING_SUPPORTED - if (cinfo->smoothing_factor) { - downsample->methods[ci] = h2v2_smooth_downsample; - downsample->pub.need_context_rows = TRUE; - } else -#endif - downsample->methods[ci] = h2v2_downsample; - } else if ((cinfo->max_h_samp_factor % compptr->h_samp_factor) == 0 && - (cinfo->max_v_samp_factor % compptr->v_samp_factor) == 0) { - smoothok = FALSE; - downsample->methods[ci] = int_downsample; - } else - ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL); - } - -#ifdef INPUT_SMOOTHING_SUPPORTED - if (cinfo->smoothing_factor && !smoothok) - TRACEMS(cinfo, 0, JTRC_SMOOTH_NOTIMPL); -#endif -} diff --git a/jpeg/jdatadst.c b/jpeg/jdatadst.c deleted file mode 100644 index 08c4dafd50a1e12a0e7a02e313a09ade5cf21b0b..0000000000000000000000000000000000000000 --- a/jpeg/jdatadst.c +++ /dev/null @@ -1,151 +0,0 @@ -/* - * jdatadst.c - * - * Copyright (C) 1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains compression data destination routines for the case of - * emitting JPEG data to a file (or any stdio stream). While these routines - * are sufficient for most applications, some will want to use a different - * destination manager. - * IMPORTANT: we assume that fwrite() will correctly transcribe an array of - * JOCTETs into 8-bit-wide elements on external storage. If char is wider - * than 8 bits on your machine, you may need to do some tweaking. - */ - -/* this is not a core library module, so it doesn't define JPEG_INTERNALS */ -#include "jinclude.h" -#include "jpeglib.h" -#include "jerror.h" - - -/* Expanded data destination object for stdio output */ - -typedef struct { - struct jpeg_destination_mgr pub; /* public fields */ - - FILE * outfile; /* target stream */ - JOCTET * buffer; /* start of buffer */ -} my_destination_mgr; - -typedef my_destination_mgr * my_dest_ptr; - -#define OUTPUT_BUF_SIZE 4096 /* choose an efficiently fwrite'able size */ - - -/* - * Initialize destination --- called by jpeg_start_compress - * before any data is actually written. - */ - -METHODDEF void -init_destination (j_compress_ptr cinfo) -{ - my_dest_ptr dest = (my_dest_ptr) cinfo->dest; - - /* Allocate the output buffer --- it will be released when done with image */ - dest->buffer = (JOCTET *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - OUTPUT_BUF_SIZE * SIZEOF(JOCTET)); - - dest->pub.next_output_byte = dest->buffer; - dest->pub.free_in_buffer = OUTPUT_BUF_SIZE; -} - - -/* - * Empty the output buffer --- called whenever buffer fills up. - * - * In typical applications, this should write the entire output buffer - * (ignoring the current state of next_output_byte & free_in_buffer), - * reset the pointer & count to the start of the buffer, and return TRUE - * indicating that the buffer has been dumped. - * - * In applications that need to be able to suspend compression due to output - * overrun, a FALSE return indicates that the buffer cannot be emptied now. - * In this situation, the compressor will return to its caller (possibly with - * an indication that it has not accepted all the supplied scanlines). The - * application should resume compression after it has made more room in the - * output buffer. Note that there are substantial restrictions on the use of - * suspension --- see the documentation. - * - * When suspending, the compressor will back up to a convenient restart point - * (typically the start of the current MCU). next_output_byte & free_in_buffer - * indicate where the restart point will be if the current call returns FALSE. - * Data beyond this point will be regenerated after resumption, so do not - * write it out when emptying the buffer externally. - */ - -METHODDEF boolean -empty_output_buffer (j_compress_ptr cinfo) -{ - my_dest_ptr dest = (my_dest_ptr) cinfo->dest; - - if (JFWRITE(dest->outfile, dest->buffer, OUTPUT_BUF_SIZE) != - (size_t) OUTPUT_BUF_SIZE) - ERREXIT(cinfo, JERR_FILE_WRITE); - - dest->pub.next_output_byte = dest->buffer; - dest->pub.free_in_buffer = OUTPUT_BUF_SIZE; - - return TRUE; -} - - -/* - * Terminate destination --- called by jpeg_finish_compress - * after all data has been written. Usually needs to flush buffer. - * - * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding - * application must deal with any cleanup that should happen even - * for error exit. - */ - -METHODDEF void -term_destination (j_compress_ptr cinfo) -{ - my_dest_ptr dest = (my_dest_ptr) cinfo->dest; - size_t datacount = OUTPUT_BUF_SIZE - dest->pub.free_in_buffer; - - /* Write any data remaining in the buffer */ - if (datacount > 0) { - if (JFWRITE(dest->outfile, dest->buffer, datacount) != datacount) - ERREXIT(cinfo, JERR_FILE_WRITE); - } - fflush(dest->outfile); - /* Make sure we wrote the output file OK */ - if (ferror(dest->outfile)) - ERREXIT(cinfo, JERR_FILE_WRITE); -} - - -/* - * Prepare for output to a stdio stream. - * The caller must have already opened the stream, and is responsible - * for closing it after finishing compression. - */ - -GLOBAL void -jpeg_stdio_dest (j_compress_ptr cinfo, FILE * outfile) -{ - my_dest_ptr dest; - - /* The destination object is made permanent so that multiple JPEG images - * can be written to the same file without re-executing jpeg_stdio_dest. - * This makes it dangerous to use this manager and a different destination - * manager serially with the same JPEG object, because their private object - * sizes may be different. Caveat programmer. - */ - if (cinfo->dest == NULL) { /* first time for this JPEG object? */ - cinfo->dest = (struct jpeg_destination_mgr *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, - SIZEOF(my_destination_mgr)); - } - - dest = (my_dest_ptr) cinfo->dest; - dest->pub.init_destination = init_destination; - dest->pub.empty_output_buffer = empty_output_buffer; - dest->pub.term_destination = term_destination; - dest->outfile = outfile; -} diff --git a/jpeg/jdct.h b/jpeg/jdct.h deleted file mode 100644 index 3ce790bc8f62e1f584d32fcff3b6e7098fb3c7b6..0000000000000000000000000000000000000000 --- a/jpeg/jdct.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - * jdct.h - * - * Copyright (C) 1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This include file contains common declarations for the forward and - * inverse DCT modules. These declarations are private to the DCT managers - * (jcdctmgr.c, jddctmgr.c) and the individual DCT algorithms. - * The individual DCT algorithms are kept in separate files to ease - * machine-dependent tuning (e.g., assembly coding). - */ - - -/* - * A forward DCT routine is given a pointer to a work area of type DCTELEM[]; - * the DCT is to be performed in-place in that buffer. Type DCTELEM is int - * for 8-bit samples, INT32 for 12-bit samples. (NOTE: Floating-point DCT - * implementations use an array of type FAST_FLOAT, instead.) - * The DCT inputs are expected to be signed (range +-CENTERJSAMPLE). - * The DCT outputs are returned scaled up by a factor of 8; they therefore - * have a range of +-8K for 8-bit data, +-128K for 12-bit data. This - * convention improves accuracy in integer implementations and saves some - * work in floating-point ones. - * Quantization of the output coefficients is done by jcdctmgr.c. - */ - -#if BITS_IN_JSAMPLE == 8 -typedef int DCTELEM; /* 16 or 32 bits is fine */ -#else -typedef INT32 DCTELEM; /* must have 32 bits */ -#endif - -typedef JMETHOD(void, forward_DCT_method_ptr, (DCTELEM * data)); -typedef JMETHOD(void, float_DCT_method_ptr, (FAST_FLOAT * data)); - - -/* - * An inverse DCT routine is given a pointer to the input JBLOCK and a pointer - * to an output sample array. The routine must dequantize the input data as - * well as perform the IDCT; for dequantization, it uses the multiplier table - * pointed to by compptr->dct_table. The output data is to be placed into the - * sample array starting at a specified column. (Any row offset needed will - * be applied to the array pointer before it is passed to the IDCT code.) - * Note that the number of samples emitted by the IDCT routine is - * DCT_scaled_size * DCT_scaled_size. - */ - -/* typedef inverse_DCT_method_ptr is declared in jpegint.h */ - -/* - * Each IDCT routine has its own ideas about the best dct_table element type. - */ - -typedef MULTIPLIER ISLOW_MULT_TYPE; /* short or int, whichever is faster */ -#if BITS_IN_JSAMPLE == 8 -typedef MULTIPLIER IFAST_MULT_TYPE; /* 16 bits is OK, use short if faster */ -#define IFAST_SCALE_BITS 2 /* fractional bits in scale factors */ -#else -typedef INT32 IFAST_MULT_TYPE; /* need 32 bits for scaled quantizers */ -#define IFAST_SCALE_BITS 13 /* fractional bits in scale factors */ -#endif -typedef FAST_FLOAT FLOAT_MULT_TYPE; /* preferred floating type */ - - -/* - * Each IDCT routine is responsible for range-limiting its results and - * converting them to unsigned form (0..MAXJSAMPLE). The raw outputs could - * be quite far out of range if the input data is corrupt, so a bulletproof - * range-limiting step is required. We use a mask-and-table-lookup method - * to do the combined operations quickly. See the comments with - * prepare_range_limit_table (in jdmaster.c) for more info. - */ - -#define IDCT_range_limit(cinfo) ((cinfo)->sample_range_limit + CENTERJSAMPLE) - -#define RANGE_MASK (MAXJSAMPLE * 4 + 3) /* 2 bits wider than legal samples */ - - -/* Short forms of external names for systems with brain-damaged linkers. */ - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jpeg_fdct_islow jFDislow -#define jpeg_fdct_ifast jFDifast -#define jpeg_fdct_float jFDfloat -#define jpeg_idct_islow jRDislow -#define jpeg_idct_ifast jRDifast -#define jpeg_idct_float jRDfloat -#define jpeg_idct_4x4 jRD4x4 -#define jpeg_idct_2x2 jRD2x2 -#define jpeg_idct_1x1 jRD1x1 -#endif /* NEED_SHORT_EXTERNAL_NAMES */ - -/* Extern declarations for the forward and inverse DCT routines. */ - -EXTERN void jpeg_fdct_islow JPP((DCTELEM * data)); -EXTERN void jpeg_fdct_ifast JPP((DCTELEM * data)); -EXTERN void jpeg_fdct_float JPP((FAST_FLOAT * data)); - -EXTERN void jpeg_idct_islow - JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); -EXTERN void jpeg_idct_ifast - JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); -EXTERN void jpeg_idct_float - JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); -EXTERN void jpeg_idct_4x4 - JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); -EXTERN void jpeg_idct_2x2 - JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); -EXTERN void jpeg_idct_1x1 - JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col)); - - -/* - * Macros for handling fixed-point arithmetic; these are used by many - * but not all of the DCT/IDCT modules. - * - * All values are expected to be of type INT32. - * Fractional constants are scaled left by CONST_BITS bits. - * CONST_BITS is defined within each module using these macros, - * and may differ from one module to the next. - */ - -#define ONE ((INT32) 1) -#define CONST_SCALE (ONE << CONST_BITS) - -/* Convert a positive real constant to an integer scaled by CONST_SCALE. - * Caution: some C compilers fail to reduce "FIX(constant)" at compile time, - * thus causing a lot of useless floating-point operations at run time. - */ - -#define FIX(x) ((INT32) ((x) * CONST_SCALE + 0.5)) - -/* Descale and correctly round an INT32 value that's scaled by N bits. - * We assume RIGHT_SHIFT rounds towards minus infinity, so adding - * the fudge factor is correct for either sign of X. - */ - -#define DESCALE(x,n) RIGHT_SHIFT((x) + (ONE << ((n)-1)), n) - -/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. - * This macro is used only when the two inputs will actually be no more than - * 16 bits wide, so that a 16x16->32 bit multiply can be used instead of a - * full 32x32 multiply. This provides a useful speedup on many machines. - * Unfortunately there is no way to specify a 16x16->32 multiply portably - * in C, but some C compilers will do the right thing if you provide the - * correct combination of casts. - */ - -#ifdef SHORTxSHORT_32 /* may work if 'int' is 32 bits */ -#define MULTIPLY16C16(var,const) (((INT16) (var)) * ((INT16) (const))) -#endif -#ifdef SHORTxLCONST_32 /* known to work with Microsoft C 6.0 */ -#define MULTIPLY16C16(var,const) (((INT16) (var)) * ((INT32) (const))) -#endif - -#ifndef MULTIPLY16C16 /* default definition */ -#define MULTIPLY16C16(var,const) ((var) * (const)) -#endif - -/* Same except both inputs are variables. */ - -#ifdef SHORTxSHORT_32 /* may work if 'int' is 32 bits */ -#define MULTIPLY16V16(var1,var2) (((INT16) (var1)) * ((INT16) (var2))) -#endif - -#ifndef MULTIPLY16V16 /* default definition */ -#define MULTIPLY16V16(var1,var2) ((var1) * (var2)) -#endif diff --git a/jpeg/jerror.c b/jpeg/jerror.c deleted file mode 100644 index 690a3d3db9b817f81f4f47d974c106818432d49a..0000000000000000000000000000000000000000 --- a/jpeg/jerror.c +++ /dev/null @@ -1,211 +0,0 @@ -/* - * jerror.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains simple error-reporting and trace-message routines. - * These are suitable for Unix-like systems and others where writing to - * stderr is the right thing to do. Many applications will want to replace - * some or all of these routines. - * - * These routines are used by both the compression and decompression code. - */ - -/* this is not a core library module, so it doesn't define JPEG_INTERNALS */ -#include "jinclude.h" -#include "jpeglib.h" -#include "jversion.h" - -#include "jerror.h" /* get error codes */ -#define JMAKE_MSG_TABLE -#include "jerror.h" /* create message string table */ - -#ifndef EXIT_FAILURE /* define exit() codes if not provided */ -#define EXIT_FAILURE 1 -#endif - - -/* - * Error exit handler: must not return to caller. - * - * Applications may override this if they want to get control back after - * an error. Typically one would longjmp somewhere instead of exiting. - * The setjmp buffer can be made a private field within an expanded error - * handler object. Note that the info needed to generate an error message - * is stored in the error object, so you can generate the message now or - * later, at your convenience. - * You should make sure that the JPEG object is cleaned up (with jpeg_abort - * or jpeg_destroy) at some point. - */ - -METHODDEF void -error_exit (j_common_ptr cinfo) -{ - /* Always display the message */ - (*cinfo->err->output_message) (cinfo); - - /* Let the memory manager delete any temp files before we die */ - jpeg_destroy(cinfo); - - exit(EXIT_FAILURE); -} - - -/* - * Actual output of an error or trace message. - * Applications may override this method to send JPEG messages somewhere - * other than stderr. - */ - -METHODDEF void -output_message (j_common_ptr cinfo) -{ - char buffer[JMSG_LENGTH_MAX]; - - /* Create the message */ - (*cinfo->err->format_message) (cinfo, buffer); - - /* Send it to stderr, adding a newline */ - fprintf(stderr, "%s\n", buffer); -} - - -/* - * Decide whether to emit a trace or warning message. - * msg_level is one of: - * -1: recoverable corrupt-data warning, may want to abort. - * 0: important advisory messages (always display to user). - * 1: first level of tracing detail. - * 2,3,...: successively more detailed tracing messages. - * An application might override this method if it wanted to abort on warnings - * or change the policy about which messages to display. - */ - -METHODDEF void -emit_message (j_common_ptr cinfo, int msg_level) -{ - struct jpeg_error_mgr * err = cinfo->err; - - if (msg_level < 0) { - /* It's a warning message. Since corrupt files may generate many warnings, - * the policy implemented here is to show only the first warning, - * unless trace_level >= 3. - */ - if (err->num_warnings == 0 || err->trace_level >= 3) - (*err->output_message) (cinfo); - /* Always count warnings in num_warnings. */ - err->num_warnings++; - } else { - /* It's a trace message. Show it if trace_level >= msg_level. */ - if (err->trace_level >= msg_level) - (*err->output_message) (cinfo); - } -} - - -/* - * Format a message string for the most recent JPEG error or message. - * The message is stored into buffer, which should be at least JMSG_LENGTH_MAX - * characters. Note that no '\n' character is added to the string. - * Few applications should need to override this method. - */ - -METHODDEF void -format_message (j_common_ptr cinfo, char * buffer) -{ - struct jpeg_error_mgr * err = cinfo->err; - int msg_code = err->msg_code; - const char * msgtext = NULL; - const char * msgptr; - char ch; - boolean isstring; - - /* Look up message string in proper table */ - if (msg_code > 0 && msg_code <= err->last_jpeg_message) { - msgtext = err->jpeg_message_table[msg_code]; - } else if (err->addon_message_table != NULL && - msg_code >= err->first_addon_message && - msg_code <= err->last_addon_message) { - msgtext = err->addon_message_table[msg_code - err->first_addon_message]; - } - - /* Defend against bogus message number */ - if (msgtext == NULL) { - err->msg_parm.i[0] = msg_code; - msgtext = err->jpeg_message_table[0]; - } - - /* Check for string parameter, as indicated by %s in the message text */ - isstring = FALSE; - msgptr = msgtext; - while ((ch = *msgptr++) != '\0') { - if (ch == '%') { - if (*msgptr == 's') isstring = TRUE; - break; - } - } - - /* Format the message into the passed buffer */ - if (isstring) - sprintf(buffer, msgtext, err->msg_parm.s); - else - sprintf(buffer, msgtext, - err->msg_parm.i[0], err->msg_parm.i[1], - err->msg_parm.i[2], err->msg_parm.i[3], - err->msg_parm.i[4], err->msg_parm.i[5], - err->msg_parm.i[6], err->msg_parm.i[7]); -} - - -/* - * Reset error state variables at start of a new image. - * This is called during compression startup to reset trace/error - * processing to default state, without losing any application-specific - * method pointers. An application might possibly want to override - * this method if it has additional error processing state. - */ - -METHODDEF void -reset_error_mgr (j_common_ptr cinfo) -{ - cinfo->err->num_warnings = 0; - /* trace_level is not reset since it is an application-supplied parameter */ - cinfo->err->msg_code = 0; /* may be useful as a flag for "no error" */ -} - - -/* - * Fill in the standard error-handling methods in a jpeg_error_mgr object. - * Typical call is: - * struct jpeg_compress_struct cinfo; - * struct jpeg_error_mgr err; - * - * cinfo.err = jpeg_std_error(&err); - * after which the application may override some of the methods. - */ - -GLOBAL struct jpeg_error_mgr * -jpeg_std_error (struct jpeg_error_mgr * err) -{ - err->error_exit = error_exit; - err->emit_message = emit_message; - err->output_message = output_message; - err->format_message = format_message; - err->reset_error_mgr = reset_error_mgr; - - err->trace_level = 0; /* default = no tracing */ - err->num_warnings = 0; /* no warnings emitted yet */ - err->msg_code = 0; /* may be useful as a flag for "no error" */ - - /* Initialize message table pointers */ - err->jpeg_message_table = jpeg_message_table; - err->last_jpeg_message = (int) JMSG_LASTMSGCODE - 1; - - err->addon_message_table = NULL; - err->first_addon_message = 0; /* for safety */ - err->last_addon_message = 0; - - return err; -} diff --git a/jpeg/jerror.h b/jpeg/jerror.h deleted file mode 100644 index 7918c38803669927b182f1a65fcefa7f4eb25d14..0000000000000000000000000000000000000000 --- a/jpeg/jerror.h +++ /dev/null @@ -1,264 +0,0 @@ -/* - * jerror.h - * - * Copyright (C) 1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file defines the error and message codes for the JPEG library. - * Edit this file to add new codes, or to translate the message strings to - * some other language. - * A set of error-reporting macros are defined too. Some applications using - * the JPEG library may wish to include this file to get the error codes - * and/or the macros. - */ - - -/* To define the enum list of message codes, include this file without - * defining JMAKE_MSG_TABLE. To create the message string table, include it - * again with JMAKE_MSG_TABLE defined (this should be done in just one module). - */ - -#ifdef JMAKE_MSG_TABLE - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jpeg_message_table jMsgTable -#endif - -const char * const jpeg_message_table[] = { - -#define JMESSAGE(code,string) string , - -#else /* not JMAKE_MSG_TABLE */ - -typedef enum { - -#define JMESSAGE(code,string) code , - -#endif /* JMAKE_MSG_TABLE */ - -JMESSAGE(JMSG_NOMESSAGE, "Bogus message code %d") /* Must be first entry! */ - -/* For maintenance convenience, list is alphabetical by message code name */ -JMESSAGE(JERR_ARITH_NOTIMPL, - "Sorry, there are legal restrictions on arithmetic coding") -JMESSAGE(JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix") -JMESSAGE(JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix") -JMESSAGE(JERR_BAD_BUFFER_MODE, "Bogus buffer control mode") -JMESSAGE(JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS") -JMESSAGE(JERR_BAD_DCTSIZE, "IDCT output block size %d not supported") -JMESSAGE(JERR_BAD_IN_COLORSPACE, "Bogus input colorspace") -JMESSAGE(JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace") -JMESSAGE(JERR_BAD_LENGTH, "Bogus marker length") -JMESSAGE(JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan") -JMESSAGE(JERR_BAD_POOL_ID, "Invalid memory pool code %d") -JMESSAGE(JERR_BAD_PRECISION, "Unsupported JPEG data precision %d") -JMESSAGE(JERR_BAD_SAMPLING, "Bogus sampling factors") -JMESSAGE(JERR_BAD_STATE, "Improper call to JPEG library in state %d") -JMESSAGE(JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access") -JMESSAGE(JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small") -JMESSAGE(JERR_CANT_SUSPEND, "Suspension not allowed here") -JMESSAGE(JERR_CCIR601_NOTIMPL, "CCIR601 sampling not implemented yet") -JMESSAGE(JERR_COMPONENT_COUNT, "Too many color components: %d, max %d") -JMESSAGE(JERR_CONVERSION_NOTIMPL, "Unsupported color conversion request") -JMESSAGE(JERR_DAC_INDEX, "Bogus DAC index %d") -JMESSAGE(JERR_DAC_VALUE, "Bogus DAC value 0x%x") -JMESSAGE(JERR_DHT_COUNTS, "Bogus DHT counts") -JMESSAGE(JERR_DHT_INDEX, "Bogus DHT index %d") -JMESSAGE(JERR_DQT_INDEX, "Bogus DQT index %d") -JMESSAGE(JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)") -JMESSAGE(JERR_EMS_READ, "Read from EMS failed") -JMESSAGE(JERR_EMS_WRITE, "Write to EMS failed") -JMESSAGE(JERR_EOI_EXPECTED, "Didn't expect more than one scan") -JMESSAGE(JERR_FILE_READ, "Input file read error") -JMESSAGE(JERR_FILE_WRITE, "Output file write error --- out of disk space?") -JMESSAGE(JERR_FRACT_SAMPLE_NOTIMPL, "Fractional sampling not implemented yet") -JMESSAGE(JERR_HUFF_CLEN_OVERFLOW, "Huffman code size table overflow") -JMESSAGE(JERR_HUFF_MISSING_CODE, "Missing Huffman code table entry") -JMESSAGE(JERR_IMAGE_TOO_BIG, "Maximum supported image dimension is %u pixels") -JMESSAGE(JERR_INPUT_EMPTY, "Empty input file") -JMESSAGE(JERR_INPUT_EOF, "Premature end of input file") -JMESSAGE(JERR_JFIF_MAJOR, "Unsupported JFIF revision number %d.%02d") -JMESSAGE(JERR_NOTIMPL, "Not implemented yet") -JMESSAGE(JERR_NOT_COMPILED, "Requested feature was omitted at compile time") -JMESSAGE(JERR_NO_BACKING_STORE, "Backing store not supported") -JMESSAGE(JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined") -JMESSAGE(JERR_NO_IMAGE, "JPEG datastream contains no image") -JMESSAGE(JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined") -JMESSAGE(JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x") -JMESSAGE(JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)") -JMESSAGE(JERR_QUANT_COMPONENTS, - "Cannot quantize more than %d color components") -JMESSAGE(JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors") -JMESSAGE(JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors") -JMESSAGE(JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers") -JMESSAGE(JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker") -JMESSAGE(JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x") -JMESSAGE(JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers") -JMESSAGE(JERR_SOS_NO_SOF, "Invalid JPEG file structure: SOS before SOF") -JMESSAGE(JERR_TFILE_CREATE, "Failed to create temporary file %s") -JMESSAGE(JERR_TFILE_READ, "Read failed on temporary file") -JMESSAGE(JERR_TFILE_SEEK, "Seek failed on temporary file") -JMESSAGE(JERR_TFILE_WRITE, - "Write failed on temporary file --- out of disk space?") -JMESSAGE(JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines") -JMESSAGE(JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x") -JMESSAGE(JERR_VIRTUAL_BUG, "Virtual array controller messed up") -JMESSAGE(JERR_WIDTH_OVERFLOW, "Image too wide for this implementation") -JMESSAGE(JERR_XMS_READ, "Read from XMS failed") -JMESSAGE(JERR_XMS_WRITE, "Write to XMS failed") -JMESSAGE(JMSG_COPYRIGHT, JCOPYRIGHT) -JMESSAGE(JMSG_VERSION, JVERSION) -JMESSAGE(JTRC_16BIT_TABLES, - "Caution: quantization tables are too coarse for baseline JPEG") -JMESSAGE(JTRC_ADOBE, - "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d") -JMESSAGE(JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u") -JMESSAGE(JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u") -JMESSAGE(JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x") -JMESSAGE(JTRC_DHT, "Define Huffman Table 0x%02x") -JMESSAGE(JTRC_DQT, "Define Quantization Table %d precision %d") -JMESSAGE(JTRC_DRI, "Define Restart Interval %u") -JMESSAGE(JTRC_EMS_CLOSE, "Freed EMS handle %u") -JMESSAGE(JTRC_EMS_OPEN, "Obtained EMS handle %u") -JMESSAGE(JTRC_EOI, "End Of Image") -JMESSAGE(JTRC_HUFFBITS, " %3d %3d %3d %3d %3d %3d %3d %3d") -JMESSAGE(JTRC_JFIF, "JFIF APP0 marker, density %dx%d %d") -JMESSAGE(JTRC_JFIF_BADTHUMBNAILSIZE, - "Warning: thumbnail image size does not match data length %u") -JMESSAGE(JTRC_JFIF_MINOR, "Warning: unknown JFIF revision number %d.%02d") -JMESSAGE(JTRC_JFIF_THUMBNAIL, " with %d x %d thumbnail image") -JMESSAGE(JTRC_MISC_MARKER, "Skipping marker 0x%02x, length %u") -JMESSAGE(JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x") -JMESSAGE(JTRC_QUANTVALS, " %4u %4u %4u %4u %4u %4u %4u %4u") -JMESSAGE(JTRC_QUANT_3_NCOLORS, "Quantizing to %d = %d*%d*%d colors") -JMESSAGE(JTRC_QUANT_NCOLORS, "Quantizing to %d colors") -JMESSAGE(JTRC_QUANT_SELECTED, "Selected %d colors for quantization") -JMESSAGE(JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d") -JMESSAGE(JTRC_RST, "RST%d") -JMESSAGE(JTRC_SMOOTH_NOTIMPL, - "Smoothing not supported with nonstandard sampling ratios") -JMESSAGE(JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d") -JMESSAGE(JTRC_SOF_COMPONENT, " Component %d: %dhx%dv q=%d") -JMESSAGE(JTRC_SOI, "Start of Image") -JMESSAGE(JTRC_SOS, "Start Of Scan: %d components") -JMESSAGE(JTRC_SOS_COMPONENT, " Component %d: dc=%d ac=%d") -JMESSAGE(JTRC_TFILE_CLOSE, "Closed temporary file %s") -JMESSAGE(JTRC_TFILE_OPEN, "Opened temporary file %s") -JMESSAGE(JTRC_UNKNOWN_IDS, - "Unrecognized component IDs %d %d %d, assuming YCbCr") -JMESSAGE(JTRC_XMS_CLOSE, "Freed XMS handle %u") -JMESSAGE(JTRC_XMS_OPEN, "Obtained XMS handle %u") -JMESSAGE(JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d") -JMESSAGE(JWRN_EXTRANEOUS_DATA, - "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x") -JMESSAGE(JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment") -JMESSAGE(JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code") -JMESSAGE(JWRN_JPEG_EOF, "Premature end of JPEG file") -JMESSAGE(JWRN_MUST_RESYNC, - "Corrupt JPEG data: found marker 0x%02x instead of RST%d") -JMESSAGE(JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG") -JMESSAGE(JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines") - -#ifdef JMAKE_MSG_TABLE - - NULL -}; - -#else /* not JMAKE_MSG_TABLE */ - - JMSG_LASTMSGCODE -} J_MESSAGE_CODE; - -#endif /* JMAKE_MSG_TABLE */ - -#undef JMESSAGE - - -#ifndef JMAKE_MSG_TABLE - -/* Macros to simplify using the error and trace message stuff */ -/* The first parameter is either type of cinfo pointer */ - -/* Fatal errors (print message and exit) */ -#define ERREXIT(cinfo,code) \ - ((cinfo)->err->msg_code = (code), \ - (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) -#define ERREXIT1(cinfo,code,p1) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) -#define ERREXIT2(cinfo,code,p1,p2) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (cinfo)->err->msg_parm.i[1] = (p2), \ - (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) -#define ERREXIT3(cinfo,code,p1,p2,p3) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (cinfo)->err->msg_parm.i[1] = (p2), \ - (cinfo)->err->msg_parm.i[2] = (p3), \ - (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) -#define ERREXIT4(cinfo,code,p1,p2,p3,p4) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (cinfo)->err->msg_parm.i[1] = (p2), \ - (cinfo)->err->msg_parm.i[2] = (p3), \ - (cinfo)->err->msg_parm.i[3] = (p4), \ - (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) -#define ERREXITS(cinfo,code,str) \ - ((cinfo)->err->msg_code = (code), \ - strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ - (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo))) - -#define MAKESTMT(stuff) do { stuff } while (0) - -/* Nonfatal errors (we can keep going, but the data is probably corrupt) */ -#define WARNMS(cinfo,code) \ - ((cinfo)->err->msg_code = (code), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) -#define WARNMS1(cinfo,code,p1) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) -#define WARNMS2(cinfo,code,p1,p2) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (cinfo)->err->msg_parm.i[1] = (p2), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1)) - -/* Informational/debugging messages */ -#define TRACEMS(cinfo,lvl,code) \ - ((cinfo)->err->msg_code = (code), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) -#define TRACEMS1(cinfo,lvl,code,p1) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) -#define TRACEMS2(cinfo,lvl,code,p1,p2) \ - ((cinfo)->err->msg_code = (code), \ - (cinfo)->err->msg_parm.i[0] = (p1), \ - (cinfo)->err->msg_parm.i[1] = (p2), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) -#define TRACEMS3(cinfo,lvl,code,p1,p2,p3) \ - MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ - _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); \ - (cinfo)->err->msg_code = (code); \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) -#define TRACEMS4(cinfo,lvl,code,p1,p2,p3,p4) \ - MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ - _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ - (cinfo)->err->msg_code = (code); \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) -#define TRACEMS8(cinfo,lvl,code,p1,p2,p3,p4,p5,p6,p7,p8) \ - MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \ - _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \ - _mp[4] = (p5); _mp[5] = (p6); _mp[6] = (p7); _mp[7] = (p8); \ - (cinfo)->err->msg_code = (code); \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); ) -#define TRACEMSS(cinfo,lvl,code,str) \ - ((cinfo)->err->msg_code = (code), \ - strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \ - (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl))) - -#endif /* JMAKE_MSG_TABLE */ diff --git a/jpeg/jfdctflt.c b/jpeg/jfdctflt.c deleted file mode 100644 index 21371eb8f33f60637ea263474662e8d98fdbe4ed..0000000000000000000000000000000000000000 --- a/jpeg/jfdctflt.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * jfdctflt.c - * - * Copyright (C) 1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains a floating-point implementation of the - * forward DCT (Discrete Cosine Transform). - * - * This implementation should be more accurate than either of the integer - * DCT implementations. However, it may not give the same results on all - * machines because of differences in roundoff behavior. Speed will depend - * on the hardware's floating point capacity. - * - * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT - * on each column. Direct algorithms are also available, but they are - * much more complex and seem not to be any faster when reduced to code. - * - * This implementation is based on Arai, Agui, and Nakajima's algorithm for - * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in - * Japanese, but the algorithm is described in the Pennebaker & Mitchell - * JPEG textbook (see REFERENCES section in file README). The following code - * is based directly on figure 4-8 in P&M. - * While an 8-point DCT cannot be done in less than 11 multiplies, it is - * possible to arrange the computation so that many of the multiplies are - * simple scalings of the final outputs. These multiplies can then be - * folded into the multiplications or divisions by the JPEG quantization - * table entries. The AA&N method leaves only 5 multiplies and 29 adds - * to be done in the DCT itself. - * The primary disadvantage of this method is that with a fixed-point - * implementation, accuracy is lost due to imprecise representation of the - * scaled quantization values. However, that problem does not arise if - * we use floating point arithmetic. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jdct.h" /* Private declarations for DCT subsystem */ - -#ifdef DCT_FLOAT_SUPPORTED - - -/* - * This module is specialized to the case DCTSIZE = 8. - */ - -#if DCTSIZE != 8 - Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ -#endif - - -/* - * Perform the forward DCT on one block of samples. - */ - -GLOBAL void -jpeg_fdct_float (FAST_FLOAT * data) -{ - FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; - FAST_FLOAT tmp10, tmp11, tmp12, tmp13; - FAST_FLOAT z1, z2, z3, z4, z5, z11, z13; - FAST_FLOAT *dataptr; - int ctr; - - /* Pass 1: process rows. */ - - dataptr = data; - for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { - tmp0 = dataptr[0] + dataptr[7]; - tmp7 = dataptr[0] - dataptr[7]; - tmp1 = dataptr[1] + dataptr[6]; - tmp6 = dataptr[1] - dataptr[6]; - tmp2 = dataptr[2] + dataptr[5]; - tmp5 = dataptr[2] - dataptr[5]; - tmp3 = dataptr[3] + dataptr[4]; - tmp4 = dataptr[3] - dataptr[4]; - - /* Even part */ - - tmp10 = tmp0 + tmp3; /* phase 2 */ - tmp13 = tmp0 - tmp3; - tmp11 = tmp1 + tmp2; - tmp12 = tmp1 - tmp2; - - dataptr[0] = tmp10 + tmp11; /* phase 3 */ - dataptr[4] = tmp10 - tmp11; - - z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */ - dataptr[2] = tmp13 + z1; /* phase 5 */ - dataptr[6] = tmp13 - z1; - - /* Odd part */ - - tmp10 = tmp4 + tmp5; /* phase 2 */ - tmp11 = tmp5 + tmp6; - tmp12 = tmp6 + tmp7; - - /* The rotator is modified from fig 4-8 to avoid extra negations. */ - z5 = (tmp10 - tmp12) * ((FAST_FLOAT) 0.382683433); /* c6 */ - z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; /* c2-c6 */ - z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; /* c2+c6 */ - z3 = tmp11 * ((FAST_FLOAT) 0.707106781); /* c4 */ - - z11 = tmp7 + z3; /* phase 5 */ - z13 = tmp7 - z3; - - dataptr[5] = z13 + z2; /* phase 6 */ - dataptr[3] = z13 - z2; - dataptr[1] = z11 + z4; - dataptr[7] = z11 - z4; - - dataptr += DCTSIZE; /* advance pointer to next row */ - } - - /* Pass 2: process columns. */ - - dataptr = data; - for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { - tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; - tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7]; - tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6]; - tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6]; - tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5]; - tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5]; - tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4]; - tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4]; - - /* Even part */ - - tmp10 = tmp0 + tmp3; /* phase 2 */ - tmp13 = tmp0 - tmp3; - tmp11 = tmp1 + tmp2; - tmp12 = tmp1 - tmp2; - - dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */ - dataptr[DCTSIZE*4] = tmp10 - tmp11; - - z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */ - dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */ - dataptr[DCTSIZE*6] = tmp13 - z1; - - /* Odd part */ - - tmp10 = tmp4 + tmp5; /* phase 2 */ - tmp11 = tmp5 + tmp6; - tmp12 = tmp6 + tmp7; - - /* The rotator is modified from fig 4-8 to avoid extra negations. */ - z5 = (tmp10 - tmp12) * ((FAST_FLOAT) 0.382683433); /* c6 */ - z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; /* c2-c6 */ - z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; /* c2+c6 */ - z3 = tmp11 * ((FAST_FLOAT) 0.707106781); /* c4 */ - - z11 = tmp7 + z3; /* phase 5 */ - z13 = tmp7 - z3; - - dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */ - dataptr[DCTSIZE*3] = z13 - z2; - dataptr[DCTSIZE*1] = z11 + z4; - dataptr[DCTSIZE*7] = z11 - z4; - - dataptr++; /* advance pointer to next column */ - } -} - -#endif /* DCT_FLOAT_SUPPORTED */ diff --git a/jpeg/jfdctfst.c b/jpeg/jfdctfst.c deleted file mode 100644 index a52d7b73c30fe633445622be85be59e7e72d9e0d..0000000000000000000000000000000000000000 --- a/jpeg/jfdctfst.c +++ /dev/null @@ -1,224 +0,0 @@ -/* - * jfdctfst.c - * - * Copyright (C) 1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains a fast, not so accurate integer implementation of the - * forward DCT (Discrete Cosine Transform). - * - * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT - * on each column. Direct algorithms are also available, but they are - * much more complex and seem not to be any faster when reduced to code. - * - * This implementation is based on Arai, Agui, and Nakajima's algorithm for - * scaled DCT. Their original paper (Trans. IEICE E-71(11):1095) is in - * Japanese, but the algorithm is described in the Pennebaker & Mitchell - * JPEG textbook (see REFERENCES section in file README). The following code - * is based directly on figure 4-8 in P&M. - * While an 8-point DCT cannot be done in less than 11 multiplies, it is - * possible to arrange the computation so that many of the multiplies are - * simple scalings of the final outputs. These multiplies can then be - * folded into the multiplications or divisions by the JPEG quantization - * table entries. The AA&N method leaves only 5 multiplies and 29 adds - * to be done in the DCT itself. - * The primary disadvantage of this method is that with fixed-point math, - * accuracy is lost due to imprecise representation of the scaled - * quantization values. The smaller the quantization table entry, the less - * precise the scaled value, so this implementation does worse with high- - * quality-setting files than with low-quality ones. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jdct.h" /* Private declarations for DCT subsystem */ - -#ifdef DCT_IFAST_SUPPORTED - - -/* - * This module is specialized to the case DCTSIZE = 8. - */ - -#if DCTSIZE != 8 - Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ -#endif - - -/* Scaling decisions are generally the same as in the LL&M algorithm; - * see jfdctint.c for more details. However, we choose to descale - * (right shift) multiplication products as soon as they are formed, - * rather than carrying additional fractional bits into subsequent additions. - * This compromises accuracy slightly, but it lets us save a few shifts. - * More importantly, 16-bit arithmetic is then adequate (for 8-bit samples) - * everywhere except in the multiplications proper; this saves a good deal - * of work on 16-bit-int machines. - * - * Again to save a few shifts, the intermediate results between pass 1 and - * pass 2 are not upscaled, but are represented only to integral precision. - * - * A final compromise is to represent the multiplicative constants to only - * 8 fractional bits, rather than 13. This saves some shifting work on some - * machines, and may also reduce the cost of multiplication (since there - * are fewer one-bits in the constants). - */ - -#define CONST_BITS 8 - - -/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus - * causing a lot of useless floating-point operations at run time. - * To get around this we use the following pre-calculated constants. - * If you change CONST_BITS you may want to add appropriate values. - * (With a reasonable C compiler, you can just rely on the FIX() macro...) - */ - -#if CONST_BITS == 8 -#define FIX_0_382683433 ((INT32) 98) /* FIX(0.382683433) */ -#define FIX_0_541196100 ((INT32) 139) /* FIX(0.541196100) */ -#define FIX_0_707106781 ((INT32) 181) /* FIX(0.707106781) */ -#define FIX_1_306562965 ((INT32) 334) /* FIX(1.306562965) */ -#else -#define FIX_0_382683433 FIX(0.382683433) -#define FIX_0_541196100 FIX(0.541196100) -#define FIX_0_707106781 FIX(0.707106781) -#define FIX_1_306562965 FIX(1.306562965) -#endif - - -/* We can gain a little more speed, with a further compromise in accuracy, - * by omitting the addition in a descaling shift. This yields an incorrectly - * rounded result half the time... - */ - -#ifndef USE_ACCURATE_ROUNDING -#undef DESCALE -#define DESCALE(x,n) RIGHT_SHIFT(x, n) -#endif - - -/* Multiply a DCTELEM variable by an INT32 constant, and immediately - * descale to yield a DCTELEM result. - */ - -#define MULTIPLY(var,const) ((DCTELEM) DESCALE((var) * (const), CONST_BITS)) - - -/* - * Perform the forward DCT on one block of samples. - */ - -GLOBAL void -jpeg_fdct_ifast (DCTELEM * data) -{ - DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; - DCTELEM tmp10, tmp11, tmp12, tmp13; - DCTELEM z1, z2, z3, z4, z5, z11, z13; - DCTELEM *dataptr; - int ctr; - SHIFT_TEMPS - - /* Pass 1: process rows. */ - - dataptr = data; - for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { - tmp0 = dataptr[0] + dataptr[7]; - tmp7 = dataptr[0] - dataptr[7]; - tmp1 = dataptr[1] + dataptr[6]; - tmp6 = dataptr[1] - dataptr[6]; - tmp2 = dataptr[2] + dataptr[5]; - tmp5 = dataptr[2] - dataptr[5]; - tmp3 = dataptr[3] + dataptr[4]; - tmp4 = dataptr[3] - dataptr[4]; - - /* Even part */ - - tmp10 = tmp0 + tmp3; /* phase 2 */ - tmp13 = tmp0 - tmp3; - tmp11 = tmp1 + tmp2; - tmp12 = tmp1 - tmp2; - - dataptr[0] = tmp10 + tmp11; /* phase 3 */ - dataptr[4] = tmp10 - tmp11; - - z1 = MULTIPLY(tmp12 + tmp13, FIX_0_707106781); /* c4 */ - dataptr[2] = tmp13 + z1; /* phase 5 */ - dataptr[6] = tmp13 - z1; - - /* Odd part */ - - tmp10 = tmp4 + tmp5; /* phase 2 */ - tmp11 = tmp5 + tmp6; - tmp12 = tmp6 + tmp7; - - /* The rotator is modified from fig 4-8 to avoid extra negations. */ - z5 = MULTIPLY(tmp10 - tmp12, FIX_0_382683433); /* c6 */ - z2 = MULTIPLY(tmp10, FIX_0_541196100) + z5; /* c2-c6 */ - z4 = MULTIPLY(tmp12, FIX_1_306562965) + z5; /* c2+c6 */ - z3 = MULTIPLY(tmp11, FIX_0_707106781); /* c4 */ - - z11 = tmp7 + z3; /* phase 5 */ - z13 = tmp7 - z3; - - dataptr[5] = z13 + z2; /* phase 6 */ - dataptr[3] = z13 - z2; - dataptr[1] = z11 + z4; - dataptr[7] = z11 - z4; - - dataptr += DCTSIZE; /* advance pointer to next row */ - } - - /* Pass 2: process columns. */ - - dataptr = data; - for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { - tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; - tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7]; - tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6]; - tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6]; - tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5]; - tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5]; - tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4]; - tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4]; - - /* Even part */ - - tmp10 = tmp0 + tmp3; /* phase 2 */ - tmp13 = tmp0 - tmp3; - tmp11 = tmp1 + tmp2; - tmp12 = tmp1 - tmp2; - - dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */ - dataptr[DCTSIZE*4] = tmp10 - tmp11; - - z1 = MULTIPLY(tmp12 + tmp13, FIX_0_707106781); /* c4 */ - dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */ - dataptr[DCTSIZE*6] = tmp13 - z1; - - /* Odd part */ - - tmp10 = tmp4 + tmp5; /* phase 2 */ - tmp11 = tmp5 + tmp6; - tmp12 = tmp6 + tmp7; - - /* The rotator is modified from fig 4-8 to avoid extra negations. */ - z5 = MULTIPLY(tmp10 - tmp12, FIX_0_382683433); /* c6 */ - z2 = MULTIPLY(tmp10, FIX_0_541196100) + z5; /* c2-c6 */ - z4 = MULTIPLY(tmp12, FIX_1_306562965) + z5; /* c2+c6 */ - z3 = MULTIPLY(tmp11, FIX_0_707106781); /* c4 */ - - z11 = tmp7 + z3; /* phase 5 */ - z13 = tmp7 - z3; - - dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */ - dataptr[DCTSIZE*3] = z13 - z2; - dataptr[DCTSIZE*1] = z11 + z4; - dataptr[DCTSIZE*7] = z11 - z4; - - dataptr++; /* advance pointer to next column */ - } -} - -#endif /* DCT_IFAST_SUPPORTED */ diff --git a/jpeg/jfdctint.c b/jpeg/jfdctint.c deleted file mode 100644 index 7df043306f485bc99208ff22ba0090686adc130b..0000000000000000000000000000000000000000 --- a/jpeg/jfdctint.c +++ /dev/null @@ -1,283 +0,0 @@ -/* - * jfdctint.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains a slow-but-accurate integer implementation of the - * forward DCT (Discrete Cosine Transform). - * - * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT - * on each column. Direct algorithms are also available, but they are - * much more complex and seem not to be any faster when reduced to code. - * - * This implementation is based on an algorithm described in - * C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT - * Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics, - * Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991. - * The primary algorithm described there uses 11 multiplies and 29 adds. - * We use their alternate method with 12 multiplies and 32 adds. - * The advantage of this method is that no data path contains more than one - * multiplication; this allows a very simple and accurate implementation in - * scaled fixed-point arithmetic, with a minimal number of shifts. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jdct.h" /* Private declarations for DCT subsystem */ - -#ifdef DCT_ISLOW_SUPPORTED - - -/* - * This module is specialized to the case DCTSIZE = 8. - */ - -#if DCTSIZE != 8 - Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ -#endif - - -/* - * The poop on this scaling stuff is as follows: - * - * Each 1-D DCT step produces outputs which are a factor of sqrt(N) - * larger than the true DCT outputs. The final outputs are therefore - * a factor of N larger than desired; since N=8 this can be cured by - * a simple right shift at the end of the algorithm. The advantage of - * this arrangement is that we save two multiplications per 1-D DCT, - * because the y0 and y4 outputs need not be divided by sqrt(N). - * In the IJG code, this factor of 8 is removed by the quantization step - * (in jcdctmgr.c), NOT in this module. - * - * We have to do addition and subtraction of the integer inputs, which - * is no problem, and multiplication by fractional constants, which is - * a problem to do in integer arithmetic. We multiply all the constants - * by CONST_SCALE and convert them to integer constants (thus retaining - * CONST_BITS bits of precision in the constants). After doing a - * multiplication we have to divide the product by CONST_SCALE, with proper - * rounding, to produce the correct output. This division can be done - * cheaply as a right shift of CONST_BITS bits. We postpone shifting - * as long as possible so that partial sums can be added together with - * full fractional precision. - * - * The outputs of the first pass are scaled up by PASS1_BITS bits so that - * they are represented to better-than-integral precision. These outputs - * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word - * with the recommended scaling. (For 12-bit sample data, the intermediate - * array is INT32 anyway.) - * - * To avoid overflow of the 32-bit intermediate results in pass 2, we must - * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26. Error analysis - * shows that the values given below are the most effective. - */ - -#if BITS_IN_JSAMPLE == 8 -#define CONST_BITS 13 -#define PASS1_BITS 2 -#else -#define CONST_BITS 13 -#define PASS1_BITS 1 /* lose a little precision to avoid overflow */ -#endif - -/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus - * causing a lot of useless floating-point operations at run time. - * To get around this we use the following pre-calculated constants. - * If you change CONST_BITS you may want to add appropriate values. - * (With a reasonable C compiler, you can just rely on the FIX() macro...) - */ - -#if CONST_BITS == 13 -#define FIX_0_298631336 ((INT32) 2446) /* FIX(0.298631336) */ -#define FIX_0_390180644 ((INT32) 3196) /* FIX(0.390180644) */ -#define FIX_0_541196100 ((INT32) 4433) /* FIX(0.541196100) */ -#define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ -#define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ -#define FIX_1_175875602 ((INT32) 9633) /* FIX(1.175875602) */ -#define FIX_1_501321110 ((INT32) 12299) /* FIX(1.501321110) */ -#define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ -#define FIX_1_961570560 ((INT32) 16069) /* FIX(1.961570560) */ -#define FIX_2_053119869 ((INT32) 16819) /* FIX(2.053119869) */ -#define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ -#define FIX_3_072711026 ((INT32) 25172) /* FIX(3.072711026) */ -#else -#define FIX_0_298631336 FIX(0.298631336) -#define FIX_0_390180644 FIX(0.390180644) -#define FIX_0_541196100 FIX(0.541196100) -#define FIX_0_765366865 FIX(0.765366865) -#define FIX_0_899976223 FIX(0.899976223) -#define FIX_1_175875602 FIX(1.175875602) -#define FIX_1_501321110 FIX(1.501321110) -#define FIX_1_847759065 FIX(1.847759065) -#define FIX_1_961570560 FIX(1.961570560) -#define FIX_2_053119869 FIX(2.053119869) -#define FIX_2_562915447 FIX(2.562915447) -#define FIX_3_072711026 FIX(3.072711026) -#endif - - -/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. - * For 8-bit samples with the recommended scaling, all the variable - * and constant values involved are no more than 16 bits wide, so a - * 16x16->32 bit multiply can be used instead of a full 32x32 multiply. - * For 12-bit samples, a full 32-bit multiplication will be needed. - */ - -#if BITS_IN_JSAMPLE == 8 -#define MULTIPLY(var,const) MULTIPLY16C16(var,const) -#else -#define MULTIPLY(var,const) ((var) * (const)) -#endif - - -/* - * Perform the forward DCT on one block of samples. - */ - -GLOBAL void -jpeg_fdct_islow (DCTELEM * data) -{ - INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; - INT32 tmp10, tmp11, tmp12, tmp13; - INT32 z1, z2, z3, z4, z5; - DCTELEM *dataptr; - int ctr; - SHIFT_TEMPS - - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - - dataptr = data; - for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { - tmp0 = dataptr[0] + dataptr[7]; - tmp7 = dataptr[0] - dataptr[7]; - tmp1 = dataptr[1] + dataptr[6]; - tmp6 = dataptr[1] - dataptr[6]; - tmp2 = dataptr[2] + dataptr[5]; - tmp5 = dataptr[2] - dataptr[5]; - tmp3 = dataptr[3] + dataptr[4]; - tmp4 = dataptr[3] - dataptr[4]; - - /* Even part per LL&M figure 1 --- note that published figure is faulty; - * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". - */ - - tmp10 = tmp0 + tmp3; - tmp13 = tmp0 - tmp3; - tmp11 = tmp1 + tmp2; - tmp12 = tmp1 - tmp2; - - dataptr[0] = (DCTELEM) ((tmp10 + tmp11) << PASS1_BITS); - dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << PASS1_BITS); - - z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); - dataptr[2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865), - CONST_BITS-PASS1_BITS); - dataptr[6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065), - CONST_BITS-PASS1_BITS); - - /* Odd part per figure 8 --- note paper omits factor of sqrt(2). - * cK represents cos(K*pi/16). - * i0..i3 in the paper are tmp4..tmp7 here. - */ - - z1 = tmp4 + tmp7; - z2 = tmp5 + tmp6; - z3 = tmp4 + tmp6; - z4 = tmp5 + tmp7; - z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ - - tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ - tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ - tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ - tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ - z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ - z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ - z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ - z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ - - z3 += z5; - z4 += z5; - - dataptr[7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, CONST_BITS-PASS1_BITS); - dataptr[5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, CONST_BITS-PASS1_BITS); - dataptr[3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, CONST_BITS-PASS1_BITS); - dataptr[1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, CONST_BITS-PASS1_BITS); - - dataptr += DCTSIZE; /* advance pointer to next row */ - } - - /* Pass 2: process columns. - * We remove the PASS1_BITS scaling, but leave the results scaled up - * by an overall factor of 8. - */ - - dataptr = data; - for (ctr = DCTSIZE-1; ctr >= 0; ctr--) { - tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; - tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7]; - tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6]; - tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6]; - tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5]; - tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5]; - tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4]; - tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4]; - - /* Even part per LL&M figure 1 --- note that published figure is faulty; - * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". - */ - - tmp10 = tmp0 + tmp3; - tmp13 = tmp0 - tmp3; - tmp11 = tmp1 + tmp2; - tmp12 = tmp1 - tmp2; - - dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS); - dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS); - - z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); - dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865), - CONST_BITS+PASS1_BITS); - dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065), - CONST_BITS+PASS1_BITS); - - /* Odd part per figure 8 --- note paper omits factor of sqrt(2). - * cK represents cos(K*pi/16). - * i0..i3 in the paper are tmp4..tmp7 here. - */ - - z1 = tmp4 + tmp7; - z2 = tmp5 + tmp6; - z3 = tmp4 + tmp6; - z4 = tmp5 + tmp7; - z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ - - tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ - tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ - tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ - tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ - z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ - z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ - z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ - z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ - - z3 += z5; - z4 += z5; - - dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, - CONST_BITS+PASS1_BITS); - dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, - CONST_BITS+PASS1_BITS); - dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, - CONST_BITS+PASS1_BITS); - dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, - CONST_BITS+PASS1_BITS); - - dataptr++; /* advance pointer to next column */ - } -} - -#endif /* DCT_ISLOW_SUPPORTED */ diff --git a/jpeg/jfwddct.c b/jpeg/jfwddct.c deleted file mode 100644 index 77752ab8851fd7c6434ea2e363e4978d727e0088..0000000000000000000000000000000000000000 --- a/jpeg/jfwddct.c +++ /dev/null @@ -1,302 +0,0 @@ -/* - * jfwddct.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains the basic DCT (Discrete Cosine Transform) - * transformation subroutine. - * - * This implementation is based on an algorithm described in - * C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT - * Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics, - * Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991. - * The primary algorithm described there uses 11 multiplies and 29 adds. - * We use their alternate method with 12 multiplies and 32 adds. - * The advantage of this method is that no data path contains more than one - * multiplication; this allows a very simple and accurate implementation in - * scaled fixed-point arithmetic, with a minimal number of shifts. - */ - -#include "jinclude.h" -#include "jpegint.h" - - -/* - * This routine is specialized to the case DCTSIZE = 8. - */ - -#if DCTSIZE != 8 - Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ -#endif - - -/* - * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT - * on each column. Direct algorithms are also available, but they are - * much more complex and seem not to be any faster when reduced to code. - * - * The poop on this scaling stuff is as follows: - * - * Each 1-D DCT step produces outputs which are a factor of sqrt(N) - * larger than the true DCT outputs. The final outputs are therefore - * a factor of N larger than desired; since N=8 this can be cured by - * a simple right shift at the end of the algorithm. The advantage of - * this arrangement is that we save two multiplications per 1-D DCT, - * because the y0 and y4 outputs need not be divided by sqrt(N). - * - * We have to do addition and subtraction of the integer inputs, which - * is no problem, and multiplication by fractional constants, which is - * a problem to do in integer arithmetic. We multiply all the constants - * by CONST_SCALE and convert them to integer constants (thus retaining - * CONST_BITS bits of precision in the constants). After doing a - * multiplication we have to divide the product by CONST_SCALE, with proper - * rounding, to produce the correct output. This division can be done - * cheaply as a right shift of CONST_BITS bits. We postpone shifting - * as long as possible so that partial sums can be added together with - * full fractional precision. - * - * The outputs of the first pass are scaled up by PASS1_BITS bits so that - * they are represented to better-than-integral precision. These outputs - * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word - * with the recommended scaling. (To scale up 12-bit sample data, an - * intermediate INT32 array would be needed.) - * - * To avoid overflow of the 32-bit intermediate results in pass 2, we must - * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 25. Error analysis - * shows that the values given below are the most effective. - */ - -#if BITS_IN_JSAMPLE == 8 -#define CONST_BITS 13 -#define PASS1_BITS 2 -#else -#define CONST_BITS 13 -#define PASS1_BITS 0 /* lose a little precision to avoid overflow */ -#endif - -#define ONE ((INT32) 1) - -#define CONST_SCALE (ONE << CONST_BITS) - -/* Convert a positive real constant to an integer scaled by CONST_SCALE. */ - -#define FIX(x) ((INT32) ((x) * CONST_SCALE + 0.5)) - -/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus - * causing a lot of useless floating-point operations at run time. - * To get around this we use the following pre-calculated constants. - * If you change CONST_BITS you may want to add appropriate values. - * (With a reasonable C compiler, you can just rely on the FIX() macro...) - */ - -#if CONST_BITS == 13 -#define FIX_0_298631336 ((INT32) 2446) /* FIX(0.298631336) */ -#define FIX_0_390180644 ((INT32) 3196) /* FIX(0.390180644) */ -#define FIX_0_541196100 ((INT32) 4433) /* FIX(0.541196100) */ -#define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ -#define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ -#define FIX_1_175875602 ((INT32) 9633) /* FIX(1.175875602) */ -#define FIX_1_501321110 ((INT32) 12299) /* FIX(1.501321110) */ -#define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ -#define FIX_1_961570560 ((INT32) 16069) /* FIX(1.961570560) */ -#define FIX_2_053119869 ((INT32) 16819) /* FIX(2.053119869) */ -#define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ -#define FIX_3_072711026 ((INT32) 25172) /* FIX(3.072711026) */ -#else -#define FIX_0_298631336 FIX(0.298631336) -#define FIX_0_390180644 FIX(0.390180644) -#define FIX_0_541196100 FIX(0.541196100) -#define FIX_0_765366865 FIX(0.765366865) -#define FIX_0_899976223 FIX(0.899976223) -#define FIX_1_175875602 FIX(1.175875602) -#define FIX_1_501321110 FIX(1.501321110) -#define FIX_1_847759065 FIX(1.847759065) -#define FIX_1_961570560 FIX(1.961570560) -#define FIX_2_053119869 FIX(2.053119869) -#define FIX_2_562915447 FIX(2.562915447) -#define FIX_3_072711026 FIX(3.072711026) -#endif - - -/* Descale and correctly round an INT32 value that's scaled by N bits. - * We assume RIGHT_SHIFT rounds towards minus infinity, so adding - * the fudge factor is correct for either sign of X. - */ - -#define DESCALE(x,n) RIGHT_SHIFT((x) + (ONE << ((n)-1)), n) - -/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. - * For 8-bit samples with the recommended scaling, all the variable - * and constant values involved are no more than 16 bits wide, so a - * 16x16->32 bit multiply can be used instead of a full 32x32 multiply; - * this provides a useful speedup on many machines. - * There is no way to specify a 16x16->32 multiply in portable C, but - * some C compilers will do the right thing if you provide the correct - * combination of casts. - * NB: for 12-bit samples, a full 32-bit multiplication will be needed. - */ - -#if BITS_IN_JSAMPLE == 8 -#ifdef SHORTxSHORT_32 /* may work if 'int' is 32 bits */ -#define MULTIPLY(var,const) (((INT16) (var)) * ((INT16) (const))) -#endif -#ifdef SHORTxLCONST_32 /* known to work with Microsoft C 6.0 */ -#define MULTIPLY(var,const) (((INT16) (var)) * ((INT32) (const))) -#endif -#endif /* BITS_IN_JSAMPLE == 8 */ - -#ifndef MULTIPLY /* default definition */ -#define MULTIPLY(var,const) ((var) * (const)) -#endif - - -/* - * Perform the forward DCT on one block of samples. - */ - -typedef int DCTELEM; - -GLOBAL void -j_fwd_dct (DCTELEM * data) -{ - INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; - INT32 tmp10, tmp11, tmp12, tmp13; - INT32 z1, z2, z3, z4, z5; - register DCTELEM *dataptr; - int rowctr; - SHIFT_TEMPS - - /* Pass 1: process rows. */ - /* Note results are scaled up by sqrt(8) compared to a true DCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - - dataptr = data; - for (rowctr = DCTSIZE-1; rowctr >= 0; rowctr--) { - tmp0 = dataptr[0] + dataptr[7]; - tmp7 = dataptr[0] - dataptr[7]; - tmp1 = dataptr[1] + dataptr[6]; - tmp6 = dataptr[1] - dataptr[6]; - tmp2 = dataptr[2] + dataptr[5]; - tmp5 = dataptr[2] - dataptr[5]; - tmp3 = dataptr[3] + dataptr[4]; - tmp4 = dataptr[3] - dataptr[4]; - - /* Even part per LL&M figure 1 --- note that published figure is faulty; - * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". - */ - - tmp10 = tmp0 + tmp3; - tmp13 = tmp0 - tmp3; - tmp11 = tmp1 + tmp2; - tmp12 = tmp1 - tmp2; - - dataptr[0] = (DCTELEM) ((tmp10 + tmp11) << PASS1_BITS); - dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << PASS1_BITS); - - z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); - dataptr[2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865), - CONST_BITS-PASS1_BITS); - dataptr[6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065), - CONST_BITS-PASS1_BITS); - - /* Odd part per figure 8 --- note paper omits factor of sqrt(2). - * cK represents cos(K*pi/16). - * i0..i3 in the paper are tmp4..tmp7 here. - */ - - z1 = tmp4 + tmp7; - z2 = tmp5 + tmp6; - z3 = tmp4 + tmp6; - z4 = tmp5 + tmp7; - z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ - - tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ - tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ - tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ - tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ - z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ - z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ - z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ - z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ - - z3 += z5; - z4 += z5; - - dataptr[7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, CONST_BITS-PASS1_BITS); - dataptr[5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, CONST_BITS-PASS1_BITS); - dataptr[3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, CONST_BITS-PASS1_BITS); - dataptr[1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, CONST_BITS-PASS1_BITS); - - dataptr += DCTSIZE; /* advance pointer to next row */ - } - - /* Pass 2: process columns. */ - /* Note that we must descale the results by a factor of 8 == 2**3, */ - /* and also undo the PASS1_BITS scaling. */ - - dataptr = data; - for (rowctr = DCTSIZE-1; rowctr >= 0; rowctr--) { - tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7]; - tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7]; - tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6]; - tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6]; - tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5]; - tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5]; - tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4]; - tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4]; - - /* Even part per LL&M figure 1 --- note that published figure is faulty; - * rotator "sqrt(2)*c1" should be "sqrt(2)*c6". - */ - - tmp10 = tmp0 + tmp3; - tmp13 = tmp0 - tmp3; - tmp11 = tmp1 + tmp2; - tmp12 = tmp1 - tmp2; - - dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS+3); - dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS+3); - - z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100); - dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865), - CONST_BITS+PASS1_BITS+3); - dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065), - CONST_BITS+PASS1_BITS+3); - - /* Odd part per figure 8 --- note paper omits factor of sqrt(2). - * cK represents cos(K*pi/16). - * i0..i3 in the paper are tmp4..tmp7 here. - */ - - z1 = tmp4 + tmp7; - z2 = tmp5 + tmp6; - z3 = tmp4 + tmp6; - z4 = tmp5 + tmp7; - z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ - - tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ - tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ - tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ - tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ - z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ - z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ - z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ - z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ - - z3 += z5; - z4 += z5; - - dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, - CONST_BITS+PASS1_BITS+3); - dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, - CONST_BITS+PASS1_BITS+3); - dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, - CONST_BITS+PASS1_BITS+3); - dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, - CONST_BITS+PASS1_BITS+3); - - dataptr++; /* advance pointer to next column */ - } -} diff --git a/jpeg/jinclude.h b/jpeg/jinclude.h deleted file mode 100644 index 0a4f15146aeb2070601838439e169509f6fe5b7d..0000000000000000000000000000000000000000 --- a/jpeg/jinclude.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * jinclude.h - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file exists to provide a single place to fix any problems with - * including the wrong system include files. (Common problems are taken - * care of by the standard jconfig symbols, but on really weird systems - * you may have to edit this file.) - * - * NOTE: this file is NOT intended to be included by applications using the - * JPEG library. Most applications need only include jpeglib.h. - */ - - -/* Include auto-config file to find out which system include files we need. */ - -#include "jconfig.h" /* auto configuration options */ -#define JCONFIG_INCLUDED /* so that jpeglib.h doesn't do it again */ - -/* - * We need the NULL macro and size_t typedef. - * On an ANSI-conforming system it is sufficient to include <stddef.h>. - * Otherwise, we get them from <stdlib.h> or <stdio.h>; we may have to - * pull in <sys/types.h> as well. - * Note that the core JPEG library does not require <stdio.h>; - * only the default error handler and data source/destination modules do. - * But we must pull it in because of the references to FILE in jpeglib.h. - * You can remove those references if you want to compile without <stdio.h>. - */ - -#ifdef HAVE_STDDEF_H -#include <stddef.h> -#endif - -#ifdef HAVE_STDLIB_H -#include <stdlib.h> -#endif - -#ifdef NEED_SYS_TYPES_H -#include <sys/types.h> -#endif - -#include <stdio.h> - -/* - * We need memory copying and zeroing functions, plus strncpy(). - * ANSI and System V implementations declare these in <string.h>. - * BSD doesn't have the mem() functions, but it does have bcopy()/bzero(). - * Some systems may declare memset and memcpy in <memory.h>. - * - * NOTE: we assume the size parameters to these functions are of type size_t. - * Change the casts in these macros if not! - */ - -#ifdef NEED_BSD_STRINGS - -#include <strings.h> -#define MEMZERO(target,size) bzero((void *)(target), (size_t)(size)) -#define MEMCOPY(dest,src,size) bcopy((const void *)(src), (void *)(dest), (size_t)(size)) - -#else /* not BSD, assume ANSI/SysV string lib */ - -#include <string.h> -#define MEMZERO(target,size) memset((void *)(target), 0, (size_t)(size)) -#define MEMCOPY(dest,src,size) memcpy((void *)(dest), (const void *)(src), (size_t)(size)) - -#endif - -/* - * In ANSI C, and indeed any rational implementation, size_t is also the - * type returned by sizeof(). However, it seems there are some irrational - * implementations out there, in which sizeof() returns an int even though - * size_t is defined as long or unsigned long. To ensure consistent results - * we always use this SIZEOF() macro in place of using sizeof() directly. - */ - -#define SIZEOF(object) ((size_t) sizeof(object)) - -/* - * The modules that use fread() and fwrite() always invoke them through - * these macros. On some systems you may need to twiddle the argument casts. - * CAUTION: argument order is different from underlying functions! - */ - -#define JFREAD(file,buf,sizeofbuf) \ - ((size_t) fread((void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file))) -#define JFWRITE(file,buf,sizeofbuf) \ - ((size_t) fwrite((const void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file))) diff --git a/jpeg/jmemmgr.c b/jpeg/jmemmgr.c deleted file mode 100644 index 76fb486741d8c690203824a334f6f46ab8806fea..0000000000000000000000000000000000000000 --- a/jpeg/jmemmgr.c +++ /dev/null @@ -1,1062 +0,0 @@ -/* - * jmemmgr.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains the JPEG system-independent memory management - * routines. This code is usable across a wide variety of machines; most - * of the system dependencies have been isolated in a separate file. - * The major functions provided here are: - * * pool-based allocation and freeing of memory; - * * policy decisions about how to divide available memory among the - * virtual arrays; - * * control logic for swapping virtual arrays between main memory and - * backing storage. - * The separate system-dependent file provides the actual backing-storage - * access code, and it contains the policy decision about how much total - * main memory to use. - * This file is system-dependent in the sense that some of its functions - * are unnecessary in some systems. For example, if there is enough virtual - * memory so that backing storage will never be used, much of the virtual - * array control logic could be removed. (Of course, if you have that much - * memory then you shouldn't care about a little bit of unused code...) - */ - -#define JPEG_INTERNALS -#define AM_MEMORY_MANAGER /* we define jvirt_Xarray_control structs */ -#include "jinclude.h" -#include "jpeglib.h" -#include "jmemsys.h" /* import the system-dependent declarations */ - -#ifndef NO_GETENV -#ifndef HAVE_STDLIB_H /* <stdlib.h> should declare getenv() */ -extern char * getenv JPP((const char * name)); -#endif -#endif - - -/* - * Some important notes: - * The allocation routines provided here must never return NULL. - * They should exit to error_exit if unsuccessful. - * - * It's not a good idea to try to merge the sarray and barray routines, - * even though they are textually almost the same, because samples are - * usually stored as bytes while coefficients are shorts or ints. Thus, - * in machines where byte pointers have a different representation from - * word pointers, the resulting machine code could not be the same. - */ - - -/* - * Many machines require storage alignment: longs must start on 4-byte - * boundaries, doubles on 8-byte boundaries, etc. On such machines, malloc() - * always returns pointers that are multiples of the worst-case alignment - * requirement, and we had better do so too. - * There isn't any really portable way to determine the worst-case alignment - * requirement. This module assumes that the alignment requirement is - * multiples of sizeof(ALIGN_TYPE). - * By default, we define ALIGN_TYPE as double. This is necessary on some - * workstations (where doubles really do need 8-byte alignment) and will work - * fine on nearly everything. If your machine has lesser alignment needs, - * you can save a few bytes by making ALIGN_TYPE smaller. - * The only place I know of where this will NOT work is certain Macintosh - * 680x0 compilers that define double as a 10-byte IEEE extended float. - * Doing 10-byte alignment is counterproductive because longwords won't be - * aligned well. Put "#define ALIGN_TYPE long" in jconfig.h if you have - * such a compiler. - */ - -#ifndef ALIGN_TYPE /* so can override from jconfig.h */ -#define ALIGN_TYPE double -#endif - - -/* - * We allocate objects from "pools", where each pool is gotten with a single - * request to jpeg_get_small() or jpeg_get_large(). There is no per-object - * overhead within a pool, except for alignment padding. Each pool has a - * header with a link to the next pool of the same class. - * Small and large pool headers are identical except that the latter's - * link pointer must be FAR on 80x86 machines. - * Notice that the "real" header fields are union'ed with a dummy ALIGN_TYPE - * field. This forces the compiler to make SIZEOF(small_pool_hdr) a multiple - * of the alignment requirement of ALIGN_TYPE. - */ - -typedef union small_pool_struct * small_pool_ptr; - -typedef union small_pool_struct { - struct { - small_pool_ptr next; /* next in list of pools */ - size_t bytes_used; /* how many bytes already used within pool */ - size_t bytes_left; /* bytes still available in this pool */ - } hdr; - ALIGN_TYPE dummy; /* included in union to ensure alignment */ -} small_pool_hdr; - -typedef union large_pool_struct FAR * large_pool_ptr; - -typedef union large_pool_struct { - struct { - large_pool_ptr next; /* next in list of pools */ - size_t bytes_used; /* how many bytes already used within pool */ - size_t bytes_left; /* bytes still available in this pool */ - } hdr; - ALIGN_TYPE dummy; /* included in union to ensure alignment */ -} large_pool_hdr; - - -/* - * Here is the full definition of a memory manager object. - */ - -typedef struct { - struct jpeg_memory_mgr pub; /* public fields */ - - /* Each pool identifier (lifetime class) names a linked list of pools. */ - small_pool_ptr small_list[JPOOL_NUMPOOLS]; - large_pool_ptr large_list[JPOOL_NUMPOOLS]; - - /* Since we only have one lifetime class of virtual arrays, only one - * linked list is necessary (for each datatype). Note that the virtual - * array control blocks being linked together are actually stored somewhere - * in the small-pool list. - */ - jvirt_sarray_ptr virt_sarray_list; - jvirt_barray_ptr virt_barray_list; - - /* This counts total space obtained from jpeg_get_small/large */ - long total_space_allocated; - - /* alloc_sarray and alloc_barray set this value for use by virtual - * array routines. - */ - JDIMENSION last_rowsperchunk; /* from most recent alloc_sarray/barray */ -} my_memory_mgr; - -typedef my_memory_mgr * my_mem_ptr; - - -/* - * The control blocks for virtual arrays. - * Note that these blocks are allocated in the "small" pool area. - * System-dependent info for the associated backing store (if any) is hidden - * inside the backing_store_info struct. - */ - -struct jvirt_sarray_control { - JSAMPARRAY mem_buffer; /* => the in-memory buffer */ - JDIMENSION rows_in_array; /* total virtual array height */ - JDIMENSION samplesperrow; /* width of array (and of memory buffer) */ - JDIMENSION unitheight; /* # of rows accessed by access_virt_sarray */ - JDIMENSION rows_in_mem; /* height of memory buffer */ - JDIMENSION rowsperchunk; /* allocation chunk size in mem_buffer */ - JDIMENSION cur_start_row; /* first logical row # in the buffer */ - boolean dirty; /* do current buffer contents need written? */ - boolean b_s_open; /* is backing-store data valid? */ - jvirt_sarray_ptr next; /* link to next virtual sarray control block */ - backing_store_info b_s_info; /* System-dependent control info */ -}; - -struct jvirt_barray_control { - JBLOCKARRAY mem_buffer; /* => the in-memory buffer */ - JDIMENSION rows_in_array; /* total virtual array height */ - JDIMENSION blocksperrow; /* width of array (and of memory buffer) */ - JDIMENSION unitheight; /* # of rows accessed by access_virt_barray */ - JDIMENSION rows_in_mem; /* height of memory buffer */ - JDIMENSION rowsperchunk; /* allocation chunk size in mem_buffer */ - JDIMENSION cur_start_row; /* first logical row # in the buffer */ - boolean dirty; /* do current buffer contents need written? */ - boolean b_s_open; /* is backing-store data valid? */ - jvirt_barray_ptr next; /* link to next virtual barray control block */ - backing_store_info b_s_info; /* System-dependent control info */ -}; - - -#ifdef MEM_STATS /* optional extra stuff for statistics */ - -LOCAL void -print_mem_stats (j_common_ptr cinfo, int pool_id) -{ - my_mem_ptr mem = (my_mem_ptr) cinfo->mem; - small_pool_ptr shdr_ptr; - large_pool_ptr lhdr_ptr; - - /* Since this is only a debugging stub, we can cheat a little by using - * fprintf directly rather than going through the trace message code. - * This is helpful because message parm array can't handle longs. - */ - fprintf(stderr, "Freeing pool %d, total space = %ld\n", - pool_id, mem->total_space_allocated); - - for (lhdr_ptr = mem->large_list[pool_id]; lhdr_ptr != NULL; - lhdr_ptr = lhdr_ptr->hdr.next) { - fprintf(stderr, " Large chunk used %ld\n", - (long) lhdr_ptr->hdr.bytes_used); - } - - for (shdr_ptr = mem->small_list[pool_id]; shdr_ptr != NULL; - shdr_ptr = shdr_ptr->hdr.next) { - fprintf(stderr, " Small chunk used %ld free %ld\n", - (long) shdr_ptr->hdr.bytes_used, - (long) shdr_ptr->hdr.bytes_left); - } -} - -#endif /* MEM_STATS */ - - -LOCAL void -out_of_memory (j_common_ptr cinfo, int which) -/* Report an out-of-memory error and stop execution */ -/* If we compiled MEM_STATS support, report alloc requests before dying */ -{ -#ifdef MEM_STATS - cinfo->err->trace_level = 2; /* force self_destruct to report stats */ -#endif - ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, which); -} - - -/* - * Allocation of "small" objects. - * - * For these, we use pooled storage. When a new pool must be created, - * we try to get enough space for the current request plus a "slop" factor, - * where the slop will be the amount of leftover space in the new pool. - * The speed vs. space tradeoff is largely determined by the slop values. - * A different slop value is provided for each pool class (lifetime), - * and we also distinguish the first pool of a class from later ones. - * NOTE: the values given work fairly well on both 16- and 32-bit-int - * machines, but may be too small if longs are 64 bits or more. - */ - -static const size_t first_pool_slop[JPOOL_NUMPOOLS] = -{ - 1600, /* first PERMANENT pool */ - 16000 /* first IMAGE pool */ -}; - -static const size_t extra_pool_slop[JPOOL_NUMPOOLS] = -{ - 0, /* additional PERMANENT pools */ - 5000 /* additional IMAGE pools */ -}; - -#define MIN_SLOP 50 /* greater than 0 to avoid futile looping */ - - -METHODDEF void * -alloc_small (j_common_ptr cinfo, int pool_id, size_t sizeofobject) -/* Allocate a "small" object */ -{ - my_mem_ptr mem = (my_mem_ptr) cinfo->mem; - small_pool_ptr hdr_ptr, prev_hdr_ptr; - char * data_ptr; - size_t odd_bytes, min_request, slop; - - /* Check for unsatisfiable request (do now to ensure no overflow below) */ - if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(small_pool_hdr))) - out_of_memory(cinfo, 1); /* request exceeds malloc's ability */ - - /* Round up the requested size to a multiple of SIZEOF(ALIGN_TYPE) */ - odd_bytes = sizeofobject % SIZEOF(ALIGN_TYPE); - if (odd_bytes > 0) - sizeofobject += SIZEOF(ALIGN_TYPE) - odd_bytes; - - /* See if space is available in any existing pool */ - if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) - ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ - prev_hdr_ptr = NULL; - hdr_ptr = mem->small_list[pool_id]; - while (hdr_ptr != NULL) { - if (hdr_ptr->hdr.bytes_left >= sizeofobject) - break; /* found pool with enough space */ - prev_hdr_ptr = hdr_ptr; - hdr_ptr = hdr_ptr->hdr.next; - } - - /* Time to make a new pool? */ - if (hdr_ptr == NULL) { - /* min_request is what we need now, slop is what will be leftover */ - min_request = sizeofobject + SIZEOF(small_pool_hdr); - if (prev_hdr_ptr == NULL) /* first pool in class? */ - slop = first_pool_slop[pool_id]; - else - slop = extra_pool_slop[pool_id]; - /* Don't ask for more than MAX_ALLOC_CHUNK */ - if (slop > (size_t) (MAX_ALLOC_CHUNK-min_request)) - slop = (size_t) (MAX_ALLOC_CHUNK-min_request); - /* Try to get space, if fail reduce slop and try again */ - for (;;) { - hdr_ptr = (small_pool_ptr) jpeg_get_small(cinfo, min_request + slop); - if (hdr_ptr != NULL) - break; - slop /= 2; - if (slop < MIN_SLOP) /* give up when it gets real small */ - out_of_memory(cinfo, 2); /* jpeg_get_small failed */ - } - mem->total_space_allocated += min_request + slop; - /* Success, initialize the new pool header and add to end of list */ - hdr_ptr->hdr.next = NULL; - hdr_ptr->hdr.bytes_used = 0; - hdr_ptr->hdr.bytes_left = sizeofobject + slop; - if (prev_hdr_ptr == NULL) /* first pool in class? */ - mem->small_list[pool_id] = hdr_ptr; - else - prev_hdr_ptr->hdr.next = hdr_ptr; - } - - /* OK, allocate the object from the current pool */ - data_ptr = (char *) (hdr_ptr + 1); /* point to first data byte in pool */ - data_ptr += hdr_ptr->hdr.bytes_used; /* point to place for object */ - hdr_ptr->hdr.bytes_used += sizeofobject; - hdr_ptr->hdr.bytes_left -= sizeofobject; - - return (void *) data_ptr; -} - - -/* - * Allocation of "large" objects. - * - * The external semantics of these are the same as "small" objects, - * except that FAR pointers are used on 80x86. However the pool - * management heuristics are quite different. We assume that each - * request is large enough that it may as well be passed directly to - * jpeg_get_large; the pool management just links everything together - * so that we can free it all on demand. - * Note: the major use of "large" objects is in JSAMPARRAY and JBLOCKARRAY - * structures. The routines that create these structures (see below) - * deliberately bunch rows together to ensure a large request size. - */ - -METHODDEF void FAR * -alloc_large (j_common_ptr cinfo, int pool_id, size_t sizeofobject) -/* Allocate a "large" object */ -{ - my_mem_ptr mem = (my_mem_ptr) cinfo->mem; - large_pool_ptr hdr_ptr; - size_t odd_bytes; - - /* Check for unsatisfiable request (do now to ensure no overflow below) */ - if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr))) - out_of_memory(cinfo, 3); /* request exceeds malloc's ability */ - - /* Round up the requested size to a multiple of SIZEOF(ALIGN_TYPE) */ - odd_bytes = sizeofobject % SIZEOF(ALIGN_TYPE); - if (odd_bytes > 0) - sizeofobject += SIZEOF(ALIGN_TYPE) - odd_bytes; - - /* Always make a new pool */ - if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) - ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ - - hdr_ptr = (large_pool_ptr) jpeg_get_large(cinfo, sizeofobject + - SIZEOF(large_pool_hdr)); - if (hdr_ptr == NULL) - out_of_memory(cinfo, 4); /* jpeg_get_large failed */ - mem->total_space_allocated += sizeofobject + SIZEOF(large_pool_hdr); - - /* Success, initialize the new pool header and add to list */ - hdr_ptr->hdr.next = mem->large_list[pool_id]; - /* We maintain space counts in each pool header for statistical purposes, - * even though they are not needed for allocation. - */ - hdr_ptr->hdr.bytes_used = sizeofobject; - hdr_ptr->hdr.bytes_left = 0; - mem->large_list[pool_id] = hdr_ptr; - - return (void FAR *) (hdr_ptr + 1); /* point to first data byte in pool */ -} - - -/* - * Creation of 2-D sample arrays. - * The pointers are in near heap, the samples themselves in FAR heap. - * - * To minimize allocation overhead and to allow I/O of large contiguous - * blocks, we allocate the sample rows in groups of as many rows as possible - * without exceeding MAX_ALLOC_CHUNK total bytes per allocation request. - * NB: the virtual array control routines, later in this file, know about - * this chunking of rows. The rowsperchunk value is left in the mem manager - * object so that it can be saved away if this sarray is the workspace for - * a virtual array. - */ - -METHODDEF JSAMPARRAY -alloc_sarray (j_common_ptr cinfo, int pool_id, - JDIMENSION samplesperrow, JDIMENSION numrows) -/* Allocate a 2-D sample array */ -{ - my_mem_ptr mem = (my_mem_ptr) cinfo->mem; - JSAMPARRAY result; - JSAMPROW workspace; - JDIMENSION rowsperchunk, currow, i; - long ltemp; - - /* Calculate max # of rows allowed in one allocation chunk */ - ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) / - ((long) samplesperrow * SIZEOF(JSAMPLE)); - if (ltemp <= 0) - ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); - if (ltemp < (long) numrows) - rowsperchunk = (JDIMENSION) ltemp; - else - rowsperchunk = numrows; - mem->last_rowsperchunk = rowsperchunk; - - /* Get space for row pointers (small object) */ - result = (JSAMPARRAY) alloc_small(cinfo, pool_id, - (size_t) (numrows * SIZEOF(JSAMPROW))); - - /* Get the rows themselves (large objects) */ - currow = 0; - while (currow < numrows) { - rowsperchunk = MIN(rowsperchunk, numrows - currow); - workspace = (JSAMPROW) alloc_large(cinfo, pool_id, - (size_t) ((size_t) rowsperchunk * (size_t) samplesperrow - * SIZEOF(JSAMPLE))); - for (i = rowsperchunk; i > 0; i--) { - result[currow++] = workspace; - workspace += samplesperrow; - } - } - - return result; -} - - -/* - * Creation of 2-D coefficient-block arrays. - * This is essentially the same as the code for sample arrays, above. - */ - -METHODDEF JBLOCKARRAY -alloc_barray (j_common_ptr cinfo, int pool_id, - JDIMENSION blocksperrow, JDIMENSION numrows) -/* Allocate a 2-D coefficient-block array */ -{ - my_mem_ptr mem = (my_mem_ptr) cinfo->mem; - JBLOCKARRAY result; - JBLOCKROW workspace; - JDIMENSION rowsperchunk, currow, i; - long ltemp; - - /* Calculate max # of rows allowed in one allocation chunk */ - ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) / - ((long) blocksperrow * SIZEOF(JBLOCK)); - if (ltemp <= 0) - ERREXIT(cinfo, JERR_WIDTH_OVERFLOW); - if (ltemp < (long) numrows) - rowsperchunk = (JDIMENSION) ltemp; - else - rowsperchunk = numrows; - mem->last_rowsperchunk = rowsperchunk; - - /* Get space for row pointers (small object) */ - result = (JBLOCKARRAY) alloc_small(cinfo, pool_id, - (size_t) (numrows * SIZEOF(JBLOCKROW))); - - /* Get the rows themselves (large objects) */ - currow = 0; - while (currow < numrows) { - rowsperchunk = MIN(rowsperchunk, numrows - currow); - workspace = (JBLOCKROW) alloc_large(cinfo, pool_id, - (size_t) ((size_t) rowsperchunk * (size_t) blocksperrow - * SIZEOF(JBLOCK))); - for (i = rowsperchunk; i > 0; i--) { - result[currow++] = workspace; - workspace += blocksperrow; - } - } - - return result; -} - - -/* - * About virtual array management: - * - * To allow machines with limited memory to handle large images, all - * processing in the JPEG system is done a few pixel or block rows at a time. - * The above "normal" array routines are only used to allocate strip buffers - * (as wide as the image, but just a few rows high). - * In some cases multiple passes must be made over the data. In these - * cases the virtual array routines are used. The array is still accessed - * a strip at a time, but the memory manager must save the whole array - * for repeated accesses. The intended implementation is that there is - * a strip buffer in memory (as high as is possible given the desired memory - * limit), plus a backing file that holds the rest of the array. - * - * The request_virt_array routines are told the total size of the image and - * the unit height, which is the number of rows that will be accessed at once; - * the in-memory buffer should be made a multiple of this height for best - * efficiency. - * - * The request routines create control blocks but not the in-memory buffers. - * That is postponed until realize_virt_arrays is called. At that time the - * total amount of space needed is known (approximately, anyway), so free - * memory can be divided up fairly. - * - * The access_virt_array routines are responsible for making a specific strip - * area accessible (after reading or writing the backing file, if necessary). - * Note that the access routines are told whether the caller intends to modify - * the accessed strip; during a read-only pass this saves having to rewrite - * data to disk. - * - * The typical access pattern is one top-to-bottom pass to write the data, - * followed by one or more read-only top-to-bottom passes. However, other - * access patterns may occur while reading. For example, translation of image - * formats that use bottom-to-top scan order will require bottom-to-top read - * passes. The memory manager need not support multiple write passes nor - * funny write orders (meaning that rearranging rows must be handled while - * reading data out of the virtual array, not while putting it in). THIS WILL - * PROBABLY NEED TO CHANGE ... will need multiple write passes for progressive - * JPEG decoding. - * - * In current usage, the access requests are always for nonoverlapping strips; - * that is, successive access start_row numbers always differ by exactly the - * unitheight. This allows fairly simple buffer dump/reload logic if the - * in-memory buffer is made a multiple of the unitheight. The code below - * would work with overlapping access requests, but not very efficiently. - */ - - -METHODDEF jvirt_sarray_ptr -request_virt_sarray (j_common_ptr cinfo, int pool_id, - JDIMENSION samplesperrow, JDIMENSION numrows, - JDIMENSION unitheight) -/* Request a virtual 2-D sample array */ -{ - my_mem_ptr mem = (my_mem_ptr) cinfo->mem; - jvirt_sarray_ptr result; - - /* Only IMAGE-lifetime virtual arrays are currently supported */ - if (pool_id != JPOOL_IMAGE) - ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ - - /* Round array size up to a multiple of unitheight */ - numrows = (JDIMENSION) jround_up((long) numrows, (long) unitheight); - - /* get control block */ - result = (jvirt_sarray_ptr) alloc_small(cinfo, pool_id, - SIZEOF(struct jvirt_sarray_control)); - - result->mem_buffer = NULL; /* marks array not yet realized */ - result->rows_in_array = numrows; - result->samplesperrow = samplesperrow; - result->unitheight = unitheight; - result->b_s_open = FALSE; /* no associated backing-store object */ - result->next = mem->virt_sarray_list; /* add to list of virtual arrays */ - mem->virt_sarray_list = result; - - return result; -} - - -METHODDEF jvirt_barray_ptr -request_virt_barray (j_common_ptr cinfo, int pool_id, - JDIMENSION blocksperrow, JDIMENSION numrows, - JDIMENSION unitheight) -/* Request a virtual 2-D coefficient-block array */ -{ - my_mem_ptr mem = (my_mem_ptr) cinfo->mem; - jvirt_barray_ptr result; - - /* Only IMAGE-lifetime virtual arrays are currently supported */ - if (pool_id != JPOOL_IMAGE) - ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ - - /* Round array size up to a multiple of unitheight */ - numrows = (JDIMENSION) jround_up((long) numrows, (long) unitheight); - - /* get control block */ - result = (jvirt_barray_ptr) alloc_small(cinfo, pool_id, - SIZEOF(struct jvirt_barray_control)); - - result->mem_buffer = NULL; /* marks array not yet realized */ - result->rows_in_array = numrows; - result->blocksperrow = blocksperrow; - result->unitheight = unitheight; - result->b_s_open = FALSE; /* no associated backing-store object */ - result->next = mem->virt_barray_list; /* add to list of virtual arrays */ - mem->virt_barray_list = result; - - return result; -} - - -METHODDEF void -realize_virt_arrays (j_common_ptr cinfo) -/* Allocate the in-memory buffers for any unrealized virtual arrays */ -{ - my_mem_ptr mem = (my_mem_ptr) cinfo->mem; - long space_per_unitheight, maximum_space, avail_mem; - long unitheights, max_unitheights; - jvirt_sarray_ptr sptr; - jvirt_barray_ptr bptr; - - /* Compute the minimum space needed (unitheight rows in each buffer) - * and the maximum space needed (full image height in each buffer). - * These may be of use to the system-dependent jpeg_mem_available routine. - */ - space_per_unitheight = 0; - maximum_space = 0; - for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { - if (sptr->mem_buffer == NULL) { /* if not realized yet */ - space_per_unitheight += (long) sptr->unitheight * - (long) sptr->samplesperrow * SIZEOF(JSAMPLE); - maximum_space += (long) sptr->rows_in_array * - (long) sptr->samplesperrow * SIZEOF(JSAMPLE); - } - } - for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { - if (bptr->mem_buffer == NULL) { /* if not realized yet */ - space_per_unitheight += (long) bptr->unitheight * - (long) bptr->blocksperrow * SIZEOF(JBLOCK); - maximum_space += (long) bptr->rows_in_array * - (long) bptr->blocksperrow * SIZEOF(JBLOCK); - } - } - - if (space_per_unitheight <= 0) - return; /* no unrealized arrays, no work */ - - /* Determine amount of memory to actually use; this is system-dependent. */ - avail_mem = jpeg_mem_available(cinfo, space_per_unitheight, maximum_space, - mem->total_space_allocated); - - /* If the maximum space needed is available, make all the buffers full - * height; otherwise parcel it out with the same number of unitheights - * in each buffer. - */ - if (avail_mem >= maximum_space) - max_unitheights = 1000000000L; - else { - max_unitheights = avail_mem / space_per_unitheight; - /* If there doesn't seem to be enough space, try to get the minimum - * anyway. This allows a "stub" implementation of jpeg_mem_available(). - */ - if (max_unitheights <= 0) - max_unitheights = 1; - } - - /* Allocate the in-memory buffers and initialize backing store as needed. */ - - for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { - if (sptr->mem_buffer == NULL) { /* if not realized yet */ - unitheights = ((long) sptr->rows_in_array - 1L) / sptr->unitheight + 1L; - if (unitheights <= max_unitheights) { - /* This buffer fits in memory */ - sptr->rows_in_mem = sptr->rows_in_array; - } else { - /* It doesn't fit in memory, create backing store. */ - sptr->rows_in_mem = (JDIMENSION) (max_unitheights * sptr->unitheight); - jpeg_open_backing_store(cinfo, & sptr->b_s_info, - (long) sptr->rows_in_array * - (long) sptr->samplesperrow * - (long) SIZEOF(JSAMPLE)); - sptr->b_s_open = TRUE; - } - sptr->mem_buffer = alloc_sarray(cinfo, JPOOL_IMAGE, - sptr->samplesperrow, sptr->rows_in_mem); - sptr->rowsperchunk = mem->last_rowsperchunk; - sptr->cur_start_row = 0; - sptr->dirty = FALSE; - } - } - - for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { - if (bptr->mem_buffer == NULL) { /* if not realized yet */ - unitheights = ((long) bptr->rows_in_array - 1L) / bptr->unitheight + 1L; - if (unitheights <= max_unitheights) { - /* This buffer fits in memory */ - bptr->rows_in_mem = bptr->rows_in_array; - } else { - /* It doesn't fit in memory, create backing store. */ - bptr->rows_in_mem = (JDIMENSION) (max_unitheights * bptr->unitheight); - jpeg_open_backing_store(cinfo, & bptr->b_s_info, - (long) bptr->rows_in_array * - (long) bptr->blocksperrow * - (long) SIZEOF(JBLOCK)); - bptr->b_s_open = TRUE; - } - bptr->mem_buffer = alloc_barray(cinfo, JPOOL_IMAGE, - bptr->blocksperrow, bptr->rows_in_mem); - bptr->rowsperchunk = mem->last_rowsperchunk; - bptr->cur_start_row = 0; - bptr->dirty = FALSE; - } - } -} - - -LOCAL void -do_sarray_io (j_common_ptr cinfo, jvirt_sarray_ptr ptr, boolean writing) -/* Do backing store read or write of a virtual sample array */ -{ - long bytesperrow, file_offset, byte_count, rows, i; - - bytesperrow = (long) ptr->samplesperrow * SIZEOF(JSAMPLE); - file_offset = ptr->cur_start_row * bytesperrow; - /* Loop to read or write each allocation chunk in mem_buffer */ - for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { - /* One chunk, but check for short chunk at end of buffer */ - rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i); - /* Transfer no more than fits in file */ - rows = MIN(rows, (long) ptr->rows_in_array - - ((long) ptr->cur_start_row + i)); - if (rows <= 0) /* this chunk might be past end of file! */ - break; - byte_count = rows * bytesperrow; - if (writing) - (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info, - (void FAR *) ptr->mem_buffer[i], - file_offset, byte_count); - else - (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info, - (void FAR *) ptr->mem_buffer[i], - file_offset, byte_count); - file_offset += byte_count; - } -} - - -LOCAL void -do_barray_io (j_common_ptr cinfo, jvirt_barray_ptr ptr, boolean writing) -/* Do backing store read or write of a virtual coefficient-block array */ -{ - long bytesperrow, file_offset, byte_count, rows, i; - - bytesperrow = (long) ptr->blocksperrow * SIZEOF(JBLOCK); - file_offset = ptr->cur_start_row * bytesperrow; - /* Loop to read or write each allocation chunk in mem_buffer */ - for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) { - /* One chunk, but check for short chunk at end of buffer */ - rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i); - /* Transfer no more than fits in file */ - rows = MIN(rows, (long) ptr->rows_in_array - - ((long) ptr->cur_start_row + i)); - if (rows <= 0) /* this chunk might be past end of file! */ - break; - byte_count = rows * bytesperrow; - if (writing) - (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info, - (void FAR *) ptr->mem_buffer[i], - file_offset, byte_count); - else - (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info, - (void FAR *) ptr->mem_buffer[i], - file_offset, byte_count); - file_offset += byte_count; - } -} - - -METHODDEF JSAMPARRAY -access_virt_sarray (j_common_ptr cinfo, jvirt_sarray_ptr ptr, - JDIMENSION start_row, boolean writable) -/* Access the part of a virtual sample array starting at start_row */ -/* and extending for ptr->unitheight rows. writable is true if */ -/* caller intends to modify the accessed area. */ -{ - /* debugging check */ - if (start_row >= ptr->rows_in_array || ptr->mem_buffer == NULL) - ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); - - /* Make the desired part of the virtual array accessible */ - if (start_row < ptr->cur_start_row || - start_row+ptr->unitheight > ptr->cur_start_row+ptr->rows_in_mem) { - if (! ptr->b_s_open) - ERREXIT(cinfo, JERR_VIRTUAL_BUG); - /* Flush old buffer contents if necessary */ - if (ptr->dirty) { - do_sarray_io(cinfo, ptr, TRUE); - ptr->dirty = FALSE; - } - /* Decide what part of virtual array to access. - * Algorithm: if target address > current window, assume forward scan, - * load starting at target address. If target address < current window, - * assume backward scan, load so that target area is top of window. - * Note that when switching from forward write to forward read, will have - * start_row = 0, so the limiting case applies and we load from 0 anyway. - */ - if (start_row > ptr->cur_start_row) { - ptr->cur_start_row = start_row; - } else { - /* use long arithmetic here to avoid overflow & unsigned problems */ - long ltemp; - - ltemp = (long) start_row + (long) ptr->unitheight - - (long) ptr->rows_in_mem; - if (ltemp < 0) - ltemp = 0; /* don't fall off front end of file */ - ptr->cur_start_row = (JDIMENSION) ltemp; - } - /* If reading, read in the selected part of the array. - * If we are writing, we need not pre-read the selected portion, - * since the access sequence constraints ensure it would be garbage. - */ - if (! writable) { - do_sarray_io(cinfo, ptr, FALSE); - } - } - /* Flag the buffer dirty if caller will write in it */ - if (writable) - ptr->dirty = TRUE; - /* Return address of proper part of the buffer */ - return ptr->mem_buffer + (start_row - ptr->cur_start_row); -} - - -METHODDEF JBLOCKARRAY -access_virt_barray (j_common_ptr cinfo, jvirt_barray_ptr ptr, - JDIMENSION start_row, boolean writable) -/* Access the part of a virtual block array starting at start_row */ -/* and extending for ptr->unitheight rows. writable is true if */ -/* caller intends to modify the accessed area. */ -{ - /* debugging check */ - if (start_row >= ptr->rows_in_array || ptr->mem_buffer == NULL) - ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS); - - /* Make the desired part of the virtual array accessible */ - if (start_row < ptr->cur_start_row || - start_row+ptr->unitheight > ptr->cur_start_row+ptr->rows_in_mem) { - if (! ptr->b_s_open) - ERREXIT(cinfo, JERR_VIRTUAL_BUG); - /* Flush old buffer contents if necessary */ - if (ptr->dirty) { - do_barray_io(cinfo, ptr, TRUE); - ptr->dirty = FALSE; - } - /* Decide what part of virtual array to access. - * Algorithm: if target address > current window, assume forward scan, - * load starting at target address. If target address < current window, - * assume backward scan, load so that target area is top of window. - * Note that when switching from forward write to forward read, will have - * start_row = 0, so the limiting case applies and we load from 0 anyway. - */ - if (start_row > ptr->cur_start_row) { - ptr->cur_start_row = start_row; - } else { - /* use long arithmetic here to avoid overflow & unsigned problems */ - long ltemp; - - ltemp = (long) start_row + (long) ptr->unitheight - - (long) ptr->rows_in_mem; - if (ltemp < 0) - ltemp = 0; /* don't fall off front end of file */ - ptr->cur_start_row = (JDIMENSION) ltemp; - } - /* If reading, read in the selected part of the array. - * If we are writing, we need not pre-read the selected portion, - * since the access sequence constraints ensure it would be garbage. - */ - if (! writable) { - do_barray_io(cinfo, ptr, FALSE); - } - } - /* Flag the buffer dirty if caller will write in it */ - if (writable) - ptr->dirty = TRUE; - /* Return address of proper part of the buffer */ - return ptr->mem_buffer + (start_row - ptr->cur_start_row); -} - - -/* - * Release all objects belonging to a specified pool. - */ - -METHODDEF void -free_pool (j_common_ptr cinfo, int pool_id) -{ - my_mem_ptr mem = (my_mem_ptr) cinfo->mem; - small_pool_ptr shdr_ptr; - large_pool_ptr lhdr_ptr; - size_t space_freed; - - if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS) - ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id); /* safety check */ - -#ifdef MEM_STATS - if (cinfo->err->trace_level > 1) - print_mem_stats(cinfo, pool_id); /* print pool's memory usage statistics */ -#endif - - /* If freeing IMAGE pool, close any virtual arrays first */ - if (pool_id == JPOOL_IMAGE) { - jvirt_sarray_ptr sptr; - jvirt_barray_ptr bptr; - - for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) { - if (sptr->b_s_open) { /* there may be no backing store */ - sptr->b_s_open = FALSE; /* prevent recursive close if error */ - (*sptr->b_s_info.close_backing_store) (cinfo, & sptr->b_s_info); - } - } - mem->virt_sarray_list = NULL; - for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) { - if (bptr->b_s_open) { /* there may be no backing store */ - bptr->b_s_open = FALSE; /* prevent recursive close if error */ - (*bptr->b_s_info.close_backing_store) (cinfo, & bptr->b_s_info); - } - } - mem->virt_barray_list = NULL; - } - - /* Release large objects */ - lhdr_ptr = mem->large_list[pool_id]; - mem->large_list[pool_id] = NULL; - - while (lhdr_ptr != NULL) { - large_pool_ptr next_lhdr_ptr = lhdr_ptr->hdr.next; - space_freed = lhdr_ptr->hdr.bytes_used + - lhdr_ptr->hdr.bytes_left + - SIZEOF(large_pool_hdr); - jpeg_free_large(cinfo, (void FAR *) lhdr_ptr, space_freed); - mem->total_space_allocated -= space_freed; - lhdr_ptr = next_lhdr_ptr; - } - - /* Release small objects */ - shdr_ptr = mem->small_list[pool_id]; - mem->small_list[pool_id] = NULL; - - while (shdr_ptr != NULL) { - small_pool_ptr next_shdr_ptr = shdr_ptr->hdr.next; - space_freed = shdr_ptr->hdr.bytes_used + - shdr_ptr->hdr.bytes_left + - SIZEOF(small_pool_hdr); - jpeg_free_small(cinfo, (void *) shdr_ptr, space_freed); - mem->total_space_allocated -= space_freed; - shdr_ptr = next_shdr_ptr; - } -} - - -/* - * Close up shop entirely. - * Note that this cannot be called unless cinfo->mem is non-NULL. - */ - -METHODDEF void -self_destruct (j_common_ptr cinfo) -{ - int pool; - - /* Close all backing store, release all memory. - * Releasing pools in reverse order might help avoid fragmentation - * with some (brain-damaged) malloc libraries. - */ - for (pool = JPOOL_NUMPOOLS-1; pool >= JPOOL_PERMANENT; pool--) { - free_pool(cinfo, pool); - } - - /* Release the memory manager control block too. */ - jpeg_free_small(cinfo, (void *) cinfo->mem, SIZEOF(my_memory_mgr)); - cinfo->mem = NULL; /* ensures I will be called only once */ - - jpeg_mem_term(cinfo); /* system-dependent cleanup */ -} - - -/* - * Memory manager initialization. - * When this is called, only the error manager pointer is valid in cinfo! - */ - -GLOBAL void -jinit_memory_mgr (j_common_ptr cinfo) -{ - my_mem_ptr mem; - long max_to_use; - int pool; - size_t test_mac; - - cinfo->mem = NULL; /* for safety if init fails */ - - /* Check for configuration errors. - * SIZEOF(ALIGN_TYPE) should be a power of 2; otherwise, it probably - * doesn't reflect any real hardware alignment requirement. - * The test is a little tricky: for X>0, X and X-1 have no one-bits - * in common if and only if X is a power of 2, ie has only one one-bit. - * Some compilers may give an "unreachable code" warning here; ignore it. - */ - if ((SIZEOF(ALIGN_TYPE) & (SIZEOF(ALIGN_TYPE)-1)) != 0) - ERREXIT(cinfo, JERR_BAD_ALIGN_TYPE); - /* MAX_ALLOC_CHUNK must be representable as type size_t, and must be - * a multiple of SIZEOF(ALIGN_TYPE). - * Again, an "unreachable code" warning may be ignored here. - * But a "constant too large" warning means you need to fix MAX_ALLOC_CHUNK. - */ - test_mac = (size_t) MAX_ALLOC_CHUNK; - if ((long) test_mac != MAX_ALLOC_CHUNK || - (MAX_ALLOC_CHUNK % SIZEOF(ALIGN_TYPE)) != 0) - ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK); - - max_to_use = jpeg_mem_init(cinfo); /* system-dependent initialization */ - - /* Attempt to allocate memory manager's control block */ - mem = (my_mem_ptr) jpeg_get_small(cinfo, SIZEOF(my_memory_mgr)); - - if (mem == NULL) { - jpeg_mem_term(cinfo); /* system-dependent cleanup */ - ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 0); - } - - /* OK, fill in the method pointers */ - mem->pub.alloc_small = alloc_small; - mem->pub.alloc_large = alloc_large; - mem->pub.alloc_sarray = alloc_sarray; - mem->pub.alloc_barray = alloc_barray; - mem->pub.request_virt_sarray = request_virt_sarray; - mem->pub.request_virt_barray = request_virt_barray; - mem->pub.realize_virt_arrays = realize_virt_arrays; - mem->pub.access_virt_sarray = access_virt_sarray; - mem->pub.access_virt_barray = access_virt_barray; - mem->pub.free_pool = free_pool; - mem->pub.self_destruct = self_destruct; - - /* Initialize working state */ - mem->pub.max_memory_to_use = max_to_use; - - for (pool = JPOOL_NUMPOOLS-1; pool >= JPOOL_PERMANENT; pool--) { - mem->small_list[pool] = NULL; - mem->large_list[pool] = NULL; - } - mem->virt_sarray_list = NULL; - mem->virt_barray_list = NULL; - - mem->total_space_allocated = SIZEOF(my_memory_mgr); - - /* Declare ourselves open for business */ - cinfo->mem = & mem->pub; - - /* Check for an environment variable JPEGMEM; if found, override the - * default max_memory setting from jpeg_mem_init. Note that the - * surrounding application may again override this value. - * If your system doesn't support getenv(), define NO_GETENV to disable - * this feature. - */ -#ifndef NO_GETENV - { char * memenv; - - if ((memenv = getenv("JPEGMEM")) != NULL) { - char ch = 'x'; - - if (sscanf(memenv, "%ld%c", &max_to_use, &ch) > 0) { - if (ch == 'm' || ch == 'M') - max_to_use *= 1000L; - mem->pub.max_memory_to_use = max_to_use * 1000L; - } - } - } -#endif - -} diff --git a/jpeg/jmemnobs.c b/jpeg/jmemnobs.c deleted file mode 100644 index d758f4000955106efaffaa5ef3a8508e4d2e4595..0000000000000000000000000000000000000000 --- a/jpeg/jmemnobs.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * jmemnobs.c - * - * Copyright (C) 1992-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file provides a really simple implementation of the system- - * dependent portion of the JPEG memory manager. This implementation - * assumes that no backing-store files are needed: all required space - * can be obtained from malloc(). - * This is very portable in the sense that it'll compile on almost anything, - * but you'd better have lots of main memory (or virtual memory) if you want - * to process big images. - * Note that the max_memory_to_use option is ignored by this implementation. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jmemsys.h" /* import the system-dependent declarations */ - -#ifndef HAVE_STDLIB_H /* <stdlib.h> should declare malloc(),free() */ -extern void * malloc JPP((size_t size)); -extern void free JPP((void *ptr)); -#endif - - -/* - * Memory allocation and freeing are controlled by the regular library - * routines malloc() and free(). - */ - -GLOBAL void * -jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) -{ - return (void *) malloc(sizeofobject); -} - -GLOBAL void -jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) -{ - free(object); -} - - -/* - * "Large" objects are treated the same as "small" ones. - * NB: although we include FAR keywords in the routine declarations, - * this file won't actually work in 80x86 small/medium model; at least, - * you probably won't be able to process useful-size images in only 64KB. - */ - -GLOBAL void FAR * -jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) -{ - return (void FAR *) malloc(sizeofobject); -} - -GLOBAL void -jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) -{ - free(object); -} - - -/* - * This routine computes the total memory space available for allocation. - * Here we always say, "we got all you want bud!" - */ - -GLOBAL long -jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, - long max_bytes_needed, long already_allocated) -{ - return max_bytes_needed; -} - - -/* - * Backing store (temporary file) management. - * Since jpeg_mem_available always promised the moon, - * this should never be called and we can just error out. - */ - -GLOBAL void -jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, - long total_bytes_needed) -{ - ERREXIT(cinfo, JERR_NO_BACKING_STORE); -} - - -/* - * These routines take care of any system-dependent initialization and - * cleanup required. Here, there isn't any. - */ - -GLOBAL long -jpeg_mem_init (j_common_ptr cinfo) -{ - return 0; /* just set max_memory_to_use to 0 */ -} - -GLOBAL void -jpeg_mem_term (j_common_ptr cinfo) -{ - /* no work */ -} diff --git a/jpeg/jmemsys.h b/jpeg/jmemsys.h deleted file mode 100644 index 033d29a79cba0126098411edb0c2cb315d78053d..0000000000000000000000000000000000000000 --- a/jpeg/jmemsys.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - * jmemsys.h - * - * Copyright (C) 1992-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This include file defines the interface between the system-independent - * and system-dependent portions of the JPEG memory manager. No other - * modules need include it. (The system-independent portion is jmemmgr.c; - * there are several different versions of the system-dependent portion.) - * - * This file works as-is for the system-dependent memory managers supplied - * in the IJG distribution. You may need to modify it if you write a - * custom memory manager. If system-dependent changes are needed in - * this file, the best method is to #ifdef them based on a configuration - * symbol supplied in jconfig.h, as we have done with USE_MSDOS_MEMMGR. - */ - - -/* Short forms of external names for systems with brain-damaged linkers. */ - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jpeg_get_small jGetSmall -#define jpeg_free_small jFreeSmall -#define jpeg_get_large jGetLarge -#define jpeg_free_large jFreeLarge -#define jpeg_mem_available jMemAvail -#define jpeg_open_backing_store jOpenBackStore -#define jpeg_mem_init jMemInit -#define jpeg_mem_term jMemTerm -#endif /* NEED_SHORT_EXTERNAL_NAMES */ - - -/* - * These two functions are used to allocate and release small chunks of - * memory. (Typically the total amount requested through jpeg_get_small is - * no more than 20K or so; this will be requested in chunks of a few K each.) - * Behavior should be the same as for the standard library functions malloc - * and free; in particular, jpeg_get_small must return NULL on failure. - * On most systems, these ARE malloc and free. jpeg_free_small is passed the - * size of the object being freed, just in case it's needed. - * On an 80x86 machine using small-data memory model, these manage near heap. - */ - -EXTERN void * jpeg_get_small JPP((j_common_ptr cinfo, size_t sizeofobject)); -EXTERN void jpeg_free_small JPP((j_common_ptr cinfo, void * object, - size_t sizeofobject)); - -/* - * These two functions are used to allocate and release large chunks of - * memory (up to the total free space designated by jpeg_mem_available). - * The interface is the same as above, except that on an 80x86 machine, - * far pointers are used. On most other machines these are identical to - * the jpeg_get/free_small routines; but we keep them separate anyway, - * in case a different allocation strategy is desirable for large chunks. - */ - -EXTERN void FAR * jpeg_get_large JPP((j_common_ptr cinfo,size_t sizeofobject)); -EXTERN void jpeg_free_large JPP((j_common_ptr cinfo, void FAR * object, - size_t sizeofobject)); - -/* - * The macro MAX_ALLOC_CHUNK designates the maximum number of bytes that may - * be requested in a single call to jpeg_get_large (and jpeg_get_small for that - * matter, but that case should never come into play). This macro is needed - * to model the 64Kb-segment-size limit of far addressing on 80x86 machines. - * On those machines, we expect that jconfig.h will provide a proper value. - * On machines with 32-bit flat address spaces, any large constant may be used. - * - * NB: jmemmgr.c expects that MAX_ALLOC_CHUNK will be representable as type - * size_t and will be a multiple of sizeof(align_type). - */ - -#ifndef MAX_ALLOC_CHUNK /* may be overridden in jconfig.h */ -#define MAX_ALLOC_CHUNK 1000000000L -#endif - -/* - * This routine computes the total space still available for allocation by - * jpeg_get_large. If more space than this is needed, backing store will be - * used. NOTE: any memory already allocated must not be counted. - * - * There is a minimum space requirement, corresponding to the minimum - * feasible buffer sizes; jmemmgr.c will request that much space even if - * jpeg_mem_available returns zero. The maximum space needed, enough to hold - * all working storage in memory, is also passed in case it is useful. - * Finally, the total space already allocated is passed. If no better - * method is available, cinfo->mem->max_memory_to_use - already_allocated - * is often a suitable calculation. - * - * It is OK for jpeg_mem_available to underestimate the space available - * (that'll just lead to more backing-store access than is really necessary). - * However, an overestimate will lead to failure. Hence it's wise to subtract - * a slop factor from the true available space. 5% should be enough. - * - * On machines with lots of virtual memory, any large constant may be returned. - * Conversely, zero may be returned to always use the minimum amount of memory. - */ - -EXTERN long jpeg_mem_available JPP((j_common_ptr cinfo, - long min_bytes_needed, - long max_bytes_needed, - long already_allocated)); - - -/* - * This structure holds whatever state is needed to access a single - * backing-store object. The read/write/close method pointers are called - * by jmemmgr.c to manipulate the backing-store object; all other fields - * are private to the system-dependent backing store routines. - */ - -#define TEMP_NAME_LENGTH 64 /* max length of a temporary file's name */ - -#ifdef USE_MSDOS_MEMMGR /* DOS-specific junk */ - -typedef unsigned short XMSH; /* type of extended-memory handles */ -typedef unsigned short EMSH; /* type of expanded-memory handles */ - -typedef union { - short file_handle; /* DOS file handle if it's a temp file */ - XMSH xms_handle; /* handle if it's a chunk of XMS */ - EMSH ems_handle; /* handle if it's a chunk of EMS */ -} handle_union; - -#endif /* USE_MSDOS_MEMMGR */ - -typedef struct backing_store_struct * backing_store_ptr; - -typedef struct backing_store_struct { - /* Methods for reading/writing/closing this backing-store object */ - JMETHOD(void, read_backing_store, (j_common_ptr cinfo, - backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count)); - JMETHOD(void, write_backing_store, (j_common_ptr cinfo, - backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count)); - JMETHOD(void, close_backing_store, (j_common_ptr cinfo, - backing_store_ptr info)); - - /* Private fields for system-dependent backing-store management */ -#ifdef USE_MSDOS_MEMMGR - /* For the MS-DOS manager (jmemdos.c), we need: */ - handle_union handle; /* reference to backing-store storage object */ - char temp_name[TEMP_NAME_LENGTH]; /* name if it's a file */ -#else - /* For a typical implementation with temp files, we need: */ - FILE * temp_file; /* stdio reference to temp file */ - char temp_name[TEMP_NAME_LENGTH]; /* name of temp file */ -#endif -} backing_store_info; - -/* - * Initial opening of a backing-store object. This must fill in the - * read/write/close pointers in the object. The read/write routines - * may take an error exit if the specified maximum file size is exceeded. - * (If jpeg_mem_available always returns a large value, this routine can - * just take an error exit.) - */ - -EXTERN void jpeg_open_backing_store JPP((j_common_ptr cinfo, - backing_store_ptr info, - long total_bytes_needed)); - - -/* - * These routines take care of any system-dependent initialization and - * cleanup required. jpeg_mem_init will be called before anything is - * allocated (and, therefore, nothing in cinfo is of use except the error - * manager pointer). It should return a suitable default value for - * max_memory_to_use; this may subsequently be overridden by the surrounding - * application. (Note that max_memory_to_use is only important if - * jpeg_mem_available chooses to consult it ... no one else will.) - * jpeg_mem_term may assume that all requested memory has been freed and that - * all opened backing-store objects have been closed. - */ - -EXTERN long jpeg_mem_init JPP((j_common_ptr cinfo)); -EXTERN void jpeg_mem_term JPP((j_common_ptr cinfo)); diff --git a/jpeg/jmorecfg.h b/jpeg/jmorecfg.h deleted file mode 100644 index b3d2baa184b4b22320305a828feed4e35fbf3cec..0000000000000000000000000000000000000000 --- a/jpeg/jmorecfg.h +++ /dev/null @@ -1,345 +0,0 @@ -/* - * jmorecfg.h - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains additional configuration options that customize the - * JPEG software for special applications or support machine-dependent - * optimizations. Most users will not need to touch this file. - */ - - -/* - * Define BITS_IN_JSAMPLE as either - * 8 for 8-bit sample values (the usual setting) - * 12 for 12-bit sample values - * Only 8 and 12 are legal data precisions for lossy JPEG according to the - * JPEG standard, and the IJG code does not support anything else! - * We do not support run-time selection of data precision, sorry. - */ - -#define BITS_IN_JSAMPLE 8 /* use 8 or 12 */ - - -/* - * Maximum number of components (color channels) allowed in JPEG image. - * To meet the letter of the JPEG spec, set this to 255. However, darn - * few applications need more than 4 channels (maybe 5 for CMYK + alpha - * mask). We recommend 10 as a reasonable compromise; use 4 if you are - * really short on memory. (Each allowed component costs a hundred or so - * bytes of storage, whether actually used in an image or not.) - */ - -#define MAX_COMPONENTS 10 /* maximum number of image components */ - - -/* - * Basic data types. - * You may need to change these if you have a machine with unusual data - * type sizes; for example, "char" not 8 bits, "short" not 16 bits, - * or "long" not 32 bits. We don't care whether "int" is 16 or 32 bits, - * but it had better be at least 16. - */ - -/* Representation of a single sample (pixel element value). - * We frequently allocate large arrays of these, so it's important to keep - * them small. But if you have memory to burn and access to char or short - * arrays is very slow on your hardware, you might want to change these. - */ - -#if BITS_IN_JSAMPLE == 8 -/* JSAMPLE should be the smallest type that will hold the values 0..255. - * You can use a signed char by having GETJSAMPLE mask it with 0xFF. - */ - -#ifdef HAVE_UNSIGNED_CHAR - -typedef unsigned char JSAMPLE; -#define GETJSAMPLE(value) ((int) (value)) - -#else /* not HAVE_UNSIGNED_CHAR */ - -typedef char JSAMPLE; -#ifdef CHAR_IS_UNSIGNED -#define GETJSAMPLE(value) ((int) (value)) -#else -#define GETJSAMPLE(value) ((int) (value) & 0xFF) -#endif /* CHAR_IS_UNSIGNED */ - -#endif /* HAVE_UNSIGNED_CHAR */ - -#define MAXJSAMPLE 255 -#define CENTERJSAMPLE 128 - -#endif /* BITS_IN_JSAMPLE == 8 */ - - -#if BITS_IN_JSAMPLE == 12 -/* JSAMPLE should be the smallest type that will hold the values 0..4095. - * On nearly all machines "short" will do nicely. - */ - -typedef short JSAMPLE; -#define GETJSAMPLE(value) ((int) (value)) - -#define MAXJSAMPLE 4095 -#define CENTERJSAMPLE 2048 - -#endif /* BITS_IN_JSAMPLE == 12 */ - - -/* Representation of a DCT frequency coefficient. - * This should be a signed value of at least 16 bits; "short" is usually OK. - * Again, we allocate large arrays of these, but you can change to int - * if you have memory to burn and "short" is really slow. - */ - -typedef short JCOEF; - - -/* Compressed datastreams are represented as arrays of JOCTET. - * These must be EXACTLY 8 bits wide, at least once they are written to - * external storage. Note that when using the stdio data source/destination - * managers, this is also the data type passed to fread/fwrite. - */ - -#ifdef HAVE_UNSIGNED_CHAR - -typedef unsigned char JOCTET; -#define GETJOCTET(value) (value) - -#else /* not HAVE_UNSIGNED_CHAR */ - -typedef char JOCTET; -#ifdef CHAR_IS_UNSIGNED -#define GETJOCTET(value) (value) -#else -#define GETJOCTET(value) ((value) & 0xFF) -#endif /* CHAR_IS_UNSIGNED */ - -#endif /* HAVE_UNSIGNED_CHAR */ - - -/* These typedefs are used for various table entries and so forth. - * They must be at least as wide as specified; but making them too big - * won't cost a huge amount of memory, so we don't provide special - * extraction code like we did for JSAMPLE. (In other words, these - * typedefs live at a different point on the speed/space tradeoff curve.) - */ - -/* UINT8 must hold at least the values 0..255. */ - -#ifdef HAVE_UNSIGNED_CHAR -typedef unsigned char UINT8; -#else /* not HAVE_UNSIGNED_CHAR */ -#ifdef CHAR_IS_UNSIGNED -typedef char UINT8; -#else /* not CHAR_IS_UNSIGNED */ -typedef short UINT8; -#endif /* CHAR_IS_UNSIGNED */ -#endif /* HAVE_UNSIGNED_CHAR */ - -/* UINT16 must hold at least the values 0..65535. */ - -#ifdef HAVE_UNSIGNED_SHORT -typedef unsigned short UINT16; -#else /* not HAVE_UNSIGNED_SHORT */ -typedef unsigned int UINT16; -#endif /* HAVE_UNSIGNED_SHORT */ - -/* INT16 must hold at least the values -32768..32767. */ - -#ifndef XMD_H /* X11/xmd.h correctly defines INT16 */ -typedef short INT16; -#endif - -/* INT32 must hold at least signed 32-bit values. */ - -#ifndef WIN32//geuz -#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */ -typedef long INT32; -#endif -#endif//geuz - -/* Datatype used for image dimensions. The JPEG standard only supports - * images up to 64K*64K due to 16-bit fields in SOF markers. Therefore - * "unsigned int" is sufficient on all machines. However, if you need to - * handle larger images and you don't mind deviating from the spec, you - * can change this datatype. - */ - -typedef unsigned int JDIMENSION; - -#define JPEG_MAX_DIMENSION 65500L /* a tad under 64K to prevent overflows */ - - -/* These defines are used in all function definitions and extern declarations. - * You could modify them if you need to change function linkage conventions. - * Another application is to make all functions global for use with debuggers - * or code profilers that require it. - */ - -#define METHODDEF static /* a function called through method pointers */ -#define LOCAL static /* a function used only in its module */ -#define GLOBAL /* a function referenced thru EXTERNs */ -#define EXTERN extern /* a reference to a GLOBAL function */ - - -/* Here is the pseudo-keyword for declaring pointers that must be "far" - * on 80x86 machines. Most of the specialized coding for 80x86 is handled - * by just saying "FAR *" where such a pointer is needed. In a few places - * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol. - */ - -#ifdef NEED_FAR_POINTERS -#define FAR far -#else -#define FAR -#endif - - -/* - * On a few systems, type boolean and/or its values FALSE, TRUE may appear - * in standard header files. Or you may have conflicts with application- - * specific header files that you want to include together with these files. - * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. - */ - -//#ifndef WIN32 //geuz -#ifndef HAVE_BOOLEAN -typedef int boolean; -#endif -//#endif //geuz - -#ifndef FALSE /* in case these macros already exist */ -#define FALSE 0 /* values of boolean */ -#endif - -#ifndef TRUE -#define TRUE 1 -#endif - - -/* - * The remaining options affect code selection within the JPEG library, - * but they don't need to be visible to most applications using the library. - * To minimize application namespace pollution, the symbols won't be - * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined. - */ - -#ifdef JPEG_INTERNALS -#define JPEG_INTERNAL_OPTIONS -#endif - -#ifdef JPEG_INTERNAL_OPTIONS - - -/* - * These defines indicate whether to include various optional functions. - * Undefining some of these symbols will produce a smaller but less capable - * library. Note that you can leave certain source files out of the - * compilation/linking process if you've #undef'd the corresponding symbols. - * (You may HAVE to do that if your compiler doesn't like null source files.) - */ - -/* Arithmetic coding is unsupported for legal reasons. Complaints to IBM. */ - -/* Capability options common to encoder and decoder: */ - -#define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */ -#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */ -#define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */ - -/* Encoder capability options: */ - -#undef C_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ -#undef C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? (NYI) */ -#define ENTROPY_OPT_SUPPORTED /* Optimization of entropy coding parms? */ -/* Note: if you selected 12-bit data precision, it is dangerous to turn off - * ENTROPY_OPT_SUPPORTED. The standard Huffman tables are only good for 8-bit - * precision, so jchuff.c normally uses entropy optimization to compute - * usable tables for higher precision. If you don't want to do optimization, - * you'll have to supply different default Huffman tables. - */ -#define INPUT_SMOOTHING_SUPPORTED /* Input image smoothing option? */ - -/* Decoder capability options: */ - -#undef D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ -#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ -#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */ -#undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */ -#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */ -#define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */ -#define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */ - -/* more capability options later, no doubt */ - - -/* - * Ordering of RGB data in scanlines passed to or from the application. - * If your application wants to deal with data in the order B,G,R, just - * change these macros. You can also deal with formats such as R,G,B,X - * (one extra byte per pixel) by changing RGB_PIXELSIZE. Note that changing - * the offsets will also change the order in which colormap data is organized. - * RESTRICTIONS: - * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats. - * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not - * useful if you are using JPEG color spaces other than YCbCr or grayscale. - * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE - * is not 3 (they don't understand about dummy color components!). So you - * can't use color quantization if you change that value. - */ - -#define RGB_RED 0 /* Offset of Red in an RGB scanline element */ -#define RGB_GREEN 1 /* Offset of Green */ -#define RGB_BLUE 2 /* Offset of Blue */ -#define RGB_PIXELSIZE 3 /* JSAMPLEs per RGB scanline element */ - - -/* Definitions for speed-related optimizations. */ - - -/* If your compiler supports inline functions, define INLINE - * as the inline keyword; otherwise define it as empty. - */ - -#ifndef INLINE -#ifdef __GNUC__ /* for instance, GNU C knows about inline */ -#define INLINE __inline__ -#endif -#ifndef INLINE -#define INLINE /* default is to define it as empty */ -#endif -#endif - - -/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying - * two 16-bit shorts is faster than multiplying two ints. Define MULTIPLIER - * as short on such a machine. MULTIPLIER must be at least 16 bits wide. - */ - -#ifndef MULTIPLIER -#define MULTIPLIER int /* type for fastest integer multiply */ -#endif - - -/* FAST_FLOAT should be either float or double, whichever is done faster - * by your compiler. (Note that this type is only used in the floating point - * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.) - * Typically, float is faster in ANSI C compilers, while double is faster in - * pre-ANSI compilers (because they insist on converting to double anyway). - * The code below therefore chooses float if we have ANSI-style prototypes. - */ - -#ifndef FAST_FLOAT -#ifdef HAVE_PROTOTYPES -#define FAST_FLOAT float -#else -#define FAST_FLOAT double -#endif -#endif - -#endif /* JPEG_INTERNAL_OPTIONS */ diff --git a/jpeg/jpegint.h b/jpeg/jpegint.h deleted file mode 100644 index 5ae3a9f34c820604f6dc7222e19a6a46ccd4e7f4..0000000000000000000000000000000000000000 --- a/jpeg/jpegint.h +++ /dev/null @@ -1,361 +0,0 @@ -/* - * jpegint.h - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file provides common declarations for the various JPEG modules. - * These declarations are considered internal to the JPEG library; most - * applications using the library shouldn't need to include this file. - */ - - -/* Declarations for both compression & decompression */ - -typedef enum { /* Operating modes for buffer controllers */ - JBUF_PASS_THRU, /* Plain stripwise operation */ - JBUF_CRANK_SOURCE, /* Run source subobject, no output expected */ - /* Remaining modes require a full-image buffer to have been created */ - JBUF_SAVE_SOURCE, /* Run source subobject only, save output */ - JBUF_CRANK_DEST, /* Run dest subobject only, using saved data */ - JBUF_SAVE_AND_PASS /* Run both subobjects, save output */ -} J_BUF_MODE; - -/* Values of global_state field */ -#define CSTATE_START 100 /* after create_compress */ -#define CSTATE_SCANNING 101 /* start_compress done, write_scanlines OK */ -#define CSTATE_RAW_OK 102 /* start_compress done, write_raw_data OK */ -#define DSTATE_START 200 /* after create_decompress */ -#define DSTATE_INHEADER 201 /* read_header initialized but not done */ -#define DSTATE_READY 202 /* read_header done, found image */ -#define DSTATE_SCANNING 203 /* start_decompress done, read_scanlines OK */ -#define DSTATE_RAW_OK 204 /* start_decompress done, read_raw_data OK */ -#define DSTATE_STOPPING 205 /* done reading data, looking for EOI */ - - -/* Declarations for compression modules */ - -/* Master control module */ -struct jpeg_comp_master { - JMETHOD(void, prepare_for_pass, (j_compress_ptr cinfo)); - JMETHOD(void, pass_startup, (j_compress_ptr cinfo)); - JMETHOD(void, finish_pass, (j_compress_ptr cinfo)); - - /* State variables made visible to other modules */ - boolean call_pass_startup; /* True if pass_startup must be called */ - boolean is_last_pass; /* True during last pass */ -}; - -/* Main buffer control (downsampled-data buffer) */ -struct jpeg_c_main_controller { - JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); - JMETHOD(void, process_data, (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, - JDIMENSION in_rows_avail)); -}; - -/* Compression preprocessing (downsampling input buffer control) */ -struct jpeg_c_prep_controller { - JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); - JMETHOD(void, pre_process_data, (j_compress_ptr cinfo, - JSAMPARRAY input_buf, - JDIMENSION *in_row_ctr, - JDIMENSION in_rows_avail, - JSAMPIMAGE output_buf, - JDIMENSION *out_row_group_ctr, - JDIMENSION out_row_groups_avail)); -}; - -/* Coefficient buffer control */ -struct jpeg_c_coef_controller { - JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode)); - JMETHOD(void, compress_data, (j_compress_ptr cinfo, - JSAMPIMAGE input_buf, - JDIMENSION *in_mcu_ctr)); -}; - -/* Colorspace conversion */ -struct jpeg_color_converter { - JMETHOD(void, start_pass, (j_compress_ptr cinfo)); - JMETHOD(void, color_convert, (j_compress_ptr cinfo, - JSAMPARRAY input_buf, JSAMPIMAGE output_buf, - JDIMENSION output_row, int num_rows)); -}; - -/* Downsampling */ -struct jpeg_downsampler { - JMETHOD(void, start_pass, (j_compress_ptr cinfo)); - JMETHOD(void, downsample, (j_compress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION in_row_index, - JSAMPIMAGE output_buf, - JDIMENSION out_row_group_index)); - - boolean need_context_rows; /* TRUE if need rows above & below */ -}; - -/* Forward DCT (also controls coefficient quantization) */ -struct jpeg_forward_dct { - JMETHOD(void, start_pass, (j_compress_ptr cinfo)); - /* perhaps this should be an array??? */ - JMETHOD(void, forward_DCT, (j_compress_ptr cinfo, - jpeg_component_info * compptr, - JSAMPARRAY sample_data, JBLOCKROW coef_blocks, - JDIMENSION start_row, JDIMENSION start_col, - JDIMENSION num_blocks)); -}; - -/* Entropy encoding */ -struct jpeg_entropy_encoder { - JMETHOD(void, start_pass, (j_compress_ptr cinfo, boolean gather_statistics)); - JMETHOD(boolean, encode_mcu, (j_compress_ptr cinfo, JBLOCKROW *MCU_data)); - JMETHOD(void, finish_pass, (j_compress_ptr cinfo)); -}; - -/* Marker writing */ -struct jpeg_marker_writer { - /* write_any_marker is exported for use by applications */ - /* Probably only COM and APPn markers should be written */ - JMETHOD(void, write_any_marker, (j_compress_ptr cinfo, int marker, - const JOCTET *dataptr, unsigned int datalen)); - JMETHOD(void, write_file_header, (j_compress_ptr cinfo)); - JMETHOD(void, write_frame_header, (j_compress_ptr cinfo)); - JMETHOD(void, write_scan_header, (j_compress_ptr cinfo)); - JMETHOD(void, write_file_trailer, (j_compress_ptr cinfo)); - JMETHOD(void, write_tables_only, (j_compress_ptr cinfo)); -}; - - -/* Declarations for decompression modules */ - -/* Master control module */ -struct jpeg_decomp_master { - JMETHOD(void, prepare_for_pass, (j_decompress_ptr cinfo)); - JMETHOD(void, finish_pass, (j_decompress_ptr cinfo)); - - /* State variables made visible to other modules */ - boolean is_last_pass; /* True during last pass */ - boolean eoi_processed; /* True if EOI marker already read */ -}; - -/* Main buffer control (downsampled-data buffer) */ -struct jpeg_d_main_controller { - JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)); - JMETHOD(void, process_data, (j_decompress_ptr cinfo, - JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, - JDIMENSION out_rows_avail)); - /* During input-only passes, output_buf and out_rows_avail are ignored. - * out_row_ctr is incremented towards the limit num_chunks. - */ - JDIMENSION num_chunks; /* number of chunks to be processed in pass */ -}; - -/* Coefficient buffer control */ -struct jpeg_d_coef_controller { - JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)); - JMETHOD(boolean, decompress_data, (j_decompress_ptr cinfo, - JSAMPIMAGE output_buf)); -}; - -/* Decompression postprocessing (color quantization buffer control) */ -struct jpeg_d_post_controller { - JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)); - JMETHOD(void, post_process_data, (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, - JDIMENSION *in_row_group_ctr, - JDIMENSION in_row_groups_avail, - JSAMPARRAY output_buf, - JDIMENSION *out_row_ctr, - JDIMENSION out_rows_avail)); -}; - -/* Marker reading & parsing */ -struct jpeg_marker_reader { - JMETHOD(void, reset_marker_reader, (j_decompress_ptr cinfo)); - /* Read markers until SOS or EOI. - * Returns same codes as are defined for jpeg_read_header, - * but HEADER_OK and HEADER_TABLES_ONLY merely indicate which marker type - * stopped the scan --- further validation is needed to declare file OK. - */ - JMETHOD(int, read_markers, (j_decompress_ptr cinfo)); - /* Read a restart marker --- exported for use by entropy decoder only */ - jpeg_marker_parser_method read_restart_marker; - /* Application-overridable marker processing methods */ - jpeg_marker_parser_method process_COM; - jpeg_marker_parser_method process_APPn[16]; - - /* State of marker reader --- nominally internal, but applications - * supplying COM or APPn handlers might like to know the state. - */ - boolean saw_SOI; /* found SOI? */ - boolean saw_SOF; /* found SOF? */ - int next_restart_num; /* next restart number expected (0-7) */ - unsigned int discarded_bytes; /* # of bytes skipped looking for a marker */ -}; - -/* Entropy decoding */ -struct jpeg_entropy_decoder { - JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); - JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo, - JBLOCKROW *MCU_data)); -}; - -/* Inverse DCT (also performs dequantization) */ -typedef JMETHOD(void, inverse_DCT_method_ptr, - (j_decompress_ptr cinfo, jpeg_component_info * compptr, - JCOEFPTR coef_block, - JSAMPARRAY output_buf, JDIMENSION output_col)); - -struct jpeg_inverse_dct { - JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo)); - JMETHOD(void, start_output_pass, (j_decompress_ptr cinfo)); - /* It is useful to allow each component to have a separate IDCT method. */ - inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS]; -}; - -/* Upsampling (note that upsampler must also call color converter) */ -struct jpeg_upsampler { - JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); - JMETHOD(void, upsample, (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, - JDIMENSION *in_row_group_ctr, - JDIMENSION in_row_groups_avail, - JSAMPARRAY output_buf, - JDIMENSION *out_row_ctr, - JDIMENSION out_rows_avail)); - - boolean need_context_rows; /* TRUE if need rows above & below */ -}; - -/* Colorspace conversion */ -struct jpeg_color_deconverter { - JMETHOD(void, start_pass, (j_decompress_ptr cinfo)); - JMETHOD(void, color_convert, (j_decompress_ptr cinfo, - JSAMPIMAGE input_buf, JDIMENSION input_row, - JSAMPARRAY output_buf, int num_rows)); -}; - -/* Color quantization or color precision reduction */ -struct jpeg_color_quantizer { - JMETHOD(void, start_pass, (j_decompress_ptr cinfo, boolean is_pre_scan)); - JMETHOD(void, color_quantize, (j_decompress_ptr cinfo, - JSAMPARRAY input_buf, JSAMPARRAY output_buf, - int num_rows)); - JMETHOD(void, finish_pass, (j_decompress_ptr cinfo)); -}; - - -/* Miscellaneous useful macros */ - -#undef MAX -#define MAX(a,b) ((a) > (b) ? (a) : (b)) -#undef MIN -#define MIN(a,b) ((a) < (b) ? (a) : (b)) - - -/* We assume that right shift corresponds to signed division by 2 with - * rounding towards minus infinity. This is correct for typical "arithmetic - * shift" instructions that shift in copies of the sign bit. But some - * C compilers implement >> with an unsigned shift. For these machines you - * must define RIGHT_SHIFT_IS_UNSIGNED. - * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity. - * It is only applied with constant shift counts. SHIFT_TEMPS must be - * included in the variables of any routine using RIGHT_SHIFT. - */ - -#ifdef RIGHT_SHIFT_IS_UNSIGNED -#define SHIFT_TEMPS INT32 shift_temp; -#define RIGHT_SHIFT(x,shft) \ - ((shift_temp = (x)) < 0 ? \ - (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \ - (shift_temp >> (shft))) -#else -#define SHIFT_TEMPS -#define RIGHT_SHIFT(x,shft) ((x) >> (shft)) -#endif - - -/* Short forms of external names for systems with brain-damaged linkers. */ - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jinit_master_compress jICMaster -#define jinit_c_main_controller jICMainC -#define jinit_c_prep_controller jICPrepC -#define jinit_c_coef_controller jICCoefC -#define jinit_color_converter jICColor -#define jinit_downsampler jIDownsampler -#define jinit_forward_dct jIFDCT -#define jinit_huff_encoder jIHEncoder -#define jinit_marker_writer jIMWriter -#define jinit_master_decompress jIDMaster -#define jinit_d_main_controller jIDMainC -#define jinit_d_coef_controller jIDCoefC -#define jinit_d_post_controller jIDPostC -#define jinit_marker_reader jIMReader -#define jinit_huff_decoder jIHDecoder -#define jinit_inverse_dct jIIDCT -#define jinit_upsampler jIUpsampler -#define jinit_color_deconverter jIDColor -#define jinit_1pass_quantizer jI1Quant -#define jinit_2pass_quantizer jI2Quant -#define jinit_merged_upsampler jIMUpsampler -#define jinit_memory_mgr jIMemMgr -#define jdiv_round_up jDivRound -#define jround_up jRound -#define jcopy_sample_rows jCopySamples -#define jcopy_block_row jCopyBlocks -#define jzero_far jZeroFar -#endif /* NEED_SHORT_EXTERNAL_NAMES */ - - -/* Compression module initialization routines */ -EXTERN void jinit_master_compress JPP((j_compress_ptr cinfo)); -EXTERN void jinit_c_main_controller JPP((j_compress_ptr cinfo, - boolean need_full_buffer)); -EXTERN void jinit_c_prep_controller JPP((j_compress_ptr cinfo, - boolean need_full_buffer)); -EXTERN void jinit_c_coef_controller JPP((j_compress_ptr cinfo, - boolean need_full_buffer)); -EXTERN void jinit_color_converter JPP((j_compress_ptr cinfo)); -EXTERN void jinit_downsampler JPP((j_compress_ptr cinfo)); -EXTERN void jinit_forward_dct JPP((j_compress_ptr cinfo)); -EXTERN void jinit_huff_encoder JPP((j_compress_ptr cinfo)); -EXTERN void jinit_marker_writer JPP((j_compress_ptr cinfo)); -/* Decompression module initialization routines */ -EXTERN void jinit_master_decompress JPP((j_decompress_ptr cinfo)); -EXTERN void jinit_d_main_controller JPP((j_decompress_ptr cinfo, - boolean need_full_buffer)); -EXTERN void jinit_d_coef_controller JPP((j_decompress_ptr cinfo, - boolean need_full_buffer)); -EXTERN void jinit_d_post_controller JPP((j_decompress_ptr cinfo, - boolean need_full_buffer)); -EXTERN void jinit_marker_reader JPP((j_decompress_ptr cinfo)); -EXTERN void jinit_huff_decoder JPP((j_decompress_ptr cinfo)); -EXTERN void jinit_inverse_dct JPP((j_decompress_ptr cinfo)); -EXTERN void jinit_upsampler JPP((j_decompress_ptr cinfo)); -EXTERN void jinit_color_deconverter JPP((j_decompress_ptr cinfo)); -EXTERN void jinit_1pass_quantizer JPP((j_decompress_ptr cinfo)); -EXTERN void jinit_2pass_quantizer JPP((j_decompress_ptr cinfo)); -EXTERN void jinit_merged_upsampler JPP((j_decompress_ptr cinfo)); -/* Memory manager initialization */ -EXTERN void jinit_memory_mgr JPP((j_common_ptr cinfo)); - -/* Utility routines in jutils.c */ -EXTERN long jdiv_round_up JPP((long a, long b)); -EXTERN long jround_up JPP((long a, long b)); -EXTERN void jcopy_sample_rows JPP((JSAMPARRAY input_array, int source_row, - JSAMPARRAY output_array, int dest_row, - int num_rows, JDIMENSION num_cols)); -EXTERN void jcopy_block_row JPP((JBLOCKROW input_row, JBLOCKROW output_row, - JDIMENSION num_blocks)); -EXTERN void jzero_far JPP((void FAR * target, size_t bytestozero)); - - -/* Suppress undefined-structure complaints if necessary. */ - -#ifdef INCOMPLETE_TYPES_BROKEN -#ifndef AM_MEMORY_MANAGER /* only jmemmgr.c defines these */ -struct jvirt_sarray_control { long dummy; }; -struct jvirt_barray_control { long dummy; }; -#endif -#endif /* INCOMPLETE_TYPES_BROKEN */ diff --git a/jpeg/jpeglib.h b/jpeg/jpeglib.h deleted file mode 100644 index ca33a83dba6494f4c27f214455c3dd508aaa7446..0000000000000000000000000000000000000000 --- a/jpeg/jpeglib.h +++ /dev/null @@ -1,934 +0,0 @@ -/* - * jpeglib.h - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file defines the application interface for the JPEG library. - * Most applications using the library need only include this file, - * and perhaps jerror.h if they want to know the exact error codes. - */ - -/* - * First we include the configuration files that record how this - * installation of the JPEG library is set up. jconfig.h can be - * generated automatically for many systems. jmorecfg.h contains - * manual configuration options that most people need not worry about. - */ - -#ifdef WIN32 -#include <windows.h> -#endif - -#ifndef JCONFIG_INCLUDED /* in case jinclude.h already did */ -#include "jconfig.h" /* widely used configuration options */ -#endif -#include "jmorecfg.h" /* seldom changed options */ - - -/* Version ID for the JPEG library. - * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60". - */ - -#define JPEG_LIB_VERSION 50 /* Version 5.0 */ - - -/* Various constants determining the sizes of things. - * All of these are specified by the JPEG standard, so don't change them - * if you want to be compatible. - */ - -#define DCTSIZE 8 /* The basic DCT block is 8x8 samples */ -#define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ -#define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ -#define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ -#define NUM_ARITH_TBLS 16 /* Arith-coding tables are numbered 0..15 */ -#define MAX_COMPS_IN_SCAN 4 /* JPEG limit on # of components in one scan */ -#define MAX_SAMP_FACTOR 4 /* JPEG limit on sampling factors */ -#define MAX_BLOCKS_IN_MCU 10 /* JPEG limit on # of blocks in an MCU */ - - -/* This macro is used to declare a "method", that is, a function pointer. - * We want to supply prototype parameters if the compiler can cope. - * Note that the arglist parameter must be parenthesized! - */ - -#ifdef HAVE_PROTOTYPES -#define JMETHOD(type,methodname,arglist) type (*methodname) arglist -#else -#define JMETHOD(type,methodname,arglist) type (*methodname) () -#endif - - -/* Data structures for images (arrays of samples and of DCT coefficients). - * On 80x86 machines, the image arrays are too big for near pointers, - * but the pointer arrays can fit in near memory. - */ - -typedef JSAMPLE FAR *JSAMPROW; /* ptr to one image row of pixel samples. */ -typedef JSAMPROW *JSAMPARRAY; /* ptr to some rows (a 2-D sample array) */ -typedef JSAMPARRAY *JSAMPIMAGE; /* a 3-D sample array: top index is color */ - -typedef JCOEF JBLOCK[DCTSIZE2]; /* one block of coefficients */ -typedef JBLOCK FAR *JBLOCKROW; /* pointer to one row of coefficient blocks */ -typedef JBLOCKROW *JBLOCKARRAY; /* a 2-D array of coefficient blocks */ -typedef JBLOCKARRAY *JBLOCKIMAGE; /* a 3-D array of coefficient blocks */ - -typedef JCOEF FAR *JCOEFPTR; /* useful in a couple of places */ - - -/* Types for JPEG compression parameters and working tables. */ - - -/* DCT coefficient quantization tables. */ - -typedef struct { - /* This field directly represents the contents of a JPEG DQT marker. - * Note: the values are always given in zigzag order. - */ - UINT16 quantval[DCTSIZE2]; /* quantization step for each coefficient */ - /* This field is used only during compression. It's initialized FALSE when - * the table is created, and set TRUE when it's been output to the file. - * You could suppress output of a table by setting this to TRUE. - * (See jpeg_suppress_tables for an example.) - */ - boolean sent_table; /* TRUE when table has been output */ -} JQUANT_TBL; - - -/* Huffman coding tables. */ - -typedef struct { - /* These two fields directly represent the contents of a JPEG DHT marker */ - UINT8 bits[17]; /* bits[k] = # of symbols with codes of */ - /* length k bits; bits[0] is unused */ - UINT8 huffval[256]; /* The symbols, in order of incr code length */ - /* This field is used only during compression. It's initialized FALSE when - * the table is created, and set TRUE when it's been output to the file. - * You could suppress output of a table by setting this to TRUE. - * (See jpeg_suppress_tables for an example.) - */ - boolean sent_table; /* TRUE when table has been output */ -} JHUFF_TBL; - - -/* Basic info about one component (color channel). */ - -typedef struct { - /* These values are fixed over the whole image. */ - /* For compression, they must be supplied by parameter setup; */ - /* for decompression, they are read from the SOF marker. */ - int component_id; /* identifier for this component (0..255) */ - int component_index; /* its index in SOF or cinfo->comp_info[] */ - int h_samp_factor; /* horizontal sampling factor (1..4) */ - int v_samp_factor; /* vertical sampling factor (1..4) */ - int quant_tbl_no; /* quantization table selector (0..3) */ - /* These values may vary between scans. */ - /* For compression, they must be supplied by parameter setup; */ - /* for decompression, they are read from the SOS marker. */ - int dc_tbl_no; /* DC entropy table selector (0..3) */ - int ac_tbl_no; /* AC entropy table selector (0..3) */ - - /* Remaining fields should be treated as private by applications. */ - - /* These values are computed during compression or decompression startup: */ - /* Component's size in DCT blocks. - * Any dummy blocks added to complete an MCU are not counted; therefore - * these values do not depend on whether a scan is interleaved or not. - */ - JDIMENSION width_in_blocks; - JDIMENSION height_in_blocks; - /* Size of a DCT block in samples. Always DCTSIZE for compression. - * For decompression this is the size of the output from one DCT block, - * reflecting any scaling we choose to apply during the IDCT step. - * Values of 1,2,4,8 are likely to be supported. Note that different - * components may receive different IDCT scalings. - */ - int DCT_scaled_size; - /* The downsampled dimensions are the component's actual, unpadded number - * of samples at the main buffer (preprocessing/compression interface), thus - * downsampled_width = ceil(image_width * Hi/Hmax) - * and similarly for height. For decompression, IDCT scaling is included, so - * downsampled_width = ceil(image_width * Hi/Hmax * DCT_scaled_size/DCTSIZE) - */ - JDIMENSION downsampled_width; /* actual width in samples */ - JDIMENSION downsampled_height; /* actual height in samples */ - /* This flag is used only for decompression. In cases where some of the - * components will be ignored (eg grayscale output from YCbCr image), - * we can skip most computations for the unused components. - */ - boolean component_needed; /* do we need the value of this component? */ - - /* These values are computed before starting a scan of the component: */ - int MCU_width; /* number of blocks per MCU, horizontally */ - int MCU_height; /* number of blocks per MCU, vertically */ - int MCU_blocks; /* MCU_width * MCU_height */ - int MCU_sample_width; /* MCU width in samples, MCU_width*DCT_scaled_size */ - int last_col_width; /* # of non-dummy blocks across in last MCU */ - int last_row_height; /* # of non-dummy blocks down in last MCU */ - - /* Private per-component storage for DCT or IDCT subsystem. */ - void * dct_table; -} jpeg_component_info; - - -/* Known color spaces. */ - -typedef enum { - JCS_UNKNOWN, /* error/unspecified */ - JCS_GRAYSCALE, /* monochrome */ - JCS_RGB, /* red/green/blue */ - JCS_YCbCr, /* Y/Cb/Cr (also known as YUV) */ - JCS_CMYK, /* C/M/Y/K */ - JCS_YCCK /* Y/Cb/Cr/K */ -} J_COLOR_SPACE; - -/* DCT/IDCT algorithm options. */ - -typedef enum { - JDCT_ISLOW, /* slow but accurate integer algorithm */ - JDCT_IFAST, /* faster, less accurate integer method */ - JDCT_FLOAT /* floating-point: accurate, fast on fast HW */ -} J_DCT_METHOD; - -#ifndef JDCT_DEFAULT /* may be overridden in jconfig.h */ -#define JDCT_DEFAULT JDCT_ISLOW -#endif -#ifndef JDCT_FASTEST /* may be overridden in jconfig.h */ -#define JDCT_FASTEST JDCT_IFAST -#endif - -/* Dithering options for decompression. */ - -typedef enum { - JDITHER_NONE, /* no dithering */ - JDITHER_ORDERED, /* simple ordered dither */ - JDITHER_FS /* Floyd-Steinberg error diffusion dither */ -} J_DITHER_MODE; - - -/* Common fields between JPEG compression and decompression master structs. */ - -#define jpeg_common_fields \ - struct jpeg_error_mgr * err; /* Error handler module */\ - struct jpeg_memory_mgr * mem; /* Memory manager module */\ - struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\ - boolean is_decompressor; /* so common code can tell which is which */\ - int global_state /* for checking call sequence validity */ - -/* Routines that are to be used by both halves of the library are declared - * to receive a pointer to this structure. There are no actual instances of - * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct. - */ -struct jpeg_common_struct { - jpeg_common_fields; /* Fields common to both master struct types */ - /* Additional fields follow in an actual jpeg_compress_struct or - * jpeg_decompress_struct. All three structs must agree on these - * initial fields! (This would be a lot cleaner in C++.) - */ -}; - -typedef struct jpeg_common_struct * j_common_ptr; -typedef struct jpeg_compress_struct * j_compress_ptr; -typedef struct jpeg_decompress_struct * j_decompress_ptr; - - -/* Master record for a compression instance */ - -struct jpeg_compress_struct { - jpeg_common_fields; /* Fields shared with jpeg_decompress_struct */ - - /* Destination for compressed data */ - struct jpeg_destination_mgr * dest; - - /* Description of source image --- these fields must be filled in by - * outer application before starting compression. in_color_space must - * be correct before you can even call jpeg_set_defaults(). - */ - - JDIMENSION image_width; /* input image width */ - JDIMENSION image_height; /* input image height */ - int input_components; /* # of color components in input image */ - J_COLOR_SPACE in_color_space; /* colorspace of input image */ - - double input_gamma; /* image gamma of input image */ - - /* Compression parameters --- these fields must be set before calling - * jpeg_start_compress(). We recommend calling jpeg_set_defaults() to - * initialize everything to reasonable defaults, then changing anything - * the application specifically wants to change. That way you won't get - * burnt when new parameters are added. Also note that there are several - * helper routines to simplify changing parameters. - */ - - int data_precision; /* bits of precision in image data */ - - int num_components; /* # of color components in JPEG image */ - J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ - - jpeg_component_info * comp_info; - /* comp_info[i] describes component that appears i'th in SOF */ - - JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; - /* ptrs to coefficient quantization tables, or NULL if not defined */ - - JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; - JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; - /* ptrs to Huffman coding tables, or NULL if not defined */ - - UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ - UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ - UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ - - boolean raw_data_in; /* TRUE=caller supplies downsampled data */ - boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ - boolean interleave; /* TRUE=interleaved output, FALSE=not */ - boolean optimize_coding; /* TRUE=optimize entropy encoding parms */ - boolean CCIR601_sampling; /* TRUE=first samples are cosited */ - int smoothing_factor; /* 1..100, or 0 for no input smoothing */ - J_DCT_METHOD dct_method; /* DCT algorithm selector */ - - /* The restart interval can be specified in absolute MCUs by setting - * restart_interval, or in MCU rows by setting restart_in_rows - * (in which case the correct restart_interval will be figured - * for each scan). - */ - unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */ - int restart_in_rows; /* if > 0, MCU rows per restart interval */ - - /* Parameters controlling emission of special markers. */ - - boolean write_JFIF_header; /* should a JFIF marker be written? */ - /* These three values are not used by the JPEG code, merely copied */ - /* into the JFIF APP0 marker. density_unit can be 0 for unknown, */ - /* 1 for dots/inch, or 2 for dots/cm. Note that the pixel aspect */ - /* ratio is defined by X_density/Y_density even when density_unit=0. */ - UINT8 density_unit; /* JFIF code for pixel size units */ - UINT16 X_density; /* Horizontal pixel density */ - UINT16 Y_density; /* Vertical pixel density */ - boolean write_Adobe_marker; /* should an Adobe marker be written? */ - - /* State variable: index of next scanline to be written to - * jpeg_write_scanlines(). Application may use this to control its - * processing loop, e.g., "while (next_scanline < image_height)". - */ - - JDIMENSION next_scanline; /* 0 .. image_height-1 */ - - /* Remaining fields are known throughout compressor, but generally - * should not be touched by a surrounding application. - */ - - /* - * These fields are computed during compression startup - */ - int max_h_samp_factor; /* largest h_samp_factor */ - int max_v_samp_factor; /* largest v_samp_factor */ - - JDIMENSION total_iMCU_rows; /* # of iMCU rows to be input to coef ctlr */ - /* The coefficient controller receives data in units of MCU rows as defined - * for fully interleaved scans (whether the JPEG file is interleaved or not). - * There are v_samp_factor * DCTSIZE sample rows of each component in an - * "iMCU" (interleaved MCU) row. - */ - - /* - * These fields are valid during any one scan. - * They describe the components and MCUs actually appearing in the scan. - */ - int comps_in_scan; /* # of JPEG components in this scan */ - jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; - /* *cur_comp_info[i] describes component that appears i'th in SOS */ - - JDIMENSION MCUs_per_row; /* # of MCUs across the image */ - JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ - - int blocks_in_MCU; /* # of DCT blocks per MCU */ - int MCU_membership[MAX_BLOCKS_IN_MCU]; - /* MCU_membership[i] is index in cur_comp_info of component owning */ - /* i'th block in an MCU */ - - /* - * Links to compression subobjects (methods and private variables of modules) - */ - struct jpeg_comp_master * master; - struct jpeg_c_main_controller * main; - struct jpeg_c_prep_controller * prep; - struct jpeg_c_coef_controller * coef; - struct jpeg_marker_writer * marker; - struct jpeg_color_converter * cconvert; - struct jpeg_downsampler * downsample; - struct jpeg_forward_dct * fdct; - struct jpeg_entropy_encoder * entropy; -}; - - -/* Master record for a decompression instance */ - -struct jpeg_decompress_struct { - jpeg_common_fields; /* Fields shared with jpeg_compress_struct */ - - /* Source of compressed data */ - struct jpeg_source_mgr * src; - - /* Basic description of image --- filled in by jpeg_read_header(). */ - /* Application may inspect these values to decide how to process image. */ - - JDIMENSION image_width; /* nominal image width (from SOF marker) */ - JDIMENSION image_height; /* nominal image height */ - int num_components; /* # of color components in JPEG image */ - J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */ - - /* Decompression processing parameters --- these fields must be set before - * calling jpeg_start_decompress(). Note that jpeg_read_header() initializes - * them to default values. - */ - - J_COLOR_SPACE out_color_space; /* colorspace for output */ - - unsigned int scale_num, scale_denom; /* fraction by which to scale image */ - - double output_gamma; /* image gamma wanted in output */ - - boolean raw_data_out; /* TRUE=downsampled data wanted */ - - boolean quantize_colors; /* TRUE=colormapped output wanted */ - /* the following are ignored if not quantize_colors: */ - boolean two_pass_quantize; /* TRUE=use two-pass color quantization */ - J_DITHER_MODE dither_mode; /* type of color dithering to use */ - int desired_number_of_colors; /* max number of colors to use */ - - J_DCT_METHOD dct_method; /* DCT algorithm selector */ - boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */ - - /* Description of actual output image that will be returned to application. - * These fields are computed by jpeg_start_decompress(). - * You can also use jpeg_calc_output_dimensions() to determine these values - * in advance of calling jpeg_start_decompress(). - */ - - JDIMENSION output_width; /* scaled image width */ - JDIMENSION output_height; /* scaled image height */ - int out_color_components; /* # of color components in out_color_space */ - int output_components; /* # of color components returned */ - /* output_components is 1 (a colormap index) when quantizing colors; - * otherwise it equals out_color_components. - */ - int rec_outbuf_height; /* min recommended height of scanline buffer */ - /* If the buffer passed to jpeg_read_scanlines() is less than this many rows - * high, space and time will be wasted due to unnecessary data copying. - * Usually rec_outbuf_height will be 1 or 2, at most 4. - */ - - /* When quantizing colors, the output colormap is described by these fields. - * The application can supply a colormap by setting colormap non-NULL before - * calling jpeg_start_decompress; otherwise a colormap is created during - * jpeg_start_decompress. - * The map has out_color_components rows and actual_number_of_colors columns. - */ - int actual_number_of_colors; /* number of entries in use */ - JSAMPARRAY colormap; /* The color map as a 2-D pixel array */ - - /* State variable: index of next scaled scanline to be read from - * jpeg_read_scanlines(). Application may use this to control its - * processing loop, e.g., "while (output_scanline < output_height)". - */ - - JDIMENSION output_scanline; /* 0 .. output_height-1 */ - - /* Internal JPEG parameters --- the application usually need not look at - * these fields. - */ - - /* Quantization and Huffman tables are carried forward across input - * datastreams when processing abbreviated JPEG datastreams. - */ - - JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]; - /* ptrs to coefficient quantization tables, or NULL if not defined */ - - JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]; - JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]; - /* ptrs to Huffman coding tables, or NULL if not defined */ - - /* These parameters are never carried across datastreams, since they - * are given in SOF/SOS markers or defined to be reset by SOI. - */ - - int data_precision; /* bits of precision in image data */ - - jpeg_component_info * comp_info; - /* comp_info[i] describes component that appears i'th in SOF */ - - UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */ - UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */ - UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */ - - boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ - - unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */ - - /* These fields record data obtained from optional markers recognized by - * the JPEG library. - */ - boolean saw_JFIF_marker; /* TRUE iff a JFIF APP0 marker was found */ - /* Data copied from JFIF marker: */ - UINT8 density_unit; /* JFIF code for pixel size units */ - UINT16 X_density; /* Horizontal pixel density */ - UINT16 Y_density; /* Vertical pixel density */ - boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ - UINT8 Adobe_transform; /* Color transform code from Adobe marker */ - - boolean CCIR601_sampling; /* TRUE=first samples are cosited */ - - /* Remaining fields are known throughout decompressor, but generally - * should not be touched by a surrounding application. - */ - - /* - * These fields are computed during decompression startup - */ - int max_h_samp_factor; /* largest h_samp_factor */ - int max_v_samp_factor; /* largest v_samp_factor */ - - int min_DCT_scaled_size; /* smallest DCT_scaled_size of any component */ - - JDIMENSION total_iMCU_rows; /* # of iMCU rows to be output by coef ctlr */ - /* The coefficient controller outputs data in units of MCU rows as defined - * for fully interleaved scans (whether the JPEG file is interleaved or not). - * There are v_samp_factor * DCT_scaled_size sample rows of each component - * in an "iMCU" (interleaved MCU) row. - */ - - JSAMPLE * sample_range_limit; /* table for fast range-limiting */ - - /* - * These fields are valid during any one scan. - * They describe the components and MCUs actually appearing in the scan. - */ - int comps_in_scan; /* # of JPEG components in this scan */ - jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN]; - /* *cur_comp_info[i] describes component that appears i'th in SOS */ - - JDIMENSION MCUs_per_row; /* # of MCUs across the image */ - JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */ - - int blocks_in_MCU; /* # of DCT blocks per MCU */ - int MCU_membership[MAX_BLOCKS_IN_MCU]; - /* MCU_membership[i] is index in cur_comp_info of component owning */ - /* i'th block in an MCU */ - - /* This field is shared between entropy decoder and marker parser. - * It is either zero or the code of a JPEG marker that has been - * read from the data source, but has not yet been processed. - */ - int unread_marker; - - /* - * Links to decompression subobjects (methods, private variables of modules) - */ - struct jpeg_decomp_master * master; - struct jpeg_d_main_controller * main; - struct jpeg_d_coef_controller * coef; - struct jpeg_d_post_controller * post; - struct jpeg_marker_reader * marker; - struct jpeg_entropy_decoder * entropy; - struct jpeg_inverse_dct * idct; - struct jpeg_upsampler * upsample; - struct jpeg_color_deconverter * cconvert; - struct jpeg_color_quantizer * cquantize; -}; - - -/* "Object" declarations for JPEG modules that may be supplied or called - * directly by the surrounding application. - * As with all objects in the JPEG library, these structs only define the - * publicly visible methods and state variables of a module. Additional - * private fields may exist after the public ones. - */ - - -/* Error handler object */ - -struct jpeg_error_mgr { - /* Error exit handler: does not return to caller */ - JMETHOD(void, error_exit, (j_common_ptr cinfo)); - /* Conditionally emit a trace or warning message */ - JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); - /* Routine that actually outputs a trace or error message */ - JMETHOD(void, output_message, (j_common_ptr cinfo)); - /* Format a message string for the most recent JPEG error or message */ - JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer)); -#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */ - /* Reset error state variables at start of a new image */ - JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo)); - - /* The message ID code and any parameters are saved here. - * A message can have one string parameter or up to 8 int parameters. - */ - int msg_code; -#define JMSG_STR_PARM_MAX 80 - union { - int i[8]; - char s[JMSG_STR_PARM_MAX]; - } msg_parm; - - /* Standard state variables for error facility */ - - int trace_level; /* max msg_level that will be displayed */ - - /* For recoverable corrupt-data errors, we emit a warning message, - * but keep going unless emit_message chooses to abort. emit_message - * should count warnings in num_warnings. The surrounding application - * can check for bad data by seeing if num_warnings is nonzero at the - * end of processing. - */ - long num_warnings; /* number of corrupt-data warnings */ - - /* These fields point to the table(s) of error message strings. - * An application can change the table pointer to switch to a different - * message list (typically, to change the language in which errors are - * reported). Some applications may wish to add additional error codes - * that will be handled by the JPEG library error mechanism; the second - * table pointer is used for this purpose. - * - * First table includes all errors generated by JPEG library itself. - * Error code 0 is reserved for a "no such error string" message. - */ - const char * const * jpeg_message_table; /* Library errors */ - int last_jpeg_message; /* Table contains strings 0..last_jpeg_message */ - /* Second table can be added by application (see cjpeg/djpeg for example). - * It contains strings numbered first_addon_message..last_addon_message. - */ - const char * const * addon_message_table; /* Non-library errors */ - int first_addon_message; /* code for first string in addon table */ - int last_addon_message; /* code for last string in addon table */ -}; - - -/* Progress monitor object */ - -struct jpeg_progress_mgr { - JMETHOD(void, progress_monitor, (j_common_ptr cinfo)); - - long pass_counter; /* work units completed in this pass */ - long pass_limit; /* total number of work units in this pass */ - int completed_passes; /* passes completed so far */ - int total_passes; /* total number of passes expected */ -}; - - -/* Data destination object for compression */ - -struct jpeg_destination_mgr { - JOCTET * next_output_byte; /* => next byte to write in buffer */ - size_t free_in_buffer; /* # of byte spaces remaining in buffer */ - - JMETHOD(void, init_destination, (j_compress_ptr cinfo)); - JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo)); - JMETHOD(void, term_destination, (j_compress_ptr cinfo)); -}; - - -/* Data source object for decompression */ - -struct jpeg_source_mgr { - const JOCTET * next_input_byte; /* => next byte to read from buffer */ - size_t bytes_in_buffer; /* # of bytes remaining in buffer */ - - JMETHOD(void, init_source, (j_decompress_ptr cinfo)); - JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo)); - JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes)); - JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo)); - JMETHOD(void, term_source, (j_decompress_ptr cinfo)); -}; - - -/* Memory manager object. - * Allocates "small" objects (a few K total), "large" objects (tens of K), - * and "really big" objects (virtual arrays with backing store if needed). - * The memory manager does not allow individual objects to be freed; rather, - * each created object is assigned to a pool, and whole pools can be freed - * at once. This is faster and more convenient than remembering exactly what - * to free, especially where malloc()/free() are not too speedy. - * NB: alloc routines never return NULL. They exit to error_exit if not - * successful. - */ - -#define JPOOL_PERMANENT 0 /* lasts until master record is destroyed */ -#define JPOOL_IMAGE 1 /* lasts until done with image/datastream */ -#define JPOOL_NUMPOOLS 2 - -typedef struct jvirt_sarray_control * jvirt_sarray_ptr; -typedef struct jvirt_barray_control * jvirt_barray_ptr; - - -struct jpeg_memory_mgr { - /* Method pointers */ - JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id, - size_t sizeofobject)); - JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id, - size_t sizeofobject)); - JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id, - JDIMENSION samplesperrow, - JDIMENSION numrows)); - JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id, - JDIMENSION blocksperrow, - JDIMENSION numrows)); - JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo, - int pool_id, - JDIMENSION samplesperrow, - JDIMENSION numrows, - JDIMENSION unitheight)); - JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo, - int pool_id, - JDIMENSION blocksperrow, - JDIMENSION numrows, - JDIMENSION unitheight)); - JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo)); - JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo, - jvirt_sarray_ptr ptr, - JDIMENSION start_row, - boolean writable)); - JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo, - jvirt_barray_ptr ptr, - JDIMENSION start_row, - boolean writable)); - JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id)); - JMETHOD(void, self_destruct, (j_common_ptr cinfo)); - - /* Limit on memory allocation for this JPEG object. (Note that this is - * merely advisory, not a guaranteed maximum; it only affects the space - * used for virtual-array buffers.) May be changed by outer application - * after creating the JPEG object. - */ - long max_memory_to_use; -}; - - -/* Routine signature for application-supplied marker processing methods. - * Need not pass marker code since it is stored in cinfo->unread_marker. - */ -typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo)); - - -/* Declarations for routines called by application. - * The JPP macro hides prototype parameters from compilers that can't cope. - * Note JPP requires double parentheses. - */ - -#ifdef HAVE_PROTOTYPES -#define JPP(arglist) arglist -#else -#define JPP(arglist) () -#endif - - -/* Short forms of external names for systems with brain-damaged linkers. - * We shorten external names to be unique in the first six letters, which - * is good enough for all known systems. - * (If your compiler itself needs names to be unique in less than 15 - * characters, you are out of luck. Get a better compiler.) - */ - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jpeg_std_error jStdError -#define jpeg_create_compress jCreaCompress -#define jpeg_create_decompress jCreaDecompress -#define jpeg_destroy_compress jDestCompress -#define jpeg_destroy_decompress jDestDecompress -#define jpeg_stdio_dest jStdDest -#define jpeg_stdio_src jStdSrc -#define jpeg_set_defaults jSetDefaults -#define jpeg_set_colorspace jSetColorspace -#define jpeg_default_colorspace jDefColorspace -#define jpeg_set_quality jSetQuality -#define jpeg_set_linear_quality jSetLQuality -#define jpeg_add_quant_table jAddQuantTable -#define jpeg_quality_scaling jQualityScaling -#define jpeg_suppress_tables jSuppressTables -#define jpeg_alloc_quant_table jAlcQTable -#define jpeg_alloc_huff_table jAlcHTable -#define jpeg_start_compress jStrtCompress -#define jpeg_write_scanlines jWrtScanlines -#define jpeg_finish_compress jFinCompress -#define jpeg_write_raw_data jWrtRawData -#define jpeg_write_marker jWrtMarker -#define jpeg_write_tables jWrtTables -#define jpeg_read_header jReadHeader -#define jpeg_start_decompress jStrtDecompress -#define jpeg_read_scanlines jReadScanlines -#define jpeg_finish_decompress jFinDecompress -#define jpeg_read_raw_data jReadRawData -#define jpeg_calc_output_dimensions jCalcDimensions -#define jpeg_set_marker_processor jSetMarker -#define jpeg_abort_compress jAbrtCompress -#define jpeg_abort_decompress jAbrtDecompress -#define jpeg_abort jAbort -#define jpeg_destroy jDestroy -#define jpeg_resync_to_restart jResyncRestart -#endif /* NEED_SHORT_EXTERNAL_NAMES */ - - -/* Default error-management setup */ -EXTERN struct jpeg_error_mgr *jpeg_std_error JPP((struct jpeg_error_mgr *err)); - -/* Initialization and destruction of JPEG compression objects */ -/* NB: you must set up the error-manager BEFORE calling jpeg_create_xxx */ -EXTERN void jpeg_create_compress JPP((j_compress_ptr cinfo)); -EXTERN void jpeg_create_decompress JPP((j_decompress_ptr cinfo)); -EXTERN void jpeg_destroy_compress JPP((j_compress_ptr cinfo)); -EXTERN void jpeg_destroy_decompress JPP((j_decompress_ptr cinfo)); - -/* Standard data source and destination managers: stdio streams. */ -/* Caller is responsible for opening the file before and closing after. */ -EXTERN void jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile)); -EXTERN void jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile)); - -/* Default parameter setup for compression */ -EXTERN void jpeg_set_defaults JPP((j_compress_ptr cinfo)); -/* Compression parameter setup aids */ -EXTERN void jpeg_set_colorspace JPP((j_compress_ptr cinfo, - J_COLOR_SPACE colorspace)); -EXTERN void jpeg_default_colorspace JPP((j_compress_ptr cinfo)); -EXTERN void jpeg_set_quality JPP((j_compress_ptr cinfo, int quality, - boolean force_baseline)); -EXTERN void jpeg_set_linear_quality JPP((j_compress_ptr cinfo, - int scale_factor, - boolean force_baseline)); -EXTERN void jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl, - const unsigned int *basic_table, - int scale_factor, - boolean force_baseline)); -EXTERN int jpeg_quality_scaling JPP((int quality)); -EXTERN void jpeg_suppress_tables JPP((j_compress_ptr cinfo, - boolean suppress)); -EXTERN JQUANT_TBL * jpeg_alloc_quant_table JPP((j_common_ptr cinfo)); -EXTERN JHUFF_TBL * jpeg_alloc_huff_table JPP((j_common_ptr cinfo)); - -/* Main entry points for compression */ -EXTERN void jpeg_start_compress JPP((j_compress_ptr cinfo, - boolean write_all_tables)); -EXTERN JDIMENSION jpeg_write_scanlines JPP((j_compress_ptr cinfo, - JSAMPARRAY scanlines, - JDIMENSION num_lines)); -EXTERN void jpeg_finish_compress JPP((j_compress_ptr cinfo)); - -/* Replaces jpeg_write_scanlines when writing raw downsampled data. */ -EXTERN JDIMENSION jpeg_write_raw_data JPP((j_compress_ptr cinfo, - JSAMPIMAGE data, - JDIMENSION num_lines)); - -/* Write a special marker. See libjpeg.doc concerning safe usage. */ -EXTERN void jpeg_write_marker JPP((j_compress_ptr cinfo, int marker, - const JOCTET *dataptr, unsigned int datalen)); - -/* Alternate compression function: just write an abbreviated table file */ -EXTERN void jpeg_write_tables JPP((j_compress_ptr cinfo)); - -/* Decompression startup: read start of JPEG datastream to see what's there */ -EXTERN int jpeg_read_header JPP((j_decompress_ptr cinfo, - boolean require_image)); -/* Return value is one of: */ -#define JPEG_HEADER_OK 0 /* Found valid image datastream */ -#define JPEG_HEADER_TABLES_ONLY 1 /* Found valid table-specs-only datastream */ -#define JPEG_SUSPENDED 2 /* Had to suspend before end of headers */ -/* If you pass require_image = TRUE (normal case), you need not check for - * a TABLES_ONLY return code; an abbreviated file will cause an error exit. - * JPEG_SUSPENDED is only possible if you use a data source module that can - * give a suspension return (the stdio source module doesn't). - */ - -/* Main entry points for decompression */ -EXTERN void jpeg_start_decompress JPP((j_decompress_ptr cinfo)); -EXTERN JDIMENSION jpeg_read_scanlines JPP((j_decompress_ptr cinfo, - JSAMPARRAY scanlines, - JDIMENSION max_lines)); -EXTERN boolean jpeg_finish_decompress JPP((j_decompress_ptr cinfo)); - -/* Replaces jpeg_read_scanlines when reading raw downsampled data. */ -EXTERN JDIMENSION jpeg_read_raw_data JPP((j_decompress_ptr cinfo, - JSAMPIMAGE data, - JDIMENSION max_lines)); - -/* Precalculate output dimensions for current decompression parameters. */ -EXTERN void jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo)); - -/* Install a special processing method for COM or APPn markers. */ -EXTERN void jpeg_set_marker_processor JPP((j_decompress_ptr cinfo, - int marker_code, - jpeg_marker_parser_method routine)); - -/* If you choose to abort compression or decompression before completing - * jpeg_finish_(de)compress, then you need to clean up to release memory, - * temporary files, etc. You can just call jpeg_destroy_(de)compress - * if you're done with the JPEG object, but if you want to clean it up and - * reuse it, call this: - */ -EXTERN void jpeg_abort_compress JPP((j_compress_ptr cinfo)); -EXTERN void jpeg_abort_decompress JPP((j_decompress_ptr cinfo)); - -/* Generic versions of jpeg_abort and jpeg_destroy that work on either - * flavor of JPEG object. These may be more convenient in some places. - */ -EXTERN void jpeg_abort JPP((j_common_ptr cinfo)); -EXTERN void jpeg_destroy JPP((j_common_ptr cinfo)); - -/* Default restart-marker-resync procedure for use by data source modules */ -EXTERN boolean jpeg_resync_to_restart JPP((j_decompress_ptr cinfo)); - - -/* These marker codes are exported since applications and data source modules - * are likely to want to use them. - */ - -#define JPEG_RST0 0xD0 /* RST0 marker code */ -#define JPEG_EOI 0xD9 /* EOI marker code */ -#define JPEG_APP0 0xE0 /* APP0 marker code */ -#define JPEG_COM 0xFE /* COM marker code */ - - -/* If we have a brain-damaged compiler that emits warnings (or worse, errors) - * for structure definitions that are never filled in, keep it quiet by - * supplying dummy definitions for the various substructures. - */ - -#ifdef INCOMPLETE_TYPES_BROKEN -#ifndef JPEG_INTERNALS /* will be defined in jpegint.h */ -struct jvirt_sarray_control { long dummy; }; -struct jvirt_barray_control { long dummy; }; -struct jpeg_comp_master { long dummy; }; -struct jpeg_c_main_controller { long dummy; }; -struct jpeg_c_prep_controller { long dummy; }; -struct jpeg_c_coef_controller { long dummy; }; -struct jpeg_marker_writer { long dummy; }; -struct jpeg_color_converter { long dummy; }; -struct jpeg_downsampler { long dummy; }; -struct jpeg_forward_dct { long dummy; }; -struct jpeg_entropy_encoder { long dummy; }; -struct jpeg_decomp_master { long dummy; }; -struct jpeg_d_main_controller { long dummy; }; -struct jpeg_d_coef_controller { long dummy; }; -struct jpeg_d_post_controller { long dummy; }; -struct jpeg_marker_reader { long dummy; }; -struct jpeg_entropy_decoder { long dummy; }; -struct jpeg_inverse_dct { long dummy; }; -struct jpeg_upsampler { long dummy; }; -struct jpeg_color_deconverter { long dummy; }; -struct jpeg_color_quantizer { long dummy; }; -#endif /* JPEG_INTERNALS */ -#endif /* INCOMPLETE_TYPES_BROKEN */ - - -/* - * The JPEG library modules define JPEG_INTERNALS before including this file. - * The internal structure declarations are read only when that is true. - * Applications using the library should not include jpegint.h, but may wish - * to include jerror.h. - */ - -#ifdef JPEG_INTERNALS -#include "jpegint.h" /* fetch private declarations */ -#include "jerror.h" /* fetch error codes too */ -#endif diff --git a/jpeg/jrevdct.c b/jpeg/jrevdct.c deleted file mode 100644 index 379e4b375a29d0b67451e7eecbbc74f46733191a..0000000000000000000000000000000000000000 --- a/jpeg/jrevdct.c +++ /dev/null @@ -1,375 +0,0 @@ -/* - * jrevdct.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains the basic inverse-DCT transformation subroutine. - * - * This implementation is based on an algorithm described in - * C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT - * Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics, - * Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991. - * The primary algorithm described there uses 11 multiplies and 29 adds. - * We use their alternate method with 12 multiplies and 32 adds. - * The advantage of this method is that no data path contains more than one - * multiplication; this allows a very simple and accurate implementation in - * scaled fixed-point arithmetic, with a minimal number of shifts. - */ - -#include "jinclude.h" -#include "jpegint.h" - - -/* - * This routine is specialized to the case DCTSIZE = 8. - */ - -#if DCTSIZE != 8 - Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */ -#endif - - -/* - * A 2-D IDCT can be done by 1-D IDCT on each row followed by 1-D IDCT - * on each column. Direct algorithms are also available, but they are - * much more complex and seem not to be any faster when reduced to code. - * - * The poop on this scaling stuff is as follows: - * - * Each 1-D IDCT step produces outputs which are a factor of sqrt(N) - * larger than the true IDCT outputs. The final outputs are therefore - * a factor of N larger than desired; since N=8 this can be cured by - * a simple right shift at the end of the algorithm. The advantage of - * this arrangement is that we save two multiplications per 1-D IDCT, - * because the y0 and y4 inputs need not be divided by sqrt(N). - * - * We have to do addition and subtraction of the integer inputs, which - * is no problem, and multiplication by fractional constants, which is - * a problem to do in integer arithmetic. We multiply all the constants - * by CONST_SCALE and convert them to integer constants (thus retaining - * CONST_BITS bits of precision in the constants). After doing a - * multiplication we have to divide the product by CONST_SCALE, with proper - * rounding, to produce the correct output. This division can be done - * cheaply as a right shift of CONST_BITS bits. We postpone shifting - * as long as possible so that partial sums can be added together with - * full fractional precision. - * - * The outputs of the first pass are scaled up by PASS1_BITS bits so that - * they are represented to better-than-integral precision. These outputs - * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word - * with the recommended scaling. (To scale up 12-bit sample data further, an - * intermediate INT32 array would be needed.) - * - * To avoid overflow of the 32-bit intermediate results in pass 2, we must - * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26. Error analysis - * shows that the values given below are the most effective. - */ - -#if BITS_IN_JSAMPLE == 8 -#define CONST_BITS 13 -#define PASS1_BITS 2 -#else -#define CONST_BITS 13 -#define PASS1_BITS 1 /* lose a little precision to avoid overflow */ -#endif - -#define ONE ((INT32) 1) - -#define CONST_SCALE (ONE << CONST_BITS) - -/* Convert a positive real constant to an integer scaled by CONST_SCALE. */ - -#define FIX(x) ((INT32) ((x) * CONST_SCALE + 0.5)) - -/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus - * causing a lot of useless floating-point operations at run time. - * To get around this we use the following pre-calculated constants. - * If you change CONST_BITS you may want to add appropriate values. - * (With a reasonable C compiler, you can just rely on the FIX() macro...) - */ - -#if CONST_BITS == 13 -#define FIX_0_298631336 ((INT32) 2446) /* FIX(0.298631336) */ -#define FIX_0_390180644 ((INT32) 3196) /* FIX(0.390180644) */ -#define FIX_0_541196100 ((INT32) 4433) /* FIX(0.541196100) */ -#define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ -#define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ -#define FIX_1_175875602 ((INT32) 9633) /* FIX(1.175875602) */ -#define FIX_1_501321110 ((INT32) 12299) /* FIX(1.501321110) */ -#define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ -#define FIX_1_961570560 ((INT32) 16069) /* FIX(1.961570560) */ -#define FIX_2_053119869 ((INT32) 16819) /* FIX(2.053119869) */ -#define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ -#define FIX_3_072711026 ((INT32) 25172) /* FIX(3.072711026) */ -#else -#define FIX_0_298631336 FIX(0.298631336) -#define FIX_0_390180644 FIX(0.390180644) -#define FIX_0_541196100 FIX(0.541196100) -#define FIX_0_765366865 FIX(0.765366865) -#define FIX_0_899976223 FIX(0.899976223) -#define FIX_1_175875602 FIX(1.175875602) -#define FIX_1_501321110 FIX(1.501321110) -#define FIX_1_847759065 FIX(1.847759065) -#define FIX_1_961570560 FIX(1.961570560) -#define FIX_2_053119869 FIX(2.053119869) -#define FIX_2_562915447 FIX(2.562915447) -#define FIX_3_072711026 FIX(3.072711026) -#endif - - -/* Descale and correctly round an INT32 value that's scaled by N bits. - * We assume RIGHT_SHIFT rounds towards minus infinity, so adding - * the fudge factor is correct for either sign of X. - */ - -#define DESCALE(x,n) RIGHT_SHIFT((x) + (ONE << ((n)-1)), n) - -/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. - * For 8-bit samples with the recommended scaling, all the variable - * and constant values involved are no more than 16 bits wide, so a - * 16x16->32 bit multiply can be used instead of a full 32x32 multiply; - * this provides a useful speedup on many machines. - * There is no way to specify a 16x16->32 multiply in portable C, but - * some C compilers will do the right thing if you provide the correct - * combination of casts. - * NB: for 12-bit samples, a full 32-bit multiplication will be needed. - */ - -#if BITS_IN_JSAMPLE == 8 -#ifdef SHORTxSHORT_32 /* may work if 'int' is 32 bits */ -#define MULTIPLY(var,const) (((INT16) (var)) * ((INT16) (const))) -#endif -#ifdef SHORTxLCONST_32 /* known to work with Microsoft C 6.0 */ -#define MULTIPLY(var,const) (((INT16) (var)) * ((INT32) (const))) -#endif -#endif /* BITS_IN_JSAMPLE == 8 */ - -#ifndef MULTIPLY /* default definition */ -#define MULTIPLY(var,const) ((var) * (const)) -#endif - - -/* - * Perform the inverse DCT on one block of coefficients. - */ - -GLOBAL void -j_rev_dct (JCOEFPTR input, int * output) -{ - INT32 tmp0, tmp1, tmp2, tmp3; - INT32 tmp10, tmp11, tmp12, tmp13; - INT32 z1, z2, z3, z4, z5; - register int * outptr; - register JCOEFPTR inptr; - int rowctr; - SHIFT_TEMPS - - /* Pass 1: process rows from input, store into output array. */ - /* Note results are scaled up by sqrt(8) compared to a true IDCT; */ - /* furthermore, we scale the results by 2**PASS1_BITS. */ - - inptr = input; - outptr = output; - for (rowctr = DCTSIZE; rowctr > 0; rowctr--) { - /* Due to quantization, we will usually find that many of the input - * coefficients are zero, especially the AC terms. We can exploit this - * by short-circuiting the IDCT calculation for any row in which all - * the AC terms are zero. In that case each output is equal to the - * DC coefficient (with scale factor as needed). - * With typical images and quantization tables, half or more of the - * row DCT calculations can be simplified this way. - */ - - if ((inptr[1] | inptr[2] | inptr[3] | inptr[4] | inptr[5] | - inptr[6] | inptr[7]) == 0) { - /* AC terms all zero */ - int dcval = ((int) inptr[0]) << PASS1_BITS; - - outptr[0] = dcval; - outptr[1] = dcval; - outptr[2] = dcval; - outptr[3] = dcval; - outptr[4] = dcval; - outptr[5] = dcval; - outptr[6] = dcval; - outptr[7] = dcval; - - inptr += DCTSIZE; /* advance pointers to next row */ - outptr += DCTSIZE; - continue; - } - - /* Even part: reverse the even part of the forward DCT. */ - /* The rotator is sqrt(2)*c(-6). */ - - z2 = (INT32) inptr[2]; - z3 = (INT32) inptr[6]; - - z1 = MULTIPLY(z2 + z3, FIX_0_541196100); - tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065); - tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865); - - tmp0 = ((INT32) inptr[0] + (INT32) inptr[4]) << CONST_BITS; - tmp1 = ((INT32) inptr[0] - (INT32) inptr[4]) << CONST_BITS; - - tmp10 = tmp0 + tmp3; - tmp13 = tmp0 - tmp3; - tmp11 = tmp1 + tmp2; - tmp12 = tmp1 - tmp2; - - /* Odd part per figure 8; the matrix is unitary and hence its - * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. - */ - - tmp0 = (INT32) inptr[7]; - tmp1 = (INT32) inptr[5]; - tmp2 = (INT32) inptr[3]; - tmp3 = (INT32) inptr[1]; - - z1 = tmp0 + tmp3; - z2 = tmp1 + tmp2; - z3 = tmp0 + tmp2; - z4 = tmp1 + tmp3; - z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ - - tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ - tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ - tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ - tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ - z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ - z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ - z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ - z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ - - z3 += z5; - z4 += z5; - - tmp0 += z1 + z3; - tmp1 += z2 + z4; - tmp2 += z2 + z3; - tmp3 += z1 + z4; - - /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ - - outptr[0] = (int) DESCALE(tmp10 + tmp3, CONST_BITS-PASS1_BITS); - outptr[7] = (int) DESCALE(tmp10 - tmp3, CONST_BITS-PASS1_BITS); - outptr[1] = (int) DESCALE(tmp11 + tmp2, CONST_BITS-PASS1_BITS); - outptr[6] = (int) DESCALE(tmp11 - tmp2, CONST_BITS-PASS1_BITS); - outptr[2] = (int) DESCALE(tmp12 + tmp1, CONST_BITS-PASS1_BITS); - outptr[5] = (int) DESCALE(tmp12 - tmp1, CONST_BITS-PASS1_BITS); - outptr[3] = (int) DESCALE(tmp13 + tmp0, CONST_BITS-PASS1_BITS); - outptr[4] = (int) DESCALE(tmp13 - tmp0, CONST_BITS-PASS1_BITS); - - inptr += DCTSIZE; /* advance pointers to next row */ - outptr += DCTSIZE; - } - - /* Pass 2: process columns. This works entirely in the output array. */ - /* Note that we must descale the results by a factor of 8 == 2**3, */ - /* and also undo the PASS1_BITS scaling. */ - - outptr = output; - for (rowctr = DCTSIZE; rowctr > 0; rowctr--) { - /* Columns of zeroes can be exploited in the same way as we did with rows. - * However, the row calculation has created many nonzero AC terms, so the - * simplification applies less often (typically 5% to 10% of the time). - * On machines with very fast multiplication, it's possible that the - * test takes more time than it's worth. In that case this section - * may be commented out. - */ - -#ifndef NO_ZERO_COLUMN_TEST - if ((outptr[DCTSIZE*1] | outptr[DCTSIZE*2] | outptr[DCTSIZE*3] | - outptr[DCTSIZE*4] | outptr[DCTSIZE*5] | outptr[DCTSIZE*6] | - outptr[DCTSIZE*7]) == 0) { - /* AC terms all zero */ - int dcval = (int) DESCALE((INT32) outptr[0], PASS1_BITS+3); - - outptr[DCTSIZE*0] = dcval; - outptr[DCTSIZE*1] = dcval; - outptr[DCTSIZE*2] = dcval; - outptr[DCTSIZE*3] = dcval; - outptr[DCTSIZE*4] = dcval; - outptr[DCTSIZE*5] = dcval; - outptr[DCTSIZE*6] = dcval; - outptr[DCTSIZE*7] = dcval; - - outptr++; /* advance pointer to next column */ - continue; - } -#endif - - /* Even part: reverse the even part of the forward DCT. */ - /* The rotator is sqrt(2)*c(-6). */ - - z2 = (INT32) outptr[DCTSIZE*2]; - z3 = (INT32) outptr[DCTSIZE*6]; - - z1 = MULTIPLY(z2 + z3, FIX_0_541196100); - tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065); - tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865); - - tmp0 = ((INT32) outptr[DCTSIZE*0] + (INT32) outptr[DCTSIZE*4]) << CONST_BITS; - tmp1 = ((INT32) outptr[DCTSIZE*0] - (INT32) outptr[DCTSIZE*4]) << CONST_BITS; - - tmp10 = tmp0 + tmp3; - tmp13 = tmp0 - tmp3; - tmp11 = tmp1 + tmp2; - tmp12 = tmp1 - tmp2; - - /* Odd part per figure 8; the matrix is unitary and hence its - * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. - */ - - tmp0 = (INT32) outptr[DCTSIZE*7]; - tmp1 = (INT32) outptr[DCTSIZE*5]; - tmp2 = (INT32) outptr[DCTSIZE*3]; - tmp3 = (INT32) outptr[DCTSIZE*1]; - - z1 = tmp0 + tmp3; - z2 = tmp1 + tmp2; - z3 = tmp0 + tmp2; - z4 = tmp1 + tmp3; - z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */ - - tmp0 = MULTIPLY(tmp0, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */ - tmp1 = MULTIPLY(tmp1, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */ - tmp2 = MULTIPLY(tmp2, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */ - tmp3 = MULTIPLY(tmp3, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */ - z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */ - z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */ - z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */ - z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */ - - z3 += z5; - z4 += z5; - - tmp0 += z1 + z3; - tmp1 += z2 + z4; - tmp2 += z2 + z3; - tmp3 += z1 + z4; - - /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ - - outptr[DCTSIZE*0] = (int) DESCALE(tmp10 + tmp3, - CONST_BITS+PASS1_BITS+3); - outptr[DCTSIZE*7] = (int) DESCALE(tmp10 - tmp3, - CONST_BITS+PASS1_BITS+3); - outptr[DCTSIZE*1] = (int) DESCALE(tmp11 + tmp2, - CONST_BITS+PASS1_BITS+3); - outptr[DCTSIZE*6] = (int) DESCALE(tmp11 - tmp2, - CONST_BITS+PASS1_BITS+3); - outptr[DCTSIZE*2] = (int) DESCALE(tmp12 + tmp1, - CONST_BITS+PASS1_BITS+3); - outptr[DCTSIZE*5] = (int) DESCALE(tmp12 - tmp1, - CONST_BITS+PASS1_BITS+3); - outptr[DCTSIZE*3] = (int) DESCALE(tmp13 + tmp0, - CONST_BITS+PASS1_BITS+3); - outptr[DCTSIZE*4] = (int) DESCALE(tmp13 - tmp0, - CONST_BITS+PASS1_BITS+3); - - outptr++; /* advance pointer to next column */ - } -} diff --git a/jpeg/jutils.c b/jpeg/jutils.c deleted file mode 100644 index ef1017406956c9f15b708f92c27c35a660618f58..0000000000000000000000000000000000000000 --- a/jpeg/jutils.c +++ /dev/null @@ -1,131 +0,0 @@ -/* - * jutils.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains miscellaneous utility routines needed for both - * compression and decompression. - * Note we prefix all global names with "j" to minimize conflicts with - * a surrounding application. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" - - -/* - * Arithmetic utilities - */ - -GLOBAL long -jdiv_round_up (long a, long b) -/* Compute a/b rounded up to next integer, ie, ceil(a/b) */ -/* Assumes a >= 0, b > 0 */ -{ - return (a + b - 1L) / b; -} - - -GLOBAL long -jround_up (long a, long b) -/* Compute a rounded up to next multiple of b, ie, ceil(a/b)*b */ -/* Assumes a >= 0, b > 0 */ -{ - a += b - 1L; - return a - (a % b); -} - - -/* On normal machines we can apply MEMCOPY() and MEMZERO() to sample arrays - * and coefficient-block arrays. This won't work on 80x86 because the arrays - * are FAR and we're assuming a small-pointer memory model. However, some - * DOS compilers provide far-pointer versions of memcpy() and memset() even - * in the small-model libraries. These will be used if USE_FMEM is defined. - * Otherwise, the routines below do it the hard way. (The performance cost - * is not all that great, because these routines aren't very heavily used.) - */ - -#ifndef NEED_FAR_POINTERS /* normal case, same as regular macros */ -#define FMEMCOPY(dest,src,size) MEMCOPY(dest,src,size) -#define FMEMZERO(target,size) MEMZERO(target,size) -#else /* 80x86 case, define if we can */ -#ifdef USE_FMEM -#define FMEMCOPY(dest,src,size) _fmemcpy((void FAR *)(dest), (const void FAR *)(src), (size_t)(size)) -#define FMEMZERO(target,size) _fmemset((void FAR *)(target), 0, (size_t)(size)) -#endif -#endif - - -GLOBAL void -jcopy_sample_rows (JSAMPARRAY input_array, int source_row, - JSAMPARRAY output_array, int dest_row, - int num_rows, JDIMENSION num_cols) -/* Copy some rows of samples from one place to another. - * num_rows rows are copied from input_array[source_row++] - * to output_array[dest_row++]; these areas may overlap for duplication. - * The source and destination arrays must be at least as wide as num_cols. - */ -{ - register JSAMPROW inptr, outptr; -#ifdef FMEMCOPY - register size_t count = (size_t) (num_cols * SIZEOF(JSAMPLE)); -#else - register JDIMENSION count; -#endif - register int row; - - input_array += source_row; - output_array += dest_row; - - for (row = num_rows; row > 0; row--) { - inptr = *input_array++; - outptr = *output_array++; -#ifdef FMEMCOPY - FMEMCOPY(outptr, inptr, count); -#else - for (count = num_cols; count > 0; count--) - *outptr++ = *inptr++; /* needn't bother with GETJSAMPLE() here */ -#endif - } -} - - -GLOBAL void -jcopy_block_row (JBLOCKROW input_row, JBLOCKROW output_row, - JDIMENSION num_blocks) -/* Copy a row of coefficient blocks from one place to another. */ -{ -#ifdef FMEMCOPY - FMEMCOPY(output_row, input_row, num_blocks * (DCTSIZE2 * SIZEOF(JCOEF))); -#else - register JCOEFPTR inptr, outptr; - register long count; - - inptr = (JCOEFPTR) input_row; - outptr = (JCOEFPTR) output_row; - for (count = (long) num_blocks * DCTSIZE2; count > 0; count--) { - *outptr++ = *inptr++; - } -#endif -} - - -GLOBAL void -jzero_far (void FAR * target, size_t bytestozero) -/* Zero out a chunk of FAR memory. */ -/* This might be sample-array data, block-array data, or alloc_medium data. */ -{ -#ifdef FMEMZERO - FMEMZERO(target, bytestozero); -#else - register char FAR * ptr = (char FAR *) target; - register size_t count; - - for (count = bytestozero; count > 0; count--) { - *ptr++ = 0; - } -#endif -} diff --git a/jpeg/jversion.h b/jpeg/jversion.h deleted file mode 100644 index 4bc19876053402194edc19509eba766cc848aac9..0000000000000000000000000000000000000000 --- a/jpeg/jversion.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * jversion.h - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains software version identification. - */ - - -#define JVERSION "5 24-Sep-94" - -#define JCOPYRIGHT "Copyright (C) 1994, Thomas G. Lane" diff --git a/lib/Makefile b/lib/Makefile deleted file mode 100644 index 63144f4277307aa2f1946ec48c8bdfb5debb98f0..0000000000000000000000000000000000000000 --- a/lib/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# $Id: Makefile,v 1.3 2000-11-25 15:26:12 geuzaine Exp $ - -RM = rm -RMFLAGS = -f - - -clean: - $(RM) $(RMFLAGS) *.a - diff --git a/tutorial/README b/tutorial/README deleted file mode 100644 index e239e6056c72a069a39c687b2207b5c3c55f8561..0000000000000000000000000000000000000000 --- a/tutorial/README +++ /dev/null @@ -1,105 +0,0 @@ -$Id: README,v 1.13 2001-08-04 01:16:58 geuzaine Exp $ - -Here are the examples in the Gmsh tutorial. These examples are -commented (both C and C++-style comments can be used in Gmsh input -files) and should introduce new features gradually, starting with -t1.geo. - -[NOTE: This tutorial does not explain the mesh and post-processing -file formats. See the FORMATS file for this.] - -There are two ways to actually run these examples with Gmsh. (The -operations to run Gmsh may vary according to your operating system. In -the folowing examples, we will assume that you're working with a -UNIX-like shell.) The first working mode of Gmsh is the interactive -graphical mode. To launch Gmsh in interactive mode, just type - -> gmsh - -at the prompt on the command line. This will open two windows: the -graphic window (with a status bar at the bottom) and the menu window -(with a menu bar and some context dependent buttons). To open the -first tutorial file, select the 'File->Open' menu, and choose 't1.geo' -in the input field. To perform the mesh generation, go to the mesh -module (by selecting 'Mesh' in the module menu) and choose the -required dimension in the context-dependent buttons ('1D' will mesh -all the curves; '2D' will mesh all the surfaces ---as well as all the -curves if '1D' was not called before; '3D' will mesh all the volumes ----and all the surfaces if '2D' was not called before). To save the -resulting mesh in the current mesh format, choose 'Save' in the -context-dependent buttons, or select the appropriate format with the -'File->Save as' menu. The default mesh file name is based on the name -of the first input file on the command line (or 'unnamed' if there -wasn't any input file given), with an appended extension depending on -the mesh format. - -[NOTE: Nearly all the interactive commands have shortcuts. Select -'Help->Shortcuts' in the menu bar to learn about these shortcuts.] - -Instead of opening the tutorial with the 'File->Open' menu, it is -often more convenient to put the file name on the command line, for -example with: - -> gmsh t1.geo - -[NOTE: The '.geo' extension can also be omitted.] - -[NOTE: Even if it is often handy to define the variables and the points -directly in the input files (you may use any text editor for this -purpose, e.g. Wordpad on Windows, or Emacs on Unix), it is almost -always more simple to define the curves, the surfaces and the volumes -interactively. To do so, just follow the context dependent buttons in -the Geometry module. For example, to create a line, select 'Geometry' -in the module menu, and then select 'Elementary, Add, Create, -Line'. You will then be asked (in the status bar of the graphic -window) to select a list of points, and to click 'e' to finish the -selection (or 'q' to abort it). Once the interactive command is -completed, a string is automatically added at the end of the currently -opened project file.] - -The second operating mode for Gmsh is the non-interactive mode. In -this mode, there is no graphical user interface, and all operations -are performed without any interaction. To mesh the first tutorial in -non-interactive mode, just type: - -> gmsh t1.geo -2 - -To mesh the same example, but with the backgound mesh available in the -file 'bgmesh.pos', just type: - -> gmsh t1.geo -2 -bgm bgmesh.pos - -[NOTE: You should read the notes in the file 'bgmesh.pos' if you -intend to use background meshes.] - -Several files can be loaded simultaneously in Gmsh. The first one -defines the project, while the others are appended ("merged") to this -project. You can merge such files with the 'File->Merge' menu, or by -directly specifying the names of the files on the command line. This -is most useful for post-processing purposes. For example, to merge the -post-processing views contained in the files 'view1.pos' and -'view2.pos' together with the first tutorial 't1.geo', you can type -the following line on the command line: - -> gmsh t1.geo view1.pos view2.pos - -In the Post-Processing module (select 'Post_Processing' in the module -menu), two view buttons will appear, respectively labeled "a scalar -map" and "a vector map". A left mouse click toggles the visibility of -the selected view. A right mouse click provides access to the view's -options. If you want the modifications made to one view to affect also -all the other views, select the 'Apply next changes to all views' or -'Force same options for all views' option in the -'Options->Post-processing' menu. - -[NOTE: All the options specified interactively can also be directly -specified in the ascii input files. All available options, with their -current values, can be saved into a file by selecting 'File->Save -as->GEO complete options', or simply viewed by pressing the '?' button -in the status bar. To save the current options as your default -preferences for all future Gmsh sessions, use the 'Options->Save -options now' menu.] - - -OK, that's all, folks. Enjoy the tutorial. - diff --git a/tutorial/bgmesh.pos b/tutorial/bgmesh.pos deleted file mode 100644 index 7125b2ba2d5575f95f1f17d0fc85eabf3a9ab75e..0000000000000000000000000000000000000000 --- a/tutorial/bgmesh.pos +++ /dev/null @@ -1,1401 +0,0 @@ -/********************************************************************* - * - * Gmsh tutorial 1 - appendix 3 - * - * 2D background mesh - * - *********************************************************************/ - -// This post-processing view contains scalar triangles. The values -// represent the target characteristic mesh sizes to be applied to the -// first tutorial, t1.geo. -// -// There are two ways to use this view as a background mesh: -// -// 1) open t1.geo, merge bgmesh.pos, select 'Apply as background mesh' -// in the view's options (by right mouse clicking on the view's -// button), and mesh the problem. -// -// 2) launch Gmsh with 'gmsh t1.geo -bgm bgmesh.pos' and mesh the -// problem. - -View "background mesh" { -ST(0.077999455,0.23524011,0,0.068887619,0.23816425,0,0.069899638,0.22912552,0){0.01189957,0.011832084,0.0079913397}; -ST(0.010825671,0.099590532,0,0.017290659,0.10415759,0,0.0069230724,0.10599149,0){0.004016107,0.005360028,0.0033428238}; -ST(0.090008104,0.28998113,0,0.085714286,0.3,0,0.081687843,0.29203932,0){0.016147484,0.018964149,0.015803058}; -ST(0.017290659,0.10415759,0,0.012784661,0.11066528,0,0.0069230724,0.10599149,0){0.005360028,0.0045452747,0.0033428238}; -ST(0.090008104,0.28998113,0,0.082630752,0.28262165,0,0.093083753,0.28331412,0){0.016147484,0.010973814,0.01260174}; -ST(0.049952063,0.1787418,0,0.042689804,0.18635753,0,0.04131315,0.17777431,0){0.0098216119,0.0097748212,0.0082407056}; -ST(0.03069513,0.26894688,0,0.031975417,0.25926175,0,0.03870412,0.26169066,0){0.0068303314,0.0083004448,0.0094231843}; -ST(0.089406716,0.20396751,0,0.093260637,0.21041677,0,0.082328401,0.21016288,0){0.019494326,0.018844578,0.016915435}; -ST(0.031727435,0.080354054,0,0.026085268,0.073876802,0,0.031467861,0.069797289,0){0.0070919301,0.0058065079,0.006435259}; -ST(0.08910917,0.098496512,0,0.093000475,0.1047961,0,0.082067363,0.10446681,0){0.01901377,0.020272382,0.01810119}; -ST(0.093260637,0.21041677,0,0.087181126,0.21483096,0,0.082328401,0.21016288,0){0.018844578,0.016308886,0.016915435}; -ST(0.049993928,0.12587718,0,0.042328752,0.13293246,0,0.041543317,0.12438759,0){0.011673871,0.009694753,0.010099467}; -ST(0.063624353,0.22254194,0,0.073845419,0.2209308,0,0.069899638,0.22912552,0){0.0098145667,0.011831692,0.0079913397}; -ST(0.093000475,0.1047961,0,0.087157047,0.10934378,0,0.082067363,0.10446681,0){0.020272382,0.019341606,0.01810119}; -ST(0.1,0.27142857,0,0.1,0.27857143,0,0.090371277,0.27649128,0){0.017019935,0.01232876,0.012591106}; -ST(0.036904468,0.073804537,0,0.031727435,0.080354054,0,0.031467861,0.069797289,0){0.0075426679,0.0070919301,0.006435259}; -ST(0.08966753,0.048486622,0,0.087298598,0.058683388,0,0.081684953,0.055147379,0){0.012741374,0.013637256,0.012440745}; -ST(0.063624353,0.22254194,0,0.060721208,0.21210696,0,0.068257319,0.21507018,0){0.0098145667,0.012543826,0.013061516}; -ST(0.0086756768,0.036899292,0,0,0.031797718,0,0.0055959319,0.028632452,0){0.0021713487,0.0011210343,0.0017127759}; -ST(0.021553482,0.081174183,0,0.025886934,0.08860133,0,0.016263823,0.084450562,0){0.0053983383,0.0064910537,0.0046096007}; -ST(0.025886934,0.08860133,0,0.017510909,0.090546457,0,0.016263823,0.084450562,0){0.0064910537,0.0050417352,0.0046096007}; -ST(0,0.038198556,0,0,0.031797718,0,0.0086756768,0.036899292,0){0.0011742026,0.0011210343,0.0021713487}; -ST(0.036329714,0.11757216,0,0.044718386,0.11394827,0,0.046632264,0.12023287,0){0.0092480093,0.010943235,0.011250538}; -ST(0.052562678,0.20392294,0,0.061970306,0.20134793,0,0.054994472,0.20965729,0){0.012272703,0.01431047,0.011998039}; -ST(0.085714286,0.3,0,0.090008104,0.28998113,0,0.094208762,0.29420256,0){0.018964149,0.016147484,0.018972662}; -ST(0.053583525,0.11616451,0,0.063913425,0.11688174,0,0.055297829,0.12231774,0){0.012709223,0.014765299,0.012895552}; -ST(0.068887619,0.23816425,0,0.06251245,0.23827584,0,0.063977145,0.22848817,0){0.011832084,0.01091156,0.0073732166}; -ST(0.060721208,0.21210696,0,0.063624353,0.22254194,0,0.055853935,0.21726741,0){0.012543826,0.0098145667,0.010404133}; -ST(0.0088859191,0.14145589,0,0,0.13607591,0,0.0053512079,0.13276494,0){0.0031626243,0.0017953562,0.0028483266}; -ST(0.033568202,0.044135264,0,0.024359349,0.045685236,0,0.026665403,0.037799711,0){0.0053659814,0.0042875226,0.0042921244}; -ST(0.090008104,0.28998113,0,0.1,0.28571429,0,0.094208762,0.29420256,0){0.016147484,0.014962161,0.018972662}; -ST(0.082630752,0.28262165,0,0.090008104,0.28998113,0,0.081687843,0.29203932,0){0.010973814,0.016147484,0.015803058}; -ST(0.060533545,0.055251798,0,0.062787056,0.044920338,0,0.067714741,0.05140667,0){0.0095798189,0.0090240074,0.010194849}; -ST(0.062787056,0.044920338,0,0.060533545,0.055251798,0,0.05563397,0.050831549,0){0.0090240074,0.0095798189,0.0085660039}; -ST(0,0.14272272,0,0,0.13607591,0,0.0088859191,0.14145589,0){0.0016420471,0.0017953562,0.0031626243}; -ST(0.041543317,0.12438759,0,0.036329714,0.11757216,0,0.046632264,0.12023287,0){0.010099467,0.0092480093,0.011250538}; -ST(0.01511463,0.2393591,0,0.024913192,0.2415392,0,0.016666559,0.24707082,0){0.003913276,0.0057883538,0.0049690135}; -ST(0.1,0.27142857,0,0.090371277,0.27649128,0,0.093179303,0.2678908,0){0.017019935,0.012591106,0.017810421}; -ST(0.054994472,0.20965729,0,0.061970306,0.20134793,0,0.064084929,0.20704546,0){0.011998039,0.01431047,0.014136837}; -ST(0.063913425,0.11688174,0,0.06020365,0.12640845,0,0.055297829,0.12231774,0){0.014765299,0.013623005,0.012895552}; -ST(0.082630752,0.28262165,0,0.073416465,0.27934608,0,0.083774702,0.27611409,0){0.010973814,0.0088333373,0.011867254}; -ST(0.064553118,0.015646957,0,0.068927504,0.0060918646,0,0.07060324,0.015557736,0){0.0076743125,0.0079278993,0.0082944052}; -ST(0.026088282,0.11662569,0,0.024878246,0.10641205,0,0.031699447,0.11078243,0){0.0072108519,0.0068975847,0.0083198518}; -ST(0.029469652,0.005642048,0,0.035472349,0.0074078563,0,0.029473654,0.015232311,0){0.0039620423,0.004577179,0.0040572572}; -ST(0.026404382,0.1403628,0,0.021768928,0.13185708,0,0.027097286,0.12998702,0){0.0061938225,0.0059408379,0.0070390802}; -ST(0.06020365,0.12640845,0,0.063913425,0.11688174,0,0.065548757,0.12300421,0){0.013623005,0.014765299,0.014884473}; -ST(0.068083985,0.13292159,0,0.06020365,0.12640845,0,0.065548757,0.12300421,0){0.014467744,0.013623005,0.014884473}; -ST(0.090756854,0.23190656,0,0.082404782,0.22674486,0,0.091139261,0.22291429,0){0.012032973,0.010486323,0.013217271}; -ST(0.091442458,0.17596857,0,0.088897881,0.18581252,0,0.083403881,0.18288957,0){0.01565701,0.01821991,0.016492804}; -ST(0.056202721,0.28169173,0,0.059957664,0.27407069,0,0.066334221,0.27760857,0){0.0071383318,0.0097471839,0.0092000449}; -ST(0.045608803,0.090081762,0,0.052243848,0.09708824,0,0.043535837,0.098689724,0){0.010159785,0.011856809,0.010280302}; -ST(0.063593879,0.28436636,0,0.056202721,0.28169173,0,0.066334221,0.27760857,0){0.0093505769,0.0071383318,0.0092000449}; -ST(0.078003603,0.24394837,0,0.080764352,0.25370675,0,0.074546647,0.25397984,0){0.015457416,0.018075953,0.0168549}; -ST(0.082630752,0.28262165,0,0.090371277,0.27649128,0,0.093083753,0.28331412,0){0.010973814,0.012591106,0.01260174}; -ST(0.069899638,0.22912552,0,0.068887619,0.23816425,0,0.063977145,0.22848817,0){0.0079913397,0.011832084,0.0073732166}; -ST(0.1,0.28571429,0,0.090008104,0.28998113,0,0.093083753,0.28331412,0){0.014962161,0.016147484,0.01260174}; -ST(0.014905173,0.28510008,0,0.010287914,0.27534428,0,0.018023907,0.27765349,0){0.0033226234,0.0027159036,0.0033417499}; -ST(0.021768928,0.13185708,0,0.026404382,0.1403628,0,0.017146751,0.13667282,0){0.0059408379,0.0061938225,0.0048412481}; -ST(0.010988582,0.15262774,0,0.017270897,0.15739381,0,0.0069940321,0.15907843,0){0.0028106617,0.0031824437,0.001901441}; -ST(0.023581972,0.097370644,0,0.017510909,0.090546457,0,0.025886934,0.08860133,0){0.006406371,0.0050417352,0.0064910537}; -ST(0.017270897,0.15739381,0,0.012839023,0.16391618,0,0.0069940321,0.15907843,0){0.0031824437,0.0025080878,0.001901441}; -ST(0.010287914,0.27534428,0,0.014905173,0.28510008,0,0.0072882997,0.28273448,0){0.0027159036,0.0033226234,0.0020641429}; -ST(0.032166514,0.1863502,0,0.042689804,0.18635753,0,0.037423894,0.19247533,0){0.0078219415,0.0097748212,0.0093169769}; -ST(0.064553118,0.015646957,0,0.062145045,0.0076586897,0,0.068927504,0.0060918646,0){0.0076743125,0.0072652846,0.0079278993}; -ST(0.038361486,0.26932975,0,0.03069513,0.26894688,0,0.03870412,0.26169066,0){0.0080129566,0.0068303314,0.0094231843}; -ST(0.034829369,0.02335383,0,0.030599619,0.030587128,0,0.025374297,0.027198867,0){0.004776128,0.0045148124,0.0038510471}; -ST(0.069592365,0.2044761,0,0.075044373,0.21065322,0,0.068257319,0.21507018,0){0.015550958,0.015462793,0.013061516}; -ST(0.027245934,0.021259063,0,0.034829369,0.02335383,0,0.025374297,0.027198867,0){0.0039264931,0.004776128,0.0038510471}; -ST(0.024913192,0.2415392,0,0.01511463,0.2393591,0,0.020771052,0.23704614,0){0.0057883538,0.003913276,0.0044321473}; -ST(0.031910893,0.1329396,0,0.026404382,0.1403628,0,0.027097286,0.12998702,0){0.0077641922,0.0061938225,0.0070390802}; -ST(0.032223949,0.094413692,0,0.023581972,0.097370644,0,0.025886934,0.08860133,0){0.0079256222,0.006406371,0.0064910537}; -ST(0.014285714,0.3,0,0.0086856391,0.29134398,0,0.017895429,0.29268335,0){0.0048122771,0.0031515581,0.0048907512}; -ST(0.06020365,0.12640845,0,0.068083985,0.13292159,0,0.061700615,0.13262108,0){0.013623005,0.014467744,0.013320597}; -ST(0.073416465,0.27934608,0,0.078294484,0.27242298,0,0.083774702,0.27611409,0){0.0088333373,0.01320473,0.011867254}; -ST(0.026085268,0.073876802,0,0.01667016,0.076996579,0,0.022758147,0.069506288,0){0.0058065079,0.0044083295,0.0050703118}; -ST(0.0097873579,0.21453362,0,0.012217264,0.2047927,0,0.017536395,0.20823956,0){0.0033423208,0.004330336,0.0051815338}; -ST(0.07511088,0.16072173,0,0.077093289,0.16951597,0,0.068059877,0.16458271,0){0.0087749301,0.011325245,0.0087794571}; -ST(0.042689804,0.18635753,0,0.032166514,0.1863502,0,0.035632482,0.1808812,0){0.0097748212,0.0078219415,0.0077875372}; -ST(0.023785868,0.1502414,0,0.024892413,0.15941751,0,0.017270897,0.15739381,0){0.0047927965,0.0038380393,0.0031824437}; -ST(0.091262725,0.14644758,0,0.087150461,0.15605115,0,0.082655945,0.15094656,0){0.01557235,0.011826762,0.012939286}; -ST(0.042689804,0.18635753,0,0.049952063,0.1787418,0,0.049745249,0.18581505,0){0.0097748212,0.0098216119,0.011007309}; -ST(0.024878246,0.10641205,0,0.026088282,0.11662569,0,0.020103716,0.1121562,0){0.0068975847,0.0072108519,0.006015088}; -ST(0.043421277,0.070486317,0,0.036645028,0.065460046,0,0.04109467,0.060492019,0){0.0083417443,0.0069586979,0.0072817007}; -ST(0.033568202,0.044135264,0,0.026665403,0.037799711,0,0.032234088,0.038660634,0){0.0053659814,0.0042921244,0.0049768543}; -ST(0.021114997,0.031742287,0,0.030599619,0.030587128,0,0.026665403,0.037799711,0){0.0034867915,0.0045148124,0.0042921244}; -ST(0.025388465,0.21882491,0,0.015882078,0.22251136,0,0.018022534,0.21455918,0){0.0053446137,0.0034527378,0.0047312007}; -ST(0.069592365,0.2044761,0,0.068257319,0.21507018,0,0.064084929,0.20704546,0){0.015550958,0.013061516,0.014136837}; -ST(0.063357463,0.065442129,0,0.072251719,0.070805738,0,0.066454746,0.074006402,0){0.010941973,0.01288041,0.012316324}; -ST(0.073845419,0.2209308,0,0.063624353,0.22254194,0,0.068257319,0.21507018,0){0.011831692,0.0098145667,0.013061516}; -ST(0.01667016,0.076996579,0,0.017377178,0.070609144,0,0.022758147,0.069506288,0){0.0044083295,0.0042796585,0.0050703118}; -ST(0.045236581,0.26460649,0,0.053554762,0.26522616,0,0.045177088,0.27188516,0){0.0102386,0.01164797,0.0084113388}; -ST(0.04677464,0.063987522,0,0.043421277,0.070486317,0,0.04109467,0.060492019,0){0.0083560787,0.0083417443,0.0072817007}; -ST(0.024953134,0.05500472,0,0.024359349,0.045685236,0,0.031526637,0.051365987,0){0.0047366364,0.0042875226,0.005445607}; -ST(0.030550045,0.12422927,0,0.036329714,0.11757216,0,0.035995823,0.12783992,0){0.007950786,0.0092480093,0.0088531158}; -ST(0.045177088,0.27188516,0,0.053554762,0.26522616,0,0.053293432,0.27215527,0){0.0084113388,0.01164797,0.0095317783}; -ST(0.025933861,0.16956771,0,0.024892413,0.15941751,0,0.031586673,0.16385918,0){0.0046706454,0.0038380393,0.0045180602}; -ST(0.024359349,0.045685236,0,0.033568202,0.044135264,0,0.031526637,0.051365987,0){0.0042875226,0.0053659814,0.005445607}; -ST(0.075863318,0.15128967,0,0.071665053,0.14281002,0,0.077226062,0.14082844,0){0.011891738,0.013390699,0.01474222}; -ST(0,0.12282405,0,0,0.1162249,0,0.0089155203,0.11918733,0){0.0019714567,0.0019987419,0.0037661726}; -ST(0.035581831,0.21858705,0,0.025388465,0.21882491,0,0.026946825,0.21343101,0){0.0069414214,0.0053446137,0.006387962}; -ST(0.042328752,0.13293246,0,0.049993928,0.12587718,0,0.049672348,0.13321934,0){0.009694753,0.011673871,0.011026506}; -ST(0.082093837,0.14416854,0,0.075863318,0.15128967,0,0.077226062,0.14082844,0){0.014763534,0.011891738,0.01474222}; -ST(0.026404382,0.1403628,0,0.017650615,0.14332879,0,0.017146751,0.13667282,0){0.0061938225,0.0044959748,0.0048412481}; -ST(0,0.070445097,0,0,0.063964486,0,0.0087536517,0.067121195,0){0.0015609243,0.0014714865,0.0028405718}; -ST(0.023581972,0.097370644,0,0.024878246,0.10641205,0,0.017290659,0.10415759,0){0.006406371,0.0068975847,0.005360028}; -ST(0.008891087,0.24587871,0,0,0.24433157,0,0.0076308335,0.23791294,0){0.0034490262,0.0017709859,0.002622712}; -ST(0.0071428571,0.3,0,0,0.29298695,0,0.0086856391,0.29134398,0){0.0033959644,0.0017698682,0.0031515581}; -ST(0.036329714,0.11757216,0,0.041543317,0.12438759,0,0.035995823,0.12783992,0){0.0092480093,0.010099467,0.0088531158}; -ST(0.016706021,0.19335173,0,0.0087251496,0.19682156,0,0.0070329053,0.19002058,0){0.0052731674,0.0037412176,0.0032854097}; -ST(0.062978572,0.26385631,0,0.067812422,0.25459576,0,0.068748354,0.26449609,0){0.013699793,0.015539601,0.014627562}; -ST(0.072627499,0.040727625,0,0.063732547,0.036638377,0,0.073594736,0.034812751,0){0.0098966022,0.0085558446,0.0095709225}; -ST(0.024124839,0.26497814,0,0.031975417,0.25926175,0,0.03069513,0.26894688,0){0.0062836381,0.0083004448,0.0068303314}; -ST(0.082495291,0.1767331,0,0.091442458,0.17596857,0,0.083403881,0.18288957,0){0.01452089,0.01565701,0.016492804}; -ST(0.062978572,0.26385631,0,0.061392472,0.25446647,0,0.067812422,0.25459576,0){0.013699793,0.014253572,0.015539601}; -ST(0.072251719,0.070805738,0,0.063357463,0.065442129,0,0.071294356,0.064744402,0){0.01288041,0.010941973,0.012048426}; -ST(0.081893484,0.0078002118,0,0.082286996,0.017839369,0,0.076551438,0.016154114,0){0.0092564415,0.009581051,0.0089261328}; -ST(0.068059877,0.16458271,0,0.077093289,0.16951597,0,0.070593417,0.17068076,0){0.0087794571,0.011325245,0.010855202}; -ST(0.063134362,0.14896083,0,0.063566128,0.14056854,0,0.069692704,0.14906563,0){0.010684357,0.012479942,0.01161516}; -ST(0.088948357,0.079796263,0,0.091920476,0.089306354,0,0.083812176,0.083170737,0){0.016740913,0.018524169,0.016304455}; -ST(0.071872871,0.196559,0,0.063123076,0.1931948,0,0.073017129,0.19015646,0){0.016350779,0.014426164,0.016031824}; -ST(0.063566128,0.14056854,0,0.071665053,0.14281002,0,0.069692704,0.14906563,0){0.012479942,0.013390699,0.01161516}; -ST(0.070877084,0.24895303,0,0.078003603,0.24394837,0,0.074546647,0.25397984,0){0.015483539,0.015457416,0.0168549}; -ST(0.026085268,0.073876802,0,0.021553482,0.081174183,0,0.01667016,0.076996579,0){0.0058065079,0.0053983383,0.0044083295}; -ST(0.015882078,0.22251136,0,0.0097873579,0.21453362,0,0.018022534,0.21455918,0){0.0034527378,0.0033423208,0.0047312007}; -ST(0.068887619,0.23816425,0,0.077999455,0.23524011,0,0.074372203,0.23959597,0){0.011832084,0.01189957,0.013237082}; -ST(0.088897881,0.18581252,0,0.091581209,0.19542497,0,0.083669222,0.1890156,0){0.01821991,0.020231089,0.017899958}; -ST(0.063913425,0.11688174,0,0.053583525,0.11616451,0,0.060886949,0.1120001,0){0.014765299,0.012709223,0.014162182}; -ST(0.08274919,0.16255857,0,0.087150461,0.15605115,0,0.09314271,0.16086327,0){0.0094335589,0.011826762,0.010567692}; -ST(0.088990194,0.16733012,0,0.08274919,0.16255857,0,0.09314271,0.16086327,0){0.012031194,0.0094335589,0.010567692}; -ST(0.052903,0.044824368,0,0.062787056,0.044920338,0,0.05563397,0.050831549,0){0.0077922845,0.0090240074,0.0085660039}; -ST(0.033876205,0.27672463,0,0.038361486,0.26932975,0,0.041478584,0.27908417,0){0.0054941796,0.0080129566,0.0055491609}; -ST(0.025782343,0.010697164,0,0.029469652,0.005642048,0,0.029473654,0.015232311,0){0.0036273673,0.0039620423,0.0040572572}; -ST(0.024359349,0.045685236,0,0.024953134,0.05500472,0,0.018018822,0.050767877,0){0.0042875226,0.0047366364,0.0036547138}; -ST(0.075044373,0.21065322,0,0.073845419,0.2209308,0,0.068257319,0.21507018,0){0.015462793,0.011831692,0.013061516}; -ST(0.05534208,0.16725107,0,0.045860229,0.163357,0,0.055152673,0.16162804,0){0.007927676,0.0059728166,0.0064983066}; -ST(0.075053667,0.054941461,0,0.07730725,0.063519068,0,0.06842362,0.059320823,0){0.011519318,0.012794591,0.011056454}; -ST(0.016706021,0.19335173,0,0.0070329053,0.19002058,0,0.015545644,0.18763273,0){0.0052731674,0.0032854097,0.0048113533}; -ST(0.087298598,0.058683388,0,0.08966753,0.048486622,0,0.09327093,0.054697331,0){0.013637256,0.012741374,0.013955554}; -ST(0.0086856391,0.29134398,0,0,0.28598845,0,0.0072882997,0.28273448,0){0.0031515581,0.0013741411,0.0020641429}; -ST(0.080964027,0.048552182,0,0.08966753,0.048486622,0,0.081684953,0.055147379,0){0.011635394,0.012741374,0.012440745}; -ST(0.024124839,0.26497814,0,0.01442164,0.26537398,0,0.016971899,0.25850458,0){0.0062836381,0.0044630286,0.0053575659}; -ST(0.043024015,0.24149425,0,0.034146712,0.24547706,0,0.035671381,0.23699067,0){0.0087794072,0.0080003212,0.0065861258}; -ST(0.024892413,0.15941751,0,0.025933861,0.16956771,0,0.020122959,0.1650354,0){0.0038380393,0.0046706454,0.0034385995}; -ST(0.05534208,0.16725107,0,0.046260124,0.1690627,0,0.045860229,0.163357,0){0.007927676,0.0072155439,0.0059728166}; -ST(0.092857143,0.3,0,0.085714286,0.3,0,0.094208762,0.29420256,0){0.020373327,0.018964149,0.018972662}; -ST(0,0.12282405,0,0.0089155203,0.11918733,0,0.0071724145,0.1266659,0){0.0019714567,0.0037661726,0.0033276957}; -ST(0.066109726,0.17987248,0,0.063664382,0.17131349,0,0.070593417,0.17068076,0){0.012748621,0.010100304,0.010855202}; -ST(0,0.17619703,0,0,0.16946933,0,0.0088492442,0.17282653,0){0.0015510887,0.0012995201,0.002692894}; -ST(0.063732547,0.036638377,0,0.072627499,0.040727625,0,0.068656382,0.045051564,0){0.0085558446,0.0098966022,0.0097624898}; -ST(0.072198327,0.17708617,0,0.066109726,0.17987248,0,0.070593417,0.17068076,0){0.013008194,0.012748621,0.010855202}; -ST(0.067812422,0.25459576,0,0.071849852,0.25958891,0,0.068748354,0.26449609,0){0.015539601,0.016149584,0.014627562}; -ST(0.1,0.28571429,0,0.1,0.29285714,0,0.094208762,0.29420256,0){0.014962161,0.019388115,0.018972662}; -ST(0.035472349,0.0074078563,0,0.035314966,0.015501396,0,0.029473654,0.015232311,0){0.004577179,0.0046621453,0.0040572572}; -ST(0.0097873579,0.21453362,0,0.015882078,0.22251136,0,0.0078882173,0.22230145,0){0.0033423208,0.0034527378,0.0024001814}; -ST(0.063357463,0.065442129,0,0.05987551,0.074756595,0,0.055460475,0.069248829,0){0.010941973,0.011330154,0.010108481}; -ST(0.05987551,0.074756595,0,0.063357463,0.065442129,0,0.066454746,0.074006402,0){0.011330154,0.010941973,0.012316324}; -ST(0.068083985,0.13292159,0,0.065548757,0.12300421,0,0.072428856,0.1291202,0){0.014467744,0.014884473,0.015735892}; -ST(0,0.070445097,0,0.0087536517,0.067121195,0,0.0071026462,0.074440872,0){0.0015609243,0.0028405718,0.0027655645}; -ST(0.082286996,0.017839369,0,0.081893484,0.0078002118,0,0.087635132,0.015594151,0){0.009581051,0.0092564415,0.010048385}; -ST(0.030060203,0.17758385,0,0.036056327,0.17085097,0,0.035632482,0.1808812,0){0.0064082769,0.0062254059,0.0077875372}; -ST(0.025388465,0.21882491,0,0.035581831,0.21858705,0,0.030623557,0.22463729,0){0.0053446137,0.0069414214,0.0049656049}; -ST(0.077999455,0.23524011,0,0.069899638,0.22912552,0,0.076354388,0.22899719,0){0.01189957,0.0079913397,0.0086224438}; -ST(0.015882078,0.22251136,0,0.025388465,0.21882491,0,0.023684336,0.22562355,0){0.0034527378,0.0053446137,0.0039829742}; -ST(0.014285714,0.3,0,0.0071428571,0.3,0,0.0086856391,0.29134398,0){0.0048122771,0.0033959644,0.0031515581}; -ST(0.087150461,0.15605115,0,0.091262725,0.14644758,0,0.093845023,0.15358209,0){0.011826762,0.01557235,0.013567056}; -ST(0.045860229,0.163357,0,0.04998761,0.15939724,0,0.055152673,0.16162804,0){0.0059728166,0.0065496788,0.0064983066}; -ST(0.053121914,0.14984683,0,0.063134362,0.14896083,0,0.061430891,0.15444473,0){0.0090412706,0.010684357,0.009109847}; -ST(0.063123076,0.1931948,0,0.067729338,0.18636951,0,0.073017129,0.19015646,0){0.014426164,0.014422352,0.016031824}; -ST(0.017650615,0.14332879,0,0.026404382,0.1403628,0,0.023011439,0.14474978,0){0.0044959748,0.0061938225,0.0052386146}; -ST(0.06842362,0.059320823,0,0.07730725,0.063519068,0,0.071294356,0.064744402,0){0.011056454,0.012794591,0.012048426}; -ST(0.1,0.11428571,0,0.1,0.12142857,0,0.091003968,0.11814039,0){0.021999929,0.02178379,0.020146139}; -ST(0.077999455,0.23524011,0,0.085997557,0.2404943,0,0.078003603,0.24394837,0){0.01189957,0.015461976,0.015457416}; -ST(0.073416465,0.27934608,0,0.082630752,0.28262165,0,0.076893993,0.2841615,0){0.0088333373,0.010973814,0.010943662}; -ST(0.0072786063,0.26188216,0,0.010704963,0.2547075,0,0.016971899,0.25850458,0){0.0033349743,0.0041360758,0.0053575659}; -ST(0.01442164,0.26537398,0,0.0072786063,0.26188216,0,0.016971899,0.25850458,0){0.0044630286,0.0033349743,0.0053575659}; -ST(0.0088859191,0.14145589,0,0.011625116,0.13292217,0,0.017146751,0.13667282,0){0.0031626243,0.0040067754,0.0048412481}; -ST(0.024913192,0.2415392,0,0.034146712,0.24547706,0,0.02496255,0.24770535,0){0.0057883538,0.0080003212,0.0065793383}; -ST(0.062787056,0.044920338,0,0.052903,0.044824368,0,0.056980445,0.038962171,0){0.0090240074,0.0077922845,0.007911465}; -ST(0.063134362,0.14896083,0,0.053121914,0.14984683,0,0.056840174,0.14351487,0){0.010684357,0.0090412706,0.010834582}; -ST(0.067897561,0.29362967,0,0.063593879,0.28436636,0,0.069762333,0.28431595,0){0.013998657,0.0093505769,0.010105067}; -ST(0.073845419,0.2209308,0,0.075044373,0.21065322,0,0.079846013,0.21642209,0){0.011831692,0.015462793,0.014513645}; -ST(0.017650615,0.14332879,0,0.0088859191,0.14145589,0,0.017146751,0.13667282,0){0.0044959748,0.0031626243,0.0048412481}; -ST(0.021087268,0.20067351,0,0.016706021,0.19335173,0,0.02166044,0.19054668,0){0.0061950348,0.0052731674,0.006134172}; -ST(0.026266704,0.19389286,0,0.021087268,0.20067351,0,0.02166044,0.19054668,0){0.0071802403,0.0061950348,0.006134172}; -ST(0.087770529,0.028777226,0,0.078794748,0.031832626,0,0.079360922,0.024541521,0){0.010747054,0.0099565426,0.0095813814}; -ST(0.036056327,0.17085097,0,0.04131315,0.17777431,0,0.035632482,0.1808812,0){0.0062254059,0.0082407056,0.0077875372}; -ST(0.1,0.23571429,0,0.090756854,0.23190656,0,0.094415701,0.22755789,0){0.015025256,0.012032973,0.011061458}; -ST(0.06251245,0.23827584,0,0.059647761,0.23257945,0,0.063977145,0.22848817,0){0.01091156,0.0083760198,0.0073732166}; -ST(0.026404382,0.1403628,0,0.032539635,0.14727541,0,0.023011439,0.14474978,0){0.0061938225,0.0064374803,0.0052386146}; -ST(0.016765854,0.040249778,0,0.024359349,0.045685236,0,0.015246202,0.045764486,0){0.0031936572,0.0042875226,0.0031524656}; -ST(0.032539635,0.14727541,0,0.023785868,0.1502414,0,0.023011439,0.14474978,0){0.0064374803,0.0047927965,0.0052386146}; -ST(0.034829369,0.02335383,0,0.027245934,0.021259063,0,0.029473654,0.015232311,0){0.004776128,0.0039264931,0.0040572572}; -ST(0.090371277,0.27649128,0,0.085467713,0.26792084,0,0.093179303,0.2678908,0){0.012591106,0.016469437,0.017810421}; -ST(0,0.29298695,0,0,0.28598845,0,0.0086856391,0.29134398,0){0.0017698682,0.0013741411,0.0031515581}; -ST(0.061245673,0.24452488,0,0.051467941,0.24632844,0,0.054926517,0.23907834,0){0.012669907,0.011312523,0.01002412}; -ST(0.0059292545,0.014766706,0,0,0.012676601,0,0.0060844024,0.0061076692,0){0.0016346023,0.0010192824,0.0016156403}; -ST(0.091003968,0.11814039,0,0.081934846,0.12129159,0,0.082229882,0.11430537,0){0.020146139,0.018213432,0.018445934}; -ST(0.061718685,0.09526012,0,0.052243848,0.09708824,0,0.058666695,0.090099436,0){0.013527119,0.011856809,0.012546942}; -ST(0.0055959319,0.028632452,0,0.0090763502,0.020172771,0,0.013134683,0.023608073,0){0.0017127759,0.0020007534,0.0024680799}; -ST(0.075863318,0.15128967,0,0.07511088,0.16072173,0,0.068410214,0.15556675,0){0.011891738,0.0087749301,0.009640753}; -ST(0.087157047,0.10934378,0,0.091003968,0.11814039,0,0.082229882,0.11430537,0){0.019341606,0.020146139,0.018445934}; -ST(0.030599619,0.030587128,0,0.021114997,0.031742287,0,0.025374297,0.027198867,0){0.0045148124,0.0034867915,0.0038510471}; -ST(0.073416465,0.27934608,0,0.070141314,0.27013164,0,0.078294484,0.27242298,0){0.0088333373,0.012960708,0.01320473}; -ST(0.091003968,0.11814039,0,0.1,0.12142857,0,0.092325542,0.12610752,0){0.020146139,0.02178379,0.019887567}; -ST(0.041478584,0.27908417,0,0.038361486,0.26932975,0,0.045177088,0.27188516,0){0.0055491609,0.0080129566,0.0084113388}; -ST(0.081934846,0.12129159,0,0.091003968,0.11814039,0,0.085850588,0.12646039,0){0.018213432,0.020146139,0.018594654}; -ST(0.088897881,0.18581252,0,0.091442458,0.17596857,0,0.094303462,0.18195896,0){0.01821991,0.01565701,0.018137636}; -ST(0.035314966,0.015501396,0,0.034829369,0.02335383,0,0.029473654,0.015232311,0){0.0046621453,0.004776128,0.0040572572}; -ST(0.012217264,0.2047927,0,0.0097873579,0.21453362,0,0.0065980308,0.2085645,0){0.004330336,0.0033423208,0.0031103455}; -ST(0.024878246,0.10641205,0,0.023581972,0.097370644,0,0.030986562,0.10190392,0){0.0068975847,0.006406371,0.0079831878}; -ST(0.023581972,0.097370644,0,0.032223949,0.094413692,0,0.030986562,0.10190392,0){0.006406371,0.0079256222,0.0079831878}; -ST(0.060722814,0.29233598,0,0.063593879,0.28436636,0,0.067897561,0.29362967,0){0.012292123,0.0093505769,0.013998657}; -ST(0.091920476,0.089306354,0,0.088948357,0.079796263,0,0.094143629,0.083392096,0){0.018524169,0.016740913,0.018131068}; -ST(0.075019178,0.10458001,0,0.075237497,0.11427639,0,0.068497018,0.1095775,0){0.016721658,0.017047438,0.015633235}; -ST(0.072016645,0.090906146,0,0.064022129,0.087403768,0,0.073518975,0.084426062,0){0.015065982,0.013276737,0.014655813}; -ST(0.026266704,0.19389286,0,0.033865226,0.19972054,0,0.027679574,0.20292337,0){0.0071802403,0.008760944,0.00743754}; -ST(0.064553118,0.015646957,0,0.059002427,0.022914684,0,0.055286521,0.017504737,0){0.0076743125,0.0073347399,0.0067686563}; -ST(0.063732547,0.036638377,0,0.069403265,0.030528728,0,0.073594736,0.034812751,0){0.0085558446,0.0088265259,0.0095709225}; -ST(0.026404382,0.1403628,0,0.031910893,0.1329396,0,0.031694548,0.13853307,0){0.0061938225,0.0077641922,0.0072703146}; -ST(0.091920476,0.089306354,0,0.083077166,0.089272145,0,0.083812176,0.083170737,0){0.018524169,0.016912942,0.016304455}; -ST(0.024359349,0.045685236,0,0.016765854,0.040249778,0,0.021259451,0.03718155,0){0.0042875226,0.0031936572,0.0036421529}; -ST(0.082093837,0.14416854,0,0.091262725,0.14644758,0,0.082655945,0.15094656,0){0.014763534,0.01557235,0.012939286}; -ST(0.055287343,0.062192056,0,0.046279621,0.058429349,0,0.055098786,0.05659657,0){0.0094513626,0.0078696625,0.0089509863}; -ST(0.010401748,0.010393316,0,0.018141403,0.008046786,0,0.012634798,0.015675501,0){0.0020666199,0.0028360063,0.0023302125}; -ST(0.011625116,0.13292217,0,0.0088859191,0.14145589,0,0.0053512079,0.13276494,0){0.0040067754,0.0031626243,0.0028483266}; -ST(0.091581209,0.19542497,0,0.082772947,0.19508151,0,0.083669222,0.1890156,0){0.020231089,0.018456454,0.017899958}; -ST(0.072198327,0.17708617,0,0.077093289,0.16951597,0,0.077439796,0.17962153,0){0.013008194,0.011325245,0.014576515}; -ST(0.075237497,0.11427639,0,0.075019178,0.10458001,0,0.078753785,0.10944217,0){0.017047438,0.016721658,0.0176718}; -ST(0.077093289,0.16951597,0,0.082495291,0.1767331,0,0.077439796,0.17962153,0){0.011325245,0.01452089,0.014576515}; -ST(0.087298598,0.058683388,0,0.091481478,0.06789356,0,0.083796981,0.064188207,0){0.013637256,0.01547964,0.01383053}; -ST(0.018022534,0.21455918,0,0.0097873579,0.21453362,0,0.017536395,0.20823956,0){0.0047312007,0.0033423208,0.0051815338}; -ST(0.0087251496,0.19682156,0,0,0.19646877,0,0.0070329053,0.19002058,0){0.0037412176,0.001996753,0.0032854097}; -ST(0.012022181,0.028807467,0,0.0086756768,0.036899292,0,0.0055959319,0.028632452,0){0.0024211626,0.0021713487,0.0017127759}; -ST(0.049672348,0.13321934,0,0.051719407,0.14014665,0,0.042474964,0.13846746,0){0.011026506,0.010532948,0.009157817}; -ST(0.1,0.05,0,0.09327093,0.054697331,0,0.094358182,0.044786011,0){0.014250726,0.013955554,0.012923485}; -ST(0.031988636,0.21096061,0,0.035581831,0.21858705,0,0.026946825,0.21343101,0){0.0075960493,0.0069414214,0.006387962}; -ST(0.012634798,0.015675501,0,0.018141403,0.008046786,0,0.01972947,0.013018635,0){0.0023302125,0.0028360063,0.0030334072}; -ST(0.064022129,0.087403768,0,0.06823576,0.080384264,0,0.073518975,0.084426062,0){0.013276737,0.01330007,0.014655813}; -ST(0.063123076,0.1931948,0,0.071872871,0.196559,0,0.06636951,0.19781188,0){0.014426164,0.016350779,0.015272818}; -ST(0.055287343,0.062192056,0,0.04677464,0.063987522,0,0.046279621,0.058429349,0){0.0094513626,0.0083560787,0.0078696625}; -ST(0.046741278,0.20737056,0,0.049958331,0.21332249,0,0.040972633,0.21505187,0){0.010788495,0.010389004,0.0085096617}; -ST(0.080764352,0.25370675,0,0.078003603,0.24394837,0,0.08378138,0.24758349,0){0.018075953,0.015457416,0.017616529}; -ST(0.012022181,0.028807467,0,0.018230931,0.025124521,0,0.015319473,0.034144954,0){0.0024211626,0.0030367355,0.0028850261}; -ST(0.018230931,0.025124521,0,0.021114997,0.031742287,0,0.015319473,0.034144954,0){0.0030367355,0.0034867915,0.0028850261}; -ST(0.023785868,0.1502414,0,0.032539635,0.14727541,0,0.03097928,0.15477188,0){0.0047927965,0.0064374803,0.0051663091}; -ST(0.024892413,0.15941751,0,0.023785868,0.1502414,0,0.03097928,0.15477188,0){0.0038380393,0.0047927965,0.0051663091}; -ST(0.010704963,0.2547075,0,0.008891087,0.24587871,0,0.016097677,0.25277203,0){0.0041360758,0.0034490262,0.0051741925}; -ST(0.091481478,0.06789356,0,0.087298598,0.058683388,0,0.093812493,0.061490211,0){0.01547964,0.013637256,0.014931531}; -ST(0.034146712,0.24547706,0,0.024913192,0.2415392,0,0.029770914,0.23803179,0){0.0080003212,0.0057883538,0.0059362425}; -ST(0.1,0.14285714,0,0.1,0.15,0,0.091262725,0.14644758,0){0.01802413,0.015699503,0.01557235}; -ST(0.038812872,0.29456049,0,0.036211214,0.28505229,0,0.041784558,0.28543344,0){0.0089597215,0.0060722216,0.0069568789}; -ST(0.0086856391,0.29134398,0,0.014905173,0.28510008,0,0.017895429,0.29268335,0){0.0031515581,0.0033226234,0.0048907512}; -ST(0.089822961,0.25859451,0,0.093179303,0.2678908,0,0.085458809,0.2622366,0){0.019819525,0.017810421,0.018345062}; -ST(0,0.24433157,0,0,0.23744837,0,0.0076308335,0.23791294,0){0.0017709859,0.0014645348,0.002622712}; -ST(0.061970306,0.20134793,0,0.052562678,0.20392294,0,0.055630617,0.19665887,0){0.01431047,0.012272703,0.013109344}; -ST(0.0090763502,0.020172771,0,0.0055959319,0.028632452,0,0.0042261279,0.022248036,0){0.0020007534,0.0017127759,0.0015070621}; -ST(0.051467941,0.24632844,0,0.061245673,0.24452488,0,0.057118803,0.2495577,0){0.011312523,0.012669907,0.01294362}; -ST(0.059957664,0.27407069,0,0.056202721,0.28169173,0,0.053293432,0.27215527,0){0.0097471839,0.0071383318,0.0095317783}; -ST(0.031988636,0.21096061,0,0.040100466,0.20866457,0,0.040972633,0.21505187,0){0.0075960493,0.0093763376,0.0085096617}; -ST(0.0078882173,0.22230145,0,0,0.21688641,0,0.0043931952,0.21357915,0){0.0024001814,0.0015962363,0.0024813618}; -ST(0.035581831,0.21858705,0,0.031988636,0.21096061,0,0.040972633,0.21505187,0){0.0069414214,0.0075960493,0.0085096617}; -ST(0.1,0.17142857,0,0.1,0.17857143,0,0.091442458,0.17596857,0){0.015132575,0.017958284,0.01565701}; -ST(0.090756854,0.23190656,0,0.1,0.23571429,0,0.093408348,0.23929044,0){0.012032973,0.015025256,0.016078078}; -ST(0.07730725,0.063519068,0,0.081684953,0.055147379,0,0.083796981,0.064188207,0){0.012794591,0.012440745,0.01383053}; -ST(0.063664382,0.17131349,0,0.059413957,0.17983771,0,0.055269447,0.17422653,0){0.010100304,0.011618873,0.0096616545}; -ST(0.074170803,0.010670566,0,0.081893484,0.0078002118,0,0.076551438,0.016154114,0){0.008532082,0.0092564415,0.0089261328}; -ST(0.052243848,0.09708824,0,0.061718685,0.09526012,0,0.060554433,0.1007053,0){0.011856809,0.013527119,0.013673871}; -ST(0.090457694,0.24900602,0,0.085997557,0.2404943,0,0.094605269,0.2449598,0){0.019245042,0.015461976,0.018767685}; -ST(0.008891087,0.24587871,0,0.016666559,0.24707082,0,0.016097677,0.25277203,0){0.0034490262,0.0049690135,0.0051741925}; -ST(0.091581209,0.19542497,0,0.088897881,0.18581252,0,0.094374666,0.18946442,0){0.020231089,0.01821991,0.02003149}; -ST(0.049987111,0.073706442,0,0.049011257,0.083339476,0,0.044925733,0.07572266,0){0.009638201,0.010269497,0.0089806243}; -ST(0.043729981,0.29067011,0,0.038812872,0.29456049,0,0.041784558,0.28543344,0){0.0088969473,0.0089597215,0.0069568789}; -ST(0.051719407,0.14014665,0,0.046118705,0.14263648,0,0.042474964,0.13846746,0){0.010532948,0.0092278734,0.009157817}; -ST(0.041289591,0.20119015,0,0.037423894,0.19247533,0,0.042998409,0.19194838,0){0.010204072,0.0093169769,0.010376684}; -ST(0.09327093,0.054697331,0,0.08966753,0.048486622,0,0.094358182,0.044786011,0){0.013955554,0.012741374,0.012923485}; -ST(0.090371277,0.27649128,0,0.1,0.27857143,0,0.093083753,0.28331412,0){0.012591106,0.01232876,0.01260174}; -ST(0.016666559,0.24707082,0,0.024913192,0.2415392,0,0.02496255,0.24770535,0){0.0049690135,0.0057883538,0.0065793383}; -ST(0.1,0.22857143,0,0.1,0.23571429,0,0.094415701,0.22755789,0){0.010969952,0.015025256,0.011061458}; -ST(0.025933861,0.16956771,0,0.030060203,0.17758385,0,0.023665586,0.1785779,0){0.0046706454,0.0064082769,0.0054977511}; -ST(0.026088282,0.11662569,0,0.030550045,0.12422927,0,0.023840623,0.12537371,0){0.0072108519,0.007950786,0.0066011582}; -ST(0.085467713,0.26792084,0,0.078294484,0.27242298,0,0.075512736,0.26666994,0){0.016469437,0.01320473,0.015202563}; -ST(0.077093289,0.16951597,0,0.07511088,0.16072173,0,0.08274919,0.16255857,0){0.011325245,0.0087749301,0.0094335589}; -ST(0.034146712,0.24547706,0,0.043024015,0.24149425,0,0.041079184,0.24904413,0){0.0080003212,0.0087794072,0.0097899948}; -ST(0.062787056,0.044920338,0,0.063732547,0.036638377,0,0.068656382,0.045051564,0){0.0090240074,0.0085558446,0.0097624898}; -ST(0.051719407,0.14014665,0,0.053121914,0.14984683,0,0.047950771,0.14786323,0){0.010532948,0.0090412706,0.0086642634}; -ST(0.033865226,0.19972054,0,0.037423894,0.19247533,0,0.041289591,0.20119015,0){0.008760944,0.0093169769,0.010204072}; -ST(0.023785868,0.1502414,0,0.017270897,0.15739381,0,0.017116349,0.14998193,0){0.0047927965,0.0031824437,0.0038725238}; -ST(0.091442458,0.17596857,0,0.082495291,0.1767331,0,0.083408518,0.1704193,0){0.01565701,0.01452089,0.012492447}; -ST(0.059413957,0.17983771,0,0.063664382,0.17131349,0,0.066109726,0.17987248,0){0.011618873,0.010100304,0.012748621}; -ST(0.088990194,0.16733012,0,0.091442458,0.17596857,0,0.083408518,0.1704193,0){0.012031194,0.01565701,0.012492447}; -ST(0.078003603,0.24394837,0,0.070877084,0.24895303,0,0.074372203,0.23959597,0){0.015457416,0.015483539,0.013237082}; -ST(0.059002427,0.022914684,0,0.064553118,0.015646957,0,0.066186294,0.024012302,0){0.0073347399,0.0076743125,0.0081453494}; -ST(0.079783584,0.26191648,0,0.085467713,0.26792084,0,0.075512736,0.26666994,0){0.017322357,0.016469437,0.015202563}; -ST(0.049011257,0.083339476,0,0.049987111,0.073706442,0,0.054518411,0.078119445,0){0.010269497,0.009638201,0.010765513}; -ST(0.070877084,0.24895303,0,0.067305062,0.2440339,0,0.074372203,0.23959597,0){0.015483539,0.013605878,0.013237082}; -ST(0.056840174,0.14351487,0,0.053121914,0.14984683,0,0.051719407,0.14014665,0){0.010834582,0.0090412706,0.010532948}; -ST(0.1,0.064285714,0,0.1,0.071428571,0,0.091481478,0.06789356,0){0.016234238,0.017321771,0.01547964}; -ST(0.0087536517,0.067121195,0,0,0.063964486,0,0.0059238649,0.061251643,0){0.0028405718,0.0014714865,0.002285324}; -ST(0.070141314,0.27013164,0,0.073416465,0.27934608,0,0.066334221,0.27760857,0){0.012960708,0.0088333373,0.0092000449}; -ST(0.064553118,0.015646957,0,0.055286521,0.017504737,0,0.059697637,0.012753556,0){0.0076743125,0.0067686563,0.0071057936}; -ST(0.056202721,0.28169173,0,0.049343079,0.277854,0,0.053293432,0.27215527,0){0.0071383318,0.0070287375,0.0095317783}; -ST(0.012022181,0.028807467,0,0.0055959319,0.028632452,0,0.013134683,0.023608073,0){0.0024211626,0.0017127759,0.0024680799}; -ST(0.025567113,0.28905289,0,0.017895429,0.29268335,0,0.02153935,0.28356134,0){0.0055567337,0.0048907512,0.0039435902}; -ST(0.0088081659,0.089068546,0,0.011361659,0.080618598,0,0.016263823,0.084450562,0){0.0034128678,0.0036383706,0.0046096007}; -ST(0.078794748,0.031832626,0,0.087770529,0.028777226,0,0.087198716,0.035123314,0){0.0099565426,0.010747054,0.01115353}; -ST(0.1,0.19285714,0,0.1,0.2,0,0.091581209,0.19542497,0){0.021660378,0.021957739,0.020231089}; -ST(0.07730725,0.063519068,0,0.075053667,0.054941461,0,0.081684953,0.055147379,0){0.012794591,0.011519318,0.012440745}; -ST(0.1,0.0071428571,0,0.09386735,0.014826529,0,0.094091634,0.0059624358,0){0.011067347,0.010660697,0.01045357}; -ST(0.1,0.14285714,0,0.091262725,0.14644758,0,0.092733018,0.13870795,0){0.01802413,0.01557235,0.017873716}; -ST(0,0.3,0,0,0.29298695,0,0.0071428571,0.3,0){0.0019804025,0.0017698682,0.0033959644}; -ST(0.052243848,0.09708824,0,0.045608803,0.090081762,0,0.052671398,0.090038465,0){0.011856809,0.010159785,0.011446826}; -ST(0.05534208,0.16725107,0,0.063664382,0.17131349,0,0.055269447,0.17422653,0){0.007927676,0.010100304,0.0096616545}; -ST(0.017510909,0.090546457,0,0.0088081659,0.089068546,0,0.016263823,0.084450562,0){0.0050417352,0.0034128678,0.0046096007}; -ST(0.046828703,0.19603271,0,0.055630617,0.19665887,0,0.047317985,0.20170575,0){0.011336809,0.013109344,0.011381113}; -ST(0.066186294,0.024012302,0,0.064553118,0.015646957,0,0.07060324,0.015557736,0){0.0081453494,0.0076743125,0.0082944052}; -ST(0.061329737,0.16018623,0,0.068410214,0.15556675,0,0.068059877,0.16458271,0){0.0076429651,0.009640753,0.0087794571}; -ST(0.085997557,0.2404943,0,0.090756854,0.23190656,0,0.093408348,0.23929044,0){0.015461976,0.012032973,0.016078078}; -ST(0.035472349,0.0074078563,0,0.044093146,0.010189996,0,0.040745998,0.014567719,0){0.004577179,0.0054767147,0.0052038167}; -ST(0,0.038198556,0,0.0086756768,0.036899292,0,0.0064196609,0.043098201,0){0.0011742026,0.0021713487,0.0020049288}; -ST(0.025494351,0.27459236,0,0.024124839,0.26497814,0,0.03069513,0.26894688,0){0.0048210135,0.0062836381,0.0068303314}; -ST(0.068410214,0.15556675,0,0.07511088,0.16072173,0,0.068059877,0.16458271,0){0.009640753,0.0087749301,0.0087794571}; -ST(0.031699447,0.11078243,0,0.024878246,0.10641205,0,0.030986562,0.10190392,0){0.0083198518,0.0068975847,0.0079831878}; -ST(0.085467713,0.26792084,0,0.090371277,0.27649128,0,0.083774702,0.27611409,0){0.016469437,0.012591106,0.011867254}; -ST(0.018023907,0.27765349,0,0.025494351,0.27459236,0,0.02153935,0.28356134,0){0.0033417499,0.0048210135,0.0039435902}; -ST(0.0089155203,0.11918733,0,0,0.1162249,0,0.0061293251,0.11285968,0){0.0037661726,0.0019987419,0.0032244208}; -ST(0.049952063,0.1787418,0,0.04131315,0.17777431,0,0.049852622,0.17323607,0){0.0098216119,0.0082407056,0.0086421223}; -ST(0.036645028,0.065460046,0,0.03202369,0.058862937,0,0.04109467,0.060492019,0){0.0069586979,0.0058997278,0.0072817007}; -ST(0.03202369,0.058862937,0,0.03865178,0.054286144,0,0.04109467,0.060492019,0){0.0058997278,0.006550054,0.0072817007}; -ST(0.017895429,0.29268335,0,0.014905173,0.28510008,0,0.02153935,0.28356134,0){0.0048907512,0.0033226234,0.0039435902}; -ST(0.037735929,0.10537966,0,0.031699447,0.11078243,0,0.030986562,0.10190392,0){0.0094123836,0.0083198518,0.0079831878}; -ST(0.030060203,0.17758385,0,0.025933861,0.16956771,0,0.030747828,0.1721598,0){0.0064082769,0.0046706454,0.0057172032}; -ST(0.029557505,0.25181754,0,0.034146712,0.24547706,0,0.03695895,0.25453753,0){0.0077937721,0.0080003212,0.0093769691}; -ST(0.031586673,0.16385918,0,0.024892413,0.15941751,0,0.03097928,0.15477188,0){0.0045180602,0.0038380393,0.0051663091}; -ST(0,0.22372386,0,0,0.21688641,0,0.0078882173,0.22230145,0){0.0012703225,0.0015962363,0.0024001814}; -ST(0.068927504,0.0060918646,0,0.074170803,0.010670566,0,0.07060324,0.015557736,0){0.0079278993,0.008532082,0.0082944052}; -ST(0.012784661,0.11066528,0,0.0089155203,0.11918733,0,0.0061293251,0.11285968,0){0.0045452747,0.0037661726,0.0032244208}; -ST(0.024124839,0.26497814,0,0.016971899,0.25850458,0,0.025430513,0.25852231,0){0.0062836381,0.0053575659,0.0070372425}; -ST(0.037630266,0.15856612,0,0.031586673,0.16385918,0,0.03097928,0.15477188,0){0.005390121,0.0045180602,0.0051663091}; -ST(0.090371277,0.27649128,0,0.082630752,0.28262165,0,0.083774702,0.27611409,0){0.012591106,0.010973814,0.011867254}; -ST(0.04131315,0.17777431,0,0.041541458,0.17214356,0,0.049852622,0.17323607,0){0.0082407056,0.0072276425,0.0086421223}; -ST(0.0193219,0.2311094,0,0.028521342,0.23217192,0,0.020771052,0.23704614,0){0.0033259199,0.004622157,0.0044321473}; -ST(0.060533545,0.055251798,0,0.067714741,0.05140667,0,0.06842362,0.059320823,0){0.0095798189,0.010194849,0.011056454}; -ST(0.036056327,0.17085097,0,0.030060203,0.17758385,0,0.030747828,0.1721598,0){0.0062254059,0.0064082769,0.0057172032}; -ST(0.091262725,0.14644758,0,0.082093837,0.14416854,0,0.086199215,0.13907252,0){0.01557235,0.014763534,0.016657803}; -ST(0.0088492442,0.17282653,0,0,0.16946933,0,0.0061825315,0.16615776,0){0.002692894,0.0012995201,0.0018871004}; -ST(0.0089155203,0.11918733,0,0.012784661,0.11066528,0,0.014854991,0.11674459,0){0.0037661726,0.0045452747,0.0049657919}; -ST(0.063566128,0.14056854,0,0.068083985,0.13292159,0,0.072358306,0.13696631,0){0.012479942,0.014467744,0.014637908}; -ST(0.032913158,0.29243767,0,0.036211214,0.28505229,0,0.038812872,0.29456049,0){0.0074810533,0.0060722216,0.0089597215}; -ST(0.093179303,0.2678908,0,0.089822961,0.25859451,0,0.095319273,0.26073379,0){0.017810421,0.019819525,0.020580735}; -ST(0.055853935,0.21726741,0,0.063624353,0.22254194,0,0.058567138,0.22596146,0){0.010404133,0.0098145667,0.0079955342}; -ST(0.037735929,0.10537966,0,0.043535837,0.098689724,0,0.043696053,0.10764168,0){0.0094123836,0.010280302,0.010652083}; -ST(0.024359349,0.045685236,0,0.018018822,0.050767877,0,0.015246202,0.045764486,0){0.0042875226,0.0036547138,0.0031524656}; -ST(0.1,0.17142857,0,0.091442458,0.17596857,0,0.095064283,0.16787532,0){0.015132575,0.01565701,0.012983793}; -ST(0.091003968,0.11814039,0,0.092325542,0.12610752,0,0.085850588,0.12646039,0){0.020146139,0.019887567,0.018594654}; -ST(0.1,0.0071428571,0,0.1,0.014285714,0,0.09386735,0.014826529,0){0.011067347,0.011269361,0.010660697}; -ST(0.025494351,0.27459236,0,0.028120489,0.2818096,0,0.02153935,0.28356134,0){0.0048210135,0.0042507092,0.0039435902}; -ST(0.080532481,0.2036733,0,0.089406716,0.20396751,0,0.082328401,0.21016288,0){0.017789172,0.019494326,0.016915435}; -ST(0.072251719,0.070805738,0,0.07730725,0.063519068,0,0.077488341,0.073041111,0){0.01288041,0.012794591,0.013975013}; -ST(0.080374191,0.097624086,0,0.08910917,0.098496512,0,0.082067363,0.10446681,0){0.01726286,0.01901377,0.01810119}; -ST(0.082404782,0.22674486,0,0.090756854,0.23190656,0,0.084252623,0.23309293,0){0.010486323,0.012032973,0.011556838}; -ST(0,0.19646877,0,0,0.18969717,0,0.0070329053,0.19002058,0){0.001996753,0.001923296,0.0032854097}; -ST(0.021087268,0.20067351,0,0.026266704,0.19389286,0,0.027679574,0.20292337,0){0.0061950348,0.0071802403,0.00743754}; -ST(0.014905173,0.28510008,0,0.0086856391,0.29134398,0,0.0072882997,0.28273448,0){0.0033226234,0.0031515581,0.0020641429}; -ST(0.055630617,0.19665887,0,0.052562678,0.20392294,0,0.047317985,0.20170575,0){0.013109344,0.012272703,0.011381113}; -ST(0.07730725,0.063519068,0,0.082636182,0.070608246,0,0.077488341,0.073041111,0){0.012794591,0.014480965,0.013975013}; -ST(0,0.012676601,0,0,0.0063325984,0,0.0060844024,0.0061076692,0){0.0010192824,0.0010048122,0.0016156403}; -ST(0.080764352,0.25370675,0,0.086685255,0.25357155,0,0.085458809,0.2622366,0){0.018075953,0.019244658,0.018345062}; -ST(0.049958331,0.21332249,0,0.044431549,0.22049192,0,0.040972633,0.21505187,0){0.010389004,0.0078092733,0.0085096617}; -ST(0.01442164,0.26537398,0,0.024124839,0.26497814,0,0.019479015,0.2705585,0){0.0044630286,0.0062836381,0.0047057288}; -ST(0.032539635,0.14727541,0,0.026404382,0.1403628,0,0.031694548,0.13853307,0){0.0064374803,0.0061938225,0.0072703146}; -ST(0.055287343,0.062192056,0,0.063357463,0.065442129,0,0.055460475,0.069248829,0){0.0094513626,0.010941973,0.010108481}; -ST(0.082630752,0.28262165,0,0.081687843,0.29203932,0,0.076893993,0.2841615,0){0.010973814,0.015803058,0.010943662}; -ST(0.081893484,0.0078002118,0,0.089774267,0.010202707,0,0.087635132,0.015594151,0){0.0092564415,0.010102056,0.010048385}; -ST(0,0.17619703,0,0.0088492442,0.17282653,0,0.0062141227,0.17913624,0){0.0015510887,0.002692894,0.0026772087}; -ST(0.090756854,0.23190656,0,0.085997557,0.2404943,0,0.084252623,0.23309293,0){0.012032973,0.015461976,0.011556838}; -ST(0.024124839,0.26497814,0,0.025494351,0.27459236,0,0.019479015,0.2705585,0){0.0062836381,0.0048210135,0.0047057288}; -ST(0.091581209,0.19542497,0,0.1,0.2,0,0.095307299,0.20359445,0){0.020231089,0.021957739,0.020702797}; -ST(0.072873195,0.02116659,0,0.066186294,0.024012302,0,0.07060324,0.015557736,0){0.0087326558,0.0081453494,0.0082944052}; -ST(0.031975417,0.25926175,0,0.024124839,0.26497814,0,0.025430513,0.25852231,0){0.0083004448,0.0062836381,0.0070372425}; -ST(0.1,0.11428571,0,0.091003968,0.11814039,0,0.093650276,0.11165907,0){0.021999929,0.020146139,0.020701173}; -ST(0,0.14272272,0,0.0088859191,0.14145589,0,0.0064726641,0.14769389,0){0.0016420471,0.0031626243,0.0024715601}; -ST(0.046279621,0.058429349,0,0.050004445,0.054274349,0,0.055098786,0.05659657,0){0.0078696625,0.0080776129,0.0089509863}; -ST(0,0.089973101,0,0.0088081659,0.089068546,0,0.0062739213,0.09500888,0){0.0018256894,0.0034128678,0.0030651339}; -ST(0.060981097,0.10625719,0,0.067492619,0.10117066,0,0.068497018,0.1095775,0){0.01403139,0.015048339,0.015633235}; -ST(0.033865226,0.19972054,0,0.026266704,0.19389286,0,0.031703323,0.19206661,0){0.008760944,0.0071802403,0.0081716788}; -ST(0.026665403,0.037799711,0,0.024359349,0.045685236,0,0.021259451,0.03718155,0){0.0042921244,0.0042875226,0.0036421529}; -ST(0.07789134,0.13496254,0,0.086199215,0.13907252,0,0.077226062,0.14082844,0){0.015967895,0.016657803,0.01474222}; -ST(0.031988636,0.21096061,0,0.023854517,0.20874482,0,0.027679574,0.20292337,0){0.0075960493,0.0063291573,0.00743754}; -ST(0.078794748,0.031832626,0,0.087198716,0.035123314,0,0.078343312,0.037688751,0){0.0099565426,0.01115353,0.010332889}; -ST(0.023581972,0.097370644,0,0.017290659,0.10415759,0,0.016970501,0.097139845,0){0.006406371,0.005360028,0.0051389794}; -ST(0.052243848,0.09708824,0,0.052671398,0.090038465,0,0.058666695,0.090099436,0){0.011856809,0.011446826,0.012546942}; -ST(0.0088492442,0.17282653,0,0.0061825315,0.16615776,0,0.014716796,0.17010542,0){0.002692894,0.0018871004,0.0032674718}; -ST(0.020771052,0.23704614,0,0.028521342,0.23217192,0,0.029770914,0.23803179,0){0.0044321473,0.004622157,0.0059362425}; -ST(0.021553482,0.081174183,0,0.026085268,0.073876802,0,0.026804876,0.082803766,0){0.0053983383,0.0058065079,0.0063784224}; -ST(0.067492619,0.10117066,0,0.075019178,0.10458001,0,0.068497018,0.1095775,0){0.015048339,0.016721658,0.015633235}; -ST(0.0061825315,0.16615776,0,0.012839023,0.16391618,0,0.014716796,0.17010542,0){0.0018871004,0.0025080878,0.0032674718}; -ST(0.055918666,0.15605421,0,0.053121914,0.14984683,0,0.061430891,0.15444473,0){0.0080267163,0.0090412706,0.009109847}; -ST(0.040100466,0.20866457,0,0.046741278,0.20737056,0,0.040972633,0.21505187,0){0.0093763376,0.010788495,0.0085096617}; -ST(0.036904468,0.073804537,0,0.036645028,0.065460046,0,0.043421277,0.070486317,0){0.0075426679,0.0069586979,0.0083417443}; -ST(0.071665053,0.14281002,0,0.063566128,0.14056854,0,0.072358306,0.13696631,0){0.013390699,0.012479942,0.014637908}; -ST(0.025933861,0.16956771,0,0.023665586,0.1785779,0,0.020376181,0.170702,0){0.0046706454,0.0054977511,0.0040946903}; -ST(0.026085268,0.073876802,0,0.031727435,0.080354054,0,0.026804876,0.082803766,0){0.0058065079,0.0070919301,0.0063784224}; -ST(0.079783584,0.26191648,0,0.080764352,0.25370675,0,0.085458809,0.2622366,0){0.017322357,0.018075953,0.018345062}; -ST(0.035314966,0.015501396,0,0.042058405,0.019919863,0,0.034829369,0.02335383,0){0.0046621453,0.005453629,0.004776128}; -ST(0.028521342,0.23217192,0,0.0193219,0.2311094,0,0.023684336,0.22562355,0){0.004622157,0.0033259199,0.0039829742}; -ST(0.01511463,0.2393591,0,0.008891087,0.24587871,0,0.0076308335,0.23791294,0){0.003913276,0.0034490262,0.002622712}; -ST(0.008891087,0.24587871,0,0.01511463,0.2393591,0,0.016666559,0.24707082,0){0.0034490262,0.003913276,0.0049690135}; -ST(0.021087268,0.20067351,0,0.017536395,0.20823956,0,0.015061448,0.19930754,0){0.0061950348,0.0051815338,0.0050085568}; -ST(0.042058405,0.019919863,0,0.041222898,0.027938513,0,0.034829369,0.02335383,0){0.005453629,0.0056013798,0.004776128}; -ST(0.060721208,0.21210696,0,0.054994472,0.20965729,0,0.064084929,0.20704546,0){0.012543826,0.011998039,0.014136837}; -ST(0.012784661,0.11066528,0,0.017290659,0.10415759,0,0.020103716,0.1121562,0){0.0045452747,0.005360028,0.006015088}; -ST(0.033876205,0.27672463,0,0.036211214,0.28505229,0,0.028120489,0.2818096,0){0.0054941796,0.0060722216,0.0042507092}; -ST(0.042857143,0.3,0,0.043729981,0.29067011,0,0.049141897,0.29382693,0){0.010468963,0.0088969473,0.010673071}; -ST(0.063664382,0.17131349,0,0.05534208,0.16725107,0,0.061082675,0.16604661,0){0.010100304,0.007927676,0.0082458925}; -ST(0.030550045,0.12422927,0,0.026088282,0.11662569,0,0.031049449,0.11882536,0){0.007950786,0.0072108519,0.0081786012}; -ST(0.034146712,0.24547706,0,0.041079184,0.24904413,0,0.03695895,0.25453753,0){0.0080003212,0.0097899948,0.0093769691}; -ST(0.085997557,0.2404943,0,0.093408348,0.23929044,0,0.094605269,0.2449598,0){0.015461976,0.016078078,0.018767685}; -ST(0.017290659,0.10415759,0,0.024878246,0.10641205,0,0.020103716,0.1121562,0){0.005360028,0.0068975847,0.006015088}; -ST(0.0060844024,0.0061076692,0,0.0063441985,0,0,0.013164233,0.0055676569,0){0.0016156403,0.0016344198,0.0023250401}; -ST(0,0.24433157,0,0.008891087,0.24587871,0,0.0059669022,0.25108021,0){0.0017709859,0.0034490262,0.003127184}; -ST(0.04131315,0.17777431,0,0.042689804,0.18635753,0,0.035632482,0.1808812,0){0.0082407056,0.0097748212,0.0077875372}; -ST(0.036056327,0.17085097,0,0.031586673,0.16385918,0,0.040316423,0.16515352,0){0.0062254059,0.0045180602,0.0057431286}; -ST(0.091481478,0.06789356,0,0.082636182,0.070608246,0,0.083796981,0.064188207,0){0.01547964,0.014480965,0.01383053}; -ST(0.1,0.085714286,0,0.1,0.092857143,0,0.091920476,0.089306354,0){0.019489559,0.020456772,0.018524169}; -ST(0.056929375,0.031821563,0,0.059002427,0.022914684,0,0.06300662,0.02963429,0){0.0075042202,0.0073347399,0.0080686047}; -ST(0.036329714,0.11757216,0,0.030550045,0.12422927,0,0.031049449,0.11882536,0){0.0092480093,0.007950786,0.0081786012}; -ST(0.091003968,0.11814039,0,0.087157047,0.10934378,0,0.093650276,0.11165907,0){0.020146139,0.019341606,0.020701173}; -ST(0.0063441985,0,0,0.012733243,0,0,0.013164233,0.0055676569,0){0.0016344198,0.0022733243,0.0023250401}; -ST(0.085997557,0.2404943,0,0.090457694,0.24900602,0,0.08378138,0.24758349,0){0.015461976,0.019245042,0.017616529}; -ST(0.1,0.021428571,0,0.091018613,0.020305374,0,0.09386735,0.014826529,0){0.011605817,0.010601467,0.010660697}; -ST(0.017510909,0.090546457,0,0.023581972,0.097370644,0,0.016970501,0.097139845,0){0.0050417352,0.006406371,0.0051389794}; -ST(0.087770529,0.028777226,0,0.079360922,0.024541521,0,0.085527033,0.023058497,0){0.010747054,0.0095813814,0.010161784}; -ST(0.0097873579,0.21453362,0,0.0078882173,0.22230145,0,0.0043931952,0.21357915,0){0.0033423208,0.0024001814,0.0024813618}; -ST(0.01667016,0.076996579,0,0.011361659,0.080618598,0,0.011925798,0.071682732,0){0.0044083295,0.0036383706,0.0034604908}; -ST(0.079783584,0.26191648,0,0.071849852,0.25958891,0,0.074546647,0.25397984,0){0.017322357,0.016149584,0.0168549}; -ST(0.080764352,0.25370675,0,0.079783584,0.26191648,0,0.074546647,0.25397984,0){0.018075953,0.017322357,0.0168549}; -ST(0.026088282,0.11662569,0,0.023840623,0.12537371,0,0.020593251,0.11774208,0){0.0072108519,0.0066011582,0.0061054898}; -ST(0.085997557,0.2404943,0,0.077999455,0.23524011,0,0.084252623,0.23309293,0){0.015461976,0.01189957,0.011556838}; -ST(0.057118803,0.2495577,0,0.052565911,0.25627138,0,0.047977922,0.25174593,0){0.01294362,0.012510711,0.011417018}; -ST(0.033876205,0.27672463,0,0.025494351,0.27459236,0,0.03069513,0.26894688,0){0.0054941796,0.0048210135,0.0068303314}; -ST(0.034146712,0.24547706,0,0.029557505,0.25181754,0,0.02496255,0.24770535,0){0.0080003212,0.0077937721,0.0065793383}; -ST(0.091262725,0.14644758,0,0.1,0.15,0,0.093845023,0.15358209,0){0.01557235,0.015699503,0.013567056}; -ST(0.011361659,0.080618598,0,0.0071026462,0.074440872,0,0.011925798,0.071682732,0){0.0036383706,0.0027655645,0.0034604908}; -ST(0.0086756768,0.036899292,0,0.012022181,0.028807467,0,0.015319473,0.034144954,0){0.0021713487,0.0024211626,0.0028850261}; -ST(0.035314966,0.015501396,0,0.035472349,0.0074078563,0,0.040745998,0.014567719,0){0.0046621453,0.004577179,0.0052038167}; -ST(0.038361486,0.26932975,0,0.033876205,0.27672463,0,0.03069513,0.26894688,0){0.0080129566,0.0054941796,0.0068303314}; -ST(0.091139261,0.22291429,0,0.082404782,0.22674486,0,0.08504359,0.22088839,0){0.013217271,0.010486323,0.013444316}; -ST(0.031586673,0.16385918,0,0.037630266,0.15856612,0,0.040316423,0.16515352,0){0.0045180602,0.005390121,0.0057431286}; -ST(0.1,0.035714286,0,0.1,0.042857143,0,0.092021896,0.039287055,0){0.012677109,0.013404909,0.012081021}; -ST(0.011361659,0.080618598,0,0.0088081659,0.089068546,0,0.0048810442,0.085538046,0){0.0036383706,0.0034128678,0.0026331542}; -ST(0.044093146,0.010189996,0,0.035472349,0.0074078563,0,0.042065894,0.0047615469,0){0.0054767147,0.004577179,0.0052207549}; -ST(0.049343079,0.277854,0,0.056202721,0.28169173,0,0.047308417,0.28460012,0){0.0070287375,0.0071383318,0.0073520502}; -ST(0.061392472,0.25446647,0,0.062978572,0.26385631,0,0.057902634,0.25988484,0){0.014253572,0.013699793,0.013366799}; -ST(0.056202721,0.28169173,0,0.052935715,0.28884082,0,0.047308417,0.28460012,0){0.0071383318,0.0097788527,0.0073520502}; -ST(0.086199215,0.13907252,0,0.07789134,0.13496254,0,0.082184623,0.13131431,0){0.016657803,0.015967895,0.017315387}; -ST(0.044431549,0.22049192,0,0.049958331,0.21332249,0,0.049857944,0.21896006,0){0.0078092733,0.010389004,0.0090150594}; -ST(0.051715879,0.035807649,0,0.052903,0.044824368,0,0.047793904,0.042940806,0){0.0071174241,0.0077922845,0.0070477847}; -ST(0.085714286,0.3,0,0.078571429,0.3,0,0.081687843,0.29203932,0){0.018964149,0.017545614,0.015803058}; -ST(0.071665053,0.14281002,0,0.075863318,0.15128967,0,0.069692704,0.14906563,0){0.013390699,0.011891738,0.01161516}; -ST(0.030599619,0.030587128,0,0.037310958,0.036215878,0,0.032234088,0.038660634,0){0.0045148124,0.0054726568,0.0049768543}; -ST(0.011625116,0.13292217,0,0.0071724145,0.1266659,0,0.012134612,0.12388006,0){0.0040067754,0.0033276957,0.0043462782}; -ST(0.046828703,0.19603271,0,0.041289591,0.20119015,0,0.042998409,0.19194838,0){0.011336809,0.010204072,0.010376684}; -ST(0.082636182,0.070608246,0,0.091481478,0.06789356,0,0.088095049,0.072803473,0){0.014480965,0.01547964,0.015636506}; -ST(0.07511088,0.16072173,0,0.075863318,0.15128967,0,0.080100366,0.15677346,0){0.0087749301,0.011891738,0.010731672}; -ST(0.043535837,0.098689724,0,0.052243848,0.09708824,0,0.04848764,0.10113949,0){0.010280302,0.011856809,0.011356258}; -ST(0.093179303,0.2678908,0,0.085467713,0.26792084,0,0.085458809,0.2622366,0){0.017810421,0.016469437,0.018345062}; -ST(0.017536395,0.20823956,0,0.012217264,0.2047927,0,0.015061448,0.19930754,0){0.0051815338,0.004330336,0.0050085568}; -ST(0.075863318,0.15128967,0,0.082093837,0.14416854,0,0.082655945,0.15094656,0){0.011891738,0.014763534,0.012939286}; -ST(0.037124591,0.13989263,0,0.032539635,0.14727541,0,0.031694548,0.13853307,0){0.0080703973,0.0064374803,0.0072703146}; -ST(0.087198716,0.035123314,0,0.083309384,0.040170382,0,0.078343312,0.037688751,0){0.01115353,0.011126505,0.010332889}; -ST(0.016308386,0.12868827,0,0.011625116,0.13292217,0,0.012134612,0.12388006,0){0.0050367798,0.0040067754,0.0043462782}; -ST(0.063732547,0.036638377,0,0.062787056,0.044920338,0,0.056980445,0.038962171,0){0.0085558446,0.0090240074,0.007911465}; -ST(0.069899638,0.22912552,0,0.073845419,0.2209308,0,0.076354388,0.22899719,0){0.0079913397,0.011831692,0.0086224438}; -ST(0.036211214,0.28505229,0,0.033876205,0.27672463,0,0.041478584,0.27908417,0){0.0060722216,0.0054941796,0.0055491609}; -ST(0.049987625,0.021377356,0,0.042058405,0.019919863,0,0.04886699,0.014821261,0){0.0063275637,0.005453629,0.0060418568}; -ST(0.091442458,0.17596857,0,0.088990194,0.16733012,0,0.095064283,0.16787532,0){0.01565701,0.012031194,0.012983793}; -ST(0,0.0063325984,0,0,0,0,0.0060844024,0.0061076692,0){0.0010048122,0.001,0.0016156403}; -ST(0.046260124,0.1690627,0,0.05534208,0.16725107,0,0.049852622,0.17323607,0){0.0072155439,0.007927676,0.0086421223}; -ST(0,0,0,0.0063441985,0,0,0.0060844024,0.0061076692,0){0.001,0.0016344198,0.0016156403}; -ST(0.056165025,0.18879164,0,0.063123076,0.1931948,0,0.055630617,0.19665887,0){0.012615914,0.014426164,0.013109344}; -ST(0.059002427,0.022914684,0,0.056929375,0.031821563,0,0.05377987,0.026339649,0){0.0073347399,0.0075042202,0.0069083627}; -ST(0.079152804,0,0,0.086053667,0,0,0.081893484,0.0078002118,0){0.0089152804,0.0096053667,0.0092564415}; -ST(0,0.19646877,0,0.0087251496,0.19682156,0,0.0061278576,0.20241521,0){0.001996753,0.0037412176,0.003192052}; -ST(0.010401748,0.010393316,0,0.0059292545,0.014766706,0,0.0060844024,0.0061076692,0){0.0020666199,0.0016346023,0.0016156403}; -ST(0.023737369,0.060388613,0,0.03202369,0.058862937,0,0.031481235,0.064160132,0){0.0048034585,0.0058997278,0.0061148995}; -ST(0.063123076,0.1931948,0,0.061970306,0.20134793,0,0.055630617,0.19665887,0){0.014426164,0.01431047,0.013109344}; -ST(0.0088081659,0.089068546,0,0,0.089973101,0,0.0048810442,0.085538046,0){0.0034128678,0.0018256894,0.0026331542}; -ST(0.015882078,0.22251136,0,0.023684336,0.22562355,0,0.014825475,0.22792118,0){0.0034527378,0.0039829742,0.0025937878}; -ST(0.056980445,0.038962171,0,0.052903,0.044824368,0,0.051715879,0.035807649,0){0.007911465,0.0077922845,0.0071174241}; -ST(0.073628203,0.28912297,0,0.067897561,0.29362967,0,0.069762333,0.28431595,0){0.013138961,0.013998657,0.010105067}; -ST(0.046632264,0.12023287,0,0.053583525,0.11616451,0,0.055297829,0.12231774,0){0.011250538,0.012709223,0.012895552}; -ST(0.063566128,0.14056854,0,0.063134362,0.14896083,0,0.056840174,0.14351487,0){0.012479942,0.010684357,0.010834582}; -ST(0.065548757,0.12300421,0,0.071875088,0.12337373,0,0.072428856,0.1291202,0){0.014884473,0.016108744,0.015735892}; -ST(0.045608803,0.090081762,0,0.043535837,0.098689724,0,0.038968939,0.093670726,0){0.010159785,0.010280302,0.0091516332}; -ST(0.032223949,0.094413692,0,0.025886934,0.08860133,0,0.031168111,0.086149637,0){0.0079256222,0.0064910537,0.0073174534}; -ST(0.067714741,0.05140667,0,0.075053667,0.054941461,0,0.06842362,0.059320823,0){0.010194849,0.011519318,0.011056454}; -ST(0.044718386,0.11394827,0,0.036329714,0.11757216,0,0.038759258,0.11167503,0){0.010943235,0.0092480093,0.0097384206}; -ST(0.037310958,0.036215878,0,0.030599619,0.030587128,0,0.036258451,0.030655369,0){0.0054726568,0.0045148124,0.005146398}; -ST(0.051467941,0.24632844,0,0.057118803,0.2495577,0,0.047977922,0.25174593,0){0.011312523,0.01294362,0.011417018}; -ST(0.081687843,0.29203932,0,0.073628203,0.28912297,0,0.076893993,0.2841615,0){0.015803058,0.013138961,0.010943662}; -ST(0.058736373,0,0,0.065494415,0,0,0.062145045,0.0076586897,0){0.0068736373,0.0075494415,0.0072652846}; -ST(0.010057812,0.23068741,0,0.0078882173,0.22230145,0,0.014825475,0.22792118,0){0.0022253758,0.0024001814,0.0025937878}; -ST(0.03865178,0.054286144,0,0.03202369,0.058862937,0,0.031526637,0.051365987,0){0.006550054,0.0058997278,0.005445607}; -ST(0.054926517,0.23907834,0,0.048914928,0.23375044,0,0.053928421,0.22993019,0){0.01002412,0.0074706102,0.0067705286}; -ST(0.037310958,0.036215878,0,0.045920614,0.037827936,0,0.039602446,0.042142971,0){0.0054726568,0.0065475869,0.0060094056}; -ST(0.05289152,0.22371293,0,0.045884216,0.22738799,0,0.049857944,0.21896006,0){0.0079980598,0.0060154955,0.0090150594}; -ST(0.025388465,0.21882491,0,0.018022534,0.21455918,0,0.026946825,0.21343101,0){0.0053446137,0.0047312007,0.006387962}; -ST(0.059647761,0.23257945,0,0.054926517,0.23907834,0,0.053928421,0.22993019,0){0.0083760198,0.01002412,0.0067705286}; -ST(0.1,0.12142857,0,0.1,0.12857143,0,0.092325542,0.12610752,0){0.02178379,0.021075659,0.019887567}; -ST(0.026277351,0.065288906,0,0.023737369,0.060388613,0,0.031481235,0.064160132,0){0.0054035144,0.0048034585,0.0061148995}; -ST(0.045884216,0.22738799,0,0.044431549,0.22049192,0,0.049857944,0.21896006,0){0.0060154955,0.0078092733,0.0090150594}; -ST(0.089406716,0.20396751,0,0.091581209,0.19542497,0,0.095307299,0.20359445,0){0.019494326,0.020231089,0.020702797}; -ST(0.032172362,0,0,0.038743683,0,0,0.035472349,0.0074078563,0){0.0042172362,0.0048743683,0.004577179}; -ST(0.036893214,0.087210211,0,0.032223949,0.094413692,0,0.031168111,0.086149637,0){0.0083992423,0.0079256222,0.0073174534}; -ST(0.064022129,0.087403768,0,0.072016645,0.090906146,0,0.067742128,0.095151401,0){0.013276737,0.015065982,0.014654254}; -ST(0.03202369,0.058862937,0,0.024953134,0.05500472,0,0.031526637,0.051365987,0){0.0058997278,0.0047366364,0.005445607}; -ST(0.043696053,0.10764168,0,0.043535837,0.098689724,0,0.04848764,0.10113949,0){0.010652083,0.010280302,0.011356258}; -ST(0.0088859191,0.14145589,0,0.017650615,0.14332879,0,0.0123246,0.14637199,0){0.0031626243,0.0044959748,0.0034383019}; -ST(0.049745249,0.18581505,0,0.050927036,0.19167746,0,0.042998409,0.19194838,0){0.011007309,0.011906838,0.010376684}; -ST(0.043729981,0.29067011,0,0.047308417,0.28460012,0,0.049141897,0.29382693,0){0.0088969473,0.0073520502,0.010673071}; -ST(0.047308417,0.28460012,0,0.052935715,0.28884082,0,0.049141897,0.29382693,0){0.0073520502,0.0097788527,0.010673071}; -ST(0.019167426,0,0,0.018141403,0.008046786,0,0.013164233,0.0055676569,0){0.0029167426,0.0028360063,0.0023250401}; -ST(0.068083985,0.13292159,0,0.063566128,0.14056854,0,0.061700615,0.13262108,0){0.014467744,0.012479942,0.013320597}; -ST(0.081684953,0.055147379,0,0.087298598,0.058683388,0,0.083796981,0.064188207,0){0.012440745,0.013637256,0.01383053}; -ST(0.045920614,0.037827936,0,0.037310958,0.036215878,0,0.042275405,0.033499023,0){0.0065475869,0.0054726568,0.0059293669}; -ST(0.041543317,0.12438759,0,0.042328752,0.13293246,0,0.035995823,0.12783992,0){0.010099467,0.009694753,0.0088531158}; -ST(0.0088081659,0.089068546,0,0.017510909,0.090546457,0,0.012113002,0.093889284,0){0.0034128678,0.0050417352,0.0041379831}; -ST(0.080964027,0.048552182,0,0.083309384,0.040170382,0,0.088013761,0.043162337,0){0.011635394,0.011126505,0.011974352}; -ST(0.031988636,0.21096061,0,0.027679574,0.20292337,0,0.034870605,0.20566508,0){0.0075960493,0.00743754,0.0086811083}; -ST(0.043729981,0.29067011,0,0.042857143,0.3,0,0.038812872,0.29456049,0){0.0088969473,0.010468963,0.0089597215}; -ST(0.055404807,0.10282352,0,0.052243848,0.09708824,0,0.060554433,0.1007053,0){0.012784817,0.011856809,0.013673871}; -ST(0.036825174,0.15225095,0,0.04397778,0.15172209,0,0.043875453,0.15799271,0){0.0063271993,0.0073960532,0.0061743039}; -ST(0.018022534,0.21455918,0,0.023854517,0.20874482,0,0.026946825,0.21343101,0){0.0047312007,0.0063291573,0.006387962}; -ST(0.012839023,0.16391618,0,0.017270897,0.15739381,0,0.020122959,0.1650354,0){0.0025080878,0.0031824437,0.0034385995}; -ST(0.08966753,0.048486622,0,0.080964027,0.048552182,0,0.088013761,0.043162337,0){0.012741374,0.011635394,0.011974352}; -ST(0.061392472,0.25446647,0,0.052565911,0.25627138,0,0.057118803,0.2495577,0){0.014253572,0.012510711,0.01294362}; -ST(0.017270897,0.15739381,0,0.024892413,0.15941751,0,0.020122959,0.1650354,0){0.0031824437,0.0038380393,0.0034385995}; -ST(0.091481478,0.06789356,0,0.1,0.071428571,0,0.093701939,0.074587016,0){0.01547964,0.017321771,0.016790312}; -ST(0.037630266,0.15856612,0,0.036825174,0.15225095,0,0.043875453,0.15799271,0){0.005390121,0.0063271993,0.0061743039}; -ST(0.049987625,0.021377356,0,0.055286521,0.017504737,0,0.05377987,0.026339649,0){0.0063275637,0.0067686563,0.0069083627}; -ST(0.081893484,0.0078002118,0,0.086053667,0,0,0.086908462,0.0054765496,0){0.0092564415,0.0096053667,0.0097257245}; -ST(0.025494351,0.27459236,0,0.033876205,0.27672463,0,0.028120489,0.2818096,0){0.0048210135,0.0054941796,0.0042507092}; -ST(0.055286521,0.017504737,0,0.059002427,0.022914684,0,0.05377987,0.026339649,0){0.0067686563,0.0073347399,0.0069083627}; -ST(0.0072786063,0.26188216,0,0.01442164,0.26537398,0,0.0066221519,0.26909631,0){0.0033349743,0.0044630286,0.0027778017}; -ST(0.023684336,0.22562355,0,0.0193219,0.2311094,0,0.014825475,0.22792118,0){0.0039829742,0.0033259199,0.0025937878}; -ST(0.068257319,0.21507018,0,0.060721208,0.21210696,0,0.064084929,0.20704546,0){0.013061516,0.012543826,0.014136837}; -ST(0.021087268,0.20067351,0,0.023854517,0.20874482,0,0.017536395,0.20823956,0){0.0061950348,0.0063291573,0.0051815338}; -ST(0.069592365,0.2044761,0,0.071872871,0.196559,0,0.075136028,0.20507776,0){0.015550958,0.016350779,0.016555444}; -ST(0.064285714,0.3,0,0.057142857,0.3,0,0.060722814,0.29233598,0){0.01471425,0.013300462,0.012292123}; -ST(0.090756854,0.23190656,0,0.091139261,0.22291429,0,0.094415701,0.22755789,0){0.012032973,0.013217271,0.011061458}; -ST(0.093701939,0.074587016,0,0.1,0.078571429,0,0.094143629,0.083392096,0){0.016790312,0.018423801,0.018131068}; -ST(0.035671381,0.23699067,0,0.034146712,0.24547706,0,0.029770914,0.23803179,0){0.0065861258,0.0080003212,0.0059362425}; -ST(0.035714286,0.3,0,0.028571429,0.3,0,0.032913158,0.29243767,0){0.0090547386,0.0076400532,0.0074810533}; -ST(0.026665403,0.037799711,0,0.030599619,0.030587128,0,0.032234088,0.038660634,0){0.0042921244,0.0045148124,0.0049768543}; -ST(0.053583525,0.11616451,0,0.046632264,0.12023287,0,0.049912889,0.1120086,0){0.012709223,0.011250538,0.01196981}; -ST(0.1,0.064285714,0,0.091481478,0.06789356,0,0.093812493,0.061490211,0){0.016234238,0.01547964,0.014931531}; -ST(0.063357463,0.065442129,0,0.055287343,0.062192056,0,0.060565964,0.060729258,0){0.010941973,0.0094513626,0.010078647}; -ST(0.04886699,0.014821261,0,0.042058405,0.019919863,0,0.040745998,0.014567719,0){0.0060418568,0.005453629,0.0052038167}; -ST(0.1,0.25,0,0.094387819,0.25408144,0,0.094605269,0.2449598,0){0.021317208,0.020817593,0.018767685}; -ST(0.024953134,0.05500472,0,0.03202369,0.058862937,0,0.023737369,0.060388613,0){0.0047366364,0.0058997278,0.0048034585}; -ST(0.042689804,0.18635753,0,0.049745249,0.18581505,0,0.042998409,0.19194838,0){0.0097748212,0.011007309,0.010376684}; -ST(0.030623557,0.22463729,0,0.039227544,0.22315927,0,0.033439845,0.22948364,0){0.0049656049,0.0064036567,0.004415165}; -ST(0.063624353,0.22254194,0,0.069899638,0.22912552,0,0.063977145,0.22848817,0){0.0098145667,0.0079913397,0.0073732166}; -ST(0.049987111,0.073706442,0,0.055460475,0.069248829,0,0.054518411,0.078119445,0){0.009638201,0.010108481,0.010765513}; -ST(0,0.076937883,0,0,0.070445097,0,0.0071026462,0.074440872,0){0.0016520865,0.0015609243,0.0027655645}; -ST(0.055460475,0.069248829,0,0.05987551,0.074756595,0,0.054518411,0.078119445,0){0.010108481,0.011330154,0.010765513}; -ST(0.060533545,0.055251798,0,0.06842362,0.059320823,0,0.060565964,0.060729258,0){0.0095798189,0.011056454,0.010078647}; -ST(0.077093289,0.16951597,0,0.08274919,0.16255857,0,0.083408518,0.1704193,0){0.011325245,0.0094335589,0.012492447}; -ST(0.080374191,0.097624086,0,0.083077166,0.089272145,0,0.087484565,0.092974465,0){0.01726286,0.016912942,0.018142262}; -ST(0.092733018,0.13870795,0,0.091262725,0.14644758,0,0.086199215,0.13907252,0){0.017873716,0.01557235,0.016657803}; -ST(0.08910917,0.098496512,0,0.080374191,0.097624086,0,0.087484565,0.092974465,0){0.01901377,0.01726286,0.018142262}; -ST(0.086199215,0.13907252,0,0.082093837,0.14416854,0,0.077226062,0.14082844,0){0.016657803,0.014763534,0.01474222}; -ST(0.024913192,0.2415392,0,0.020771052,0.23704614,0,0.029770914,0.23803179,0){0.0057883538,0.0044321473,0.0059362425}; -ST(0.0078882173,0.22230145,0,0.015882078,0.22251136,0,0.014825475,0.22792118,0){0.0024001814,0.0034527378,0.0025937878}; -ST(0.043535837,0.098689724,0,0.037735929,0.10537966,0,0.036577437,0.099338278,0){0.010280302,0.0094123836,0.0089716861}; -ST(0.008891087,0.24587871,0,0.010704963,0.2547075,0,0.0059669022,0.25108021,0){0.0034490262,0.0041360758,0.003127184}; -ST(0.04677464,0.063987522,0,0.055287343,0.062192056,0,0.05011462,0.068273913,0){0.0083560787,0.0094513626,0.0092014028}; -ST(0.091018613,0.020305374,0,0.1,0.021428571,0,0.094084599,0.025998463,0){0.010601467,0.011605817,0.011251769}; -ST(0.061718685,0.09526012,0,0.064022129,0.087403768,0,0.067742128,0.095151401,0){0.013527119,0.013276737,0.014654254}; -ST(0.026277351,0.065288906,0,0.031467861,0.069797289,0,0.022758147,0.069506288,0){0.0054035144,0.006435259,0.0050703118}; -ST(0,0.129442,0,0,0.12282405,0,0.0071724145,0.1266659,0){0.0019048233,0.0019714567,0.0033276957}; -ST(0.031467861,0.069797289,0,0.026085268,0.073876802,0,0.022758147,0.069506288,0){0.006435259,0.0058065079,0.0050703118}; -ST(0.091139261,0.22291429,0,0.1,0.22142857,0,0.094415701,0.22755789,0){0.013217271,0.015316378,0.011061458}; -ST(0.05289152,0.22371293,0,0.055853935,0.21726741,0,0.058567138,0.22596146,0){0.0079980598,0.010404133,0.0079955342}; -ST(0.080964027,0.048552182,0,0.075053667,0.054941461,0,0.073862352,0.047765251,0){0.011635394,0.011519318,0.010653664}; -ST(0.071872871,0.196559,0,0.077664091,0.1983373,0,0.075136028,0.20507776,0){0.016350779,0.017532477,0.016555444}; -ST(0.032539635,0.14727541,0,0.037124591,0.13989263,0,0.039444525,0.14644848,0){0.0064374803,0.0080703973,0.0076040741}; -ST(0.031910893,0.1329396,0,0.030550045,0.12422927,0,0.035995823,0.12783992,0){0.0077641922,0.007950786,0.0088531158}; -ST(0.042328752,0.13293246,0,0.049672348,0.13321934,0,0.042474964,0.13846746,0){0.009694753,0.011026506,0.009157817}; -ST(0.063913425,0.11688174,0,0.068497018,0.1095775,0,0.070021709,0.11751867,0){0.014765299,0.015633235,0.015974435}; -ST(0.025886934,0.08860133,0,0.021553482,0.081174183,0,0.026804876,0.082803766,0){0.0064910537,0.0053983383,0.0063784224}; -ST(0.049993928,0.12587718,0,0.046632264,0.12023287,0,0.055297829,0.12231774,0){0.011673871,0.011250538,0.012895552}; -ST(0.094387819,0.25408144,0,0.090457694,0.24900602,0,0.094605269,0.2449598,0){0.020817593,0.019245042,0.018767685}; -ST(0.042070498,0.080362737,0,0.036904468,0.073804537,0,0.044925733,0.07572266,0){0.0088504368,0.0075426679,0.0089806243}; -ST(0.1,0.1,0,0.093000475,0.1047961,0,0.09495489,0.096461405,0){0.021252429,0.020272382,0.019926776}; -ST(0.063566128,0.14056854,0,0.056396465,0.13618531,0,0.061700615,0.13262108,0){0.012479942,0.01190613,0.013320597}; -ST(0.1,0.22142857,0,0.091139261,0.22291429,0,0.09397747,0.21696725,0){0.015316378,0.013217271,0.016558656}; -ST(0.030550045,0.12422927,0,0.031910893,0.1329396,0,0.027097286,0.12998702,0){0.007950786,0.0077641922,0.0070390802}; -ST(0.032223949,0.094413692,0,0.036893214,0.087210211,0,0.038968939,0.093670726,0){0.0079256222,0.0083992423,0.0091516332}; -ST(0.044093146,0.010189996,0,0.049555855,0.0062621576,0,0.04886699,0.014821261,0){0.0054767147,0.005983611,0.0060418568}; -ST(0.032913158,0.29243767,0,0.028571429,0.3,0,0.025005027,0.29510367,0){0.0074810533,0.0076400532,0.0064954414}; -ST(0.049555855,0.0062621576,0,0.054320068,0.011013092,0,0.04886699,0.014821261,0){0.005983611,0.0065256187,0.0060418568}; -ST(0.046632264,0.12023287,0,0.044718386,0.11394827,0,0.049912889,0.1120086,0){0.011250538,0.010943235,0.01196981}; -ST(0.0070329053,0.19002058,0,0.01086253,0.18415108,0,0.015545644,0.18763273,0){0.0032854097,0.0037558824,0.0048113533}; -ST(0.079360922,0.024541521,0,0.072873195,0.02116659,0,0.076551438,0.016154114,0){0.0095813814,0.0087326558,0.0089261328}; -ST(0.056396465,0.13618531,0,0.063566128,0.14056854,0,0.056840174,0.14351487,0){0.01190613,0.012479942,0.010834582}; -ST(0,0.25123488,0,0,0.24433157,0,0.0059669022,0.25108021,0){0.0019611328,0.0017709859,0.003127184}; -ST(0.078294484,0.27242298,0,0.085467713,0.26792084,0,0.083774702,0.27611409,0){0.01320473,0.016469437,0.011867254}; -ST(0.094084599,0.025998463,0,0.087770529,0.028777226,0,0.085527033,0.023058497,0){0.011251769,0.010747054,0.010161784}; -ST(0.089406716,0.20396751,0,0.080532481,0.2036733,0,0.085087205,0.20027301,0){0.019494326,0.017789172,0.018969225}; -ST(0.091018613,0.020305374,0,0.094084599,0.025998463,0,0.085527033,0.023058497,0){0.010601467,0.011251769,0.010161784}; -ST(0.075019178,0.10458001,0,0.080374191,0.097624086,0,0.082067363,0.10446681,0){0.016721658,0.01726286,0.01810119}; -ST(0.077093289,0.16951597,0,0.072198327,0.17708617,0,0.070593417,0.17068076,0){0.011325245,0.013008194,0.010855202}; -ST(0.052565911,0.25627138,0,0.053554762,0.26522616,0,0.048124177,0.25975563,0){0.012510711,0.01164797,0.011453901}; -ST(0.080374191,0.097624086,0,0.075019178,0.10458001,0,0.073457999,0.097670639,0){0.01726286,0.016721658,0.015945532}; -ST(0.056929375,0.031821563,0,0.063732547,0.036638377,0,0.056980445,0.038962171,0){0.0075042202,0.0085558446,0.007911465}; -ST(0.031727435,0.080354054,0,0.036904468,0.073804537,0,0.036897729,0.08183265,0){0.0070919301,0.0075426679,0.0080657189}; -ST(0.091139261,0.22291429,0,0.087181126,0.21483096,0,0.09397747,0.21696725,0){0.013217271,0.016308886,0.016558656}; -ST(0.082286996,0.017839369,0,0.079360922,0.024541521,0,0.076551438,0.016154114,0){0.009581051,0.0095813814,0.0089261328}; -ST(0.053554762,0.26522616,0,0.052565911,0.25627138,0,0.057902634,0.25988484,0){0.01164797,0.012510711,0.013366799}; -ST(0.036904468,0.073804537,0,0.042070498,0.080362737,0,0.036897729,0.08183265,0){0.0075426679,0.0088504368,0.0080657189}; -ST(0.030599619,0.030587128,0,0.034829369,0.02335383,0,0.036258451,0.030655369,0){0.0045148124,0.004776128,0.005146398}; -ST(0.1,0.014285714,0,0.1,0.021428571,0,0.09386735,0.014826529,0){0.011269361,0.011605817,0.010660697}; -ST(0.068497018,0.1095775,0,0.063913425,0.11688174,0,0.060886949,0.1120001,0){0.015633235,0.014765299,0.014162182}; -ST(0.049011257,0.083339476,0,0.042070498,0.080362737,0,0.044925733,0.07572266,0){0.010269497,0.0088504368,0.0089806243}; -ST(0.082495291,0.1767331,0,0.077093289,0.16951597,0,0.083408518,0.1704193,0){0.01452089,0.011325245,0.012492447}; -ST(0.04131315,0.17777431,0,0.036056327,0.17085097,0,0.041541458,0.17214356,0){0.0082407056,0.0062254059,0.0072276425}; -ST(0.1,0.13571429,0,0.1,0.14285714,0,0.092733018,0.13870795,0){0.019826901,0.01802413,0.017873716}; -ST(0.091920476,0.089306354,0,0.1,0.092857143,0,0.09495489,0.096461405,0){0.018524169,0.020456772,0.019926776}; -ST(0.030623557,0.22463729,0,0.035581831,0.21858705,0,0.039227544,0.22315927,0){0.0049656049,0.0069414214,0.0064036567}; -ST(0.082772947,0.19508151,0,0.091581209,0.19542497,0,0.085087205,0.20027301,0){0.018456454,0.020231089,0.018969225}; -ST(0.031586673,0.16385918,0,0.036056327,0.17085097,0,0.030747828,0.1721598,0){0.0045180602,0.0062254059,0.0057172032}; -ST(0.021428571,0.3,0,0.014285714,0.3,0,0.017895429,0.29268335,0){0.0062259487,0.0048122771,0.0048907512}; -ST(0.083077166,0.089272145,0,0.091920476,0.089306354,0,0.087484565,0.092974465,0){0.016912942,0.018524169,0.018142262}; -ST(0.091581209,0.19542497,0,0.089406716,0.20396751,0,0.085087205,0.20027301,0){0.020231089,0.019494326,0.018969225}; -ST(0.052565911,0.25627138,0,0.061392472,0.25446647,0,0.057902634,0.25988484,0){0.012510711,0.014253572,0.013366799}; -ST(0,0.10963845,0,0,0.10306461,0,0.0069230724,0.10599149,0){0.0019917765,0.0019564772,0.0033428238}; -ST(0.07730725,0.063519068,0,0.072251719,0.070805738,0,0.071294356,0.064744402,0){0.012794591,0.01288041,0.012048426}; -ST(0.049343079,0.277854,0,0.041478584,0.27908417,0,0.045177088,0.27188516,0){0.0070287375,0.0055491609,0.0084113388}; -ST(0.030623557,0.22463729,0,0.028521342,0.23217192,0,0.023684336,0.22562355,0){0.0049656049,0.004622157,0.0039829742}; -ST(0,0.044618955,0,0,0.038198556,0,0.0064196609,0.043098201,0){0.0012366363,0.0011742026,0.0020049288}; -ST(0,0.26508755,0,0,0.25815412,0,0.0072786063,0.26188216,0){0.0018369147,0.0019897884,0.0033349743}; -ST(0.078003603,0.24394837,0,0.085997557,0.2404943,0,0.08378138,0.24758349,0){0.015457416,0.015461976,0.017616529}; -ST(0.1,0.035714286,0,0.092021896,0.039287055,0,0.093788043,0.032457843,0){0.012677109,0.012081021,0.011687416}; -ST(0.036645028,0.065460046,0,0.036904468,0.073804537,0,0.031467861,0.069797289,0){0.0069586979,0.0075426679,0.006435259}; -ST(0.023854517,0.20874482,0,0.021087268,0.20067351,0,0.027679574,0.20292337,0){0.0063291573,0.0061950348,0.00743754}; -ST(0.082636182,0.070608246,0,0.07730725,0.063519068,0,0.083796981,0.064188207,0){0.014480965,0.012794591,0.01383053}; -ST(0.012634798,0.015675501,0,0.017915306,0.017912514,0,0.013134683,0.023608073,0){0.0023302125,0.0028989864,0.0024680799}; -ST(0.087181126,0.21483096,0,0.091139261,0.22291429,0,0.08504359,0.22088839,0){0.016308886,0.013217271,0.013444316}; -ST(0.091442458,0.17596857,0,0.1,0.17857143,0,0.094303462,0.18195896,0){0.01565701,0.017958284,0.018137636}; -ST(0.045236581,0.26460649,0,0.038361486,0.26932975,0,0.03870412,0.26169066,0){0.0102386,0.0080129566,0.0094231843}; -ST(0.0087251496,0.19682156,0,0.016706021,0.19335173,0,0.015061448,0.19930754,0){0.0037412176,0.0052731674,0.0050085568}; -ST(0.039444525,0.14644848,0,0.046118705,0.14263648,0,0.047950771,0.14786323,0){0.0076040741,0.0092278734,0.0086642634}; -ST(0.062145045,0.0076586897,0,0.054320068,0.011013092,0,0.055476524,0.0050891727,0){0.0072652846,0.0065256187,0.0065680022}; -ST(0.0086756768,0.036899292,0,0.015319473,0.034144954,0,0.01153062,0.041448292,0){0.0021713487,0.0028850261,0.00259379}; -ST(0.012217264,0.2047927,0,0.0087251496,0.19682156,0,0.015061448,0.19930754,0){0.004330336,0.0037412176,0.0050085568}; -ST(0.062145045,0.0076586897,0,0.065494415,0,0,0.068927504,0.0060918646,0){0.0072652846,0.0075494415,0.0079278993}; -ST(0.031699447,0.11078243,0,0.036329714,0.11757216,0,0.031049449,0.11882536,0){0.0083198518,0.0092480093,0.0081786012}; -ST(0,0.28598845,0,0,0.27900442,0,0.0072882997,0.28273448,0){0.0013741411,0.0010819588,0.0020641429}; -ST(0,0.16276123,0,0,0.15606634,0,0.0069940321,0.15907843,0){0.0010316,0.0012140034,0.001901441}; -ST(0.045884216,0.22738799,0,0.05289152,0.22371293,0,0.053928421,0.22993019,0){0.0060154955,0.0079980598,0.0067705286}; -ST(0.055630617,0.19665887,0,0.046828703,0.19603271,0,0.050927036,0.19167746,0){0.013109344,0.011336809,0.011906838}; -ST(0.045608803,0.090081762,0,0.038968939,0.093670726,0,0.042179961,0.085826476,0){0.010159785,0.0091516332,0.0092527823}; -ST(0.0087251496,0.19682156,0,0.012217264,0.2047927,0,0.0061278576,0.20241521,0){0.0037412176,0.004330336,0.003192052}; -ST(0.1,0.1,0,0.1,0.10714286,0,0.093000475,0.1047961,0){0.021252429,0.021795245,0.020272382}; -ST(0.046118705,0.14263648,0,0.039444525,0.14644848,0,0.042474964,0.13846746,0){0.0092278734,0.0076040741,0.009157817}; -ST(0.0059238649,0.061251643,0,0.012733045,0.058713138,0,0.013497928,0.064220863,0){0.002285324,0.0031871065,0.0034658513}; -ST(0.03902447,0.22900351,0,0.035671381,0.23699067,0,0.033439845,0.22948364,0){0.004919465,0.0065861258,0.004415165}; -ST(0.064285714,0.3,0,0.060722814,0.29233598,0,0.067897561,0.29362967,0){0.01471425,0.012292123,0.013998657}; -ST(0.026088282,0.11662569,0,0.031699447,0.11078243,0,0.031049449,0.11882536,0){0.0072108519,0.0083198518,0.0081786012}; -ST(0.025933861,0.16956771,0,0.031586673,0.16385918,0,0.030747828,0.1721598,0){0.0046706454,0.0045180602,0.0057172032}; -ST(0.068497018,0.1095775,0,0.075237497,0.11427639,0,0.070021709,0.11751867,0){0.015633235,0.017047438,0.015974435}; -ST(0,0.057500186,0,0,0.051053592,0,0.0066877577,0.054780491,0){0.0013864255,0.001307702,0.002256812}; -ST(0.054320068,0.011013092,0,0.062145045,0.0076586897,0,0.059697637,0.012753556,0){0.0065256187,0.0072652846,0.0071057936}; -ST(0.035671381,0.23699067,0,0.03902447,0.22900351,0,0.042308788,0.23483757,0){0.0065861258,0.004919465,0.0069239308}; -ST(0.084252623,0.23309293,0,0.077999455,0.23524011,0,0.076354388,0.22899719,0){0.011556838,0.01189957,0.0086224438}; -ST(0.049993928,0.12587718,0,0.041543317,0.12438759,0,0.046632264,0.12023287,0){0.011673871,0.010099467,0.011250538}; -ST(0.082404782,0.22674486,0,0.084252623,0.23309293,0,0.076354388,0.22899719,0){0.010486323,0.011556838,0.0086224438}; -ST(0.035671381,0.23699067,0,0.028521342,0.23217192,0,0.033439845,0.22948364,0){0.0065861258,0.004622157,0.004415165}; -ST(0.075053667,0.054941461,0,0.080964027,0.048552182,0,0.081684953,0.055147379,0){0.011519318,0.011635394,0.012440745}; -ST(0.075053667,0.054941461,0,0.067714741,0.05140667,0,0.073862352,0.047765251,0){0.011519318,0.010194849,0.010653664}; -ST(0.018141403,0.008046786,0,0.019167426,0,0,0.023343368,0.0053891764,0){0.0028360063,0.0029167426,0.0033459576}; -ST(0.012733243,0,0,0.019167426,0,0,0.013164233,0.0055676569,0){0.0022733243,0.0029167426,0.0023250401}; -ST(0.041478584,0.27908417,0,0.049343079,0.277854,0,0.047308417,0.28460012,0){0.0055491609,0.0070287375,0.0073520502}; -ST(0.088948357,0.079796263,0,0.093701939,0.074587016,0,0.094143629,0.083392096,0){0.016740913,0.016790312,0.018131068}; -ST(0.038361486,0.26932975,0,0.045236581,0.26460649,0,0.045177088,0.27188516,0){0.0080129566,0.0102386,0.0084113388}; -ST(0,0.26508755,0,0.0072786063,0.26188216,0,0.0066221519,0.26909631,0){0.0018369147,0.0033349743,0.0027778017}; -ST(0,0.21006685,0,0,0.20326101,0,0.0065980308,0.2085645,0){0.0018346987,0.0019700422,0.0031103455}; -ST(0.040100466,0.20866457,0,0.041289591,0.20119015,0,0.046741278,0.20737056,0){0.0093763376,0.010204072,0.010788495}; -ST(0.09386735,0.014826529,0,0.089774267,0.010202707,0,0.094091634,0.0059624358,0){0.010660697,0.010102056,0.01045357}; -ST(0,0.10963845,0,0.0069230724,0.10599149,0,0.0061293251,0.11285968,0){0.0019917765,0.0033428238,0.0032244208}; -ST(0.043024015,0.24149425,0,0.035671381,0.23699067,0,0.042308788,0.23483757,0){0.0087794072,0.0065861258,0.0069239308}; -ST(0.04109467,0.060492019,0,0.03865178,0.054286144,0,0.044326443,0.052673868,0){0.0072817007,0.006550054,0.007208181}; -ST(0.039602446,0.042142971,0,0.045920614,0.037827936,0,0.047793904,0.042940806,0){0.0060094056,0.0065475869,0.0070477847}; -ST(0,0.16276123,0,0.0069940321,0.15907843,0,0.0061825315,0.16615776,0){0.0010316,0.001901441,0.0018871004}; -ST(0.083077166,0.089272145,0,0.080374191,0.097624086,0,0.077858227,0.092196475,0){0.016912942,0.01726286,0.016272399}; -ST(0.05,0.3,0,0.042857143,0.3,0,0.049141897,0.29382693,0){0.011885664,0.010468963,0.010673071}; -ST(0.028120489,0.2818096,0,0.036211214,0.28505229,0,0.030804552,0.28682747,0){0.0042507092,0.0060722216,0.0058319124}; -ST(0.063732547,0.036638377,0,0.056929375,0.031821563,0,0.06300662,0.02963429,0){0.0085558446,0.0075042202,0.0080686047}; -ST(0.082328401,0.21016288,0,0.075044373,0.21065322,0,0.075136028,0.20507776,0){0.016915435,0.015462793,0.016555444}; -ST(0.045608803,0.090081762,0,0.049011257,0.083339476,0,0.052671398,0.090038465,0){0.010159785,0.010269497,0.011446826}; -ST(0.077999455,0.23524011,0,0.078003603,0.24394837,0,0.074372203,0.23959597,0){0.01189957,0.015457416,0.013237082}; -ST(0.021822163,0.25301211,0,0.016666559,0.24707082,0,0.02496255,0.24770535,0){0.0063174014,0.0049690135,0.0065793383}; -ST(0.04397778,0.15172209,0,0.039444525,0.14644848,0,0.047950771,0.14786323,0){0.0073960532,0.0076040741,0.0086642634}; -ST(0.058736373,0,0,0.062145045,0.0076586897,0,0.055476524,0.0050891727,0){0.0068736373,0.0072652846,0.0065680022}; -ST(0.04109467,0.060492019,0,0.044326443,0.052673868,0,0.046279621,0.058429349,0){0.0072817007,0.007208181,0.0078696625}; -ST(0.1,0.27857143,0,0.1,0.28571429,0,0.093083753,0.28331412,0){0.01232876,0.014962161,0.01260174}; -ST(0.015319473,0.034144954,0,0.016765854,0.040249778,0,0.01153062,0.041448292,0){0.0028850261,0.0031936572,0.00259379}; -ST(0.0078882173,0.22230145,0,0.010057812,0.23068741,0,0.0050703794,0.22750411,0){0.0024001814,0.0022253758,0.0016282327}; -ST(0.017270897,0.15739381,0,0.010988582,0.15262774,0,0.017116349,0.14998193,0){0.0031824437,0.0028106617,0.0038725238}; -ST(0.017290659,0.10415759,0,0.010825671,0.099590532,0,0.016970501,0.097139845,0){0.005360028,0.004016107,0.0051389794}; -ST(0.021114997,0.031742287,0,0.026665403,0.037799711,0,0.021259451,0.03718155,0){0.0034867915,0.0042921244,0.0036421529}; -ST(0.049011257,0.083339476,0,0.056523131,0.084118476,0,0.052671398,0.090038465,0){0.010269497,0.011646159,0.011446826}; -ST(0.1,0.19285714,0,0.091581209,0.19542497,0,0.094374666,0.18946442,0){0.021660378,0.020231089,0.02003149}; -ST(0.036329714,0.11757216,0,0.031699447,0.11078243,0,0.038759258,0.11167503,0){0.0092480093,0.0083198518,0.0097384206}; -ST(0.016971899,0.25850458,0,0.021822163,0.25301211,0,0.025430513,0.25852231,0){0.0053575659,0.0063174014,0.0070372425}; -ST(0.043558202,0.25643586,0,0.045236581,0.26460649,0,0.03870412,0.26169066,0){0.0107076,0.0102386,0.0094231843}; -ST(0.025567113,0.28905289,0,0.032913158,0.29243767,0,0.025005027,0.29510367,0){0.0055567337,0.0074810533,0.0064954414}; -ST(0.060981097,0.10625719,0,0.068497018,0.1095775,0,0.060886949,0.1120001,0){0.01403139,0.015633235,0.014162182}; -ST(0.1,0.085714286,0,0.091920476,0.089306354,0,0.094143629,0.083392096,0){0.019489559,0.018524169,0.018131068}; -ST(0,0.20326101,0,0,0.19646877,0,0.0061278576,0.20241521,0){0.0019700422,0.001996753,0.003192052}; -ST(0.080532481,0.2036733,0,0.082328401,0.21016288,0,0.075136028,0.20507776,0){0.017789172,0.016915435,0.016555444}; -ST(0.069403265,0.030528728,0,0.063732547,0.036638377,0,0.06300662,0.02963429,0){0.0088265259,0.0085558446,0.0080686047}; -ST(0,0.14938457,0,0,0.14272272,0,0.0064726641,0.14769389,0){0.0014478061,0.0016420471,0.0024715601}; -ST(0,0.096512506,0,0,0.089973101,0,0.0062739213,0.09500888,0){0.0018991232,0.0018256894,0.0030651339}; -ST(0.038968939,0.093670726,0,0.036893214,0.087210211,0,0.042179961,0.085826476,0){0.0091516332,0.0083992423,0.0092527823}; -ST(0.071849852,0.25958891,0,0.079783584,0.26191648,0,0.075512736,0.26666994,0){0.016149584,0.017322357,0.015202563}; -ST(0.063357463,0.065442129,0,0.06842362,0.059320823,0,0.071294356,0.064744402,0){0.010941973,0.011056454,0.012048426}; -ST(0.083309384,0.040170382,0,0.080964027,0.048552182,0,0.078113811,0.043235614,0){0.011126505,0.011635394,0.0107714}; -ST(0.035472349,0.0074078563,0,0.038743683,0,0,0.042065894,0.0047615469,0){0.004577179,0.0048743683,0.0052207549}; -ST(0.086685255,0.25357155,0,0.089822961,0.25859451,0,0.085458809,0.2622366,0){0.019244658,0.019819525,0.018345062}; -ST(0.046118705,0.14263648,0,0.051719407,0.14014665,0,0.047950771,0.14786323,0){0.0092278734,0.010532948,0.0086642634}; -ST(0.0066221519,0.26909631,0,0.01442164,0.26537398,0,0.013858257,0.27098248,0){0.0027778017,0.0044630286,0.0037443109}; -ST(0.039444525,0.14644848,0,0.037124591,0.13989263,0,0.042474964,0.13846746,0){0.0076040741,0.0080703973,0.009157817}; -ST(0.017660768,0.12252143,0,0.023840623,0.12537371,0,0.016308386,0.12868827,0){0.0054589438,0.0066011582,0.0050367798}; -ST(0.075019178,0.10458001,0,0.067492619,0.10117066,0,0.073457999,0.097670639,0){0.016721658,0.015048339,0.015945532}; -ST(0.018141403,0.008046786,0,0.010401748,0.010393316,0,0.013164233,0.0055676569,0){0.0028360063,0.0020666199,0.0023250401}; -ST(0.023840623,0.12537371,0,0.021768928,0.13185708,0,0.016308386,0.12868827,0){0.0066011582,0.0059408379,0.0050367798}; -ST(0.031975417,0.25926175,0,0.029557505,0.25181754,0,0.03695895,0.25453753,0){0.0083004448,0.0077937721,0.0093769691}; -ST(0.061245673,0.24452488,0,0.054926517,0.23907834,0,0.06251245,0.23827584,0){0.012669907,0.01002412,0.01091156}; -ST(0.023665586,0.1785779,0,0.017833823,0.17577258,0,0.020376181,0.170702,0){0.0054977511,0.0042763177,0.0040946903}; -ST(0.087647844,0.13269091,0,0.086199215,0.13907252,0,0.082184623,0.13131431,0){0.018129897,0.016657803,0.017315387}; -ST(0.092021896,0.039287055,0,0.1,0.042857143,0,0.094358182,0.044786011,0){0.012081021,0.013404909,0.012923485}; -ST(0.075863318,0.15128967,0,0.068410214,0.15556675,0,0.069692704,0.14906563,0){0.011891738,0.009640753,0.01161516}; -ST(0.093000475,0.1047961,0,0.08910917,0.098496512,0,0.09495489,0.096461405,0){0.020272382,0.01901377,0.019926776}; -ST(0,0.019032121,0,0.0059292545,0.014766706,0,0.0042261279,0.022248036,0){0.0010434529,0.0016346023,0.0015070621}; -ST(0.041222898,0.027938513,0,0.048967316,0.030320203,0,0.042275405,0.033499023,0){0.0056013798,0.0065459276,0.0059293669}; -ST(0.077858227,0.092196475,0,0.072016645,0.090906146,0,0.078894228,0.085673269,0){0.016272399,0.015065982,0.015745314}; -ST(0.031699447,0.11078243,0,0.037735929,0.10537966,0,0.038759258,0.11167503,0){0.0083198518,0.0094123836,0.0097384206}; -ST(0.0087536517,0.067121195,0,0.0059238649,0.061251643,0,0.013497928,0.064220863,0){0.0028405718,0.002285324,0.0034658513}; -ST(0.025494351,0.27459236,0,0.018023907,0.27765349,0,0.019479015,0.2705585,0){0.0048210135,0.0033417499,0.0047057288}; -ST(0.063123076,0.1931948,0,0.056165025,0.18879164,0,0.061548848,0.18567875,0){0.014426164,0.012615914,0.013158388}; -ST(0.072016645,0.090906146,0,0.073518975,0.084426062,0,0.078894228,0.085673269,0){0.015065982,0.014655813,0.015745314}; -ST(0.048967316,0.030320203,0,0.045920614,0.037827936,0,0.042275405,0.033499023,0){0.0065459276,0.0065475869,0.0059293669}; -ST(0.018018822,0.050767877,0,0.024953134,0.05500472,0,0.019025664,0.05691302,0){0.0036547138,0.0047366364,0.0040025741}; -ST(0.016706021,0.19335173,0,0.021087268,0.20067351,0,0.015061448,0.19930754,0){0.0052731674,0.0061950348,0.0050085568}; -ST(0.036904468,0.073804537,0,0.043421277,0.070486317,0,0.044925733,0.07572266,0){0.0075426679,0.0083417443,0.0089806243}; -ST(0.067729338,0.18636951,0,0.063123076,0.1931948,0,0.061548848,0.18567875,0){0.014422352,0.014426164,0.013158388}; -ST(0.037423894,0.19247533,0,0.033865226,0.19972054,0,0.031703323,0.19206661,0){0.0093169769,0.008760944,0.0081716788}; -ST(0.032172362,0,0,0.035472349,0.0074078563,0,0.029469652,0.005642048,0){0.0042172362,0.004577179,0.0039620423}; -ST(0.069403265,0.030528728,0,0.066186294,0.024012302,0,0.07400672,0.026910821,0){0.0088265259,0.0081453494,0.0091297985}; -ST(0.039227544,0.22315927,0,0.03902447,0.22900351,0,0.033439845,0.22948364,0){0.0064036567,0.004919465,0.004415165}; -ST(0.066186294,0.024012302,0,0.072873195,0.02116659,0,0.07400672,0.026910821,0){0.0081453494,0.0087326558,0.0091297985}; -ST(0.046741278,0.20737056,0,0.052562678,0.20392294,0,0.054994472,0.20965729,0){0.010788495,0.012272703,0.011998039}; -ST(0.049958331,0.21332249,0,0.046741278,0.20737056,0,0.054994472,0.20965729,0){0.010389004,0.010788495,0.011998039}; -ST(0.0069230724,0.10599149,0,0.012784661,0.11066528,0,0.0061293251,0.11285968,0){0.0033428238,0.0045452747,0.0032244208}; -ST(0.023840623,0.12537371,0,0.017660768,0.12252143,0,0.020593251,0.11774208,0){0.0066011582,0.0054589438,0.0061054898}; -ST(0.028521342,0.23217192,0,0.035671381,0.23699067,0,0.029770914,0.23803179,0){0.004622157,0.0065861258,0.0059362425}; -ST(0.018141403,0.008046786,0,0.025782343,0.010697164,0,0.01972947,0.013018635,0){0.0028360063,0.0036273673,0.0030334072}; -ST(0.1,0.05,0,0.1,0.057142857,0,0.09327093,0.054697331,0){0.014250726,0.015200755,0.013955554}; -ST(0.0066877577,0.054780491,0,0.012733045,0.058713138,0,0.0059238649,0.061251643,0){0.002256812,0.0031871065,0.002285324}; -ST(0.017895429,0.29268335,0,0.025567113,0.28905289,0,0.025005027,0.29510367,0){0.0048907512,0.0055567337,0.0064954414}; -ST(0.025782343,0.010697164,0,0.018141403,0.008046786,0,0.023343368,0.0053891764,0){0.0036273673,0.0028360063,0.0033459576}; -ST(0.021822163,0.25301211,0,0.029557505,0.25181754,0,0.025430513,0.25852231,0){0.0063174014,0.0077937721,0.0070372425}; -ST(0.0069940321,0.15907843,0,0.012839023,0.16391618,0,0.0061825315,0.16615776,0){0.001901441,0.0025080878,0.0018871004}; -ST(0.034829369,0.02335383,0,0.041222898,0.027938513,0,0.036258451,0.030655369,0){0.004776128,0.0056013798,0.005146398}; -ST(0.029557505,0.25181754,0,0.031975417,0.25926175,0,0.025430513,0.25852231,0){0.0077937721,0.0083004448,0.0070372425}; -ST(0.1,0.15714286,0,0.1,0.16428571,0,0.09314271,0.16086327,0){0.012897594,0.012266282,0.010567692}; -ST(0.081687843,0.29203932,0,0.078571429,0.3,0,0.075014719,0.29506761,0){0.015803058,0.017545614,0.015757805}; -ST(0.073628203,0.28912297,0,0.081687843,0.29203932,0,0.075014719,0.29506761,0){0.013138961,0.015803058,0.015757805}; -ST(0.068410214,0.15556675,0,0.063134362,0.14896083,0,0.069692704,0.14906563,0){0.009640753,0.010684357,0.01161516}; -ST(0.06842362,0.059320823,0,0.063357463,0.065442129,0,0.060565964,0.060729258,0){0.011056454,0.010941973,0.010078647}; -ST(0.048914928,0.23375044,0,0.045884216,0.22738799,0,0.053928421,0.22993019,0){0.0074706102,0.0060154955,0.0067705286}; -ST(0.0065980308,0.2085645,0,0,0.20326101,0,0.0061278576,0.20241521,0){0.0031103455,0.0019700422,0.003192052}; -ST(0.03902447,0.22900351,0,0.045884216,0.22738799,0,0.042308788,0.23483757,0){0.004919465,0.0060154955,0.0069239308}; -ST(0.0052564808,0.080270621,0,0.011361659,0.080618598,0,0.0048810442,0.085538046,0){0.00259121,0.0036383706,0.0026331542}; -ST(0.045884216,0.22738799,0,0.048914928,0.23375044,0,0.042308788,0.23483757,0){0.0060154955,0.0074706102,0.0069239308}; -ST(0.070141314,0.27013164,0,0.066334221,0.27760857,0,0.064295402,0.27015162,0){0.012960708,0.0092000449,0.012021911}; -ST(0.021114997,0.031742287,0,0.018230931,0.025124521,0,0.025374297,0.027198867,0){0.0034867915,0.0030367355,0.0038510471}; -ST(0.1,0.26428571,0,0.1,0.27142857,0,0.093179303,0.2678908,0){0.020507244,0.017019935,0.017810421}; -ST(0.049343079,0.277854,0,0.045177088,0.27188516,0,0.053293432,0.27215527,0){0.0070287375,0.0084113388,0.0095317783}; -ST(0.013497928,0.064220863,0,0.017377178,0.070609144,0,0.011925798,0.071682732,0){0.0034658513,0.0042796585,0.0034604908}; -ST(0.064022129,0.087403768,0,0.056523131,0.084118476,0,0.061905453,0.080764658,0){0.013276737,0.011646159,0.012261556}; -ST(0.076354388,0.22899719,0,0.073845419,0.2209308,0,0.079358983,0.22202133,0){0.0086224438,0.011831692,0.012140385}; -ST(0.062145045,0.0076586897,0,0.064553118,0.015646957,0,0.059697637,0.012753556,0){0.0072652846,0.0076743125,0.0071057936}; -ST(0.018952385,0.063139668,0,0.017377178,0.070609144,0,0.013497928,0.064220863,0){0.004228076,0.0042796585,0.0034658513}; -ST(0.023854517,0.20874482,0,0.031988636,0.21096061,0,0.026946825,0.21343101,0){0.0063291573,0.0075960493,0.006387962}; -ST(0.068410214,0.15556675,0,0.061329737,0.16018623,0,0.061430891,0.15444473,0){0.009640753,0.0076429651,0.009109847}; -ST(0.063134362,0.14896083,0,0.068410214,0.15556675,0,0.061430891,0.15444473,0){0.010684357,0.009640753,0.009109847}; -ST(0.059002427,0.022914684,0,0.066186294,0.024012302,0,0.06300662,0.02963429,0){0.0073347399,0.0081453494,0.0080686047}; -ST(0.017146751,0.13667282,0,0.011625116,0.13292217,0,0.016308386,0.12868827,0){0.0048412481,0.0040067754,0.0050367798}; -ST(0.08274919,0.16255857,0,0.088990194,0.16733012,0,0.083408518,0.1704193,0){0.0094335589,0.012031194,0.012492447}; -ST(0.053554762,0.26522616,0,0.045236581,0.26460649,0,0.048124177,0.25975563,0){0.01164797,0.0102386,0.011453901}; -ST(0,0.057500186,0,0.0066877577,0.054780491,0,0.0059238649,0.061251643,0){0.0013864255,0.002256812,0.002285324}; -ST(0.06823576,0.080384264,0,0.064022129,0.087403768,0,0.061905453,0.080764658,0){0.01330007,0.013276737,0.012261556}; -ST(0.1,0.20714286,0,0.1,0.21428571,0,0.093260637,0.21041677,0){0.020968343,0.01867813,0.018844578}; -ST(0.021768928,0.13185708,0,0.017146751,0.13667282,0,0.016308386,0.12868827,0){0.0059408379,0.0048412481,0.0050367798}; -ST(0.07789134,0.13496254,0,0.072358306,0.13696631,0,0.072428856,0.1291202,0){0.015967895,0.014637908,0.015735892}; -ST(0.054926517,0.23907834,0,0.059647761,0.23257945,0,0.06251245,0.23827584,0){0.01002412,0.0083760198,0.01091156}; -ST(0.053583525,0.11616451,0,0.055537747,0.10990822,0,0.060886949,0.1120001,0){0.012709223,0.013059457,0.014162182}; -ST(0.045361276,0,0,0.049555855,0.0062621576,0,0.042065894,0.0047615469,0){0.0055361276,0.005983611,0.0052207549}; -ST(0.041541458,0.17214356,0,0.046260124,0.1690627,0,0.049852622,0.17323607,0){0.0072276425,0.0072155439,0.0086421223}; -ST(0.041222898,0.027938513,0,0.042058405,0.019919863,0,0.046218358,0.02547694,0){0.0056013798,0.005453629,0.0060592722}; -ST(0.091920476,0.089306354,0,0.09495489,0.096461405,0,0.087484565,0.092974465,0){0.018524169,0.019926776,0.018142262}; -ST(0.039602446,0.042142971,0,0.033568202,0.044135264,0,0.032234088,0.038660634,0){0.0060094056,0.0053659814,0.0049768543}; -ST(0.04393967,0.046787303,0,0.039602446,0.042142971,0,0.047793904,0.042940806,0){0.0067946488,0.0060094056,0.0070477847}; -ST(0.037310958,0.036215878,0,0.039602446,0.042142971,0,0.032234088,0.038660634,0){0.0054726568,0.0060094056,0.0049768543}; -ST(0.03865178,0.054286144,0,0.031526637,0.051365987,0,0.038042686,0.048242807,0){0.006550054,0.005445607,0.0061286509}; -ST(0.0090763502,0.020172771,0,0.012634798,0.015675501,0,0.013134683,0.023608073,0){0.0020007534,0.0023302125,0.0024680799}; -ST(0.042058405,0.019919863,0,0.049987625,0.021377356,0,0.046218358,0.02547694,0){0.005453629,0.0063275637,0.0060592722}; -ST(0.082067363,0.10446681,0,0.087157047,0.10934378,0,0.078753785,0.10944217,0){0.01810119,0.019341606,0.0176718}; -ST(0.044093146,0.010189996,0,0.04886699,0.014821261,0,0.040745998,0.014567719,0){0.0054767147,0.0060418568,0.0052038167}; -ST(0.017377178,0.070609144,0,0.018952385,0.063139668,0,0.022758147,0.069506288,0){0.0042796585,0.004228076,0.0050703118}; -ST(0.056523131,0.084118476,0,0.049011257,0.083339476,0,0.054518411,0.078119445,0){0.011646159,0.010269497,0.010765513}; -ST(0.087157047,0.10934378,0,0.082229882,0.11430537,0,0.078753785,0.10944217,0){0.019341606,0.018445934,0.0176718}; -ST(0.0088492442,0.17282653,0,0.014716796,0.17010542,0,0.012144819,0.17790797,0){0.002692894,0.0032674718,0.0035663748}; -ST(0.048967316,0.030320203,0,0.056929375,0.031821563,0,0.051715879,0.035807649,0){0.0065459276,0.0075042202,0.0071174241}; -ST(0.014716796,0.17010542,0,0.017833823,0.17577258,0,0.012144819,0.17790797,0){0.0032674718,0.0042763177,0.0035663748}; -ST(0.018952385,0.063139668,0,0.026277351,0.065288906,0,0.022758147,0.069506288,0){0.004228076,0.0054035144,0.0050703118}; -ST(0.025388465,0.21882491,0,0.030623557,0.22463729,0,0.023684336,0.22562355,0){0.0053446137,0.0049656049,0.0039829742}; -ST(0.1,0.15714286,0,0.09314271,0.16086327,0,0.093845023,0.15358209,0){0.012897594,0.010567692,0.013567056}; -ST(0.040100466,0.20866457,0,0.031988636,0.21096061,0,0.034870605,0.20566508,0){0.0093763376,0.0075960493,0.0086811083}; -ST(0.018023907,0.27765349,0,0.010287914,0.27534428,0,0.013858257,0.27098248,0){0.0033417499,0.0027159036,0.0037443109}; -ST(0.040316423,0.16515352,0,0.037630266,0.15856612,0,0.043875453,0.15799271,0){0.0057431286,0.005390121,0.0061743039}; -ST(0.1,0,0,0.1,0.0071428571,0,0.094091634,0.0059624358,0){0.011,0.011067347,0.01045357}; -ST(0.0072882997,0.28273448,0,0,0.27900442,0,0.004564662,0.27552118,0){0.0020641429,0.0010819588,0.0018975573}; -ST(0.03202369,0.058862937,0,0.036645028,0.065460046,0,0.031481235,0.064160132,0){0.0058997278,0.0069586979,0.0061148995}; -ST(0.056929375,0.031821563,0,0.048967316,0.030320203,0,0.05377987,0.026339649,0){0.0075042202,0.0065459276,0.0069083627}; -ST(0.077986326,0.12755717,0,0.081934846,0.12129159,0,0.085850588,0.12646039,0){0.016964028,0.018213432,0.018594654}; -ST(0.09314271,0.16086327,0,0.087150461,0.15605115,0,0.093845023,0.15358209,0){0.010567692,0.011826762,0.013567056}; -ST(0.031526637,0.051365987,0,0.033568202,0.044135264,0,0.038042686,0.048242807,0){0.005445607,0.0053659814,0.0061286509}; -ST(0.05987551,0.074756595,0,0.066454746,0.074006402,0,0.061905453,0.080764658,0){0.011330154,0.012316324,0.012261556}; -ST(0.093002649,0,0,0.1,0,0,0.094091634,0.0059624358,0){0.010300265,0.011,0.01045357}; -ST(0.042058405,0.019919863,0,0.035314966,0.015501396,0,0.040745998,0.014567719,0){0.005453629,0.0046621453,0.0052038167}; -ST(0.045920614,0.037827936,0,0.048967316,0.030320203,0,0.051715879,0.035807649,0){0.0065475869,0.0065459276,0.0071174241}; -ST(0.081893484,0.0078002118,0,0.074170803,0.010670566,0,0.075713015,0.0049037107,0){0.0092564415,0.008532082,0.0085960345}; -ST(0.066454746,0.074006402,0,0.06823576,0.080384264,0,0.061905453,0.080764658,0){0.012316324,0.01330007,0.012261556}; -ST(0.061718685,0.09526012,0,0.067492619,0.10117066,0,0.060554433,0.1007053,0){0.013527119,0.015048339,0.013673871}; -ST(0.093000475,0.1047961,0,0.1,0.10714286,0,0.093650276,0.11165907,0){0.020272382,0.021795245,0.020701173}; -ST(0.067492619,0.10117066,0,0.060981097,0.10625719,0,0.060554433,0.1007053,0){0.015048339,0.01403139,0.013673871}; -ST(0.069592365,0.2044761,0,0.061970306,0.20134793,0,0.06636951,0.19781188,0){0.015550958,0.01431047,0.015272818}; -ST(0.063664382,0.17131349,0,0.068059877,0.16458271,0,0.070593417,0.17068076,0){0.010100304,0.0087794571,0.010855202}; -ST(0.033865226,0.19972054,0,0.041289591,0.20119015,0,0.034870605,0.20566508,0){0.008760944,0.010204072,0.0086811083}; -ST(0.021428571,0.3,0,0.017895429,0.29268335,0,0.025005027,0.29510367,0){0.0062259487,0.0048907512,0.0064954414}; -ST(0.079152804,0,0,0.081893484,0.0078002118,0,0.075713015,0.0049037107,0){0.0089152804,0.0092564415,0.0085960345}; -ST(0.030060203,0.17758385,0,0.035632482,0.1808812,0,0.027586782,0.18282418,0){0.0064082769,0.0077875372,0.0066297552}; -ST(0.071872871,0.196559,0,0.069592365,0.2044761,0,0.06636951,0.19781188,0){0.016350779,0.015550958,0.015272818}; -ST(0,0.27203526,0,0,0.26508755,0,0.0066221519,0.26909631,0){0.001517686,0.0018369147,0.0027778017}; -ST(0.023854517,0.20874482,0,0.018022534,0.21455918,0,0.017536395,0.20823956,0){0.0063291573,0.0047312007,0.0051815338}; -ST(0.018952385,0.063139668,0,0.012733045,0.058713138,0,0.019025664,0.05691302,0){0.004228076,0.0031871065,0.0040025741}; -ST(0.078294484,0.27242298,0,0.070141314,0.27013164,0,0.075512736,0.26666994,0){0.01320473,0.012960708,0.015202563}; -ST(0.035632482,0.1808812,0,0.032166514,0.1863502,0,0.027586782,0.18282418,0){0.0077875372,0.0078219415,0.0066297552}; -ST(0.041289591,0.20119015,0,0.040100466,0.20866457,0,0.034870605,0.20566508,0){0.010204072,0.0093763376,0.0086811083}; -ST(0.012839023,0.16391618,0,0.020122959,0.1650354,0,0.014716796,0.17010542,0){0.0025080878,0.0034385995,0.0032674718}; -ST(0.0076308335,0.23791294,0,0.010057812,0.23068741,0,0.014554238,0.23387563,0){0.002622712,0.0022253758,0.003134429}; -ST(0.048967316,0.030320203,0,0.041222898,0.027938513,0,0.046218358,0.02547694,0){0.0065459276,0.0056013798,0.0060592722}; -ST(0.1,0.23571429,0,0.1,0.24285714,0,0.093408348,0.23929044,0){0.015025256,0.018857211,0.016078078}; -ST(0.093002649,0,0,0.094091634,0.0059624358,0,0.086908462,0.0054765496,0){0.010300265,0.01045357,0.0097257245}; -ST(0.0066877577,0.054780491,0,0,0.051053592,0,0.0047428148,0.048313235,0){0.002256812,0.001307702,0.0018818499}; -ST(0.01511463,0.2393591,0,0.0076308335,0.23791294,0,0.014554238,0.23387563,0){0.003913276,0.002622712,0.003134429}; -ST(0,0.019032121,0,0,0.012676601,0,0.0059292545,0.014766706,0){0.0010434529,0.0010192824,0.0016346023}; -ST(0.014905173,0.28510008,0,0.018023907,0.27765349,0,0.02153935,0.28356134,0){0.0033226234,0.0033417499,0.0039435902}; -ST(0.012784661,0.11066528,0,0.020103716,0.1121562,0,0.014854991,0.11674459,0){0.0045452747,0.006015088,0.0049657919}; -ST(0.045361276,0,0,0.052025416,0,0,0.049555855,0.0062621576,0){0.0055361276,0.0062025416,0.005983611}; -ST(0.017915306,0.017912514,0,0.018230931,0.025124521,0,0.013134683,0.023608073,0){0.0028989864,0.0030367355,0.0024680799}; -ST(0.049952063,0.1787418,0,0.055269447,0.17422653,0,0.054321705,0.18240921,0){0.0098216119,0.0096616545,0.011269583}; -ST(0.045920614,0.037827936,0,0.051715879,0.035807649,0,0.047793904,0.042940806,0){0.0065475869,0.0071174241,0.0070477847}; -ST(0.055269447,0.17422653,0,0.059413957,0.17983771,0,0.054321705,0.18240921,0){0.0096616545,0.011618873,0.011269583}; -ST(0.053554762,0.26522616,0,0.057902634,0.25988484,0,0.058794554,0.26817279,0){0.01164797,0.013366799,0.01180084}; -ST(0.010287914,0.27534428,0,0.0072882997,0.28273448,0,0.004564662,0.27552118,0){0.0027159036,0.0020641429,0.0018975573}; -ST(0.063593879,0.28436636,0,0.060722814,0.29233598,0,0.058426811,0.28702912,0){0.0093505769,0.012292123,0.0098865151}; -ST(0.056523131,0.084118476,0,0.064022129,0.087403768,0,0.058666695,0.090099436,0){0.011646159,0.013276737,0.012546942}; -ST(0.067492619,0.10117066,0,0.061718685,0.09526012,0,0.067742128,0.095151401,0){0.015048339,0.013527119,0.014654254}; -ST(0.0059292545,0.014766706,0,0.0090763502,0.020172771,0,0.0042261279,0.022248036,0){0.0016346023,0.0020007534,0.0015070621}; -ST(0.043558202,0.25643586,0,0.041079184,0.24904413,0,0.047977922,0.25174593,0){0.0107076,0.0097899948,0.011417018}; -ST(0.035995823,0.12783992,0,0.042328752,0.13293246,0,0.03712087,0.13446417,0){0.0088531158,0.009694753,0.0086041419}; -ST(0.043024015,0.24149425,0,0.042308788,0.23483757,0,0.048884684,0.23984002,0){0.0087794072,0.0069239308,0.0093142721}; -ST(0.042308788,0.23483757,0,0.048914928,0.23375044,0,0.048884684,0.23984002,0){0.0069239308,0.0074706102,0.0093142721}; -ST(0.060722814,0.29233598,0,0.057142857,0.3,0,0.05511543,0.29440677,0){0.012292123,0.013300462,0.011904677}; -ST(0.035581831,0.21858705,0,0.040972633,0.21505187,0,0.039227544,0.22315927,0){0.0069414214,0.0085096617,0.0064036567}; -ST(0.040972633,0.21505187,0,0.044431549,0.22049192,0,0.039227544,0.22315927,0){0.0085096617,0.0078092733,0.0064036567}; -ST(0.077664091,0.1983373,0,0.071872871,0.196559,0,0.078432808,0.19155374,0){0.017532477,0.016350779,0.017267031}; -ST(0.055287343,0.062192056,0,0.055460475,0.069248829,0,0.05011462,0.068273913,0){0.0094513626,0.010108481,0.0092014028}; -ST(0.077986326,0.12755717,0,0.07789134,0.13496254,0,0.072428856,0.1291202,0){0.016964028,0.015967895,0.015735892}; -ST(0.067714741,0.05140667,0,0.062787056,0.044920338,0,0.068656382,0.045051564,0){0.010194849,0.0090240074,0.0097624898}; -ST(0.1,0.22142857,0,0.1,0.22857143,0,0.094415701,0.22755789,0){0.015316378,0.010969952,0.011061458}; -ST(0.1,0.10714286,0,0.1,0.11428571,0,0.093650276,0.11165907,0){0.021795245,0.021999929,0.020701173}; -ST(0.1,0.3,0,0.092857143,0.3,0,0.094208762,0.29420256,0){0.021789129,0.020373327,0.018972662}; -ST(0.045236581,0.26460649,0,0.043558202,0.25643586,0,0.048124177,0.25975563,0){0.0102386,0.0107076,0.011453901}; -ST(0.061329737,0.16018623,0,0.068059877,0.16458271,0,0.061082675,0.16604661,0){0.0076429651,0.0087794571,0.0082458925}; -ST(0.1,0.29285714,0,0.1,0.3,0,0.094208762,0.29420256,0){0.019388115,0.021789129,0.018972662}; -ST(0.064022129,0.087403768,0,0.061718685,0.09526012,0,0.058666695,0.090099436,0){0.013276737,0.013527119,0.012546942}; -ST(0.068059877,0.16458271,0,0.063664382,0.17131349,0,0.061082675,0.16604661,0){0.0087794571,0.010100304,0.0082458925}; -ST(0.087647844,0.13269091,0,0.092325542,0.12610752,0,0.094396223,0.13234736,0){0.018129897,0.019887567,0.019441171}; -ST(0.057902634,0.25988484,0,0.062978572,0.26385631,0,0.058794554,0.26817279,0){0.013366799,0.013699793,0.01180084}; -ST(0.041079184,0.24904413,0,0.043558202,0.25643586,0,0.03695895,0.25453753,0){0.0097899948,0.0107076,0.0093769691}; -ST(0,0.129442,0,0.0071724145,0.1266659,0,0.0053512079,0.13276494,0){0.0019048233,0.0033276957,0.0028483266}; -ST(0.05534208,0.16725107,0,0.055269447,0.17422653,0,0.049852622,0.17323607,0){0.007927676,0.0096616545,0.0086421223}; -ST(0.089774267,0.010202707,0,0.081893484,0.0078002118,0,0.086908462,0.0054765496,0){0.010102056,0.0092564415,0.0097257245}; -ST(0,0.1162249,0,0,0.10963845,0,0.0061293251,0.11285968,0){0.0019987419,0.0019917765,0.0032244208}; -ST(0.049961259,0.10646397,0,0.043696053,0.10764168,0,0.04848764,0.10113949,0){0.011859712,0.010652083,0.011356258}; -ST(0.092325542,0.12610752,0,0.1,0.12857143,0,0.094396223,0.13234736,0){0.019887567,0.021075659,0.019441171}; -ST(0.067305062,0.2440339,0,0.068887619,0.23816425,0,0.074372203,0.23959597,0){0.013605878,0.011832084,0.013237082}; -ST(0.046741278,0.20737056,0,0.041289591,0.20119015,0,0.047317985,0.20170575,0){0.010788495,0.010204072,0.011381113}; -ST(0.0071724145,0.1266659,0,0.011625116,0.13292217,0,0.0053512079,0.13276494,0){0.0033276957,0.0040067754,0.0028483266}; -ST(0.071428571,0.3,0,0.064285714,0.3,0,0.067897561,0.29362967,0){0.016130092,0.01471425,0.013998657}; -ST(0.054926517,0.23907834,0,0.051467941,0.24632844,0,0.048884684,0.23984002,0){0.01002412,0.011312523,0.0093142721}; -ST(0.086053667,0,0,0.093002649,0,0,0.086908462,0.0054765496,0){0.0096053667,0.010300265,0.0097257245}; -ST(0.078794748,0.031832626,0,0.073594736,0.034812751,0,0.07400672,0.026910821,0){0.0099565426,0.0095709225,0.0091297985}; -ST(0,0.18294039,0,0,0.17619703,0,0.0062141227,0.17913624,0){0.0017672234,0.0015510887,0.0026772087}; -ST(0.079846013,0.21642209,0,0.075044373,0.21065322,0,0.082328401,0.21016288,0){0.014513645,0.015462793,0.016915435}; -ST(0.1,0.071428571,0,0.1,0.078571429,0,0.093701939,0.074587016,0){0.017321771,0.018423801,0.016790312}; -ST(0,0.076937883,0,0.0071026462,0.074440872,0,0.0052564808,0.080270621,0){0.0016520865,0.0027655645,0.00259121}; -ST(0.010217899,0.048491667,0,0.015246202,0.045764486,0,0.013073967,0.053209069,0){0.0025847442,0.0031524656,0.0030763285}; -ST(0.077986326,0.12755717,0,0.071875088,0.12337373,0,0.076396225,0.11987471,0){0.016964028,0.016108744,0.017177524}; -ST(0,0.16946933,0,0,0.16276123,0,0.0061825315,0.16615776,0){0.0012995201,0.0010316,0.0018871004}; -ST(0.061970306,0.20134793,0,0.063123076,0.1931948,0,0.06636951,0.19781188,0){0.01431047,0.014426164,0.015272818}; -ST(0.015246202,0.045764486,0,0.018018822,0.050767877,0,0.013073967,0.053209069,0){0.0031524656,0.0036547138,0.0030763285}; -ST(0.061970306,0.20134793,0,0.069592365,0.2044761,0,0.064084929,0.20704546,0){0.01431047,0.015550958,0.014136837}; -ST(0.087150461,0.15605115,0,0.08274919,0.16255857,0,0.080100366,0.15677346,0){0.011826762,0.0094335589,0.010731672}; -ST(0.049555855,0.0062621576,0,0.044093146,0.010189996,0,0.042065894,0.0047615469,0){0.005983611,0.0054767147,0.0052207549}; -ST(0.075237497,0.11427639,0,0.082229882,0.11430537,0,0.076396225,0.11987471,0){0.017047438,0.018445934,0.017177524}; -ST(0.011361659,0.080618598,0,0.01667016,0.076996579,0,0.016263823,0.084450562,0){0.0036383706,0.0044083295,0.0046096007}; -ST(0.017116349,0.14998193,0,0.017650615,0.14332879,0,0.023011439,0.14474978,0){0.0038725238,0.0044959748,0.0052386146}; -ST(0.081934846,0.12129159,0,0.077986326,0.12755717,0,0.076396225,0.11987471,0){0.018213432,0.016964028,0.017177524}; -ST(0.071872871,0.196559,0,0.073017129,0.19015646,0,0.078432808,0.19155374,0){0.016350779,0.016031824,0.017267031}; -ST(0.082229882,0.11430537,0,0.081934846,0.12129159,0,0.076396225,0.11987471,0){0.018445934,0.018213432,0.017177524}; -ST(0.09327093,0.054697331,0,0.1,0.057142857,0,0.093812493,0.061490211,0){0.013955554,0.015200755,0.014931531}; -ST(0,0.063964486,0,0,0.057500186,0,0.0059238649,0.061251643,0){0.0014714865,0.0013864255,0.002285324}; -ST(0.075044373,0.21065322,0,0.069592365,0.2044761,0,0.075136028,0.20507776,0){0.015462793,0.015550958,0.016555444}; -ST(0.023785868,0.1502414,0,0.017116349,0.14998193,0,0.023011439,0.14474978,0){0.0047927965,0.0038725238,0.0052386146}; -ST(0.092325542,0.12610752,0,0.087647844,0.13269091,0,0.085850588,0.12646039,0){0.019887567,0.018129897,0.018594654}; -ST(0.01667016,0.076996579,0,0.021553482,0.081174183,0,0.016263823,0.084450562,0){0.0044083295,0.0053983383,0.0046096007}; -ST(0.054518411,0.078119445,0,0.05987551,0.074756595,0,0.061905453,0.080764658,0){0.010765513,0.011330154,0.012261556}; -ST(0.056523131,0.084118476,0,0.054518411,0.078119445,0,0.061905453,0.080764658,0){0.011646159,0.010765513,0.012261556}; -ST(0.1,0.057142857,0,0.1,0.064285714,0,0.093812493,0.061490211,0){0.015200755,0.016234238,0.014931531}; -ST(0.03870412,0.26169066,0,0.031975417,0.25926175,0,0.03695895,0.25453753,0){0.0094231843,0.0083004448,0.0093769691}; -ST(0.043558202,0.25643586,0,0.03870412,0.26169066,0,0.03695895,0.25453753,0){0.0107076,0.0094231843,0.0093769691}; -ST(0.042070498,0.080362737,0,0.049011257,0.083339476,0,0.042179961,0.085826476,0){0.0088504368,0.010269497,0.0092527823}; -ST(0.061548848,0.18567875,0,0.056165025,0.18879164,0,0.054321705,0.18240921,0){0.013158388,0.012615914,0.011269583}; -ST(0.030986562,0.10190392,0,0.032223949,0.094413692,0,0.036577437,0.099338278,0){0.0079831878,0.0079256222,0.0089716861}; -ST(0.0071026462,0.074440872,0,0.011361659,0.080618598,0,0.0052564808,0.080270621,0){0.0027655645,0.0036383706,0.00259121}; -ST(0.092733018,0.13870795,0,0.087647844,0.13269091,0,0.094396223,0.13234736,0){0.017873716,0.018129897,0.019441171}; -ST(0.09495489,0.096461405,0,0.08910917,0.098496512,0,0.087484565,0.092974465,0){0.019926776,0.01901377,0.018142262}; -ST(0.049993928,0.12587718,0,0.055297829,0.12231774,0,0.055088213,0.13004616,0){0.011673871,0.012895552,0.012344969}; -ST(0.1,0.028571429,0,0.1,0.035714286,0,0.093788043,0.032457843,0){0.012075829,0.012677109,0.011687416}; -ST(0.03097928,0.15477188,0,0.032539635,0.14727541,0,0.036825174,0.15225095,0){0.0051663091,0.0064374803,0.0063271993}; -ST(0.049011257,0.083339476,0,0.045608803,0.090081762,0,0.042179961,0.085826476,0){0.010269497,0.010159785,0.0092527823}; -ST(0.045884216,0.22738799,0,0.03902447,0.22900351,0,0.039227544,0.22315927,0){0.0060154955,0.004919465,0.0064036567}; -ST(0.044431549,0.22049192,0,0.045884216,0.22738799,0,0.039227544,0.22315927,0){0.0078092733,0.0060154955,0.0064036567}; -ST(0.0072786063,0.26188216,0,0,0.25815412,0,0.0053741268,0.25663281,0){0.0033349743,0.0019897884,0.0030729489}; -ST(0.028120489,0.2818096,0,0.025567113,0.28905289,0,0.02153935,0.28356134,0){0.0042507092,0.0055567337,0.0039435902}; -ST(0.085467713,0.26792084,0,0.079783584,0.26191648,0,0.085458809,0.2622366,0){0.016469437,0.017322357,0.018345062}; -ST(0,0.22372386,0,0.0078882173,0.22230145,0,0.0050703794,0.22750411,0){0.0012703225,0.0024001814,0.0016282327}; -ST(0.025374297,0.027198867,0,0.018230931,0.025124521,0,0.021948797,0.021350207,0){0.0038510471,0.0030367355,0.0033695518}; -ST(0.056165025,0.18879164,0,0.055630617,0.19665887,0,0.050927036,0.19167746,0){0.012615914,0.013109344,0.011906838}; -ST(0.017833823,0.17577258,0,0.023665586,0.1785779,0,0.016690266,0.18191056,0){0.0042763177,0.0054977511,0.0046373261}; -ST(0.032166514,0.1863502,0,0.037423894,0.19247533,0,0.031703323,0.19206661,0){0.0078219415,0.0093169769,0.0081716788}; -ST(0.055853935,0.21726741,0,0.049958331,0.21332249,0,0.054994472,0.20965729,0){0.010404133,0.010389004,0.011998039}; -ST(0.023665586,0.1785779,0,0.022183918,0.18487742,0,0.016690266,0.18191056,0){0.0054977511,0.0058547995,0.0046373261}; -ST(0.027679574,0.20292337,0,0.033865226,0.19972054,0,0.034870605,0.20566508,0){0.00743754,0.008760944,0.0086811083}; -ST(0.060721208,0.21210696,0,0.055853935,0.21726741,0,0.054994472,0.20965729,0){0.012543826,0.010404133,0.011998039}; -ST(0.037423894,0.19247533,0,0.042689804,0.18635753,0,0.042998409,0.19194838,0){0.0093169769,0.0097748212,0.010376684}; -ST(0.1,0.15,0,0.1,0.15714286,0,0.093845023,0.15358209,0){0.015699503,0.012897594,0.013567056}; -ST(0.071849852,0.25958891,0,0.075512736,0.26666994,0,0.068748354,0.26449609,0){0.016149584,0.015202563,0.014627562}; -ST(0.019479015,0.2705585,0,0.018023907,0.27765349,0,0.013858257,0.27098248,0){0.0047057288,0.0033417499,0.0037443109}; -ST(0.049672348,0.13321934,0,0.056396465,0.13618531,0,0.051719407,0.14014665,0){0.011026506,0.01190613,0.010532948}; -ST(0.010217899,0.048491667,0,0.0066877577,0.054780491,0,0.0047428148,0.048313235,0){0.0025847442,0.002256812,0.0018818499}; -ST(0.087647844,0.13269091,0,0.092733018,0.13870795,0,0.086199215,0.13907252,0){0.018129897,0.017873716,0.016657803}; -ST(0.1,0.26428571,0,0.093179303,0.2678908,0,0.095319273,0.26073379,0){0.020507244,0.017810421,0.020580735}; -ST(0.0089155203,0.11918733,0,0.014854991,0.11674459,0,0.012134612,0.12388006,0){0.0037661726,0.0049657919,0.0043462782}; -ST(0.017915306,0.017912514,0,0.012634798,0.015675501,0,0.01972947,0.013018635,0){0.0028989864,0.0023302125,0.0030334072}; -ST(0.014854991,0.11674459,0,0.017660768,0.12252143,0,0.012134612,0.12388006,0){0.0049657919,0.0054589438,0.0043462782}; -ST(0.065494415,0,0,0.072299805,0,0,0.068927504,0.0060918646,0){0.0075494415,0.0082299805,0.0079278993}; -ST(0.088990194,0.16733012,0,0.09314271,0.16086327,0,0.095064283,0.16787532,0){0.012031194,0.010567692,0.012983793}; -ST(0.1,0.13571429,0,0.092733018,0.13870795,0,0.094396223,0.13234736,0){0.019826901,0.017873716,0.019441171}; -ST(0.087181126,0.21483096,0,0.093260637,0.21041677,0,0.09397747,0.21696725,0){0.016308886,0.018844578,0.016558656}; -ST(0.037630266,0.15856612,0,0.03097928,0.15477188,0,0.036825174,0.15225095,0){0.005390121,0.0051663091,0.0063271993}; -ST(0.040316423,0.16515352,0,0.043875453,0.15799271,0,0.045860229,0.163357,0){0.0057431286,0.0061743039,0.0059728166}; -ST(0.087157047,0.10934378,0,0.093000475,0.1047961,0,0.093650276,0.11165907,0){0.019341606,0.020272382,0.020701173}; -ST(0.09314271,0.16086327,0,0.1,0.16428571,0,0.095064283,0.16787532,0){0.010567692,0.012266282,0.012983793}; -ST(0.035714286,0.3,0,0.032913158,0.29243767,0,0.038812872,0.29456049,0){0.0090547386,0.0074810533,0.0089597215}; -ST(0.083309384,0.040170382,0,0.087198716,0.035123314,0,0.088013761,0.043162337,0){0.011126505,0.01115353,0.011974352}; -ST(0.03865178,0.054286144,0,0.038042686,0.048242807,0,0.044326443,0.052673868,0){0.006550054,0.0061286509,0.007208181}; -ST(0.087198716,0.035123314,0,0.092021896,0.039287055,0,0.088013761,0.043162337,0){0.01115353,0.012081021,0.011974352}; -ST(0.038042686,0.048242807,0,0.04393967,0.046787303,0,0.044326443,0.052673868,0){0.0061286509,0.0067946488,0.007208181}; -ST(0.1,0.21428571,0,0.1,0.22142857,0,0.09397747,0.21696725,0){0.01867813,0.015316378,0.016558656}; -ST(0.055297829,0.12231774,0,0.06020365,0.12640845,0,0.055088213,0.13004616,0){0.012895552,0.013623005,0.012344969}; -ST(0.012733045,0.058713138,0,0.018952385,0.063139668,0,0.013497928,0.064220863,0){0.0031871065,0.004228076,0.0034658513}; -ST(0.0087536517,0.067121195,0,0.013497928,0.064220863,0,0.011925798,0.071682732,0){0.0028405718,0.0034658513,0.0034604908}; -ST(0.066334221,0.27760857,0,0.059957664,0.27407069,0,0.064295402,0.27015162,0){0.0092000449,0.0097471839,0.012021911}; -ST(0.048914928,0.23375044,0,0.054926517,0.23907834,0,0.048884684,0.23984002,0){0.0074706102,0.01002412,0.0093142721}; -ST(0.1,0.078571429,0,0.1,0.085714286,0,0.094143629,0.083392096,0){0.018423801,0.019489559,0.018131068}; -ST(0.1,0.021428571,0,0.1,0.028571429,0,0.094084599,0.025998463,0){0.011605817,0.012075829,0.011251769}; -ST(0.087298598,0.058683388,0,0.09327093,0.054697331,0,0.093812493,0.061490211,0){0.013637256,0.013955554,0.014931531}; -ST(0.093260637,0.21041677,0,0.1,0.21428571,0,0.09397747,0.21696725,0){0.018844578,0.01867813,0.016558656}; -ST(0.0066877577,0.054780491,0,0.010217899,0.048491667,0,0.013073967,0.053209069,0){0.002256812,0.0025847442,0.0030763285}; -ST(0.037735929,0.10537966,0,0.030986562,0.10190392,0,0.036577437,0.099338278,0){0.0094123836,0.0079831878,0.0089716861}; -ST(0.094303462,0.18195896,0,0.1,0.18571429,0,0.094374666,0.18946442,0){0.018137636,0.020239442,0.02003149}; -ST(0.08274919,0.16255857,0,0.07511088,0.16072173,0,0.080100366,0.15677346,0){0.0094335589,0.0087749301,0.010731672}; -ST(0.073594736,0.034812751,0,0.069403265,0.030528728,0,0.07400672,0.026910821,0){0.0095709225,0.0088265259,0.0091297985}; -ST(0.1,0.042857143,0,0.1,0.05,0,0.094358182,0.044786011,0){0.013404909,0.014250726,0.012923485}; -ST(0.063593879,0.28436636,0,0.066334221,0.27760857,0,0.069762333,0.28431595,0){0.0093505769,0.0092000449,0.010105067}; -ST(0.039444525,0.14644848,0,0.04397778,0.15172209,0,0.036825174,0.15225095,0){0.0076040741,0.0073960532,0.0063271993}; -ST(0.066334221,0.27760857,0,0.073416465,0.27934608,0,0.069762333,0.28431595,0){0.0092000449,0.0088333373,0.010105067}; -ST(0.012733045,0.058713138,0,0.0066877577,0.054780491,0,0.013073967,0.053209069,0){0.0031871065,0.002256812,0.0030763285}; -ST(0.0071724145,0.1266659,0,0.0089155203,0.11918733,0,0.012134612,0.12388006,0){0.0033276957,0.0037661726,0.0043462782}; -ST(0.087181126,0.21483096,0,0.079846013,0.21642209,0,0.082328401,0.21016288,0){0.016308886,0.014513645,0.016915435}; -ST(0.049987625,0.021377356,0,0.04886699,0.014821261,0,0.055286521,0.017504737,0){0.0063275637,0.0060418568,0.0067686563}; -ST(0.043558202,0.25643586,0,0.047977922,0.25174593,0,0.048124177,0.25975563,0){0.0107076,0.011417018,0.011453901}; -ST(0.04886699,0.014821261,0,0.054320068,0.011013092,0,0.055286521,0.017504737,0){0.0060418568,0.0065256187,0.0067686563}; -ST(0.047977922,0.25174593,0,0.052565911,0.25627138,0,0.048124177,0.25975563,0){0.011417018,0.012510711,0.011453901}; -ST(0.026277351,0.065288906,0,0.018952385,0.063139668,0,0.023737369,0.060388613,0){0.0054035144,0.004228076,0.0048034585}; -ST(0.036211214,0.28505229,0,0.032913158,0.29243767,0,0.030804552,0.28682747,0){0.0060722216,0.0074810533,0.0058319124}; -ST(0.025647037,0,0,0.032172362,0,0,0.029469652,0.005642048,0){0.0035647037,0.0042172362,0.0039620423}; -ST(0.032913158,0.29243767,0,0.025567113,0.28905289,0,0.030804552,0.28682747,0){0.0074810533,0.0055567337,0.0058319124}; -ST(0.059413957,0.17983771,0,0.061548848,0.18567875,0,0.054321705,0.18240921,0){0.011618873,0.013158388,0.011269583}; -ST(0,0.031797718,0,0,0.02540862,0,0.0055959319,0.028632452,0){0.0011210343,0.0010773942,0.0017127759}; -ST(0.010217899,0.048491667,0,0.0064196609,0.043098201,0,0.01153062,0.041448292,0){0.0025847442,0.0020049288,0.00259379}; -ST(0.050927036,0.19167746,0,0.046828703,0.19603271,0,0.042998409,0.19194838,0){0.011906838,0.011336809,0.010376684}; -ST(0.05511543,0.29440677,0,0.052935715,0.28884082,0,0.058426811,0.28702912,0){0.011904677,0.0097788527,0.0098865151}; -ST(0.060722814,0.29233598,0,0.05511543,0.29440677,0,0.058426811,0.28702912,0){0.012292123,0.011904677,0.0098865151}; -ST(0.073518975,0.084426062,0,0.06823576,0.080384264,0,0.073267771,0.076862877,0){0.014655813,0.01330007,0.01374781}; -ST(0.0071026462,0.074440872,0,0.0087536517,0.067121195,0,0.011925798,0.071682732,0){0.0027655645,0.0028405718,0.0034604908}; -ST(0.041478584,0.27908417,0,0.047308417,0.28460012,0,0.041784558,0.28543344,0){0.0055491609,0.0073520502,0.0069568789}; -ST(0.043421277,0.070486317,0,0.04677464,0.063987522,0,0.05011462,0.068273913,0){0.0083417443,0.0083560787,0.0092014028}; -ST(0.049987625,0.021377356,0,0.05377987,0.026339649,0,0.046218358,0.02547694,0){0.0063275637,0.0069083627,0.0060592722}; -ST(0.05377987,0.026339649,0,0.048967316,0.030320203,0,0.046218358,0.02547694,0){0.0069083627,0.0065459276,0.0060592722}; -ST(0.049987111,0.073706442,0,0.043421277,0.070486317,0,0.05011462,0.068273913,0){0.009638201,0.0083417443,0.0092014028}; -ST(0.079846013,0.21642209,0,0.087181126,0.21483096,0,0.08504359,0.22088839,0){0.014513645,0.016308886,0.013444316}; -ST(0.078522353,0.080042605,0,0.073518975,0.084426062,0,0.073267771,0.076862877,0){0.015007077,0.014655813,0.01374781}; -ST(0.029557505,0.25181754,0,0.021822163,0.25301211,0,0.02496255,0.24770535,0){0.0077937721,0.0063174014,0.0065793383}; -ST(0.0069940321,0.15907843,0,0,0.15606634,0,0.0051979642,0.15339423,0){0.001901441,0.0012140034,0.0019946537}; -ST(0.0069230724,0.10599149,0,0,0.10306461,0,0.0051398286,0.1005864,0){0.0033428238,0.0019564772,0.0029326773}; -ST(0.057142857,0.3,0,0.05,0.3,0,0.05511543,0.29440677,0){0.013300462,0.011885664,0.011904677}; -ST(0.066186294,0.024012302,0,0.069403265,0.030528728,0,0.06300662,0.02963429,0){0.0081453494,0.0088265259,0.0080686047}; -ST(0.010825671,0.099590532,0,0.0069230724,0.10599149,0,0.0051398286,0.1005864,0){0.004016107,0.0033428238,0.0029326773}; -ST(0.049672348,0.13321934,0,0.049993928,0.12587718,0,0.055088213,0.13004616,0){0.011026506,0.011673871,0.012344969}; -ST(0.010401748,0.010393316,0,0.0060844024,0.0061076692,0,0.013164233,0.0055676569,0){0.0020666199,0.0016156403,0.0023250401}; -ST(0.010704963,0.2547075,0,0.0072786063,0.26188216,0,0.0053741268,0.25663281,0){0.0041360758,0.0033349743,0.0030729489}; -ST(0.010988582,0.15262774,0,0.0069940321,0.15907843,0,0.0051979642,0.15339423,0){0.0028106617,0.001901441,0.0019946537}; -ST(0.0070329053,0.19002058,0,0,0.18969717,0,0.0053183831,0.18471783,0){0.0032854097,0.001923296,0.0027804293}; -ST(0.077986326,0.12755717,0,0.085850588,0.12646039,0,0.082184623,0.13131431,0){0.016964028,0.018594654,0.017315387}; -ST(0.036211214,0.28505229,0,0.041478584,0.27908417,0,0.041784558,0.28543344,0){0.0060722216,0.0055491609,0.0069568789}; -ST(0.088897881,0.18581252,0,0.094303462,0.18195896,0,0.094374666,0.18946442,0){0.01821991,0.018137636,0.02003149}; -ST(0.010287914,0.27534428,0,0.0066221519,0.26909631,0,0.013858257,0.27098248,0){0.0027159036,0.0027778017,0.0037443109}; -ST(0.093260637,0.21041677,0,0.089406716,0.20396751,0,0.095307299,0.20359445,0){0.018844578,0.019494326,0.020702797}; -ST(0.049961259,0.10646397,0,0.055404807,0.10282352,0,0.055537747,0.10990822,0){0.011859712,0.012784817,0.013059457}; -ST(0,0.25815412,0,0,0.25123488,0,0.0053741268,0.25663281,0){0.0019897884,0.0019611328,0.0030729489}; -ST(0.038968939,0.093670726,0,0.043535837,0.098689724,0,0.036577437,0.099338278,0){0.0091516332,0.010280302,0.0089716861}; -ST(0.1,0.20714286,0,0.093260637,0.21041677,0,0.095307299,0.20359445,0){0.020968343,0.018844578,0.020702797}; -ST(0.044718386,0.11394827,0,0.043696053,0.10764168,0,0.049912889,0.1120086,0){0.010943235,0.010652083,0.01196981}; -ST(0.019167426,0,0,0.025647037,0,0,0.023343368,0.0053891764,0){0.0029167426,0.0035647037,0.0033459576}; -ST(0.071428571,0.3,0,0.067897561,0.29362967,0,0.075014719,0.29506761,0){0.016130092,0.013998657,0.015757805}; -ST(0.067897561,0.29362967,0,0.073628203,0.28912297,0,0.075014719,0.29506761,0){0.013998657,0.013138961,0.015757805}; -ST(0.06823576,0.080384264,0,0.066454746,0.074006402,0,0.073267771,0.076862877,0){0.01330007,0.012316324,0.01374781}; -ST(0.055404807,0.10282352,0,0.060981097,0.10625719,0,0.055537747,0.10990822,0){0.012784817,0.01403139,0.013059457}; -ST(0.083658535,0.076668132,0,0.078522353,0.080042605,0,0.077488341,0.073041111,0){0.015437813,0.015007077,0.013975013}; -ST(0.043696053,0.10764168,0,0.049961259,0.10646397,0,0.049912889,0.1120086,0){0.010652083,0.011859712,0.01196981}; -ST(0.087770529,0.028777226,0,0.093788043,0.032457843,0,0.087198716,0.035123314,0){0.010747054,0.011687416,0.01115353}; -ST(0.072358306,0.13696631,0,0.068083985,0.13292159,0,0.072428856,0.1291202,0){0.014637908,0.014467744,0.015735892}; -ST(0.066454746,0.074006402,0,0.072251719,0.070805738,0,0.073267771,0.076862877,0){0.012316324,0.01288041,0.01374781}; -ST(0.093788043,0.032457843,0,0.092021896,0.039287055,0,0.087198716,0.035123314,0){0.011687416,0.012081021,0.01115353}; -ST(0.056929375,0.031821563,0,0.056980445,0.038962171,0,0.051715879,0.035807649,0){0.0075042202,0.007911465,0.0071174241}; -ST(0.059413957,0.17983771,0,0.066109726,0.17987248,0,0.061548848,0.18567875,0){0.011618873,0.012748621,0.013158388}; -ST(0.0076308335,0.23791294,0,0,0.23744837,0,0.0049857357,0.23304427,0){0.002622712,0.0014645348,0.0018422485}; -ST(0.019025664,0.05691302,0,0.012733045,0.058713138,0,0.013073967,0.053209069,0){0.0040025741,0.0031871065,0.0030763285}; -ST(0.016666559,0.24707082,0,0.021822163,0.25301211,0,0.016097677,0.25277203,0){0.0049690135,0.0063174014,0.0051741925}; -ST(0.066109726,0.17987248,0,0.067729338,0.18636951,0,0.061548848,0.18567875,0){0.012748621,0.014422352,0.013158388}; -ST(0.017377178,0.070609144,0,0.01667016,0.076996579,0,0.011925798,0.071682732,0){0.0042796585,0.0044083295,0.0034604908}; -ST(0.079360922,0.024541521,0,0.078794748,0.031832626,0,0.07400672,0.026910821,0){0.0095813814,0.0099565426,0.0091297985}; -ST(0.085527033,0.023058497,0,0.082286996,0.017839369,0,0.087635132,0.015594151,0){0.010161784,0.009581051,0.010048385}; -ST(0,0.18969717,0,0,0.18294039,0,0.0053183831,0.18471783,0){0.001923296,0.0017672234,0.0027804293}; -ST(0.028521342,0.23217192,0,0.030623557,0.22463729,0,0.033439845,0.22948364,0){0.004622157,0.0049656049,0.004415165}; -ST(0.1,0.17857143,0,0.1,0.18571429,0,0.094303462,0.18195896,0){0.017958284,0.020239442,0.018137636}; -ST(0.091018613,0.020305374,0,0.085527033,0.023058497,0,0.087635132,0.015594151,0){0.010601467,0.010161784,0.010048385}; -ST(0.0059292545,0.014766706,0,0.010401748,0.010393316,0,0.012634798,0.015675501,0){0.0016346023,0.0020666199,0.0023302125}; -ST(0.056396465,0.13618531,0,0.049672348,0.13321934,0,0.055088213,0.13004616,0){0.01190613,0.011026506,0.012344969}; -ST(0.036056327,0.17085097,0,0.040316423,0.16515352,0,0.041541458,0.17214356,0){0.0062254059,0.0057431286,0.0072276425}; -ST(0.0090763502,0.020172771,0,0.0059292545,0.014766706,0,0.012634798,0.015675501,0){0.0020007534,0.0016346023,0.0023302125}; -ST(0.1,0.24285714,0,0.1,0.25,0,0.094605269,0.2449598,0){0.018857211,0.021317208,0.018767685}; -ST(0.093788043,0.032457843,0,0.087770529,0.028777226,0,0.094084599,0.025998463,0){0.011687416,0.010747054,0.011251769}; -ST(0.040316423,0.16515352,0,0.046260124,0.1690627,0,0.041541458,0.17214356,0){0.0057431286,0.0072155439,0.0072276425}; -ST(0.057118803,0.2495577,0,0.061245673,0.24452488,0,0.064704731,0.24945193,0){0.01294362,0.012669907,0.014388857}; -ST(0.032539635,0.14727541,0,0.039444525,0.14644848,0,0.036825174,0.15225095,0){0.0064374803,0.0076040741,0.0063271993}; -ST(0.061392472,0.25446647,0,0.057118803,0.2495577,0,0.064704731,0.24945193,0){0.014253572,0.01294362,0.014388857}; -ST(0.090457694,0.24900602,0,0.094387819,0.25408144,0,0.086685255,0.25357155,0){0.019245042,0.020817593,0.019244658}; -ST(0.015246202,0.045764486,0,0.010217899,0.048491667,0,0.01153062,0.041448292,0){0.0031524656,0.0025847442,0.00259379}; -ST(0.094387819,0.25408144,0,0.089822961,0.25859451,0,0.086685255,0.25357155,0){0.020817593,0.019819525,0.019244658}; -ST(0.1,0.25,0,0.1,0.25714286,0,0.094387819,0.25408144,0){0.021317208,0.021963976,0.020817593}; -ST(0.067729338,0.18636951,0,0.066109726,0.17987248,0,0.072746524,0.18306742,0){0.014422352,0.012748621,0.014652211}; -ST(0.1,0.12857143,0,0.1,0.13571429,0,0.094396223,0.13234736,0){0.021075659,0.019826901,0.019441171}; -ST(0.066109726,0.17987248,0,0.072198327,0.17708617,0,0.072746524,0.18306742,0){0.012748621,0.013008194,0.014652211}; -ST(0.015545644,0.18763273,0,0.022183918,0.18487742,0,0.02166044,0.19054668,0){0.0048113533,0.0058547995,0.006134172}; -ST(0.052935715,0.28884082,0,0.056202721,0.28169173,0,0.058426811,0.28702912,0){0.0097788527,0.0071383318,0.0098865151}; -ST(0.068927504,0.0060918646,0,0.072299805,0,0,0.075713015,0.0049037107,0){0.0079278993,0.0082299805,0.0085960345}; -ST(0.056202721,0.28169173,0,0.063593879,0.28436636,0,0.058426811,0.28702912,0){0.0071383318,0.0093505769,0.0098865151}; -ST(0.020103716,0.1121562,0,0.026088282,0.11662569,0,0.020593251,0.11774208,0){0.006015088,0.0072108519,0.0061054898}; -ST(0.074170803,0.010670566,0,0.068927504,0.0060918646,0,0.075713015,0.0049037107,0){0.008532082,0.0079278993,0.0085960345}; -ST(0.1,0.18571429,0,0.1,0.19285714,0,0.094374666,0.18946442,0){0.020239442,0.021660378,0.02003149}; -ST(0.041079184,0.24904413,0,0.043024015,0.24149425,0,0.045900921,0.24626076,0){0.0097899948,0.0087794072,0.010275455}; -ST(0.082655945,0.15094656,0,0.087150461,0.15605115,0,0.080100366,0.15677346,0){0.012939286,0.011826762,0.010731672}; -ST(0.1,0.028571429,0,0.093788043,0.032457843,0,0.094084599,0.025998463,0){0.012075829,0.011687416,0.011251769}; -ST(0.032223949,0.094413692,0,0.038968939,0.093670726,0,0.036577437,0.099338278,0){0.0079256222,0.0091516332,0.0089716861}; -ST(0.018018822,0.050767877,0,0.019025664,0.05691302,0,0.013073967,0.053209069,0){0.0036547138,0.0040025741,0.0030763285}; -ST(0.073457999,0.097670639,0,0.072016645,0.090906146,0,0.077858227,0.092196475,0){0.015945532,0.015065982,0.016272399}; -ST(0.061245673,0.24452488,0,0.06251245,0.23827584,0,0.067305062,0.2440339,0){0.012669907,0.01091156,0.013605878}; -ST(0.06251245,0.23827584,0,0.068887619,0.23816425,0,0.067305062,0.2440339,0){0.01091156,0.011832084,0.013605878}; -ST(0.056396465,0.13618531,0,0.056840174,0.14351487,0,0.051719407,0.14014665,0){0.01190613,0.010834582,0.010532948}; -ST(0.079360922,0.024541521,0,0.082286996,0.017839369,0,0.085527033,0.023058497,0){0.0095813814,0.009581051,0.010161784}; -ST(0.080374191,0.097624086,0,0.073457999,0.097670639,0,0.077858227,0.092196475,0){0.01726286,0.015945532,0.016272399}; -ST(0.025647037,0,0,0.029469652,0.005642048,0,0.023343368,0.0053891764,0){0.0035647037,0.0039620423,0.0033459576}; -ST(0.018230931,0.025124521,0,0.012022181,0.028807467,0,0.013134683,0.023608073,0){0.0030367355,0.0024211626,0.0024680799}; -ST(0.061700615,0.13262108,0,0.056396465,0.13618531,0,0.055088213,0.13004616,0){0.013320597,0.01190613,0.012344969}; -ST(0.06020365,0.12640845,0,0.061700615,0.13262108,0,0.055088213,0.13004616,0){0.013623005,0.013320597,0.012344969}; -ST(0.041289591,0.20119015,0,0.046828703,0.19603271,0,0.047317985,0.20170575,0){0.010204072,0.011336809,0.011381113}; -ST(0.075863318,0.15128967,0,0.082655945,0.15094656,0,0.080100366,0.15677346,0){0.011891738,0.012939286,0.010731672}; -ST(0.061329737,0.16018623,0,0.061082675,0.16604661,0,0.055152673,0.16162804,0){0.0076429651,0.0082458925,0.0064983066}; -ST(0.018230931,0.025124521,0,0.017915306,0.017912514,0,0.021948797,0.021350207,0){0.0030367355,0.0028989864,0.0033695518}; -ST(0.082404782,0.22674486,0,0.076354388,0.22899719,0,0.079358983,0.22202133,0){0.010486323,0.0086224438,0.012140385}; -ST(0,0.13607591,0,0,0.129442,0,0.0053512079,0.13276494,0){0.0017953562,0.0019048233,0.0028483266}; -ST(0,0.083446083,0,0,0.076937883,0,0.0052564808,0.080270621,0){0.0017416923,0.0016520865,0.00259121}; -ST(0.042857143,0.3,0,0.035714286,0.3,0,0.038812872,0.29456049,0){0.010468963,0.0090547386,0.0089597215}; -ST(0.093701939,0.074587016,0,0.088948357,0.079796263,0,0.088095049,0.072803473,0){0.016790312,0.016740913,0.015636506}; -ST(0.077664091,0.1983373,0,0.082772947,0.19508151,0,0.085087205,0.20027301,0){0.017532477,0.018456454,0.018969225}; -ST(0.080532481,0.2036733,0,0.077664091,0.1983373,0,0.085087205,0.20027301,0){0.017789172,0.017532477,0.018969225}; -ST(0.05,0.3,0,0.049141897,0.29382693,0,0.05511543,0.29440677,0){0.011885664,0.010673071,0.011904677}; -ST(0.010057812,0.23068741,0,0.0076308335,0.23791294,0,0.0049857357,0.23304427,0){0.0022253758,0.002622712,0.0018422485}; -ST(0,0.25123488,0,0.0059669022,0.25108021,0,0.0053741268,0.25663281,0){0.0019611328,0.003127184,0.0030729489}; -ST(0.055918666,0.15605421,0,0.04998761,0.15939724,0,0.049176801,0.15384163,0){0.0080267163,0.0065496788,0.0076766851}; -ST(0.053121914,0.14984683,0,0.055918666,0.15605421,0,0.049176801,0.15384163,0){0.0090412706,0.0080267163,0.0076766851}; -ST(0.0055959319,0.028632452,0,0,0.02540862,0,0.0042261279,0.022248036,0){0.0017127759,0.0010773942,0.0015070621}; -ST(0.014716796,0.17010542,0,0.020122959,0.1650354,0,0.020376181,0.170702,0){0.0032674718,0.0034385995,0.0040946903}; -ST(0.052671398,0.090038465,0,0.056523131,0.084118476,0,0.058666695,0.090099436,0){0.011446826,0.011646159,0.012546942}; -ST(0,0.10306461,0,0,0.096512506,0,0.0051398286,0.1005864,0){0.0019564772,0.0018991232,0.0029326773}; -ST(0.023840623,0.12537371,0,0.030550045,0.12422927,0,0.027097286,0.12998702,0){0.0066011582,0.007950786,0.0070390802}; -ST(0.016690266,0.18191056,0,0.022183918,0.18487742,0,0.015545644,0.18763273,0){0.0046373261,0.0058547995,0.0048113533}; -ST(0,0.27203526,0,0.0066221519,0.26909631,0,0.004564662,0.27552118,0){0.001517686,0.0027778017,0.0018975573}; -ST(0.0066221519,0.26909631,0,0.010287914,0.27534428,0,0.004564662,0.27552118,0){0.0027778017,0.0027159036,0.0018975573}; -ST(0.073862352,0.047765251,0,0.067714741,0.05140667,0,0.068656382,0.045051564,0){0.010653664,0.010194849,0.0097624898}; -ST(0.025567113,0.28905289,0,0.028120489,0.2818096,0,0.030804552,0.28682747,0){0.0055567337,0.0042507092,0.0058319124}; -ST(0,0.14938457,0,0.0064726641,0.14769389,0,0.0051979642,0.15339423,0){0.0014478061,0.0024715601,0.0019946537}; -ST(0.055404807,0.10282352,0,0.049961259,0.10646397,0,0.04848764,0.10113949,0){0.012784817,0.011859712,0.011356258}; -ST(0.052243848,0.09708824,0,0.055404807,0.10282352,0,0.04848764,0.10113949,0){0.011856809,0.012784817,0.011356258}; -ST(0,0.15606634,0,0,0.14938457,0,0.0051979642,0.15339423,0){0.0012140034,0.0014478061,0.0019946537}; -ST(0.065548757,0.12300421,0,0.063913425,0.11688174,0,0.070021709,0.11751867,0){0.014884473,0.014765299,0.015974435}; -ST(0.012217264,0.2047927,0,0.0065980308,0.2085645,0,0.0061278576,0.20241521,0){0.004330336,0.0031103455,0.003192052}; -ST(0,0.096512506,0,0.0062739213,0.09500888,0,0.0051398286,0.1005864,0){0.0018991232,0.0030651339,0.0029326773}; -ST(0.048884684,0.23984002,0,0.051467941,0.24632844,0,0.045900921,0.24626076,0){0.0093142721,0.011312523,0.010275455}; -ST(0.01086253,0.18415108,0,0.0062141227,0.17913624,0,0.012144819,0.17790797,0){0.0037558824,0.0026772087,0.0035663748}; -ST(0.020122959,0.1650354,0,0.025933861,0.16956771,0,0.020376181,0.170702,0){0.0034385995,0.0046706454,0.0040946903}; -ST(0.071875088,0.12337373,0,0.065548757,0.12300421,0,0.070021709,0.11751867,0){0.016108744,0.014884473,0.015974435}; -ST(0.010988582,0.15262774,0,0.0064726641,0.14769389,0,0.0123246,0.14637199,0){0.0028106617,0.0024715601,0.0034383019}; -ST(0.017510909,0.090546457,0,0.016970501,0.097139845,0,0.012113002,0.093889284,0){0.0050417352,0.0051389794,0.0041379831}; -ST(0.073862352,0.047765251,0,0.072627499,0.040727625,0,0.078113811,0.043235614,0){0.010653664,0.0098966022,0.0107714}; -ST(0,0.089973101,0,0,0.083446083,0,0.0048810442,0.085538046,0){0.0018256894,0.0017416923,0.0026331542}; -ST(0.017116349,0.14998193,0,0.010988582,0.15262774,0,0.0123246,0.14637199,0){0.0038725238,0.0028106617,0.0034383019}; -ST(0.056165025,0.18879164,0,0.049745249,0.18581505,0,0.054321705,0.18240921,0){0.012615914,0.011007309,0.011269583}; -ST(0.05563397,0.050831549,0,0.050004445,0.054274349,0,0.049081828,0.048821836,0){0.0085660039,0.0080776129,0.0075751441}; -ST(0.016765854,0.040249778,0,0.015319473,0.034144954,0,0.021259451,0.03718155,0){0.0031936572,0.0028850261,0.0036421529}; -ST(0.052903,0.044824368,0,0.05563397,0.050831549,0,0.049081828,0.048821836,0){0.0077922845,0.0085660039,0.0075751441}; -ST(0.080964027,0.048552182,0,0.073862352,0.047765251,0,0.078113811,0.043235614,0){0.011635394,0.010653664,0.0107714}; -ST(0.015319473,0.034144954,0,0.021114997,0.031742287,0,0.021259451,0.03718155,0){0.0028850261,0.0034867915,0.0036421529}; -ST(0.072873195,0.02116659,0,0.079360922,0.024541521,0,0.07400672,0.026910821,0){0.0087326558,0.0095813814,0.0091297985}; -ST(0.073017129,0.19015646,0,0.067729338,0.18636951,0,0.072746524,0.18306742,0){0.016031824,0.014422352,0.014652211}; -ST(0.078000839,0.18597742,0,0.073017129,0.19015646,0,0.072746524,0.18306742,0){0.016247188,0.016031824,0.014652211}; -ST(0.053293432,0.27215527,0,0.053554762,0.26522616,0,0.058794554,0.26817279,0){0.0095317783,0.01164797,0.01180084}; -ST(0.027245934,0.021259063,0,0.025374297,0.027198867,0,0.021948797,0.021350207,0){0.0039264931,0.0038510471,0.0033695518}; -ST(0,0.18294039,0,0.0062141227,0.17913624,0,0.0053183831,0.18471783,0){0.0017672234,0.0026772087,0.0027804293}; -ST(0.049555855,0.0062621576,0,0.052025416,0,0,0.055476524,0.0050891727,0){0.005983611,0.0062025416,0.0065680022}; -ST(0.059957664,0.27407069,0,0.053293432,0.27215527,0,0.058794554,0.26817279,0){0.0097471839,0.0095317783,0.01180084}; -ST(0.031168111,0.086149637,0,0.031727435,0.080354054,0,0.036897729,0.08183265,0){0.0073174534,0.0070919301,0.0080657189}; -ST(0.043421277,0.070486317,0,0.049987111,0.073706442,0,0.044925733,0.07572266,0){0.0083417443,0.009638201,0.0089806243}; -ST(0.036893214,0.087210211,0,0.031168111,0.086149637,0,0.036897729,0.08183265,0){0.0083992423,0.0073174534,0.0080657189}; -ST(0.038759258,0.11167503,0,0.037735929,0.10537966,0,0.043696053,0.10764168,0){0.0097384206,0.0094123836,0.010652083}; -ST(0.061082675,0.16604661,0,0.05534208,0.16725107,0,0.055152673,0.16162804,0){0.0082458925,0.007927676,0.0064983066}; -ST(0.044718386,0.11394827,0,0.038759258,0.11167503,0,0.043696053,0.10764168,0){0.010943235,0.0097384206,0.010652083}; -ST(0,0.044618955,0,0.0064196609,0.043098201,0,0.0047428148,0.048313235,0){0.0012366363,0.0020049288,0.0018818499}; -ST(0.071875088,0.12337373,0,0.077986326,0.12755717,0,0.072428856,0.1291202,0){0.016108744,0.016964028,0.015735892}; -ST(0.052025416,0,0,0.058736373,0,0,0.055476524,0.0050891727,0){0.0062025416,0.0068736373,0.0065680022}; -ST(0.0062141227,0.17913624,0,0.0088492442,0.17282653,0,0.012144819,0.17790797,0){0.0026772087,0.002692894,0.0035663748}; -ST(0.054320068,0.011013092,0,0.049555855,0.0062621576,0,0.055476524,0.0050891727,0){0.0065256187,0.005983611,0.0065680022}; -ST(0.033568202,0.044135264,0,0.039602446,0.042142971,0,0.038042686,0.048242807,0){0.0053659814,0.0060094056,0.0061286509}; -ST(0.093408348,0.23929044,0,0.1,0.24285714,0,0.094605269,0.2449598,0){0.016078078,0.018857211,0.018767685}; -ST(0.073845419,0.2209308,0,0.079846013,0.21642209,0,0.079358983,0.22202133,0){0.011831692,0.014513645,0.012140385}; -ST(0.064295402,0.27015162,0,0.062978572,0.26385631,0,0.068748354,0.26449609,0){0.012021911,0.013699793,0.014627562}; -ST(0.014854991,0.11674459,0,0.020103716,0.1121562,0,0.020593251,0.11774208,0){0.0049657919,0.006015088,0.0061054898}; -ST(0.039602446,0.042142971,0,0.04393967,0.046787303,0,0.038042686,0.048242807,0){0.0060094056,0.0067946488,0.0061286509}; -ST(0.017650615,0.14332879,0,0.017116349,0.14998193,0,0.0123246,0.14637199,0){0.0044959748,0.0038725238,0.0034383019}; -ST(0.073457999,0.097670639,0,0.067492619,0.10117066,0,0.067742128,0.095151401,0){0.015945532,0.015048339,0.014654254}; -ST(0.0064726641,0.14769389,0,0.0088859191,0.14145589,0,0.0123246,0.14637199,0){0.0024715601,0.0031626243,0.0034383019}; -ST(0.072627499,0.040727625,0,0.073862352,0.047765251,0,0.068656382,0.045051564,0){0.0098966022,0.010653664,0.0097624898}; -ST(0,0.051053592,0,0,0.044618955,0,0.0047428148,0.048313235,0){0.001307702,0.0012366363,0.0018818499}; -ST(0,0.23744837,0,0,0.23057917,0,0.0049857357,0.23304427,0){0.0014645348,0.0011094321,0.0018422485}; -ST(0.047977922,0.25174593,0,0.041079184,0.24904413,0,0.045900921,0.24626076,0){0.011417018,0.0097899948,0.010275455}; -ST(0.072016645,0.090906146,0,0.073457999,0.097670639,0,0.067742128,0.095151401,0){0.015065982,0.015945532,0.014654254}; -ST(0.1,0.092857143,0,0.1,0.1,0,0.09495489,0.096461405,0){0.020456772,0.021252429,0.019926776}; -ST(0.07789134,0.13496254,0,0.077986326,0.12755717,0,0.082184623,0.13131431,0){0.015967895,0.016964028,0.017315387}; -ST(0.027245934,0.021259063,0,0.023736508,0.016363017,0,0.029473654,0.015232311,0){0.0039264931,0.0034820269,0.0040572572}; -ST(0,0.23057917,0,0,0.22372386,0,0.0050703794,0.22750411,0){0.0011094321,0.0012703225,0.0016282327}; -ST(0.016971899,0.25850458,0,0.010704963,0.2547075,0,0.016097677,0.25277203,0){0.0053575659,0.0041360758,0.0051741925}; -ST(0.029469652,0.005642048,0,0.025782343,0.010697164,0,0.023343368,0.0053891764,0){0.0039620423,0.0036273673,0.0033459576}; -ST(0.021822163,0.25301211,0,0.016971899,0.25850458,0,0.016097677,0.25277203,0){0.0063174014,0.0053575659,0.0051741925}; -ST(0.055286521,0.017504737,0,0.054320068,0.011013092,0,0.059697637,0.012753556,0){0.0067686563,0.0065256187,0.0071057936}; -ST(0.075019178,0.10458001,0,0.082067363,0.10446681,0,0.078753785,0.10944217,0){0.016721658,0.01810119,0.0176718}; -ST(0.049745249,0.18581505,0,0.056165025,0.18879164,0,0.050927036,0.19167746,0){0.011007309,0.012615914,0.011906838}; -ST(0.083403881,0.18288957,0,0.078000839,0.18597742,0,0.077439796,0.17962153,0){0.016492804,0.016247188,0.014576515}; -ST(0.031910893,0.1329396,0,0.035995823,0.12783992,0,0.03712087,0.13446417,0){0.0077641922,0.0088531158,0.0086041419}; -ST(0.082636182,0.070608246,0,0.083658535,0.076668132,0,0.077488341,0.073041111,0){0.014480965,0.015437813,0.013975013}; -ST(0.016970501,0.097139845,0,0.010825671,0.099590532,0,0.012113002,0.093889284,0){0.0051389794,0.004016107,0.0041379831}; -ST(0.078571429,0.3,0,0.071428571,0.3,0,0.075014719,0.29506761,0){0.017545614,0.016130092,0.015757805}; -ST(0.075512736,0.26666994,0,0.070141314,0.27013164,0,0.068748354,0.26449609,0){0.015202563,0.012960708,0.014627562}; -ST(0.080764352,0.25370675,0,0.08378138,0.24758349,0,0.086685255,0.25357155,0){0.018075953,0.017616529,0.019244658}; -ST(0.1,0.16428571,0,0.1,0.17142857,0,0.095064283,0.16787532,0){0.012266282,0.015132575,0.012983793}; -ST(0.08378138,0.24758349,0,0.090457694,0.24900602,0,0.086685255,0.25357155,0){0.017616529,0.019245042,0.019244658}; -ST(0.0062739213,0.09500888,0,0.0088081659,0.089068546,0,0.012113002,0.093889284,0){0.0030651339,0.0034128678,0.0041379831}; -ST(0.078522353,0.080042605,0,0.073267771,0.076862877,0,0.077488341,0.073041111,0){0.015007077,0.01374781,0.013975013}; -ST(0.067812422,0.25459576,0,0.070877084,0.24895303,0,0.074546647,0.25397984,0){0.015539601,0.015483539,0.0168549}; -ST(0.046260124,0.1690627,0,0.040316423,0.16515352,0,0.045860229,0.163357,0){0.0072155439,0.0057431286,0.0059728166}; -ST(0.028571429,0.3,0,0.021428571,0.3,0,0.025005027,0.29510367,0){0.0076400532,0.0062259487,0.0064954414}; -ST(0.071849852,0.25958891,0,0.067812422,0.25459576,0,0.074546647,0.25397984,0){0.016149584,0.015539601,0.0168549}; -ST(0.049958331,0.21332249,0,0.055853935,0.21726741,0,0.049857944,0.21896006,0){0.010389004,0.010404133,0.0090150594}; -ST(0.010825671,0.099590532,0,0.0062739213,0.09500888,0,0.012113002,0.093889284,0){0.004016107,0.0030651339,0.0041379831}; -ST(0.055853935,0.21726741,0,0.05289152,0.22371293,0,0.049857944,0.21896006,0){0.010404133,0.0079980598,0.0090150594}; -ST(0.038743683,0,0,0.045361276,0,0,0.042065894,0.0047615469,0){0.0048743683,0.0055361276,0.0052207549}; -ST(0.073628203,0.28912297,0,0.069762333,0.28431595,0,0.076893993,0.2841615,0){0.013138961,0.010105067,0.010943662}; -ST(0.069762333,0.28431595,0,0.073416465,0.27934608,0,0.076893993,0.2841615,0){0.010105067,0.0088333373,0.010943662}; -ST(0.088948357,0.079796263,0,0.083658535,0.076668132,0,0.088095049,0.072803473,0){0.016740913,0.015437813,0.015636506}; -ST(0.072299805,0,0,0.079152804,0,0,0.075713015,0.0049037107,0){0.0082299805,0.0089152804,0.0085960345}; -ST(0.082229882,0.11430537,0,0.075237497,0.11427639,0,0.078753785,0.10944217,0){0.018445934,0.017047438,0.0176718}; -ST(0.094091634,0.0059624358,0,0.089774267,0.010202707,0,0.086908462,0.0054765496,0){0.01045357,0.010102056,0.0097257245}; -ST(0.0064726641,0.14769389,0,0.010988582,0.15262774,0,0.0051979642,0.15339423,0){0.0024715601,0.0028106617,0.0019946537}; -ST(0.017660768,0.12252143,0,0.016308386,0.12868827,0,0.012134612,0.12388006,0){0.0054589438,0.0050367798,0.0043462782}; -ST(0.077664091,0.1983373,0,0.080532481,0.2036733,0,0.075136028,0.20507776,0){0.017532477,0.017789172,0.016555444}; -ST(0.059647761,0.23257945,0,0.053928421,0.22993019,0,0.058567138,0.22596146,0){0.0083760198,0.0067705286,0.0079955342}; -ST(0.016690266,0.18191056,0,0.01086253,0.18415108,0,0.012144819,0.17790797,0){0.0046373261,0.0037558824,0.0035663748}; -ST(0.031467861,0.069797289,0,0.026277351,0.065288906,0,0.031481235,0.064160132,0){0.006435259,0.0054035144,0.0061148995}; -ST(0.025782343,0.010697164,0,0.023736508,0.016363017,0,0.01972947,0.013018635,0){0.0036273673,0.0034820269,0.0030334072}; -ST(0.0064196609,0.043098201,0,0.010217899,0.048491667,0,0.0047428148,0.048313235,0){0.0020049288,0.0025847442,0.0018818499}; -ST(0.055918666,0.15605421,0,0.061329737,0.16018623,0,0.055152673,0.16162804,0){0.0080267163,0.0076429651,0.0064983066}; -ST(0.01442164,0.26537398,0,0.019479015,0.2705585,0,0.013858257,0.27098248,0){0.0044630286,0.0047057288,0.0037443109}; -ST(0.1,0.2,0,0.1,0.20714286,0,0.095307299,0.20359445,0){0.021957739,0.020968343,0.020702797}; -ST(0.070141314,0.27013164,0,0.064295402,0.27015162,0,0.068748354,0.26449609,0){0.012960708,0.012021911,0.014627562}; -ST(0.01086253,0.18415108,0,0.0070329053,0.19002058,0,0.0053183831,0.18471783,0){0.0037558824,0.0032854097,0.0027804293}; -ST(0.091481478,0.06789356,0,0.093701939,0.074587016,0,0.088095049,0.072803473,0){0.01547964,0.016790312,0.015636506}; -ST(0.043024015,0.24149425,0,0.048884684,0.23984002,0,0.045900921,0.24626076,0){0.0087794072,0.0093142721,0.010275455}; -ST(0.043875453,0.15799271,0,0.04397778,0.15172209,0,0.049176801,0.15384163,0){0.0061743039,0.0073960532,0.0076766851}; -ST(0.055460475,0.069248829,0,0.049987111,0.073706442,0,0.05011462,0.068273913,0){0.010108481,0.009638201,0.0092014028}; -ST(0.049745249,0.18581505,0,0.049952063,0.1787418,0,0.054321705,0.18240921,0){0.011007309,0.0098216119,0.011269583}; -ST(0.1,0.25714286,0,0.1,0.26428571,0,0.095319273,0.26073379,0){0.021963976,0.020507244,0.020580735}; -ST(0.04998761,0.15939724,0,0.043875453,0.15799271,0,0.049176801,0.15384163,0){0.0065496788,0.0061743039,0.0076766851}; -ST(0.0193219,0.2311094,0,0.020771052,0.23704614,0,0.014554238,0.23387563,0){0.0033259199,0.0044321473,0.003134429}; -ST(0.020771052,0.23704614,0,0.01511463,0.2393591,0,0.014554238,0.23387563,0){0.0044321473,0.003913276,0.003134429}; -ST(0.021768928,0.13185708,0,0.023840623,0.12537371,0,0.027097286,0.12998702,0){0.0059408379,0.0066011582,0.0070390802}; -ST(0.0062739213,0.09500888,0,0.010825671,0.099590532,0,0.0051398286,0.1005864,0){0.0030651339,0.004016107,0.0029326773}; -ST(0.037310958,0.036215878,0,0.036258451,0.030655369,0,0.042275405,0.033499023,0){0.0054726568,0.005146398,0.0059293669}; -ST(0.036258451,0.030655369,0,0.041222898,0.027938513,0,0.042275405,0.033499023,0){0.005146398,0.0056013798,0.0059293669}; -ST(0.0064196609,0.043098201,0,0.0086756768,0.036899292,0,0.01153062,0.041448292,0){0.0020049288,0.0021713487,0.00259379}; -ST(0.071875088,0.12337373,0,0.070021709,0.11751867,0,0.076396225,0.11987471,0){0.016108744,0.015974435,0.017177524}; -ST(0.070021709,0.11751867,0,0.075237497,0.11427639,0,0.076396225,0.11987471,0){0.015974435,0.017047438,0.017177524}; -ST(0.094387819,0.25408144,0,0.1,0.25714286,0,0.095319273,0.26073379,0){0.020817593,0.021963976,0.020580735}; -ST(0.089822961,0.25859451,0,0.094387819,0.25408144,0,0.095319273,0.26073379,0){0.019819525,0.020817593,0.020580735}; -ST(0.082495291,0.1767331,0,0.083403881,0.18288957,0,0.077439796,0.17962153,0){0.01452089,0.016492804,0.014576515}; -ST(0.016706021,0.19335173,0,0.015545644,0.18763273,0,0.02166044,0.19054668,0){0.0052731674,0.0048113533,0.006134172}; -ST(0.0062141227,0.17913624,0,0.01086253,0.18415108,0,0.0053183831,0.18471783,0){0.0026772087,0.0037558824,0.0027804293}; -ST(0.078522353,0.080042605,0,0.083658535,0.076668132,0,0.083812176,0.083170737,0){0.015007077,0.015437813,0.016304455}; -ST(0.036645028,0.065460046,0,0.031467861,0.069797289,0,0.031481235,0.064160132,0){0.0069586979,0.006435259,0.0061148995}; -ST(0.023736508,0.016363017,0,0.025782343,0.010697164,0,0.029473654,0.015232311,0){0.0034820269,0.0036273673,0.0040572572}; -ST(0.017833823,0.17577258,0,0.016690266,0.18191056,0,0.012144819,0.17790797,0){0.0042763177,0.0046373261,0.0035663748}; -ST(0.083658535,0.076668132,0,0.088948357,0.079796263,0,0.083812176,0.083170737,0){0.015437813,0.016740913,0.016304455}; -ST(0.055287343,0.062192056,0,0.055098786,0.05659657,0,0.060565964,0.060729258,0){0.0094513626,0.0089509863,0.010078647}; -ST(0.055098786,0.05659657,0,0.060533545,0.055251798,0,0.060565964,0.060729258,0){0.0089509863,0.0095798189,0.010078647}; -ST(0,0.02540862,0,0,0.019032121,0,0.0042261279,0.022248036,0){0.0010773942,0.0010434529,0.0015070621}; -ST(0.078000839,0.18597742,0,0.083403881,0.18288957,0,0.083669222,0.1890156,0){0.016247188,0.016492804,0.017899958}; -ST(0.04677464,0.063987522,0,0.04109467,0.060492019,0,0.046279621,0.058429349,0){0.0083560787,0.0072817007,0.0078696625}; -ST(0.059647761,0.23257945,0,0.058567138,0.22596146,0,0.063977145,0.22848817,0){0.0083760198,0.0079955342,0.0073732166}; -ST(0.017660768,0.12252143,0,0.014854991,0.11674459,0,0.020593251,0.11774208,0){0.0054589438,0.0049657919,0.0061054898}; -ST(0.061329737,0.16018623,0,0.055918666,0.15605421,0,0.061430891,0.15444473,0){0.0076429651,0.0080267163,0.009109847}; -ST(0.050004445,0.054274349,0,0.05563397,0.050831549,0,0.055098786,0.05659657,0){0.0080776129,0.0085660039,0.0089509863}; -ST(0,0.27900442,0,0,0.27203526,0,0.004564662,0.27552118,0){0.0010819588,0.001517686,0.0018975573}; -ST(0.018952385,0.063139668,0,0.019025664,0.05691302,0,0.023737369,0.060388613,0){0.004228076,0.0040025741,0.0048034585}; -ST(0.055269447,0.17422653,0,0.049952063,0.1787418,0,0.049852622,0.17323607,0){0.0096616545,0.0098216119,0.0086421223}; -ST(0.019025664,0.05691302,0,0.024953134,0.05500472,0,0.023737369,0.060388613,0){0.0040025741,0.0047366364,0.0048034585}; -ST(0.031694548,0.13853307,0,0.031910893,0.1329396,0,0.03712087,0.13446417,0){0.0072703146,0.0077641922,0.0086041419}; -ST(0.037124591,0.13989263,0,0.031694548,0.13853307,0,0.03712087,0.13446417,0){0.0080703973,0.0072703146,0.0086041419}; -ST(0.082772947,0.19508151,0,0.077664091,0.1983373,0,0.078432808,0.19155374,0){0.018456454,0.017532477,0.017267031}; -ST(0.05563397,0.050831549,0,0.060533545,0.055251798,0,0.055098786,0.05659657,0){0.0085660039,0.0095798189,0.0089509863}; -ST(0.049961259,0.10646397,0,0.055537747,0.10990822,0,0.049912889,0.1120086,0){0.011859712,0.013059457,0.01196981}; -ST(0.055537747,0.10990822,0,0.053583525,0.11616451,0,0.049912889,0.1120086,0){0.013059457,0.012709223,0.01196981}; -ST(0.04998761,0.15939724,0,0.055918666,0.15605421,0,0.055152673,0.16162804,0){0.0065496788,0.0080267163,0.0064983066}; -ST(0,0.21688641,0,0,0.21006685,0,0.0043931952,0.21357915,0){0.0015962363,0.0018346987,0.0024813618}; -ST(0.047308417,0.28460012,0,0.043729981,0.29067011,0,0.041784558,0.28543344,0){0.0073520502,0.0088969473,0.0069568789}; -ST(0.072873195,0.02116659,0,0.07060324,0.015557736,0,0.076551438,0.016154114,0){0.0087326558,0.0082944052,0.0089261328}; -ST(0.070877084,0.24895303,0,0.067812422,0.25459576,0,0.064704731,0.24945193,0){0.015483539,0.015539601,0.014388857}; -ST(0.053928421,0.22993019,0,0.05289152,0.22371293,0,0.058567138,0.22596146,0){0.0067705286,0.0079980598,0.0079955342}; -ST(0,0.21006685,0,0.0065980308,0.2085645,0,0.0043931952,0.21357915,0){0.0018346987,0.0031103455,0.0024813618}; -ST(0.052562678,0.20392294,0,0.046741278,0.20737056,0,0.047317985,0.20170575,0){0.012272703,0.010788495,0.011381113}; -ST(0.023665586,0.1785779,0,0.030060203,0.17758385,0,0.027586782,0.18282418,0){0.0054977511,0.0064082769,0.0066297552}; -ST(0.022183918,0.18487742,0,0.023665586,0.1785779,0,0.027586782,0.18282418,0){0.0058547995,0.0054977511,0.0066297552}; -ST(0.055537747,0.10990822,0,0.060981097,0.10625719,0,0.060886949,0.1120001,0){0.013059457,0.01403139,0.014162182}; -ST(0.079846013,0.21642209,0,0.08504359,0.22088839,0,0.079358983,0.22202133,0){0.014513645,0.013444316,0.012140385}; -ST(0.017833823,0.17577258,0,0.014716796,0.17010542,0,0.020376181,0.170702,0){0.0042763177,0.0032674718,0.0040946903}; -ST(0.042179961,0.085826476,0,0.036893214,0.087210211,0,0.036897729,0.08183265,0){0.0092527823,0.0083992423,0.0080657189}; -ST(0.0065980308,0.2085645,0,0.0097873579,0.21453362,0,0.0043931952,0.21357915,0){0.0031103455,0.0033423208,0.0024813618}; -ST(0.042070498,0.080362737,0,0.042179961,0.085826476,0,0.036897729,0.08183265,0){0.0088504368,0.0092527823,0.0080657189}; -ST(0.083403881,0.18288957,0,0.088897881,0.18581252,0,0.083669222,0.1890156,0){0.016492804,0.01821991,0.017899958}; -ST(0.042474964,0.13846746,0,0.037124591,0.13989263,0,0.03712087,0.13446417,0){0.009157817,0.0080703973,0.0086041419}; -ST(0.042328752,0.13293246,0,0.042474964,0.13846746,0,0.03712087,0.13446417,0){0.009694753,0.009157817,0.0086041419}; -ST(0.067812422,0.25459576,0,0.061392472,0.25446647,0,0.064704731,0.24945193,0){0.015539601,0.014253572,0.014388857}; -ST(0.078113811,0.043235614,0,0.072627499,0.040727625,0,0.078343312,0.037688751,0){0.0107714,0.0098966022,0.010332889}; -ST(0.01086253,0.18415108,0,0.016690266,0.18191056,0,0.015545644,0.18763273,0){0.0037558824,0.0046373261,0.0048113533}; -ST(0.072627499,0.040727625,0,0.073594736,0.034812751,0,0.078343312,0.037688751,0){0.0098966022,0.0095709225,0.010332889}; -ST(0.083077166,0.089272145,0,0.077858227,0.092196475,0,0.078894228,0.085673269,0){0.016912942,0.016272399,0.015745314}; -ST(0.07060324,0.015557736,0,0.074170803,0.010670566,0,0.076551438,0.016154114,0){0.0082944052,0.008532082,0.0089261328}; -ST(0.089774267,0.010202707,0,0.09386735,0.014826529,0,0.087635132,0.015594151,0){0.010102056,0.010660697,0.010048385}; -ST(0.09386735,0.014826529,0,0.091018613,0.020305374,0,0.087635132,0.015594151,0){0.010660697,0.010601467,0.010048385}; -ST(0.085850588,0.12646039,0,0.087647844,0.13269091,0,0.082184623,0.13131431,0){0.018594654,0.018129897,0.017315387}; -ST(0.044326443,0.052673868,0,0.04393967,0.046787303,0,0.049081828,0.048821836,0){0.007208181,0.0067946488,0.0075751441}; -ST(0.078000839,0.18597742,0,0.072746524,0.18306742,0,0.077439796,0.17962153,0){0.016247188,0.014652211,0.014576515}; -ST(0.058794554,0.26817279,0,0.062978572,0.26385631,0,0.064295402,0.27015162,0){0.01180084,0.013699793,0.012021911}; -ST(0.067305062,0.2440339,0,0.070877084,0.24895303,0,0.064704731,0.24945193,0){0.013605878,0.015483539,0.014388857}; -ST(0.044326443,0.052673868,0,0.050004445,0.054274349,0,0.046279621,0.058429349,0){0.007208181,0.0080776129,0.0078696625}; -ST(0.050004445,0.054274349,0,0.044326443,0.052673868,0,0.049081828,0.048821836,0){0.0080776129,0.007208181,0.0075751441}; -ST(0.060981097,0.10625719,0,0.055404807,0.10282352,0,0.060554433,0.1007053,0){0.01403139,0.012784817,0.013673871}; -ST(0.094358182,0.044786011,0,0.08966753,0.048486622,0,0.088013761,0.043162337,0){0.012923485,0.012741374,0.011974352}; -ST(0.092021896,0.039287055,0,0.094358182,0.044786011,0,0.088013761,0.043162337,0){0.012081021,0.012923485,0.011974352}; -ST(0.073518975,0.084426062,0,0.078522353,0.080042605,0,0.078894228,0.085673269,0){0.014655813,0.015007077,0.015745314}; -ST(0.077226062,0.14082844,0,0.071665053,0.14281002,0,0.072358306,0.13696631,0){0.01474222,0.013390699,0.014637908}; -ST(0.049141897,0.29382693,0,0.052935715,0.28884082,0,0.05511543,0.29440677,0){0.010673071,0.0097788527,0.011904677}; -ST(0.07789134,0.13496254,0,0.077226062,0.14082844,0,0.072358306,0.13696631,0){0.015967895,0.01474222,0.014637908}; -ST(0.061245673,0.24452488,0,0.067305062,0.2440339,0,0.064704731,0.24945193,0){0.012669907,0.013605878,0.014388857}; -ST(0.043875453,0.15799271,0,0.04998761,0.15939724,0,0.045860229,0.163357,0){0.0061743039,0.0065496788,0.0059728166}; -ST(0.058567138,0.22596146,0,0.063624353,0.22254194,0,0.063977145,0.22848817,0){0.0079955342,0.0098145667,0.0073732166}; -ST(0.051467941,0.24632844,0,0.047977922,0.25174593,0,0.045900921,0.24626076,0){0.011312523,0.011417018,0.010275455}; -ST(0.032166514,0.1863502,0,0.031703323,0.19206661,0,0.026781154,0.18834116,0){0.0078219415,0.0081716788,0.0069809105}; -ST(0.031168111,0.086149637,0,0.025886934,0.08860133,0,0.026804876,0.082803766,0){0.0073174534,0.0064910537,0.0063784224}; -ST(0.083658535,0.076668132,0,0.082636182,0.070608246,0,0.088095049,0.072803473,0){0.015437813,0.014480965,0.015636506}; -ST(0.016765854,0.040249778,0,0.015246202,0.045764486,0,0.01153062,0.041448292,0){0.0031936572,0.0031524656,0.00259379}; -ST(0,0.083446083,0,0.0052564808,0.080270621,0,0.0048810442,0.085538046,0){0.0017416923,0.00259121,0.0026331542}; -ST(0.078000839,0.18597742,0,0.083669222,0.1890156,0,0.078432808,0.19155374,0){0.016247188,0.017899958,0.017267031}; -ST(0.017915306,0.017912514,0,0.023736508,0.016363017,0,0.021948797,0.021350207,0){0.0028989864,0.0034820269,0.0033695518}; -ST(0.08504359,0.22088839,0,0.082404782,0.22674486,0,0.079358983,0.22202133,0){0.013444316,0.010486323,0.012140385}; -ST(0.073017129,0.19015646,0,0.078000839,0.18597742,0,0.078432808,0.19155374,0){0.016031824,0.016247188,0.017267031}; -ST(0.031703323,0.19206661,0,0.026266704,0.19389286,0,0.026781154,0.18834116,0){0.0081716788,0.0071802403,0.0069809105}; -ST(0.023736508,0.016363017,0,0.027245934,0.021259063,0,0.021948797,0.021350207,0){0.0034820269,0.0039264931,0.0033695518}; -ST(0.023736508,0.016363017,0,0.017915306,0.017912514,0,0.01972947,0.013018635,0){0.0034820269,0.0028989864,0.0030334072}; -ST(0.073267771,0.076862877,0,0.072251719,0.070805738,0,0.077488341,0.073041111,0){0.01374781,0.01288041,0.013975013}; -ST(0.049081828,0.048821836,0,0.04393967,0.046787303,0,0.047793904,0.042940806,0){0.0075751441,0.0067946488,0.0070477847}; -ST(0.072746524,0.18306742,0,0.072198327,0.17708617,0,0.077439796,0.17962153,0){0.014652211,0.013008194,0.014576515}; -ST(0.073594736,0.034812751,0,0.078794748,0.031832626,0,0.078343312,0.037688751,0){0.0095709225,0.0099565426,0.010332889}; -ST(0.052903,0.044824368,0,0.049081828,0.048821836,0,0.047793904,0.042940806,0){0.0077922845,0.0075751441,0.0070477847}; -ST(0.049176801,0.15384163,0,0.04397778,0.15172209,0,0.047950771,0.14786323,0){0.0076766851,0.0073960532,0.0086642634}; -ST(0.059957664,0.27407069,0,0.058794554,0.26817279,0,0.064295402,0.27015162,0){0.0097471839,0.01180084,0.012021911}; -ST(0.053121914,0.14984683,0,0.049176801,0.15384163,0,0.047950771,0.14786323,0){0.0090412706,0.0076766851,0.0086642634}; -ST(0.031727435,0.080354054,0,0.031168111,0.086149637,0,0.026804876,0.082803766,0){0.0070919301,0.0073174534,0.0063784224}; -ST(0.083669222,0.1890156,0,0.082772947,0.19508151,0,0.078432808,0.19155374,0){0.017899958,0.018456454,0.017267031}; -ST(0.022183918,0.18487742,0,0.027586782,0.18282418,0,0.026781154,0.18834116,0){0.0058547995,0.0066297552,0.0069809105}; -ST(0.078522353,0.080042605,0,0.083812176,0.083170737,0,0.078894228,0.085673269,0){0.015007077,0.016304455,0.015745314}; -ST(0.027586782,0.18282418,0,0.032166514,0.1863502,0,0.026781154,0.18834116,0){0.0066297552,0.0078219415,0.0069809105}; -ST(0.02166044,0.19054668,0,0.022183918,0.18487742,0,0.026781154,0.18834116,0){0.006134172,0.0058547995,0.0069809105}; -ST(0.083309384,0.040170382,0,0.078113811,0.043235614,0,0.078343312,0.037688751,0){0.011126505,0.0107714,0.010332889}; -ST(0.0059669022,0.25108021,0,0.010704963,0.2547075,0,0.0053741268,0.25663281,0){0.003127184,0.0041360758,0.0030729489}; -ST(0.083812176,0.083170737,0,0.083077166,0.089272145,0,0.078894228,0.085673269,0){0.016304455,0.016912942,0.015745314}; -ST(0.0050703794,0.22750411,0,0.010057812,0.23068741,0,0.0049857357,0.23304427,0){0.0016282327,0.0022253758,0.0018422485}; -ST(0,0.23057917,0,0.0050703794,0.22750411,0,0.0049857357,0.23304427,0){0.0011094321,0.0016282327,0.0018422485}; -ST(0.010057812,0.23068741,0,0.014825475,0.22792118,0,0.014554238,0.23387563,0){0.0022253758,0.0025937878,0.003134429}; -ST(0.014825475,0.22792118,0,0.0193219,0.2311094,0,0.014554238,0.23387563,0){0.0025937878,0.0033259199,0.003134429}; -ST(0.026266704,0.19389286,0,0.02166044,0.19054668,0,0.026781154,0.18834116,0){0.0071802403,0.006134172,0.0069809105}; -}; diff --git a/tutorial/t1.geo b/tutorial/t1.geo deleted file mode 100644 index 818d1276494e846858a51897104412746b15e308..0000000000000000000000000000000000000000 --- a/tutorial/t1.geo +++ /dev/null @@ -1,106 +0,0 @@ -/********************************************************************* - * - * Gmsh tutorial 1 - * - * Variables, Elementary entities (Points, Lines, Surfaces), Physical - * entities (Points, Lines, Surfaces), Background mesh - * - *********************************************************************/ - -// All geometry description in Gmsh is made by means of a special -// language (looking somewhat similar to C). The simplest construction -// of this language is the 'affectation'. - -// The following command (all commands end with a semi colon) defines -// a variable called 'lc' and affects the value 0.007 to 'lc': - -lc = 0.007 ; - -// This newly created variable can be used to define the first Gmsh -// elementary entity, a 'Point'. A Point is defined by a list of four -// numbers: its three coordinates (x, y and z), and a characteristic -// length which sets the target mesh size at the point: - -Point(1) = {0, 0, 0, 9.e-1 * lc} ; - -// The mesh size is defined as the length of the segments for lines, -// the radii of the circumscribed circles for triangles and the radii -// of the circumscribed spheres for tetrahedra, respectively. The -// actual distribution of the mesh sizes is obtained by interpolation -// of the characteristic lengths prescribed at the points. There are -// also other possibilities to specify characteristic lengths: -// attractors (see t7.geo) and background meshes (see bgmesh.pos). - -// As can be seen in the previous definition, more complex expressions -// can be constructed from variables. Here, the product of the -// variable 'lc' by the constant 9.e-1 is given as the fourth argument -// of the list defining the point. -// -// The following general syntax rule is applied for the definition of -// all geometrical entities: -// -// "If a number defines a new entity, it is enclosed between -// parentheses. If a number refers to a previously defined entity, -// it is enclosed between braces." -// -// Three additional points are then defined: - -Point(2) = {.1, 0, 0, lc} ; -Point(3) = {.1, .3, 0, lc} ; -Point(4) = {0, .3, 0, lc} ; - -// The second elementary geometrical entity in Gmsh is the -// curve. Amongst curves, straight lines are the simplest. A straight -// line is defined by a list of point numbers. For example, line 1 -// starts at point 1 and ends at point 2: - -Line(1) = {1,2} ; -Line(2) = {3,2} ; -Line(3) = {3,4} ; -Line(4) = {4,1} ; - -// The third elementary entity is the surface. In order to define a -// simple rectangular surface from the four lines defined above, a -// line loop has first to be defined. A line loop is a list of -// connected lines, a sign being associated with each line (depending -// on the orientation of the line). - -Line Loop(5) = {4,1,-2,3} ; - -// The surface is then defined as a list of line loops (only one -// here): - -Plane Surface(6) = {5} ; - -// At this level, Gmsh knows everything to display the rectangular -// surface 6 and to mesh it. But a supplementary step is needed in -// order to assign region numbers to the various elements in the mesh -// (the points, the lines and the triangles discretizing points 1 to -// 4, lines 1 to 4 and surface 6). This is achieved by the definition -// of Physical entities. Physical entities will group elements -// belonging to several elementary entities by giving them a common -// number (a region number), and specifying their orientation. -// -// For example, the two points 1 and 2 can be grouped into the -// physical entity 1: - -Physical Point(1) = {1,2} ; - -// Consequently, two punctual elements will be saved in the output -// files, both with the region number 1. The mechanism is identical -// for line or surface elements: - -Physical Line(10) = {1,2,4} ; -Physical Surface(100) = {6} ; - -// All the line elements which will be created during the mesh of -// lines 1, 2 and 4 will be saved in the output file with the region -// number 10; and all the triangular elements resulting from the -// discretization of surface 6 will be given the region number 100. - -// It is important to notice that only those elements which belong to -// physical groups will be saved in the output file if the file format -// is the msh format (the native mesh file format for Gmsh). For a -// description of the mesh and post-processing formats, see the -// FORMATS file. - diff --git a/tutorial/t2.geo b/tutorial/t2.geo deleted file mode 100644 index 2284aa9b1a7dfb7c08cb084c367b682f18de7cbc..0000000000000000000000000000000000000000 --- a/tutorial/t2.geo +++ /dev/null @@ -1,86 +0,0 @@ -/********************************************************************* - * - * Gmsh tutorial 2 - * - * Includes, Geometrical transformations, Elementary entities - * (Volumes), Physical entities (Volumes) - * - *********************************************************************/ - -// The first tutorial file will serve as a basis to construct this -// one. It can be included with: - -Include "t1.geo" ; - -// There are several possibilities to build a more complex geometry -// from the one previously defined in 't1.geo'. -// -// New points, lines and surfaces can first be directly defined in the -// same way as in 't1.geo': - -Point(5) = {0, .4, 0, lc} ; -Line(5) = {4, 5} ; - -// But Gmsh also provides geometrical transformation mechanisms to -// move (translate, rotate, ...), add (translate, rotate, ...) or -// extrude (translate, rotate) elementary geometrical entities. For -// example, the point 3 can be moved by 0.05 units on the left with: - -Translate {-0.05,0,0} { Point{3} ; } - -// The resulting point can also be duplicated and translated by 0.1 -// along the y axis: - -Translate {0,0.1,0} { Duplicata{ Point{3} ; } } - -// Of course, translation, rotation and extrusion commands not only -// apply to points, but also to lines and surfaces. The following -// command extrudes surface 6 defined in 't1.geo', as well as a new -// surface 11, along the z axis by 'h': - -h = 0.12 ; -Extrude Surface { 6, {0, 0, h} } ; - -Line(7) = {3, 6} ; Line(8) = {6,5} ; Line Loop(10) = {5,-8,-7,3}; - -Plane Surface(11) = {10}; - -Extrude Surface { 11, {0, 0, h} } ; - -// All these geometrical transformations automatically generate new -// elementary entities. The following commands permit to specify -// manually a characteristic length for some of the automatically -// created points: - -Characteristic Length{6,22,2,3,16,12} = lc * 3 ; - -// If the transformation tools are handy to create complex geometries, -// it is sometimes useful to generate the flat geometry, consisting -// only of the explicit list elementary entities. This can be achieved -// by selecting the 'File->Save as->GEO flattened geometry' menu or -// by typing -// -// > gmsh t2.geo -0 -// -// on the command line. - -// Volumes are the fourth type of elementary entities in Gmsh. In the -// same way one defines line loops to build surfaces, one has to -// define surface loops to build volumes. The following volumes are -// very simple, without holes (and thus consist of only one surface -// loop): - -Surface Loop(145) = {121,11,131,135,139,144}; -Volume(146) = {145}; - -Surface Loop(146) = {121,6,109,113,117,122}; -Volume(147) = {146}; - -// To save all volumic (tetrahedral) elements of volume 146 and 147 -// with the associate region number 1, a Physical Volume must be -// defined: - -Physical Volume (1) = {146,147} ; - -// Congratulations! You've created your first fully unstructured -// tetrahedral 3D mesh! diff --git a/tutorial/t3.geo b/tutorial/t3.geo deleted file mode 100644 index d0ec626bc05463a77effbb4048f6b18bb8b64ac3..0000000000000000000000000000000000000000 --- a/tutorial/t3.geo +++ /dev/null @@ -1,71 +0,0 @@ -/********************************************************************* - * - * Gmsh tutorial 3 - * - * Extruded meshes, Options - * - *********************************************************************/ - -// Again, the first tutorial example is included: - -Include "t1.geo" ; - -// As in 't2.geo', an extrusion along the z axis will be performed: - -h = 0.1 ; - -// But contrary to 't2.geo', not only the geometry will be extruded, -// but also the 2D mesh. This is done with the same Extrude command, -// but by specifying the number of layers (here, there will be four -// layers, of respectively 8, 4, 2 and 1 elements in depth), with -// volume numbers 9000 to 9003 and respective heights equal to h/4: - -Extrude Surface { 6, {0,0,h} } { - Layers { {8,4,2,1}, {9000:9003}, {0.25,0.5,0.75,1} } ; -} ; - -// The extrusion can also be combined with a rotation, and the -// extruded 3D mesh can be recombined into prisms (wedges). All -// rotations are specified by an axis direction ({0,1,0}), an axis -// point ({0,0,0}) and a rotation angle (Pi/2): - -Extrude Surface { 122, {0,1,0} , {-0.1,0,0.1} , -Pi/2 } { - Recombine ; Layers { 7, 9004, 1 } ; -}; - -Physical Volume(101) = {9000:9004}; - -// All interactive options can also be set directly in the input file. -// For example, the following lines define a global characteristic -// length factor, redefine some background colors, disable the display -// of the axes, and select an initial viewpoint in XYZ mode (disabling -// the interactive trackball-like rotation mode): - -Mesh.CharacteristicLengthFactor = 4; -General.Color.Background = {120,120,120}; -General.Color.Foreground = {255,255,255}; -General.Color.Text = White; -Geometry.Color.Points = Orange; -General.Axes = 0; -General.Trackball = 0; -General.RotationX = 10; -General.RotationY = 70; -General.TranslationX = -0.1; - -// Note: all colors can be defined literally or numerically, i.e. -// 'General.Color.Background = Red' is equivalent to -// 'General.Color.Background = {255,0,0}'. As with user-defined -// variables, the options can be used either as right hand or left -// hand sides, so that - -Geometry.Color.Surfaces = Geometry.Color.Points; - -// will assign the color of the surfaces in the geometry to the same -// color as the points. - -// A click on the '?' button in the status bar of the graphic window -// will dump all current options to the terminal. To save all -// available options to a file, use the 'File->Save as->GEO complete -// options' menu. To save the current options as the default options -// for all future Gmsh sessions, use the 'Options->Save options now' -// menu. diff --git a/tutorial/t4.geo b/tutorial/t4.geo deleted file mode 100644 index c03610acc556d1a640cc36954c4f479f317e8f3c..0000000000000000000000000000000000000000 --- a/tutorial/t4.geo +++ /dev/null @@ -1,144 +0,0 @@ -/********************************************************************* - * - * Gmsh tutorial 4 - * - * Built-in functions, Holes - * - *********************************************************************/ - -cm = 1e-02 ; - -e1 = 4.5*cm ; e2 = 6*cm / 2 ; e3 = 5*cm / 2 ; - -h1 = 5*cm ; h2 = 10*cm ; h3 = 5*cm ; h4 = 2*cm ; h5 = 4.5*cm ; - -R1 = 1*cm ; R2 = 1.5*cm ; r = 1*cm ; - -ccos = ( -h5*R1 + e2 * Hypot(h5,Hypot(e2,R1)) ) / (h5^2 + e2^2) ; -ssin = Sqrt(1-ccos^2) ; - -Lc1 = 0.01 ; -Lc2 = 0.003 ; - -// A whole set of operators can be used, which can be combined in all -// the expressions. These operators are defined in a similar way to -// their C or C++ equivalents (with the exception of '^'): -// -// '-' (in both unary and binary versions, i.e. as in '-1' and '1-2') -// '!' (the negation) -// '+' -// '*' -// '/' -// '%' (the rest of the integer division) -// '<' -// '>' -// '<=' -// '>=' -// '==' -// '!=' -// '&&' (and) -// '||' (or) -// '||' (or) -// '^' (power) -// '?' ':' (the ternary operator) -// -// Grouping is done, as usual, with parentheses. -// -// In addition to these operators, all C mathematical functions can -// also be used (note the first capital letter): -// -// Exp(x) -// Log(x) -// Log10(x) -// Sqrt(x) -// Sin(x) -// Asin(x) -// Cos(x) -// Acos(x) -// Tan(x) -// Atan(x) -// Atan2(x,y) -// Sinh(x) -// Cosh(x) -// Tanh(x) -// Fabs(x) -// Floor(x) -// Ceil(x) -// Fmod(x,y) -// Hypot(x,y) - -// An additional function 'Rand(x)' generates a random number in [0,x] -// -// Rand(x) -// -// The only predefined constant in Gmsh is Pi. - -Point(1) = { -e1-e2, 0.0 , 0.0 , Lc1}; -Point(2) = { -e1-e2, h1 , 0.0 , Lc1}; -Point(3) = { -e3-r , h1 , 0.0 , Lc2}; -Point(4) = { -e3-r , h1+r , 0.0 , Lc2}; -Point(5) = { -e3 , h1+r , 0.0 , Lc2}; -Point(6) = { -e3 , h1+h2, 0.0 , Lc1}; -Point(7) = { e3 , h1+h2, 0.0 , Lc1}; -Point(8) = { e3 , h1+r , 0.0 , Lc2}; -Point(9) = { e3+r , h1+r , 0.0 , Lc2}; -Point(10)= { e3+r , h1 , 0.0 , Lc2}; -Point(11)= { e1+e2, h1 , 0.0 , Lc1}; -Point(12)= { e1+e2, 0.0 , 0.0 , Lc1}; -Point(13)= { e2 , 0.0 , 0.0 , Lc1}; - -Point(14)= { R1 / ssin , h5+R1*ccos, 0.0 , Lc2}; -Point(15)= { 0.0 , h5 , 0.0 , Lc2}; -Point(16)= { -R1 / ssin , h5+R1*ccos, 0.0 , Lc2}; -Point(17)= { -e2 , 0.0 , 0.0 , Lc1}; - -Point(18)= { -R2 , h1+h3 , 0.0 , Lc2}; -Point(19)= { -R2 , h1+h3+h4, 0.0 , Lc2}; -Point(20)= { 0.0 , h1+h3+h4, 0.0 , Lc2}; -Point(21)= { R2 , h1+h3+h4, 0.0 , Lc2}; -Point(22)= { R2 , h1+h3 , 0.0 , Lc2}; -Point(23)= { 0.0 , h1+h3 , 0.0 , Lc2}; - -Point(24)= { 0 , h1+h3+h4+R2, 0.0 , Lc2}; -Point(25)= { 0 , h1+h3-R2, 0.0 , Lc2}; - -Line(1) = {1 ,17}; -Line(2) = {17,16}; - -// All curves are not straight lines... Circles are defined by a list -// of three point numbers, which represent the starting point, the -// center and the end point, respectively. All circles have to be -// defined in the trigonometric (counter-clockwise) sense. Note that -// the 3 points should not be aligned (otherwise the plane in which -// the circle lies has to be defined, by 'Circle(num) = -// {start,center,end} Plane {nx,ny,nz}'). - -Circle(3) = {14,15,16}; -Line(4) = {14,13}; -Line(5) = {13,12}; -Line(6) = {12,11}; -Line(7) = {11,10}; -Circle(8) = { 8, 9,10}; -Line(9) = { 8, 7}; -Line(10) = { 7, 6}; -Line(11) = { 6, 5}; -Circle(12) = { 3, 4, 5}; -Line(13) = { 3, 2}; -Line(14) = { 2, 1}; -Line(15) = {18,19}; -Circle(16) = {21,20,24}; -Circle(17) = {24,20,19}; -Circle(18) = {18,23,25}; -Circle(19) = {25,23,22}; -Line(20) = {21,22}; - -Line Loop(21) = {17,-15,18,19,-20,16}; -Plane Surface(22) = {21}; - -// The surface is made of two line loops, i.e. it has one hole: - -Line Loop(23) = {11,-12,13,14,1,2,-3,4,5,6,7,-8,9,10}; -Plane Surface(24) = {23,21}; - -Physical Surface(1) = {22}; -Physical Surface(2) = {24}; diff --git a/tutorial/t5.geo b/tutorial/t5.geo deleted file mode 100644 index d29929551b92d2528a86caa6b2c0ac53d736d108..0000000000000000000000000000000000000000 --- a/tutorial/t5.geo +++ /dev/null @@ -1,170 +0,0 @@ -/********************************************************************* - * - * Gmsh tutorial 5 - * - * Characteristic lengths, Arrays of variables, Functions, Loops - * - *********************************************************************/ - -// This defines some characteristic lengths: - -lcar1 = .1; -lcar2 = .0005; -lcar3 = .075; - -// In order to change these lengths globally (without changing the -// file), a global scaling factor for all characteristic lengths can -// be specified on the command line with the option '-clscale'. For -// example, with: -// -// > gmsh t5 -clscale 1 -// -// this example produces a mesh of approximately 2000 nodes and -// 10,000 tetrahedra (in 3 seconds on an alpha workstation running at -// 666MHz). With -// -// > gmsh t5 -clscale 0.2 -// -// (i.e. with all characteristic lengths divided by 5), the mesh -// counts approximately 170,000 nodes and one million tetrahedra -// (and the computation takes 16 minutes on the same machine :-( So -// there is still a lot of work to do to achieve decent performance -// with Gmsh...) - -Point(1) = {0.5,0.5,0.5,lcar2}; Point(2) = {0.5,0.5,0,lcar1}; -Point(3) = {0,0.5,0.5,lcar1}; Point(4) = {0,0,0.5,lcar1}; -Point(5) = {0.5,0,0.5,lcar1}; Point(6) = {0.5,0,0,lcar1}; -Point(7) = {0,0.5,0,lcar1}; Point(8) = {0,1,0,lcar1}; -Point(9) = {1,1,0,lcar1}; Point(10) = {0,0,1,lcar1}; -Point(11) = {0,1,1,lcar1}; Point(12) = {1,1,1,lcar1}; -Point(13) = {1,0,1,lcar1}; Point(14) = {1,0,0,lcar1}; - -Line(1) = {8,9}; Line(2) = {9,12}; Line(3) = {12,11}; -Line(4) = {11,8}; Line(5) = {9,14}; Line(6) = {14,13}; -Line(7) = {13,12}; Line(8) = {11,10}; Line(9) = {10,13}; -Line(10) = {10,4}; Line(11) = {4,5}; Line(12) = {5,6}; -Line(13) = {6,2}; Line(14) = {2,1}; Line(15) = {1,3}; -Line(16) = {3,7}; Line(17) = {7,2}; Line(18) = {3,4}; -Line(19) = {5,1}; Line(20) = {7,8}; Line(21) = {6,14}; - -Line Loop(22) = {11,19,15,18}; Plane Surface(23) = {22}; -Line Loop(24) = {16,17,14,15}; Plane Surface(25) = {24}; -Line Loop(26) = {-17,20,1,5,-21,13}; Plane Surface(27) = {26}; -Line Loop(28) = {4,1,2,3}; Plane Surface(29) = {28}; -Line Loop(30) = {7,-2,5,6}; Plane Surface(31) = {30}; -Line Loop(32) = {6,-9,10,11,12,21}; Plane Surface(33) = {32}; -Line Loop(34) = {7,3,8,9}; Plane Surface(35) = {34}; -Line Loop(36) = {10,-18,16,20,-4,8}; Plane Surface(37) = {36}; -Line Loop(38) = {-14,-13,-12,19}; Plane Surface(39) = {38}; - -// Instead of using included files, one can also define functions. In -// the following function, the reserved variable 'newp' is used, which -// automatically selects a new point number. This number is chosen as -// the highest current point number, plus one. Analogously to 'newp', -// there exists a variable 'newreg' which selects the highest number -// of all entities other than points, plus one. - -// Note: there are no local variables. This will be changed in a -// future version of Gmsh. - -Function CheeseHole - - p1 = newp; Point(p1) = {x, y, z, lcar3} ; - p2 = newp; Point(p2) = {x+r,y, z, lcar3} ; - p3 = newp; Point(p3) = {x, y+r,z, lcar3} ; - p4 = newp; Point(p4) = {x, y, z+r,lcar3} ; - p5 = newp; Point(p5) = {x-r,y, z, lcar3} ; - p6 = newp; Point(p6) = {x, y-r,z, lcar3} ; - p7 = newp; Point(p7) = {x, y, z-r,lcar3} ; - - c1 = newreg; Circle(c1) = {p2,p1,p7}; - c2 = newreg; Circle(c2) = {p7,p1,p5}; - c3 = newreg; Circle(c3) = {p5,p1,p4}; - c4 = newreg; Circle(c4) = {p4,p1,p2}; - c5 = newreg; Circle(c5) = {p2,p1,p3}; - c6 = newreg; Circle(c6) = {p3,p1,p5}; - c7 = newreg; Circle(c7) = {p5,p1,p6}; - c8 = newreg; Circle(c8) = {p6,p1,p2}; - c9 = newreg; Circle(c9) = {p7,p1,p3}; - c10 = newreg; Circle(c10) = {p3,p1,p4}; - c11 = newreg; Circle(c11) = {p4,p1,p6}; - c12 = newreg; Circle(c12) = {p6,p1,p7}; - -// All surfaces are not plane... Here is the way to define ruled -// surfaces (which have 3 or 4 borders): - - l1 = newreg; Line Loop(l1) = {c5,c10,c4}; Ruled Surface(newreg) = {l1}; - l2 = newreg; Line Loop(l2) = {c9,-c5,c1}; Ruled Surface(newreg) = {l2}; - l3 = newreg; Line Loop(l3) = {-c12,c8,c1}; Ruled Surface(newreg) = {l3}; - l4 = newreg; Line Loop(l4) = {c8,-c4,c11}; Ruled Surface(newreg) = {l4}; - l5 = newreg; Line Loop(l5) = {-c10,c6,c3}; Ruled Surface(newreg) = {l5}; - l6 = newreg; Line Loop(l6) = {-c11,-c3,c7}; Ruled Surface(newreg) = {l6}; - l7 = newreg; Line Loop(l7) = {c2,c7,c12}; Ruled Surface(newreg) = {l7}; - l8 = newreg; Line Loop(l8) = {-c6,-c9,c2}; Ruled Surface(newreg) = {l8}; - -// Arrays of variables can be manipulated in the same way as classical -// variables. Warning: accessing an uninitialized element in an array -// will produce an unpredictable result. Note that whole arrays can -// also be instantly initialized (e.g. l[]={1,2,7} is valid). - - theloops[t] = newreg ; - - Surface Loop(theloops[t]) = {l8+1, l5+1, l1+1, l2+1, -(l3+1), -(l7+1), l6+1, l4+1}; - - thehole = newreg ; - Volume(thehole) = theloops[t] ; - -Return - - -x = 0 ; y = 0.75 ; z = 0 ; r = 0.09 ; - -// A For loop is used to generate five holes in the cube: - -For t In {1:5} - - x += 0.166 ; - z += 0.166 ; - -// This command calls the function CheeseHole. Note that, instead of -// defining a function, we could have defined a file containing the -// same code, and used the Include command to include this file. - - Call CheeseHole ; - -// A physical volume is defined for each cheese hole - - Physical Volume (t) = thehole ; - -// The Printf function permits to print the value of variables on the -// terminal, in a way similar to the 'printf' C function: - - Printf("The cheese hole %g (center = {%g,%g,%g}, radius = %g) has number %g!", - t, x, y, z, r, thehole) ; - -// Note: All Gmsh variables are treated internally as double precision -// numbers. The format string should thus only contain valid double -// precision number format specifiers (see the C or C++ language -// reference for more details). - -EndFor - -// This is the surface loop for the exterior surface of the cube: - -theloops[0] = newreg ; - -Surface Loop(theloops[0]) = {35,31,29,37,33,23,39,25,27} ; - -// The volume of the cube, without the 5 cheese holes, is defined by 6 -// surface loops (the exterior surface and the five interior loops). -// To reference an array of variables, its identifier is followed by -// '[]': - -Volume(186) = {theloops[]} ; - -// This physical volume assigns the region number 10 to the tetrahedra -// paving the cube (but not the holes, whose elements were tagged from -// 1 to 5 in the 'For' loop) - -Physical Volume (10) = 186 ; - diff --git a/tutorial/t6.geo b/tutorial/t6.geo deleted file mode 100644 index 8396da920aa4613758353efc774c57718656dd1c..0000000000000000000000000000000000000000 --- a/tutorial/t6.geo +++ /dev/null @@ -1,240 +0,0 @@ -/********************************************************************* - * - * Gmsh tutorial 6 - * - * Transfinite meshes - * - *********************************************************************/ - -r_int = 0.05 ; -r_ext = 0.051 ; -r_far = 0.125 ; -r_inf = 0.4 ; -phi1 = 30. * (Pi/180.) ; -angl = 45. * (Pi/180.) ; - -nbpt_phi = 5 ; nbpt_int = 20 ; -nbpt_arc1 = 10 ; nbpt_arc2 = 10 ; -nbpt_shell = 10 ; nbpt_far = 25 ; nbpt_inf = 15 ; - -lc0 = 0.1 ; lc1 = 0.1 ; lc2 = 0.3 ; - -Point(1) = {0, 0, 0, lc0} ; -Point(2) = {r_int, 0, 0, lc0} ; -Point(3) = {r_ext, 0, 0, lc1} ; -Point(4) = {r_far, 0, 0, lc2} ; -Point(5) = {r_inf, 0, 0, lc2} ; -Point(6) = {0, 0, r_int, lc0} ; -Point(7) = {0, 0, r_ext, lc1} ; -Point(8) = {0, 0, r_far, lc2} ; -Point(9) = {0, 0, r_inf, lc2} ; - -Point(10) = {r_int*Cos(phi1), r_int*Sin(phi1), 0, lc0} ; -Point(11) = {r_ext*Cos(phi1), r_ext*Sin(phi1), 0, lc1} ; -Point(12) = {r_far*Cos(phi1), r_far*Sin(phi1), 0, lc2} ; -Point(13) = {r_inf*Cos(phi1), r_inf*Sin(phi1), 0, lc2} ; - -Point(14) = {r_int/2, 0, 0, lc2} ; -Point(15) = {r_int/2*Cos(phi1), r_int/2*Sin(phi1), 0, lc2} ; -Point(16) = {r_int/2, 0, r_int/2, lc2} ; -Point(17) = {r_int/2*Cos(phi1), r_int/2*Sin(phi1), r_int/2, lc2} ; -Point(18) = {0, 0, r_int/2, lc2} ; -Point(19) = {r_int*Cos(angl), 0, r_int*Sin(angl), lc2} ; -Point(20) = {r_int*Cos(angl)*Cos(phi1), r_int*Cos(angl)*Sin(phi1), r_int*Sin(angl), lc2} ; -Point(21) = {r_ext*Cos(angl), 0, r_ext*Sin(angl), lc2} ; -Point(22) = {r_ext*Cos(angl)*Cos(phi1), r_ext*Cos(angl)*Sin(phi1), r_ext*Sin(angl), lc2} ; -Point(23) = {r_far*Cos(angl), 0, r_far*Sin(angl), lc2} ; -Point(24) = {r_far*Cos(angl)*Cos(phi1), r_far*Cos(angl)*Sin(phi1), r_far*Sin(angl), lc2} ; -Point(25) = {r_inf, 0, r_inf, lc2} ; -Point(26) = {r_inf*Cos(phi1), r_inf*Sin(phi1), r_inf, lc2} ; - -Circle(1) = {2,1,19}; Circle(2) = {19,1,6}; Circle(3) = {3,1,21}; -Circle(4) = {21,1,7}; Circle(5) = {4,1,23}; Circle(6) = {23,1,8}; -Line(7) = {5,25}; Line(8) = {25,9}; -Circle(9) = {10,1,20}; Circle(10) = {20,1,6}; Circle(11) = {11,1,22}; -Circle(12) = {22,1,7}; Circle(13) = {12,1,24}; Circle(14) = {24,1,8}; -Line(15) = {13,26}; Line(16) = {26,9}; -Circle(17) = {19,1,20}; Circle(18) = {21,1,22}; Circle(19) = {23,1,24}; -Circle(20) = {25,1,26}; Circle(21) = {2,1,10}; Circle(22) = {3,1,11}; -Circle(23) = {4,1,12}; Circle(24) = {5,1,13}; - -Line(25) = {1,14}; Line(26) = {14,2}; Line(27) = {2,3}; Line(28) = {3,4}; -Line(29) = {4,5}; Line(30) = {1,15}; Line(31) = {15,10}; Line(32) = {10,11}; -Line(33) = {11,12}; Line(34) = {12,13}; Line(35) = {14,15}; Line(36) = {14,16}; -Line(37) = {15,17}; Line(38) = {16,17}; Line(39) = {18,16}; Line(40) = {18,17}; -Line(41) = {1,18}; Line(42) = {18,6}; Line(43) = {6,7}; Line(44) = {16,19}; -Line(45) = {19,21}; Line(46) = {21,23}; Line(47) = {23,25}; Line(48) = {17,20}; -Line(49) = {20,22}; Line(50) = {22,24}; Line(51) = {24,26}; Line(52) = {7,8}; -Line(53) = {8,9}; - -Line Loop(54) = {39,-36,-25,41}; Ruled Surface(55) = {54}; -Line Loop(56) = {44,-1,-26,36}; Ruled Surface(57) = {56}; -Line Loop(58) = {3,-45,-1,27}; Ruled Surface(59) = {58}; -Line Loop(60) = {5,-46,-3,28}; Ruled Surface(61) = {60}; -Line Loop(62) = {7,-47,-5,29}; Ruled Surface(63) = {62}; -Line Loop(64) = {-2,-44,-39,42}; Ruled Surface(65) = {64}; -Line Loop(66) = {-4,-45,2,43}; Ruled Surface(67) = {66}; -Line Loop(68) = {-6,-46,4,52}; Ruled Surface(69) = {68}; -Line Loop(70) = {-8,-47,6,53}; Ruled Surface(71) = {70}; -Line Loop(72) = {-40,-41,30,37}; Ruled Surface(73) = {72}; -Line Loop(74) = {48,-9,-31,37}; Ruled Surface(75) = {74}; -Line Loop(76) = {49,-11,-32,9}; Ruled Surface(77) = {76}; -Line Loop(78) = {-50,-11,33,13}; Ruled Surface(79) = {78}; -Line Loop(80) = {-51,-13,34,15}; Ruled Surface(81) = {80}; -Line Loop(82) = {10,-42,40,48}; Ruled Surface(83) = {82}; -Line Loop(84) = {12,-43,-10,49}; Ruled Surface(85) = {84}; -Line Loop(86) = {14,-52,-12,50}; Ruled Surface(87) = {86}; -Line Loop(88) = {16,-53,-14,51}; Ruled Surface(89) = {88}; -Line Loop(90) = {-30,25,35}; Ruled Surface(91) = {90}; -Line Loop(92) = {-40,39,38}; Ruled Surface(93) = {92}; -Line Loop(94) = {37,-38,-36,35}; Ruled Surface(95) = {94}; -Line Loop(96) = {-48,-38,44,17}; Ruled Surface(97) = {96}; -Line Loop(98) = {18,-49,-17,45}; Ruled Surface(99) = {98}; -Line Loop(100) = {19,-50,-18,46}; Ruled Surface(101) = {100}; -Line Loop(102) = {20,-51,-19,47}; Ruled Surface(103) = {102}; -Line Loop(104) = {-2,17,10}; Ruled Surface(105) = {104}; -Line Loop(106) = {-9,-21,1,17}; Ruled Surface(107) = {106}; -Line Loop(108) = {-4,18,12}; Ruled Surface(109) = {108}; -Line Loop(110) = {-11,-22,3,18}; Ruled Surface(111) = {110}; -Line Loop(112) = {-13,-23,5,19}; Ruled Surface(113) = {112}; -Line Loop(114) = {-6,19,14}; Ruled Surface(115) = {114}; -Line Loop(116) = {-15,-24,7,20}; Ruled Surface(117) = {116}; -Line Loop(118) = {-8,20,16}; Ruled Surface(119) = {118}; -Line Loop(120) = {-31,-35,26,21}; Ruled Surface(121) = {120}; -Line Loop(122) = {32,-22,-27,21}; Ruled Surface(123) = {122}; -Line Loop(124) = {33,-23,-28,22}; Ruled Surface(125) = {124}; -Line Loop(126) = {34,-24,-29,23}; Ruled Surface(127) = {126}; - -Surface Loop(128) = {93,-73,-55,95,-91}; Volume(129) = {128}; // int -Surface Loop(130) = {107,-75,-97,95,57,121}; Volume(131) = {130}; // int b -Surface Loop(132) = {105,-65,-97,-83,-93}; Volume(133) = {132}; // int h -Surface Loop(134) = {99,-111,77,123,59,107}; Volume(135) = {134}; // shell b -Surface Loop(136) = {99,-109,67,105,85}; Volume(137) = {136}; // shell h -Surface Loop(138) = {113,79,-101,-111,-125,-61}; Volume(139) = {138}; // ext b -Surface Loop(140) = {115,-69,-101,-87,-109}; Volume(141) = {140}; // ext h -Surface Loop(142) = {103,-117,-81,113,127,63}; Volume(143) = {142}; // inf b -Surface Loop(144) = {89,-119,71,103,115}; Volume(145) = {144}; // inf h - -// Transfinite line commands explicitly specify the number of points -// and their distribution. A minus sign in the argument list of the -// transfinite command will produce the reversed mesh. - -Transfinite Line{35,21,22,23,24,38,17,18,19,20} = nbpt_phi ; -Transfinite Line{31,26,48,44,42} = nbpt_int Using Progression 0.95; -Transfinite Line{41,37,36,9,11,1,3,13,5,15,7} = nbpt_arc1 ; -Transfinite Line{30,25,40,39,10,2,12,4,14,6,16,8} = nbpt_arc2 ; -Transfinite Line{32,27,49,45,43} = nbpt_shell ; -Transfinite Line{33,28,46,50,52} = nbpt_far Using Progression 1.05 ; -Transfinite Line{34,29,51,47,53} = nbpt_inf Using Progression 0.01; - -// *All* 2D and 3D transfinite entities are defined in respect to -// points. The ordering of the points defines the ordering of the mesh -// elements. - -Transfinite Surface{55} = {1,14,16,18}; -Transfinite Surface{57} = {14,2,19,16}; -Transfinite Surface{59} = {2,3,21,19}; -Transfinite Surface{61} = {3,4,23,21}; -Transfinite Surface{63} = {4,5,25,23}; -Transfinite Surface{73} = {1,15,17,18}; -Transfinite Surface{75} = {15,10,20,17}; -Transfinite Surface{77} = {10,11,22,20}; -Transfinite Surface{79} = {11,12,24,22}; -Transfinite Surface{81} = {12,13,26,24}; -Transfinite Surface{65} = {18,16,19,6}; -Transfinite Surface{67} = {6,19,21,7}; -Transfinite Surface{69} = {7,21,23,8}; -Transfinite Surface{71} = {8,23,25,9}; -Transfinite Surface{83} = {17,18,6,20}; -Transfinite Surface{85} = {20,6,7,22}; -Transfinite Surface{87} = {22,7,8,24}; -Transfinite Surface{89} = {24,8,9,26}; -Transfinite Surface{91} = {1,14,15}; -Transfinite Surface{95} = {15,14,16,17}; -Transfinite Surface{93} = {18,16,17}; -Transfinite Surface{121} = {15,14,2,10}; -Transfinite Surface{97} = {17,16,19,20}; -Transfinite Surface{123} = {10,2,3,11}; -Transfinite Surface{99} = {20,19,21,22}; -Transfinite Surface{107} = {10,2,19,20}; -Transfinite Surface{105} = {6,20,19}; -Transfinite Surface{109} = {7,22,21}; -Transfinite Surface{111} = {11,3,21,22}; -Transfinite Surface{101} = {22,21,23,24}; -Transfinite Surface{125} = {11,3,4,12}; -Transfinite Surface{115} = {8,24,23}; -Transfinite Surface{113} = {24,12,4,23}; -Transfinite Surface{127} = {12,13,5,4}; -Transfinite Surface{103} = {24,23,25,26}; -Transfinite Surface{119} = {9,26,25}; -Transfinite Surface{117} = {13,5,25,26}; - -// As with Extruded meshes, the Recombine command tells Gmsh to -// recombine the simplices into quadrangles, prisms or hexahedra when -// possible. A colon in a list acts as in the 'For' loop: all surfaces -// having numbers between 55 and 127 are considered. - -Recombine Surface {55:127}; - -// *All* 2D and 3D transfinite entities are defined in respect to -// points. The ordering of the points defines the ordering of the mesh -// elements. - -Transfinite Volume{129} = {1,14,15,18,16,17}; -Transfinite Volume{131} = {17,16,14,15,20,19,2,10}; -Transfinite Volume{133} = {18,17,16,6,20,19}; -Transfinite Volume{135} = {10,2,19,20,11,3,21,22}; -Transfinite Volume{137} = {6,20,19,7,22,21}; -Transfinite Volume{139} = {11,3,4,12,22,21,23,24}; -Transfinite Volume{141} = {7,22,21,8,24,23}; -Transfinite Volume{143} = {12,4,5,13,24,23,25,26}; -Transfinite Volume{145} = {8,24,23,9,26,25}; - -VolInt = 1000 ; -SurfIntPhi0 = 1001 ; -SurfIntPhi1 = 1002 ; -SurfIntZ0 = 1003 ; - -VolShell = 2000 ; -SurfShellInt = 2001 ; -SurfShellExt = 2002 ; -SurfShellPhi0 = 2003 ; -SurfShellPhi1 = 2004 ; -SurfShellZ0 = 2005 ; -LineShellIntPhi0 = 2006 ; -LineShellIntPhi1 = 2007 ; -LineShellIntZ0 = 2008 ; -PointShellInt = 2009 ; - -VolExt = 3000 ; -VolInf = 3001 ; -SurfInf = 3002 ; -SurfExtInfPhi0 = 3003 ; -SurfExtInfPhi1 = 3004 ; -SurfExtInfZ0 = 3005 ; -SurfInfRight = 3006 ; -SurfInfTop = 3007 ; - -Physical Volume (VolInt) = {129,131,133} ; -Physical Surface (SurfIntPhi0) = {55,57,65} ; -Physical Surface (SurfIntPhi1) = {73,75,83} ; -Physical Surface (SurfIntZ0) = {91,121} ; - -Physical Volume (VolShell) = {135,137} ; -Physical Surface (SurfShellInt) = {105,107} ; -Physical Surface (SurfShellExt) = {109,111} ; -Physical Surface (SurfShellPhi0) = {59,67} ; -Physical Surface (SurfShellPhi1) = {77,85} ; -Physical Surface (SurfShellZ0) = {123} ; -Physical Line (LineShellIntPhi0) = {1,2} ; -Physical Line (LineShellIntPhi1) = {9,10} ; -Physical Line (LineShellIntZ0) = 21 ; -Physical Point (PointShellInt) = 6 ; - -Physical Volume (VolExt) = {139,141} ; -Physical Volume (VolInf) = {143,145} ; -Physical Surface (SurfExtInfPhi0) = {61,63,69,71} ; -Physical Surface (SurfExtInfPhi1) = {79,87,81,89} ; -Physical Surface (SurfExtInfZ0) = {125,127} ; -Physical Surface (SurfInfRight) = {117} ; -Physical Surface (SurfInfTop) = {119} ; diff --git a/tutorial/t7.geo b/tutorial/t7.geo deleted file mode 100644 index fba2dadcd7e5c0499f10577274682895b02e3ee6..0000000000000000000000000000000000000000 --- a/tutorial/t7.geo +++ /dev/null @@ -1,42 +0,0 @@ -/********************************************************************* - * - * Gmsh tutorial 7 - * - * Anisotropic meshes, Attractors - * - *********************************************************************/ - -// The new anisotropic 2D mesh generator can be selected with: - -Mesh.Algorithm = 2 ; - -// One can force a 4 step Laplacian smoothing of the mesh with: - -Mesh.Smoothing = 4 ; - -lc = .1; - -Point(1) = {0.0,0.0,0,lc}; -Point(2) = {1,0.0,0,lc}; -Point(3) = {1,1,0,lc}; -Point(4) = {0,1,0,lc}; - -Line(1) = {3,2}; -Line(2) = {2,1}; -Line(3) = {1,4}; -Line(4) = {4,3}; - -Line Loop(5) = {1,2,3,4}; -Plane Surface(6) = {5}; - -Point(5) = {0.1,0.2,0,lc}; -Point(11) = {0.5,0.5,-1,lc}; -Point(22) = {0.6,0.6,1,lc}; - -Line(5) = {11,22}; - -// Anisotropic attractors can be defined on points and lines: - -Attractor Line{5} = {.1, 0.01, 17}; - -Attractor Line{1,2} = {0.1, 0.005, 3}; diff --git a/tutorial/t8.geo b/tutorial/t8.geo deleted file mode 100644 index fe7dff2cf382f5ef2c1774b70e3f8faf2c073c39..0000000000000000000000000000000000000000 --- a/tutorial/t8.geo +++ /dev/null @@ -1,109 +0,0 @@ -/********************************************************************* - * - * Gmsh tutorial 8 - * - * Post-Processing, Scripting, Animations, Options - * - *********************************************************************/ - -// The first example is included, as well as two post-processing maps -// (for the format of the post-processing maps, see the FORMATS file): - -Include "t1.geo" ; -Include "view1.pos" ; -Include "view1.pos" ; - -// Some general options are set (all the options specified -// interactively can be directly specified in the ascii input -// files. The current options can be saved into a file by selecting -// 'File->Save as->GEO complete options')... - -General.Trackball = 0 ; -General.RotationX = 0 ; -General.RotationY = 0 ; -General.RotationZ = 0 ; -General.Color.Background = White ; -General.Color.Text = Black ; -General.Orthographic = 0 ; -General.Axes = 0 ; - -// ...as well as some options for each post-processing view... - -View[0].Name = "This is a very stupid demonstration..." ; -View[0].IntervalsType = 2 ; -View[0].OffsetZ = 0.05 ; -View[0].RaiseZ = 0 ; -View[0].Light = 1 ; - -View[1].Name = "...of Gmsh's scripting capabilities" ; -View[1].IntervalsType = 1 ; -View[1].ColorTable = { Green, Blue } ; -View[1].NbIso = 10 ; - -// ...and loop from 1 to 255 with a step of 1 is performed (to use a -// step different from 1, just add a third argument in the list, -// e.g. 'For num In {0.5:1.5:0.1}' increments num from 0.5 to 1.5 with -// a step of 0.1): - -t = 0 ; - -For num In {1:255} - - View[0].TimeStep = t ; - View[1].TimeStep = t ; - - t = (View[0].TimeStep < View[0].NbTimeStep-1) ? t+1 : 0 ; - - View[0].RaiseZ += 0.01*t ; - - If (num == 3) - // We want to use mpeg_encode to create a nice 320x240 animation - // for all frames when num==3: - General.GraphicsWidth = 320 ; - General.GraphicsHeight = 240 ; - EndIf - - // It is possible to nest loops: - - For num2 In {1:50} - - General.RotationX += 10 ; - General.RotationY = General.RotationX / 3 ; - General.RotationZ += 0.1 ; - - Sleep 0.01; // sleep for 0.01 second - Draw; // draw the scene - - If ((num == 3) && (num2 < 10)) - // The Sprintf function permits to create complex strings using - // variables (since all Gmsh variables are treated internally as - // double precision numbers, the format should only contain valid - // double precision number format specifiers): - Print Sprintf("t8-0%g.jpg", num2); - EndIf - - If ((num == 3) && (num2 >= 10)) - Print Sprintf("t8-%g.jpg", num2); - EndIf - - EndFor - - If(num == 3) - // We make a system call to generate the mpeg - System "mpeg_encode t8.par" ; - EndIf - -EndFor - - -// Here is the list of available scripting commands: -// -// Merge string; (to merge a file) -// Draw; (to draw the scene) -// Mesh int; (to perform the mesh generation; 'int' = 0, 1, 2 or 3) -// Save string; (to save the mesh) -// Print string; (to print the graphic window) -// Sleep expr; (to sleep during expr seconds) -// Delete View[int]; (to free the view int) -// Delete Meshes; (to free all meshes) -// System string; (to execute a system call) diff --git a/tutorial/t8.par b/tutorial/t8.par deleted file mode 100644 index b557546775f6b4b8717883cb41cf6dc731818ca0..0000000000000000000000000000000000000000 --- a/tutorial/t8.par +++ /dev/null @@ -1,36 +0,0 @@ -# -# parameter file for mpeg_encode -# - -PATTERN I -# PATTERN IB -# PATTERN IBBBP -# PATTERN IBBPBBPBBPBBPBB - -BASE_FILE_FORMAT JPEG -# BASE_FILE_FORMAT PPM -# BASE_FILE_FORMAT YUV -# YUV_SIZE 320x240 - -GOP_SIZE 30 -SLICES_PER_FRAME 1 -PIXEL HALF -RANGE 10 -PSEARCH_ALG TWOLEVEL -# PSEARCH_ALG LOGARITHMIC -BSEARCH_ALG CROSS2 -IQSCALE 8 -PQSCALE 10 -BQSCALE 25 -REFERENCE_FRAME ORIGINAL - -OUTPUT t8.mpg - -INPUT_CONVERT * -INPUT_DIR . -INPUT -t8-*.jpg [01-50] -# t8-*.ppm [01-50] -# t8-*.yuv [01-50] -END_INPUT - diff --git a/tutorial/t9.geo b/tutorial/t9.geo deleted file mode 100644 index b038d3b9d50f80203ff0a2612a58e5bc405720e4..0000000000000000000000000000000000000000 --- a/tutorial/t9.geo +++ /dev/null @@ -1,49 +0,0 @@ -/********************************************************************* - * - * Gmsh tutorial 9 - * - * Post-Processing, Plugins - * - *********************************************************************/ - -// Plugins can be added to Gmsh in order to extend its -// capabilities. For example, post-processing plugins can modify a -// view, or create a new view based on previously loaded -// views. Several default plugins are statically linked into Gmsh, -// e.g. CutMap, CutPlane, CutSphere, Skin, Transform or Smooth. - -// Let's load a three-dimensional scalar view - -Include "view3.pos" ; - -// Plugins can be controlled as other options in Gmsh. For example, -// the CutMap plugin extracts an isovalue surface from a 3D scalar -// view. The plugin can either be called from the graphical interface -// (right click on the view button, then Plugins->CutMap), or from -// the command file, as is shown below. - -// This sets the optional parameter A of the CutMap plugin to the -// value 0.67 (see the About in the graphical interface for the -// documentation of each plugin), and runs the plugin: - -Plugin(CutMap).A = 0.67 ; -Plugin(CutMap).iView = 0 ; //select View[0] as the working view -Plugin(CutMap).Run ; - -// The following runs the CutPlane plugin: - -Plugin(CutPlane).A = 0 ; -Plugin(CutPlane).B = 0.2 ; -Plugin(CutPlane).C = 1 ; -Plugin(CutPlane).D = 0 ; -Plugin(CutPlane).Run ; - -View[0].Light = 1; -View[0].IntervalsType = 2; -View[0].NbIso = 6; -View[0].SmoothNormals = 1; - -View[1].IntervalsType = 2; - -View[2].IntervalsType = 2; -Draw; diff --git a/tutorial/tutorial.html b/tutorial/tutorial.html deleted file mode 100644 index 26551762a2d81578ac10526944f43c7749f703ca..0000000000000000000000000000000000000000 --- a/tutorial/tutorial.html +++ /dev/null @@ -1,1206 +0,0 @@ -<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN"> -<HTML> -<HEAD> -<TITLE>Enscript Output</TITLE> -</HEAD> -<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#1F00FF" ALINK="#FF0000" VLINK="#9900DD"> -<A NAME="top"> -<H1>Contents</H1> -<OL> - <LI><A HREF="#file1">README</A> - <LI><A HREF="#file2">t1.geo</A> - <LI><A HREF="#file3">t2.geo</A> - <LI><A HREF="#file4">t3.geo</A> - <LI><A HREF="#file5">t4.geo</A> - <LI><A HREF="#file6">t5.geo</A> - <LI><A HREF="#file7">t6.geo</A> - <LI><A HREF="#file8">t7.geo</A> - <LI><A HREF="#file9">t8.geo</A> - <LI><A HREF="#file10">t9.geo</A> -</OL> -<HR> -<A NAME="file1"> -<H1>README 1/10</H1> -[<A HREF="#top">top</A>][prev][<A HREF="#file2">next</A>] -<PRE> -$Id: tutorial.html,v 1.18 2001-08-12 12:31:38 geuzaine Exp $ - -Here are the examples in the Gmsh tutorial. These examples are -commented (both C and C++-style comments can be used in Gmsh input -files) and should introduce new features gradually, starting with -t1.geo. - -[NOTE: This tutorial does not explain the mesh and post-processing -file formats. See the FORMATS file for this.] - -There are two ways to actually run these examples with Gmsh. (The -operations to run Gmsh may vary according to your operating system. In -the folowing examples, we will assume that you're working with a -UNIX-like shell.) The first working mode of Gmsh is the interactive -graphical mode. To launch Gmsh in interactive mode, just type - -> gmsh - -at the prompt on the command line. This will open two windows: the -graphic window (with a status bar at the bottom) and the menu window -(with a menu bar and some context dependent buttons). To open the -first tutorial file, select the 'File->Open' menu, and choose 't1.geo' -in the input field. To perform the mesh generation, go to the mesh -module (by selecting 'Mesh' in the module menu) and choose the -required dimension in the context-dependent buttons ('1D' will mesh -all the curves; '2D' will mesh all the surfaces ---as well as all the -curves if '1D' was not called before; '3D' will mesh all the volumes ----and all the surfaces if '2D' was not called before). To save the -resulting mesh in the current mesh format, choose 'Save' in the -context-dependent buttons, or select the appropriate format with the -'File->Save as' menu. The default mesh file name is based on the name -of the first input file on the command line (or 'unnamed' if there -wasn't any input file given), with an appended extension depending on -the mesh format. - -[NOTE: Nearly all the interactive commands have shortcuts. Select -'Help->Shortcuts' in the menu bar to learn about these shortcuts.] - -Instead of opening the tutorial with the 'File->Open' menu, it is -often more convenient to put the file name on the command line, for -example with: - -> gmsh t1.geo - -[NOTE: The '.geo' extension can also be omitted.] - -[NOTE: Even if it is often handy to define the variables and the points -directly in the input files (you may use any text editor for this -purpose, e.g. Wordpad on Windows, or Emacs on Unix), it is almost -always more simple to define the curves, the surfaces and the volumes -interactively. To do so, just follow the context dependent buttons in -the Geometry module. For example, to create a line, select 'Geometry' -in the module menu, and then select 'Elementary, Add, Create, -Line'. You will then be asked (in the status bar of the graphic -window) to select a list of points, and to click 'e' to finish the -selection (or 'q' to abort it). Once the interactive command is -completed, a string is automatically added at the end of the currently -opened project file.] - -The second operating mode for Gmsh is the non-interactive mode. In -this mode, there is no graphical user interface, and all operations -are performed without any interaction. To mesh the first tutorial in -non-interactive mode, just type: - -> gmsh t1.geo -2 - -To mesh the same example, but with the backgound mesh available in the -file 'bgmesh.pos', just type: - -> gmsh t1.geo -2 -bgm bgmesh.pos - -[NOTE: You should read the notes in the file 'bgmesh.pos' if you -intend to use background meshes.] - -Several files can be loaded simultaneously in Gmsh. The first one -defines the project, while the others are appended ("merged") to this -project. You can merge such files with the 'File->Merge' menu, or by -directly specifying the names of the files on the command line. This -is most useful for post-processing purposes. For example, to merge the -post-processing views contained in the files 'view1.pos' and -'view2.pos' together with the first tutorial 't1.geo', you can type -the following line on the command line: - -> gmsh t1.geo view1.pos view2.pos - -In the Post-Processing module (select 'Post_Processing' in the module -menu), two view buttons will appear, respectively labeled "a scalar -map" and "a vector map". A left mouse click toggles the visibility of -the selected view. A right mouse click provides access to the view's -options. If you want the modifications made to one view to affect also -all the other views, select the 'Apply next changes to all views' or -'Force same options for all views' option in the -'Options->Post-processing' menu. - -[NOTE: All the options specified interactively can also be directly -specified in the ascii input files. All available options, with their -current values, can be saved into a file by selecting 'File->Save -as->GEO complete options', or simply viewed by pressing the '?' button -in the status bar. To save the current options as your default -preferences for all future Gmsh sessions, use the 'Options->Save -options now' menu.] - - -OK, that's all, folks. Enjoy the tutorial. - -</PRE> -<HR> -<A NAME="file2"> -<H1>t1.geo 2/10</H1> -[<A HREF="#top">top</A>][<A HREF="#file1">prev</A>][<A HREF="#file3">next</A>] -<PRE> -<I><FONT COLOR="#B22222">/********************************************************************* - * - * Gmsh tutorial 1 - * - * Variables, Elementary entities (Points, Lines, Surfaces), Physical - * entities (Points, Lines, Surfaces), Background mesh - * - *********************************************************************/</FONT></I> - -<I><FONT COLOR="#B22222">// All geometry description in Gmsh is made by means of a special -</FONT></I><I><FONT COLOR="#B22222">// language (looking somewhat similar to C). The simplest construction -</FONT></I><I><FONT COLOR="#B22222">// of this language is the 'affectation'. -</FONT></I> -<I><FONT COLOR="#B22222">// The following command (all commands end with a semi colon) defines -</FONT></I><I><FONT COLOR="#B22222">// a variable called 'lc' and affects the value 0.007 to 'lc': -</FONT></I> -lc = 0.007 ; - -<I><FONT COLOR="#B22222">// This newly created variable can be used to define the first Gmsh -</FONT></I><I><FONT COLOR="#B22222">// elementary entity, a 'Point'. A Point is defined by a list of four -</FONT></I><I><FONT COLOR="#B22222">// numbers: its three coordinates (x, y and z), and a characteristic -</FONT></I><I><FONT COLOR="#B22222">// length which sets the target mesh size at the point: -</FONT></I> -Point(1) = {0, 0, 0, 9.e-1 * lc} ; - -<I><FONT COLOR="#B22222">// The mesh size is defined as the length of the segments for lines, -</FONT></I><I><FONT COLOR="#B22222">// the radii of the circumscribed circles for triangles and the radii -</FONT></I><I><FONT COLOR="#B22222">// of the circumscribed spheres for tetrahedra, respectively. The -</FONT></I><I><FONT COLOR="#B22222">// actual distribution of the mesh sizes is obtained by interpolation -</FONT></I><I><FONT COLOR="#B22222">// of the characteristic lengths prescribed at the points. There are -</FONT></I><I><FONT COLOR="#B22222">// also other possibilities to specify characteristic lengths: -</FONT></I><I><FONT COLOR="#B22222">// attractors (see t7.geo) and background meshes (see bgmesh.pos). -</FONT></I> -<I><FONT COLOR="#B22222">// As can be seen in the previous definition, more complex expressions -</FONT></I><I><FONT COLOR="#B22222">// can be constructed from variables. Here, the product of the -</FONT></I><I><FONT COLOR="#B22222">// variable 'lc' by the constant 9.e-1 is given as the fourth argument -</FONT></I><I><FONT COLOR="#B22222">// of the list defining the point. -</FONT></I><I><FONT COLOR="#B22222">// -</FONT></I><I><FONT COLOR="#B22222">// The following general syntax rule is applied for the definition of -</FONT></I><I><FONT COLOR="#B22222">// all geometrical entities: -</FONT></I><I><FONT COLOR="#B22222">// -</FONT></I><I><FONT COLOR="#B22222">// "If a number defines a new entity, it is enclosed between -</FONT></I><I><FONT COLOR="#B22222">// parentheses. If a number refers to a previously defined entity, -</FONT></I><I><FONT COLOR="#B22222">// it is enclosed between braces." -</FONT></I><I><FONT COLOR="#B22222">// -</FONT></I><I><FONT COLOR="#B22222">// Three additional points are then defined: -</FONT></I> -Point(2) = {.1, 0, 0, lc} ; -Point(3) = {.1, .3, 0, lc} ; -Point(4) = {0, .3, 0, lc} ; - -<I><FONT COLOR="#B22222">// The second elementary geometrical entity in Gmsh is the -</FONT></I><I><FONT COLOR="#B22222">// curve. Amongst curves, straight lines are the simplest. A straight -</FONT></I><I><FONT COLOR="#B22222">// line is defined by a list of point numbers. For example, line 1 -</FONT></I><I><FONT COLOR="#B22222">// starts at point 1 and ends at point 2: -</FONT></I> -Line(1) = {1,2} ; -Line(2) = {3,2} ; -Line(3) = {3,4} ; -Line(4) = {4,1} ; - -<I><FONT COLOR="#B22222">// The third elementary entity is the surface. In order to define a -</FONT></I><I><FONT COLOR="#B22222">// simple rectangular surface from the four lines defined above, a -</FONT></I><I><FONT COLOR="#B22222">// line loop has first to be defined. A line loop is a list of -</FONT></I><I><FONT COLOR="#B22222">// connected lines, a sign being associated with each line (depending -</FONT></I><I><FONT COLOR="#B22222">// on the orientation of the line). -</FONT></I> -Line Loop(5) = {4,1,-2,3} ; - -<I><FONT COLOR="#B22222">// The surface is then defined as a list of line loops (only one -</FONT></I><I><FONT COLOR="#B22222">// here): -</FONT></I> -Plane Surface(6) = {5} ; - -<I><FONT COLOR="#B22222">// At this level, Gmsh knows everything to display the rectangular -</FONT></I><I><FONT COLOR="#B22222">// surface 6 and to mesh it. But a supplementary step is needed in -</FONT></I><I><FONT COLOR="#B22222">// order to assign region numbers to the various elements in the mesh -</FONT></I><I><FONT COLOR="#B22222">// (the points, the lines and the triangles discretizing points 1 to -</FONT></I><I><FONT COLOR="#B22222">// 4, lines 1 to 4 and surface 6). This is achieved by the definition -</FONT></I><I><FONT COLOR="#B22222">// of Physical entities. Physical entities will group elements -</FONT></I><I><FONT COLOR="#B22222">// belonging to several elementary entities by giving them a common -</FONT></I><I><FONT COLOR="#B22222">// number (a region number), and specifying their orientation. -</FONT></I><I><FONT COLOR="#B22222">// -</FONT></I><I><FONT COLOR="#B22222">// For example, the two points 1 and 2 can be grouped into the -</FONT></I><I><FONT COLOR="#B22222">// physical entity 1: -</FONT></I> -Physical Point(1) = {1,2} ; - -<I><FONT COLOR="#B22222">// Consequently, two punctual elements will be saved in the output -</FONT></I><I><FONT COLOR="#B22222">// files, both with the region number 1. The mechanism is identical -</FONT></I><I><FONT COLOR="#B22222">// for line or surface elements: -</FONT></I> -Physical Line(10) = {1,2,4} ; -Physical Surface(100) = {6} ; - -<I><FONT COLOR="#B22222">// All the line elements which will be created during the mesh of -</FONT></I><I><FONT COLOR="#B22222">// lines 1, 2 and 4 will be saved in the output file with the region -</FONT></I><I><FONT COLOR="#B22222">// number 10; and all the triangular elements resulting from the -</FONT></I><I><FONT COLOR="#B22222">// discretization of surface 6 will be given the region number 100. -</FONT></I> -<I><FONT COLOR="#B22222">// It is important to notice that only those elements which belong to -</FONT></I><I><FONT COLOR="#B22222">// physical groups will be saved in the output file if the file format -</FONT></I><I><FONT COLOR="#B22222">// is the msh format (the native mesh file format for Gmsh). For a -</FONT></I><I><FONT COLOR="#B22222">// description of the mesh and post-processing formats, see the -</FONT></I><I><FONT COLOR="#B22222">// FORMATS file. -</FONT></I> -</PRE> -<HR> -<A NAME="file3"> -<H1>t2.geo 3/10</H1> -[<A HREF="#top">top</A>][<A HREF="#file2">prev</A>][<A HREF="#file4">next</A>] -<PRE> -<I><FONT COLOR="#B22222">/********************************************************************* - * - * Gmsh tutorial 2 - * - * Includes, Geometrical transformations, Elementary entities - * (Volumes), Physical entities (Volumes) - * - *********************************************************************/</FONT></I> - -<I><FONT COLOR="#B22222">// The first tutorial file will serve as a basis to construct this -</FONT></I><I><FONT COLOR="#B22222">// one. It can be included with: -</FONT></I> -Include "t1.geo" ; - -<I><FONT COLOR="#B22222">// There are several possibilities to build a more complex geometry -</FONT></I><I><FONT COLOR="#B22222">// from the one previously defined in 't1.geo'. -</FONT></I><I><FONT COLOR="#B22222">// -</FONT></I><I><FONT COLOR="#B22222">// New points, lines and surfaces can first be directly defined in the -</FONT></I><I><FONT COLOR="#B22222">// same way as in 't1.geo': -</FONT></I> -Point(5) = {0, .4, 0, lc} ; -Line(5) = {4, 5} ; - -<I><FONT COLOR="#B22222">// But Gmsh also provides geometrical transformation mechanisms to -</FONT></I><I><FONT COLOR="#B22222">// move (translate, rotate, ...), add (translate, rotate, ...) or -</FONT></I><I><FONT COLOR="#B22222">// extrude (translate, rotate) elementary geometrical entities. For -</FONT></I><I><FONT COLOR="#B22222">// example, the point 3 can be moved by 0.05 units on the left with: -</FONT></I> -Translate {-0.05,0,0} { Point{3} ; } - -<I><FONT COLOR="#B22222">// The resulting point can also be duplicated and translated by 0.1 -</FONT></I><I><FONT COLOR="#B22222">// along the y axis: -</FONT></I> -Translate {0,0.1,0} { Duplicata{ Point{3} ; } } - -<I><FONT COLOR="#B22222">// Of course, translation, rotation and extrusion commands not only -</FONT></I><I><FONT COLOR="#B22222">// apply to points, but also to lines and surfaces. The following -</FONT></I><I><FONT COLOR="#B22222">// command extrudes surface 6 defined in 't1.geo', as well as a new -</FONT></I><I><FONT COLOR="#B22222">// surface 11, along the z axis by 'h': -</FONT></I> -h = 0.12 ; -Extrude Surface { 6, {0, 0, h} } ; - -Line(7) = {3, 6} ; Line(8) = {6,5} ; Line Loop(10) = {5,-8,-7,3}; - -Plane Surface(11) = {10}; - -Extrude Surface { 11, {0, 0, h} } ; - -<I><FONT COLOR="#B22222">// All these geometrical transformations automatically generate new -</FONT></I><I><FONT COLOR="#B22222">// elementary entities. The following commands permit to specify -</FONT></I><I><FONT COLOR="#B22222">// manually a characteristic length for some of the automatically -</FONT></I><I><FONT COLOR="#B22222">// created points: -</FONT></I> -Characteristic Length{6,22,2,3,16,12} = lc * 3 ; - -<I><FONT COLOR="#B22222">// If the transformation tools are handy to create complex geometries, -</FONT></I><I><FONT COLOR="#B22222">// it is sometimes useful to generate the flat geometry, consisting -</FONT></I><I><FONT COLOR="#B22222">// only of the explicit list elementary entities. This can be achieved -</FONT></I><I><FONT COLOR="#B22222">// by selecting the 'File->Save as->GEO flattened geometry' menu or -</FONT></I><I><FONT COLOR="#B22222">// by typing -</FONT></I><I><FONT COLOR="#B22222">// -</FONT></I><I><FONT COLOR="#B22222">// > gmsh t2.geo -0 -</FONT></I><I><FONT COLOR="#B22222">// -</FONT></I><I><FONT COLOR="#B22222">// on the command line. -</FONT></I> -<I><FONT COLOR="#B22222">// Volumes are the fourth type of elementary entities in Gmsh. In the -</FONT></I><I><FONT COLOR="#B22222">// same way one defines line loops to build surfaces, one has to -</FONT></I><I><FONT COLOR="#B22222">// define surface loops to build volumes. The following volumes are -</FONT></I><I><FONT COLOR="#B22222">// very simple, without holes (and thus consist of only one surface -</FONT></I><I><FONT COLOR="#B22222">// loop): -</FONT></I> -Surface Loop(145) = {121,11,131,135,139,144}; -Volume(146) = {145}; - -Surface Loop(146) = {121,6,109,113,117,122}; -Volume(147) = {146}; - -<I><FONT COLOR="#B22222">// To save all volumic (tetrahedral) elements of volume 146 and 147 -</FONT></I><I><FONT COLOR="#B22222">// with the associate region number 1, a Physical Volume must be -</FONT></I><I><FONT COLOR="#B22222">// defined: -</FONT></I> -Physical Volume (1) = {146,147} ; - -<I><FONT COLOR="#B22222">// Congratulations! You've created your first fully unstructured -</FONT></I><I><FONT COLOR="#B22222">// tetrahedral 3D mesh! -</FONT></I></PRE> -<HR> -<A NAME="file4"> -<H1>t3.geo 4/10</H1> -[<A HREF="#top">top</A>][<A HREF="#file3">prev</A>][<A HREF="#file5">next</A>] -<PRE> -<I><FONT COLOR="#B22222">/********************************************************************* - * - * Gmsh tutorial 3 - * - * Extruded meshes, Options - * - *********************************************************************/</FONT></I> - -<I><FONT COLOR="#B22222">// Again, the first tutorial example is included: -</FONT></I> -Include "t1.geo" ; - -<I><FONT COLOR="#B22222">// As in 't2.geo', an extrusion along the z axis will be performed: -</FONT></I> -h = 0.1 ; - -<I><FONT COLOR="#B22222">// But contrary to 't2.geo', not only the geometry will be extruded, -</FONT></I><I><FONT COLOR="#B22222">// but also the 2D mesh. This is done with the same Extrude command, -</FONT></I><I><FONT COLOR="#B22222">// but by specifying the number of layers (here, there will be four -</FONT></I><I><FONT COLOR="#B22222">// layers, of respectively 8, 4, 2 and 1 elements in depth), with -</FONT></I><I><FONT COLOR="#B22222">// volume numbers 9000 to 9003 and respective heights equal to h/4: -</FONT></I> -Extrude Surface { 6, {0,0,h} } { - Layers { {8,4,2,1}, {9000:9003}, {0.25,0.5,0.75,1} } ; -} ; - -<I><FONT COLOR="#B22222">// The extrusion can also be combined with a rotation, and the -</FONT></I><I><FONT COLOR="#B22222">// extruded 3D mesh can be recombined into prisms (wedges). All -</FONT></I><I><FONT COLOR="#B22222">// rotations are specified by an axis direction ({0,1,0}), an axis -</FONT></I><I><FONT COLOR="#B22222">// point ({0,0,0}) and a rotation angle (Pi/2): -</FONT></I> -Extrude Surface { 122, {0,1,0} , {-0.1,0,0.1} , -Pi/2 } { - Recombine ; Layers { 7, 9004, 1 } ; -}; - -Physical Volume(101) = {9000:9004}; - -<I><FONT COLOR="#B22222">// All interactive options can also be set directly in the input file. -</FONT></I><I><FONT COLOR="#B22222">// For example, the following lines define a global characteristic -</FONT></I><I><FONT COLOR="#B22222">// length factor, redefine some background colors, disable the display -</FONT></I><I><FONT COLOR="#B22222">// of the axes, and select an initial viewpoint in XYZ mode (disabling -</FONT></I><I><FONT COLOR="#B22222">// the interactive trackball-like rotation mode): -</FONT></I> -Mesh.CharacteristicLengthFactor = 4; -General.Color.Background = {120,120,120}; -General.Color.Foreground = {255,255,255}; -General.Color.Text = White; -Geometry.Color.Points = Orange; -General.Axes = 0; -General.Trackball = 0; -General.RotationX = 10; -General.RotationY = 70; -General.TranslationX = -0.1; - -<I><FONT COLOR="#B22222">// Note: all colors can be defined literally or numerically, i.e. -</FONT></I><I><FONT COLOR="#B22222">// 'General.Color.Background = Red' is equivalent to -</FONT></I><I><FONT COLOR="#B22222">// 'General.Color.Background = {255,0,0}'. As with user-defined -</FONT></I><I><FONT COLOR="#B22222">// variables, the options can be used either as right hand or left -</FONT></I><I><FONT COLOR="#B22222">// hand sides, so that -</FONT></I> -Geometry.Color.Surfaces = Geometry.Color.Points; - -<I><FONT COLOR="#B22222">// will assign the color of the surfaces in the geometry to the same -</FONT></I><I><FONT COLOR="#B22222">// color as the points. -</FONT></I> -<I><FONT COLOR="#B22222">// A click on the '?' button in the status bar of the graphic window -</FONT></I><I><FONT COLOR="#B22222">// will dump all current options to the terminal. To save all -</FONT></I><I><FONT COLOR="#B22222">// available options to a file, use the 'File->Save as->GEO complete -</FONT></I><I><FONT COLOR="#B22222">// options' menu. To save the current options as the default options -</FONT></I><I><FONT COLOR="#B22222">// for all future Gmsh sessions, use the 'Options->Save options now' -</FONT></I><I><FONT COLOR="#B22222">// menu. -</FONT></I></PRE> -<HR> -<A NAME="file5"> -<H1>t4.geo 5/10</H1> -[<A HREF="#top">top</A>][<A HREF="#file4">prev</A>][<A HREF="#file6">next</A>] -<PRE> -<I><FONT COLOR="#B22222">/********************************************************************* - * - * Gmsh tutorial 4 - * - * Built-in functions, Holes - * - *********************************************************************/</FONT></I> - -cm = 1e-02 ; - -e1 = 4.5*cm ; e2 = 6*cm / 2 ; e3 = 5*cm / 2 ; - -h1 = 5*cm ; h2 = 10*cm ; h3 = 5*cm ; h4 = 2*cm ; h5 = 4.5*cm ; - -R1 = 1*cm ; R2 = 1.5*cm ; r = 1*cm ; - -ccos = ( -h5*R1 + e2 * Hypot(h5,Hypot(e2,R1)) ) / (h5^2 + e2^2) ; -ssin = Sqrt(1-ccos^2) ; - -Lc1 = 0.01 ; -Lc2 = 0.003 ; - -<I><FONT COLOR="#B22222">// A whole set of operators can be used, which can be combined in all -</FONT></I><I><FONT COLOR="#B22222">// the expressions. These operators are defined in a similar way to -</FONT></I><I><FONT COLOR="#B22222">// their C or C++ equivalents (with the exception of '^'): -</FONT></I><I><FONT COLOR="#B22222">// -</FONT></I><I><FONT COLOR="#B22222">// '-' (in both unary and binary versions, i.e. as in '-1' and '1-2') -</FONT></I><I><FONT COLOR="#B22222">// '!' (the negation) -</FONT></I><I><FONT COLOR="#B22222">// '+' -</FONT></I><I><FONT COLOR="#B22222">// '*' -</FONT></I><I><FONT COLOR="#B22222">// '/' -</FONT></I><I><FONT COLOR="#B22222">// '%' (the rest of the integer division) -</FONT></I><I><FONT COLOR="#B22222">// '<' -</FONT></I><I><FONT COLOR="#B22222">// '>' -</FONT></I><I><FONT COLOR="#B22222">// '<=' -</FONT></I><I><FONT COLOR="#B22222">// '>=' -</FONT></I><I><FONT COLOR="#B22222">// '==' -</FONT></I><I><FONT COLOR="#B22222">// '!=' -</FONT></I><I><FONT COLOR="#B22222">// '&&' (and) -</FONT></I><I><FONT COLOR="#B22222">// '||' (or) -</FONT></I><I><FONT COLOR="#B22222">// '||' (or) -</FONT></I><I><FONT COLOR="#B22222">// '^' (power) -</FONT></I><I><FONT COLOR="#B22222">// '?' ':' (the ternary operator) -</FONT></I><I><FONT COLOR="#B22222">// -</FONT></I><I><FONT COLOR="#B22222">// Grouping is done, as usual, with parentheses. -</FONT></I><I><FONT COLOR="#B22222">// -</FONT></I><I><FONT COLOR="#B22222">// In addition to these operators, all C mathematical functions can -</FONT></I><I><FONT COLOR="#B22222">// also be used (note the first capital letter): -</FONT></I><I><FONT COLOR="#B22222">// -</FONT></I><I><FONT COLOR="#B22222">// Exp(x) -</FONT></I><I><FONT COLOR="#B22222">// Log(x) -</FONT></I><I><FONT COLOR="#B22222">// Log10(x) -</FONT></I><I><FONT COLOR="#B22222">// Sqrt(x) -</FONT></I><I><FONT COLOR="#B22222">// Sin(x) -</FONT></I><I><FONT COLOR="#B22222">// Asin(x) -</FONT></I><I><FONT COLOR="#B22222">// Cos(x) -</FONT></I><I><FONT COLOR="#B22222">// Acos(x) -</FONT></I><I><FONT COLOR="#B22222">// Tan(x) -</FONT></I><I><FONT COLOR="#B22222">// Atan(x) -</FONT></I><I><FONT COLOR="#B22222">// Atan2(x,y) -</FONT></I><I><FONT COLOR="#B22222">// Sinh(x) -</FONT></I><I><FONT COLOR="#B22222">// Cosh(x) -</FONT></I><I><FONT COLOR="#B22222">// Tanh(x) -</FONT></I><I><FONT COLOR="#B22222">// Fabs(x) -</FONT></I><I><FONT COLOR="#B22222">// Floor(x) -</FONT></I><I><FONT COLOR="#B22222">// Ceil(x) -</FONT></I><I><FONT COLOR="#B22222">// Fmod(x,y) -</FONT></I><I><FONT COLOR="#B22222">// Hypot(x,y) -</FONT></I> -<I><FONT COLOR="#B22222">// An additional function 'Rand(x)' generates a random number in [0,x] -</FONT></I><I><FONT COLOR="#B22222">// -</FONT></I><I><FONT COLOR="#B22222">// Rand(x) -</FONT></I><I><FONT COLOR="#B22222">// -</FONT></I><I><FONT COLOR="#B22222">// The only predefined constant in Gmsh is Pi. -</FONT></I> -Point(1) = { -e1-e2, 0.0 , 0.0 , Lc1}; -Point(2) = { -e1-e2, h1 , 0.0 , Lc1}; -Point(3) = { -e3-r , h1 , 0.0 , Lc2}; -Point(4) = { -e3-r , h1+r , 0.0 , Lc2}; -Point(5) = { -e3 , h1+r , 0.0 , Lc2}; -Point(6) = { -e3 , h1+h2, 0.0 , Lc1}; -Point(7) = { e3 , h1+h2, 0.0 , Lc1}; -Point(8) = { e3 , h1+r , 0.0 , Lc2}; -Point(9) = { e3+r , h1+r , 0.0 , Lc2}; -Point(10)= { e3+r , h1 , 0.0 , Lc2}; -Point(11)= { e1+e2, h1 , 0.0 , Lc1}; -Point(12)= { e1+e2, 0.0 , 0.0 , Lc1}; -Point(13)= { e2 , 0.0 , 0.0 , Lc1}; - -Point(14)= { R1 / ssin , h5+R1*ccos, 0.0 , Lc2}; -Point(15)= { 0.0 , h5 , 0.0 , Lc2}; -Point(16)= { -R1 / ssin , h5+R1*ccos, 0.0 , Lc2}; -Point(17)= { -e2 , 0.0 , 0.0 , Lc1}; - -Point(18)= { -R2 , h1+h3 , 0.0 , Lc2}; -Point(19)= { -R2 , h1+h3+h4, 0.0 , Lc2}; -Point(20)= { 0.0 , h1+h3+h4, 0.0 , Lc2}; -Point(21)= { R2 , h1+h3+h4, 0.0 , Lc2}; -Point(22)= { R2 , h1+h3 , 0.0 , Lc2}; -Point(23)= { 0.0 , h1+h3 , 0.0 , Lc2}; - -Point(24)= { 0 , h1+h3+h4+R2, 0.0 , Lc2}; -Point(25)= { 0 , h1+h3-R2, 0.0 , Lc2}; - -Line(1) = {1 ,17}; -Line(2) = {17,16}; - -<I><FONT COLOR="#B22222">// All curves are not straight lines... Circles are defined by a list -</FONT></I><I><FONT COLOR="#B22222">// of three point numbers, which represent the starting point, the -</FONT></I><I><FONT COLOR="#B22222">// center and the end point, respectively. All circles have to be -</FONT></I><I><FONT COLOR="#B22222">// defined in the trigonometric (counter-clockwise) sense. Note that -</FONT></I><I><FONT COLOR="#B22222">// the 3 points should not be aligned (otherwise the plane in which -</FONT></I><I><FONT COLOR="#B22222">// the circle lies has to be defined, by 'Circle(num) = -</FONT></I><I><FONT COLOR="#B22222">// {start,center,end} Plane {nx,ny,nz}'). -</FONT></I> -Circle(3) = {14,15,16}; -Line(4) = {14,13}; -Line(5) = {13,12}; -Line(6) = {12,11}; -Line(7) = {11,10}; -Circle(8) = { 8, 9,10}; -Line(9) = { 8, 7}; -Line(10) = { 7, 6}; -Line(11) = { 6, 5}; -Circle(12) = { 3, 4, 5}; -Line(13) = { 3, 2}; -Line(14) = { 2, 1}; -Line(15) = {18,19}; -Circle(16) = {21,20,24}; -Circle(17) = {24,20,19}; -Circle(18) = {18,23,25}; -Circle(19) = {25,23,22}; -Line(20) = {21,22}; - -Line Loop(21) = {17,-15,18,19,-20,16}; -Plane Surface(22) = {21}; - -<I><FONT COLOR="#B22222">// The surface is made of two line loops, i.e. it has one hole: -</FONT></I> -Line Loop(23) = {11,-12,13,14,1,2,-3,4,5,6,7,-8,9,10}; -Plane Surface(24) = {23,21}; - -Physical Surface(1) = {22}; -Physical Surface(2) = {24}; -</PRE> -<HR> -<A NAME="file6"> -<H1>t5.geo 6/10</H1> -[<A HREF="#top">top</A>][<A HREF="#file5">prev</A>][<A HREF="#file7">next</A>] -<PRE> -<I><FONT COLOR="#B22222">/********************************************************************* - * - * Gmsh tutorial 5 - * - * Characteristic lengths, Arrays of variables, Functions, Loops - * - *********************************************************************/</FONT></I> - -<I><FONT COLOR="#B22222">// This defines some characteristic lengths: -</FONT></I> -lcar1 = .1; -lcar2 = .0005; -lcar3 = .075; - -<I><FONT COLOR="#B22222">// In order to change these lengths globally (without changing the -</FONT></I><I><FONT COLOR="#B22222">// file), a global scaling factor for all characteristic lengths can -</FONT></I><I><FONT COLOR="#B22222">// be specified on the command line with the option '-clscale'. For -</FONT></I><I><FONT COLOR="#B22222">// example, with: -</FONT></I><I><FONT COLOR="#B22222">// -</FONT></I><I><FONT COLOR="#B22222">// > gmsh t5 -clscale 1 -</FONT></I><I><FONT COLOR="#B22222">// -</FONT></I><I><FONT COLOR="#B22222">// this example produces a mesh of approximately 2000 nodes and -</FONT></I><I><FONT COLOR="#B22222">// 10,000 tetrahedra (in 3 seconds on an alpha workstation running at -</FONT></I><I><FONT COLOR="#B22222">// 666MHz). With -</FONT></I><I><FONT COLOR="#B22222">// -</FONT></I><I><FONT COLOR="#B22222">// > gmsh t5 -clscale 0.2 -</FONT></I><I><FONT COLOR="#B22222">// -</FONT></I><I><FONT COLOR="#B22222">// (i.e. with all characteristic lengths divided by 5), the mesh -</FONT></I><I><FONT COLOR="#B22222">// counts approximately 170,000 nodes and one million tetrahedra -</FONT></I><I><FONT COLOR="#B22222">// (and the computation takes 16 minutes on the same machine :-( So -</FONT></I><I><FONT COLOR="#B22222">// there is still a lot of work to do to achieve decent performance -</FONT></I><I><FONT COLOR="#B22222">// with Gmsh...) -</FONT></I> -Point(1) = {0.5,0.5,0.5,lcar2}; Point(2) = {0.5,0.5,0,lcar1}; -Point(3) = {0,0.5,0.5,lcar1}; Point(4) = {0,0,0.5,lcar1}; -Point(5) = {0.5,0,0.5,lcar1}; Point(6) = {0.5,0,0,lcar1}; -Point(7) = {0,0.5,0,lcar1}; Point(8) = {0,1,0,lcar1}; -Point(9) = {1,1,0,lcar1}; Point(10) = {0,0,1,lcar1}; -Point(11) = {0,1,1,lcar1}; Point(12) = {1,1,1,lcar1}; -Point(13) = {1,0,1,lcar1}; Point(14) = {1,0,0,lcar1}; - -Line(1) = {8,9}; Line(2) = {9,12}; Line(3) = {12,11}; -Line(4) = {11,8}; Line(5) = {9,14}; Line(6) = {14,13}; -Line(7) = {13,12}; Line(8) = {11,10}; Line(9) = {10,13}; -Line(10) = {10,4}; Line(11) = {4,5}; Line(12) = {5,6}; -Line(13) = {6,2}; Line(14) = {2,1}; Line(15) = {1,3}; -Line(16) = {3,7}; Line(17) = {7,2}; Line(18) = {3,4}; -Line(19) = {5,1}; Line(20) = {7,8}; Line(21) = {6,14}; - -Line Loop(22) = {11,19,15,18}; Plane Surface(23) = {22}; -Line Loop(24) = {16,17,14,15}; Plane Surface(25) = {24}; -Line Loop(26) = {-17,20,1,5,-21,13}; Plane Surface(27) = {26}; -Line Loop(28) = {4,1,2,3}; Plane Surface(29) = {28}; -Line Loop(30) = {7,-2,5,6}; Plane Surface(31) = {30}; -Line Loop(32) = {6,-9,10,11,12,21}; Plane Surface(33) = {32}; -Line Loop(34) = {7,3,8,9}; Plane Surface(35) = {34}; -Line Loop(36) = {10,-18,16,20,-4,8}; Plane Surface(37) = {36}; -Line Loop(38) = {-14,-13,-12,19}; Plane Surface(39) = {38}; - -<I><FONT COLOR="#B22222">// Instead of using included files, one can also define functions. In -</FONT></I><I><FONT COLOR="#B22222">// the following function, the reserved variable 'newp' is used, which -</FONT></I><I><FONT COLOR="#B22222">// automatically selects a new point number. This number is chosen as -</FONT></I><I><FONT COLOR="#B22222">// the highest current point number, plus one. Analogously to 'newp', -</FONT></I><I><FONT COLOR="#B22222">// there exists a variable 'newreg' which selects the highest number -</FONT></I><I><FONT COLOR="#B22222">// of all entities other than points, plus one. -</FONT></I> -<I><FONT COLOR="#B22222">// Note: there are no local variables. This will be changed in a -</FONT></I><I><FONT COLOR="#B22222">// future version of Gmsh. -</FONT></I> -Function CheeseHole - - p1 = newp; Point(p1) = {x, y, z, lcar3} ; - p2 = newp; Point(p2) = {x+r,y, z, lcar3} ; - p3 = newp; Point(p3) = {x, y+r,z, lcar3} ; - p4 = newp; Point(p4) = {x, y, z+r,lcar3} ; - p5 = newp; Point(p5) = {x-r,y, z, lcar3} ; - p6 = newp; Point(p6) = {x, y-r,z, lcar3} ; - p7 = newp; Point(p7) = {x, y, z-r,lcar3} ; - - c1 = newreg; Circle(c1) = {p2,p1,p7}; - c2 = newreg; Circle(c2) = {p7,p1,p5}; - c3 = newreg; Circle(c3) = {p5,p1,p4}; - c4 = newreg; Circle(c4) = {p4,p1,p2}; - c5 = newreg; Circle(c5) = {p2,p1,p3}; - c6 = newreg; Circle(c6) = {p3,p1,p5}; - c7 = newreg; Circle(c7) = {p5,p1,p6}; - c8 = newreg; Circle(c8) = {p6,p1,p2}; - c9 = newreg; Circle(c9) = {p7,p1,p3}; - c10 = newreg; Circle(c10) = {p3,p1,p4}; - c11 = newreg; Circle(c11) = {p4,p1,p6}; - c12 = newreg; Circle(c12) = {p6,p1,p7}; - -<I><FONT COLOR="#B22222">// All surfaces are not plane... Here is the way to define ruled -</FONT></I><I><FONT COLOR="#B22222">// surfaces (which have 3 or 4 borders): -</FONT></I> - l1 = newreg; Line Loop(l1) = {c5,c10,c4}; Ruled Surface(newreg) = {l1}; - l2 = newreg; Line Loop(l2) = {c9,-c5,c1}; Ruled Surface(newreg) = {l2}; - l3 = newreg; Line Loop(l3) = {-c12,c8,c1}; Ruled Surface(newreg) = {l3}; - l4 = newreg; Line Loop(l4) = {c8,-c4,c11}; Ruled Surface(newreg) = {l4}; - l5 = newreg; Line Loop(l5) = {-c10,c6,c3}; Ruled Surface(newreg) = {l5}; - l6 = newreg; Line Loop(l6) = {-c11,-c3,c7}; Ruled Surface(newreg) = {l6}; - l7 = newreg; Line Loop(l7) = {c2,c7,c12}; Ruled Surface(newreg) = {l7}; - l8 = newreg; Line Loop(l8) = {-c6,-c9,c2}; Ruled Surface(newreg) = {l8}; - -<I><FONT COLOR="#B22222">// Arrays of variables can be manipulated in the same way as classical -</FONT></I><I><FONT COLOR="#B22222">// variables. Warning: accessing an uninitialized element in an array -</FONT></I><I><FONT COLOR="#B22222">// will produce an unpredictable result. Note that whole arrays can -</FONT></I><I><FONT COLOR="#B22222">// also be instantly initialized (e.g. l[]={1,2,7} is valid). -</FONT></I> - theloops[t] = newreg ; - - Surface Loop(theloops[t]) = {l8+1, l5+1, l1+1, l2+1, -(l3+1), -(l7+1), l6+1, l4+1}; - - thehole = newreg ; - Volume(thehole) = theloops[t] ; - -Return - - -x = 0 ; y = 0.75 ; z = 0 ; r = 0.09 ; - -<I><FONT COLOR="#B22222">// A For loop is used to generate five holes in the cube: -</FONT></I> -For t In {1:5} - - x += 0.166 ; - z += 0.166 ; - -<I><FONT COLOR="#B22222">// This command calls the function CheeseHole. Note that, instead of -</FONT></I><I><FONT COLOR="#B22222">// defining a function, we could have defined a file containing the -</FONT></I><I><FONT COLOR="#B22222">// same code, and used the Include command to include this file. -</FONT></I> - Call CheeseHole ; - -<I><FONT COLOR="#B22222">// A physical volume is defined for each cheese hole -</FONT></I> - Physical Volume (t) = thehole ; - -<I><FONT COLOR="#B22222">// The Printf function permits to print the value of variables on the -</FONT></I><I><FONT COLOR="#B22222">// terminal, in a way similar to the 'printf' C function: -</FONT></I> - Printf("The cheese hole %g (center = {%g,%g,%g}, radius = %g) has number %g!", - t, x, y, z, r, thehole) ; - -<I><FONT COLOR="#B22222">// Note: All Gmsh variables are treated internally as double precision -</FONT></I><I><FONT COLOR="#B22222">// numbers. The format string should thus only contain valid double -</FONT></I><I><FONT COLOR="#B22222">// precision number format specifiers (see the C or C++ language -</FONT></I><I><FONT COLOR="#B22222">// reference for more details). -</FONT></I> -EndFor - -<I><FONT COLOR="#B22222">// This is the surface loop for the exterior surface of the cube: -</FONT></I> -theloops[0] = newreg ; - -Surface Loop(theloops[0]) = {35,31,29,37,33,23,39,25,27} ; - -<I><FONT COLOR="#B22222">// The volume of the cube, without the 5 cheese holes, is defined by 6 -</FONT></I><I><FONT COLOR="#B22222">// surface loops (the exterior surface and the five interior loops). -</FONT></I><I><FONT COLOR="#B22222">// To reference an array of variables, its identifier is followed by -</FONT></I><I><FONT COLOR="#B22222">// '[]': -</FONT></I> -Volume(186) = {theloops[]} ; - -<I><FONT COLOR="#B22222">// This physical volume assigns the region number 10 to the tetrahedra -</FONT></I><I><FONT COLOR="#B22222">// paving the cube (but not the holes, whose elements were tagged from -</FONT></I><I><FONT COLOR="#B22222">// 1 to 5 in the 'For' loop) -</FONT></I> -Physical Volume (10) = 186 ; - -</PRE> -<HR> -<A NAME="file7"> -<H1>t6.geo 7/10</H1> -[<A HREF="#top">top</A>][<A HREF="#file6">prev</A>][<A HREF="#file8">next</A>] -<PRE> -<I><FONT COLOR="#B22222">/********************************************************************* - * - * Gmsh tutorial 6 - * - * Transfinite meshes - * - *********************************************************************/</FONT></I> - -r_int = 0.05 ; -r_ext = 0.051 ; -r_far = 0.125 ; -r_inf = 0.4 ; -phi1 = 30. * (Pi/180.) ; -angl = 45. * (Pi/180.) ; - -nbpt_phi = 5 ; nbpt_int = 20 ; -nbpt_arc1 = 10 ; nbpt_arc2 = 10 ; -nbpt_shell = 10 ; nbpt_far = 25 ; nbpt_inf = 15 ; - -lc0 = 0.1 ; lc1 = 0.1 ; lc2 = 0.3 ; - -Point(1) = {0, 0, 0, lc0} ; -Point(2) = {r_int, 0, 0, lc0} ; -Point(3) = {r_ext, 0, 0, lc1} ; -Point(4) = {r_far, 0, 0, lc2} ; -Point(5) = {r_inf, 0, 0, lc2} ; -Point(6) = {0, 0, r_int, lc0} ; -Point(7) = {0, 0, r_ext, lc1} ; -Point(8) = {0, 0, r_far, lc2} ; -Point(9) = {0, 0, r_inf, lc2} ; - -Point(10) = {r_int*Cos(phi1), r_int*Sin(phi1), 0, lc0} ; -Point(11) = {r_ext*Cos(phi1), r_ext*Sin(phi1), 0, lc1} ; -Point(12) = {r_far*Cos(phi1), r_far*Sin(phi1), 0, lc2} ; -Point(13) = {r_inf*Cos(phi1), r_inf*Sin(phi1), 0, lc2} ; - -Point(14) = {r_int/2, 0, 0, lc2} ; -Point(15) = {r_int/2*Cos(phi1), r_int/2*Sin(phi1), 0, lc2} ; -Point(16) = {r_int/2, 0, r_int/2, lc2} ; -Point(17) = {r_int/2*Cos(phi1), r_int/2*Sin(phi1), r_int/2, lc2} ; -Point(18) = {0, 0, r_int/2, lc2} ; -Point(19) = {r_int*Cos(angl), 0, r_int*Sin(angl), lc2} ; -Point(20) = {r_int*Cos(angl)*Cos(phi1), r_int*Cos(angl)*Sin(phi1), r_int*Sin(angl), lc2} ; -Point(21) = {r_ext*Cos(angl), 0, r_ext*Sin(angl), lc2} ; -Point(22) = {r_ext*Cos(angl)*Cos(phi1), r_ext*Cos(angl)*Sin(phi1), r_ext*Sin(angl), lc2} ; -Point(23) = {r_far*Cos(angl), 0, r_far*Sin(angl), lc2} ; -Point(24) = {r_far*Cos(angl)*Cos(phi1), r_far*Cos(angl)*Sin(phi1), r_far*Sin(angl), lc2} ; -Point(25) = {r_inf, 0, r_inf, lc2} ; -Point(26) = {r_inf*Cos(phi1), r_inf*Sin(phi1), r_inf, lc2} ; - -Circle(1) = {2,1,19}; Circle(2) = {19,1,6}; Circle(3) = {3,1,21}; -Circle(4) = {21,1,7}; Circle(5) = {4,1,23}; Circle(6) = {23,1,8}; -Line(7) = {5,25}; Line(8) = {25,9}; -Circle(9) = {10,1,20}; Circle(10) = {20,1,6}; Circle(11) = {11,1,22}; -Circle(12) = {22,1,7}; Circle(13) = {12,1,24}; Circle(14) = {24,1,8}; -Line(15) = {13,26}; Line(16) = {26,9}; -Circle(17) = {19,1,20}; Circle(18) = {21,1,22}; Circle(19) = {23,1,24}; -Circle(20) = {25,1,26}; Circle(21) = {2,1,10}; Circle(22) = {3,1,11}; -Circle(23) = {4,1,12}; Circle(24) = {5,1,13}; - -Line(25) = {1,14}; Line(26) = {14,2}; Line(27) = {2,3}; Line(28) = {3,4}; -Line(29) = {4,5}; Line(30) = {1,15}; Line(31) = {15,10}; Line(32) = {10,11}; -Line(33) = {11,12}; Line(34) = {12,13}; Line(35) = {14,15}; Line(36) = {14,16}; -Line(37) = {15,17}; Line(38) = {16,17}; Line(39) = {18,16}; Line(40) = {18,17}; -Line(41) = {1,18}; Line(42) = {18,6}; Line(43) = {6,7}; Line(44) = {16,19}; -Line(45) = {19,21}; Line(46) = {21,23}; Line(47) = {23,25}; Line(48) = {17,20}; -Line(49) = {20,22}; Line(50) = {22,24}; Line(51) = {24,26}; Line(52) = {7,8}; -Line(53) = {8,9}; - -Line Loop(54) = {39,-36,-25,41}; Ruled Surface(55) = {54}; -Line Loop(56) = {44,-1,-26,36}; Ruled Surface(57) = {56}; -Line Loop(58) = {3,-45,-1,27}; Ruled Surface(59) = {58}; -Line Loop(60) = {5,-46,-3,28}; Ruled Surface(61) = {60}; -Line Loop(62) = {7,-47,-5,29}; Ruled Surface(63) = {62}; -Line Loop(64) = {-2,-44,-39,42}; Ruled Surface(65) = {64}; -Line Loop(66) = {-4,-45,2,43}; Ruled Surface(67) = {66}; -Line Loop(68) = {-6,-46,4,52}; Ruled Surface(69) = {68}; -Line Loop(70) = {-8,-47,6,53}; Ruled Surface(71) = {70}; -Line Loop(72) = {-40,-41,30,37}; Ruled Surface(73) = {72}; -Line Loop(74) = {48,-9,-31,37}; Ruled Surface(75) = {74}; -Line Loop(76) = {49,-11,-32,9}; Ruled Surface(77) = {76}; -Line Loop(78) = {-50,-11,33,13}; Ruled Surface(79) = {78}; -Line Loop(80) = {-51,-13,34,15}; Ruled Surface(81) = {80}; -Line Loop(82) = {10,-42,40,48}; Ruled Surface(83) = {82}; -Line Loop(84) = {12,-43,-10,49}; Ruled Surface(85) = {84}; -Line Loop(86) = {14,-52,-12,50}; Ruled Surface(87) = {86}; -Line Loop(88) = {16,-53,-14,51}; Ruled Surface(89) = {88}; -Line Loop(90) = {-30,25,35}; Ruled Surface(91) = {90}; -Line Loop(92) = {-40,39,38}; Ruled Surface(93) = {92}; -Line Loop(94) = {37,-38,-36,35}; Ruled Surface(95) = {94}; -Line Loop(96) = {-48,-38,44,17}; Ruled Surface(97) = {96}; -Line Loop(98) = {18,-49,-17,45}; Ruled Surface(99) = {98}; -Line Loop(100) = {19,-50,-18,46}; Ruled Surface(101) = {100}; -Line Loop(102) = {20,-51,-19,47}; Ruled Surface(103) = {102}; -Line Loop(104) = {-2,17,10}; Ruled Surface(105) = {104}; -Line Loop(106) = {-9,-21,1,17}; Ruled Surface(107) = {106}; -Line Loop(108) = {-4,18,12}; Ruled Surface(109) = {108}; -Line Loop(110) = {-11,-22,3,18}; Ruled Surface(111) = {110}; -Line Loop(112) = {-13,-23,5,19}; Ruled Surface(113) = {112}; -Line Loop(114) = {-6,19,14}; Ruled Surface(115) = {114}; -Line Loop(116) = {-15,-24,7,20}; Ruled Surface(117) = {116}; -Line Loop(118) = {-8,20,16}; Ruled Surface(119) = {118}; -Line Loop(120) = {-31,-35,26,21}; Ruled Surface(121) = {120}; -Line Loop(122) = {32,-22,-27,21}; Ruled Surface(123) = {122}; -Line Loop(124) = {33,-23,-28,22}; Ruled Surface(125) = {124}; -Line Loop(126) = {34,-24,-29,23}; Ruled Surface(127) = {126}; - -Surface Loop(128) = {93,-73,-55,95,-91}; Volume(129) = {128}; <I><FONT COLOR="#B22222">// int -</FONT></I>Surface Loop(130) = {107,-75,-97,95,57,121}; Volume(131) = {130}; <I><FONT COLOR="#B22222">// int b -</FONT></I>Surface Loop(132) = {105,-65,-97,-83,-93}; Volume(133) = {132}; <I><FONT COLOR="#B22222">// int h -</FONT></I>Surface Loop(134) = {99,-111,77,123,59,107}; Volume(135) = {134}; <I><FONT COLOR="#B22222">// shell b -</FONT></I>Surface Loop(136) = {99,-109,67,105,85}; Volume(137) = {136}; <I><FONT COLOR="#B22222">// shell h -</FONT></I>Surface Loop(138) = {113,79,-101,-111,-125,-61}; Volume(139) = {138}; <I><FONT COLOR="#B22222">// ext b -</FONT></I>Surface Loop(140) = {115,-69,-101,-87,-109}; Volume(141) = {140}; <I><FONT COLOR="#B22222">// ext h -</FONT></I>Surface Loop(142) = {103,-117,-81,113,127,63}; Volume(143) = {142}; <I><FONT COLOR="#B22222">// inf b -</FONT></I>Surface Loop(144) = {89,-119,71,103,115}; Volume(145) = {144}; <I><FONT COLOR="#B22222">// inf h -</FONT></I> -<I><FONT COLOR="#B22222">// Transfinite line commands explicitly specify the number of points -</FONT></I><I><FONT COLOR="#B22222">// and their distribution. A minus sign in the argument list of the -</FONT></I><I><FONT COLOR="#B22222">// transfinite command will produce the reversed mesh. -</FONT></I> -Transfinite Line{35,21,22,23,24,38,17,18,19,20} = nbpt_phi ; -Transfinite Line{31,26,48,44,42} = nbpt_int Using Progression 0.95; -Transfinite Line{41,37,36,9,11,1,3,13,5,15,7} = nbpt_arc1 ; -Transfinite Line{30,25,40,39,10,2,12,4,14,6,16,8} = nbpt_arc2 ; -Transfinite Line{32,27,49,45,43} = nbpt_shell ; -Transfinite Line{33,28,46,50,52} = nbpt_far Using Progression 1.05 ; -Transfinite Line{34,29,51,47,53} = nbpt_inf Using Progression 0.01; - -<I><FONT COLOR="#B22222">// *All* 2D and 3D transfinite entities are defined in respect to -</FONT></I><I><FONT COLOR="#B22222">// points. The ordering of the points defines the ordering of the mesh -</FONT></I><I><FONT COLOR="#B22222">// elements. -</FONT></I> -Transfinite Surface{55} = {1,14,16,18}; -Transfinite Surface{57} = {14,2,19,16}; -Transfinite Surface{59} = {2,3,21,19}; -Transfinite Surface{61} = {3,4,23,21}; -Transfinite Surface{63} = {4,5,25,23}; -Transfinite Surface{73} = {1,15,17,18}; -Transfinite Surface{75} = {15,10,20,17}; -Transfinite Surface{77} = {10,11,22,20}; -Transfinite Surface{79} = {11,12,24,22}; -Transfinite Surface{81} = {12,13,26,24}; -Transfinite Surface{65} = {18,16,19,6}; -Transfinite Surface{67} = {6,19,21,7}; -Transfinite Surface{69} = {7,21,23,8}; -Transfinite Surface{71} = {8,23,25,9}; -Transfinite Surface{83} = {17,18,6,20}; -Transfinite Surface{85} = {20,6,7,22}; -Transfinite Surface{87} = {22,7,8,24}; -Transfinite Surface{89} = {24,8,9,26}; -Transfinite Surface{91} = {1,14,15}; -Transfinite Surface{95} = {15,14,16,17}; -Transfinite Surface{93} = {18,16,17}; -Transfinite Surface{121} = {15,14,2,10}; -Transfinite Surface{97} = {17,16,19,20}; -Transfinite Surface{123} = {10,2,3,11}; -Transfinite Surface{99} = {20,19,21,22}; -Transfinite Surface{107} = {10,2,19,20}; -Transfinite Surface{105} = {6,20,19}; -Transfinite Surface{109} = {7,22,21}; -Transfinite Surface{111} = {11,3,21,22}; -Transfinite Surface{101} = {22,21,23,24}; -Transfinite Surface{125} = {11,3,4,12}; -Transfinite Surface{115} = {8,24,23}; -Transfinite Surface{113} = {24,12,4,23}; -Transfinite Surface{127} = {12,13,5,4}; -Transfinite Surface{103} = {24,23,25,26}; -Transfinite Surface{119} = {9,26,25}; -Transfinite Surface{117} = {13,5,25,26}; - -<I><FONT COLOR="#B22222">// As with Extruded meshes, the Recombine command tells Gmsh to -</FONT></I><I><FONT COLOR="#B22222">// recombine the simplices into quadrangles, prisms or hexahedra when -</FONT></I><I><FONT COLOR="#B22222">// possible. A colon in a list acts as in the 'For' loop: all surfaces -</FONT></I><I><FONT COLOR="#B22222">// having numbers between 55 and 127 are considered. -</FONT></I> -Recombine Surface {55:127}; - -<I><FONT COLOR="#B22222">// *All* 2D and 3D transfinite entities are defined in respect to -</FONT></I><I><FONT COLOR="#B22222">// points. The ordering of the points defines the ordering of the mesh -</FONT></I><I><FONT COLOR="#B22222">// elements. -</FONT></I> -Transfinite Volume{129} = {1,14,15,18,16,17}; -Transfinite Volume{131} = {17,16,14,15,20,19,2,10}; -Transfinite Volume{133} = {18,17,16,6,20,19}; -Transfinite Volume{135} = {10,2,19,20,11,3,21,22}; -Transfinite Volume{137} = {6,20,19,7,22,21}; -Transfinite Volume{139} = {11,3,4,12,22,21,23,24}; -Transfinite Volume{141} = {7,22,21,8,24,23}; -Transfinite Volume{143} = {12,4,5,13,24,23,25,26}; -Transfinite Volume{145} = {8,24,23,9,26,25}; - -VolInt = 1000 ; -SurfIntPhi0 = 1001 ; -SurfIntPhi1 = 1002 ; -SurfIntZ0 = 1003 ; - -VolShell = 2000 ; -SurfShellInt = 2001 ; -SurfShellExt = 2002 ; -SurfShellPhi0 = 2003 ; -SurfShellPhi1 = 2004 ; -SurfShellZ0 = 2005 ; -LineShellIntPhi0 = 2006 ; -LineShellIntPhi1 = 2007 ; -LineShellIntZ0 = 2008 ; -PointShellInt = 2009 ; - -VolExt = 3000 ; -VolInf = 3001 ; -SurfInf = 3002 ; -SurfExtInfPhi0 = 3003 ; -SurfExtInfPhi1 = 3004 ; -SurfExtInfZ0 = 3005 ; -SurfInfRight = 3006 ; -SurfInfTop = 3007 ; - -Physical Volume (VolInt) = {129,131,133} ; -Physical Surface (SurfIntPhi0) = {55,57,65} ; -Physical Surface (SurfIntPhi1) = {73,75,83} ; -Physical Surface (SurfIntZ0) = {91,121} ; - -Physical Volume (VolShell) = {135,137} ; -Physical Surface (SurfShellInt) = {105,107} ; -Physical Surface (SurfShellExt) = {109,111} ; -Physical Surface (SurfShellPhi0) = {59,67} ; -Physical Surface (SurfShellPhi1) = {77,85} ; -Physical Surface (SurfShellZ0) = {123} ; -Physical Line (LineShellIntPhi0) = {1,2} ; -Physical Line (LineShellIntPhi1) = {9,10} ; -Physical Line (LineShellIntZ0) = 21 ; -Physical Point (PointShellInt) = 6 ; - -Physical Volume (VolExt) = {139,141} ; -Physical Volume (VolInf) = {143,145} ; -Physical Surface (SurfExtInfPhi0) = {61,63,69,71} ; -Physical Surface (SurfExtInfPhi1) = {79,87,81,89} ; -Physical Surface (SurfExtInfZ0) = {125,127} ; -Physical Surface (SurfInfRight) = {117} ; -Physical Surface (SurfInfTop) = {119} ; -</PRE> -<HR> -<A NAME="file8"> -<H1>t7.geo 8/10</H1> -[<A HREF="#top">top</A>][<A HREF="#file7">prev</A>][<A HREF="#file9">next</A>] -<PRE> -<I><FONT COLOR="#B22222">/********************************************************************* - * - * Gmsh tutorial 7 - * - * Anisotropic meshes, Attractors - * - *********************************************************************/</FONT></I> - -<I><FONT COLOR="#B22222">// The new anisotropic 2D mesh generator can be selected with: -</FONT></I> -Mesh.Algorithm = 2 ; - -<I><FONT COLOR="#B22222">// One can force a 4 step Laplacian smoothing of the mesh with: -</FONT></I> -Mesh.Smoothing = 4 ; - -lc = .1; - -Point(1) = {0.0,0.0,0,lc}; -Point(2) = {1,0.0,0,lc}; -Point(3) = {1,1,0,lc}; -Point(4) = {0,1,0,lc}; - -Line(1) = {3,2}; -Line(2) = {2,1}; -Line(3) = {1,4}; -Line(4) = {4,3}; - -Line Loop(5) = {1,2,3,4}; -Plane Surface(6) = {5}; - -Point(5) = {0.1,0.2,0,lc}; -Point(11) = {0.5,0.5,-1,lc}; -Point(22) = {0.6,0.6,1,lc}; - -Line(5) = {11,22}; - -<I><FONT COLOR="#B22222">// Anisotropic attractors can be defined on points and lines: -</FONT></I> -Attractor Line{5} = {.1, 0.01, 17}; - -Attractor Line{1,2} = {0.1, 0.005, 3}; -</PRE> -<HR> -<A NAME="file9"> -<H1>t8.geo 9/10</H1> -[<A HREF="#top">top</A>][<A HREF="#file8">prev</A>][<A HREF="#file10">next</A>] -<PRE> -<I><FONT COLOR="#B22222">/********************************************************************* - * - * Gmsh tutorial 8 - * - * Post-Processing, Scripting, Animations, Options - * - *********************************************************************/</FONT></I> - -<I><FONT COLOR="#B22222">// The first example is included, as well as two post-processing maps -</FONT></I><I><FONT COLOR="#B22222">// (for the format of the post-processing maps, see the FORMATS file): -</FONT></I> -Include "t1.geo" ; -Include "view1.pos" ; -Include "view1.pos" ; - -<I><FONT COLOR="#B22222">// Some general options are set (all the options specified -</FONT></I><I><FONT COLOR="#B22222">// interactively can be directly specified in the ascii input -</FONT></I><I><FONT COLOR="#B22222">// files. The current options can be saved into a file by selecting -</FONT></I><I><FONT COLOR="#B22222">// 'File->Save as->GEO complete options')... -</FONT></I> -General.Trackball = 0 ; -General.RotationX = 0 ; -General.RotationY = 0 ; -General.RotationZ = 0 ; -General.Color.Background = White ; -General.Color.Text = Black ; -General.Orthographic = 0 ; -General.Axes = 0 ; - -<I><FONT COLOR="#B22222">// ...as well as some options for each post-processing view... -</FONT></I> -View[0].Name = "This is a very stupid demonstration..." ; -View[0].IntervalsType = 2 ; -View[0].OffsetZ = 0.05 ; -View[0].RaiseZ = 0 ; -View[0].Light = 1 ; - -View[1].Name = "...of Gmsh's scripting capabilities" ; -View[1].IntervalsType = 1 ; -View[1].ColorTable = { Green, Blue } ; -View[1].NbIso = 10 ; - -<I><FONT COLOR="#B22222">// ...and loop from 1 to 255 with a step of 1 is performed (to use a -</FONT></I><I><FONT COLOR="#B22222">// step different from 1, just add a third argument in the list, -</FONT></I><I><FONT COLOR="#B22222">// e.g. 'For num In {0.5:1.5:0.1}' increments num from 0.5 to 1.5 with -</FONT></I><I><FONT COLOR="#B22222">// a step of 0.1): -</FONT></I> -t = 0 ; - -For num In {1:255} - - View[0].TimeStep = t ; - View[1].TimeStep = t ; - - t = (View[0].TimeStep < View[0].NbTimeStep-1) ? t+1 : 0 ; - - View[0].RaiseZ += 0.01*t ; - - If (num == 3) - <I><FONT COLOR="#B22222">// We want to use mpeg_encode to create a nice 320x240 animation -</FONT></I> <I><FONT COLOR="#B22222">// for all frames when num==3: -</FONT></I> General.GraphicsWidth = 320 ; - General.GraphicsHeight = 240 ; - EndIf - - <I><FONT COLOR="#B22222">// It is possible to nest loops: -</FONT></I> - For num2 In {1:50} - - General.RotationX += 10 ; - General.RotationY = General.RotationX / 3 ; - General.RotationZ += 0.1 ; - - Sleep 0.01; <I><FONT COLOR="#B22222">// sleep for 0.01 second -</FONT></I> Draw; <I><FONT COLOR="#B22222">// draw the scene -</FONT></I> - If ((num == 3) && (num2 < 10)) - <I><FONT COLOR="#B22222">// The Sprintf function permits to create complex strings using -</FONT></I> <I><FONT COLOR="#B22222">// variables (since all Gmsh variables are treated internally as -</FONT></I> <I><FONT COLOR="#B22222">// double precision numbers, the format should only contain valid -</FONT></I> <I><FONT COLOR="#B22222">// double precision number format specifiers): -</FONT></I> Print Sprintf("t8-0%g.jpg", num2); - EndIf - - If ((num == 3) && (num2 >= 10)) - Print Sprintf("t8-%g.jpg", num2); - EndIf - - EndFor - - If(num == 3) - <I><FONT COLOR="#B22222">// We make a system call to generate the mpeg -</FONT></I> System "mpeg_encode t8.par" ; - EndIf - -EndFor - - -<I><FONT COLOR="#B22222">// Here is the list of available scripting commands: -</FONT></I><I><FONT COLOR="#B22222">// -</FONT></I><I><FONT COLOR="#B22222">// Merge string; (to merge a file) -</FONT></I><I><FONT COLOR="#B22222">// Draw; (to draw the scene) -</FONT></I><I><FONT COLOR="#B22222">// Mesh int; (to perform the mesh generation; 'int' = 0, 1, 2 or 3) -</FONT></I><I><FONT COLOR="#B22222">// Save string; (to save the mesh) -</FONT></I><I><FONT COLOR="#B22222">// Print string; (to print the graphic window) -</FONT></I><I><FONT COLOR="#B22222">// Sleep expr; (to sleep during expr seconds) -</FONT></I><I><FONT COLOR="#B22222">// Delete View[int]; (to free the view int) -</FONT></I><I><FONT COLOR="#B22222">// Delete Meshes; (to free all meshes) -</FONT></I><I><FONT COLOR="#B22222">// System string; (to execute a system call) -</FONT></I></PRE> -<HR> -<A NAME="file10"> -<H1>t9.geo 10/10</H1> -[<A HREF="#top">top</A>][<A HREF="#file9">prev</A>][next] -<PRE> -<I><FONT COLOR="#B22222">/********************************************************************* - * - * Gmsh tutorial 9 - * - * Post-Processing, Plugins - * - *********************************************************************/</FONT></I> - -<I><FONT COLOR="#B22222">// Plugins can be added to Gmsh in order to extend its -</FONT></I><I><FONT COLOR="#B22222">// capabilities. For example, post-processing plugins can modify a -</FONT></I><I><FONT COLOR="#B22222">// view, or create a new view based on previously loaded -</FONT></I><I><FONT COLOR="#B22222">// views. Several default plugins are statically linked into Gmsh, -</FONT></I><I><FONT COLOR="#B22222">// e.g. CutMap, CutPlane, CutSphere, Skin, Transform or Smooth. -</FONT></I> -<I><FONT COLOR="#B22222">// Let's load a three-dimensional scalar view -</FONT></I> -Include "view3.pos" ; - -<I><FONT COLOR="#B22222">// Plugins can be controlled as other options in Gmsh. For example, -</FONT></I><I><FONT COLOR="#B22222">// the CutMap plugin extracts an isovalue surface from a 3D scalar -</FONT></I><I><FONT COLOR="#B22222">// view. The plugin can either be called from the graphical interface -</FONT></I><I><FONT COLOR="#B22222">// (right click on the view button, then Plugins->CutMap), or from -</FONT></I><I><FONT COLOR="#B22222">// the command file, as is shown below. -</FONT></I> -<I><FONT COLOR="#B22222">// This sets the optional parameter A of the CutMap plugin to the -</FONT></I><I><FONT COLOR="#B22222">// value 0.67 (see the About in the graphical interface for the -</FONT></I><I><FONT COLOR="#B22222">// documentation of each plugin), and runs the plugin: -</FONT></I> -Plugin(CutMap).A = 0.67 ; -Plugin(CutMap).iView = 0 ; <I><FONT COLOR="#B22222">//select View[0] as the working view -</FONT></I>Plugin(CutMap).Run ; - -<I><FONT COLOR="#B22222">// The following runs the CutPlane plugin: -</FONT></I> -Plugin(CutPlane).A = 0 ; -Plugin(CutPlane).B = 0.2 ; -Plugin(CutPlane).C = 1 ; -Plugin(CutPlane).D = 0 ; -Plugin(CutPlane).Run ; - -View[0].Light = 1; -View[0].IntervalsType = 2; -View[0].NbIso = 6; -View[0].SmoothNormals = 1; - -View[1].IntervalsType = 2; - -View[2].IntervalsType = 2; -Draw; -</PRE> -<HR> -<ADDRESS>Generated by <A HREF="http://www.iki.fi/~mtr/genscript/">GNU enscript 1.6.1</A>.</ADDRESS> -</BODY> -</HTML> diff --git a/tutorial/view1.pos b/tutorial/view1.pos deleted file mode 100644 index 988ee3e42288b3cd82af963725da0a924e490b80..0000000000000000000000000000000000000000 --- a/tutorial/view1.pos +++ /dev/null @@ -1,1287 +0,0 @@ -/********************************************************************* - * - * Gmsh tutorial 1 - appendix 1 - * - * Scalar view - * - *********************************************************************/ - -// In this view, there are only scalar triangles. -// There are 5 time steps -> 3*5 = 15 values for each triangle. - -View "a scalar map" { -ST(0.079090117,0.19794942,0,0.06966854,0.20076802,0,0.071449289,0.19423207,0){1206859.6,1570520.4,1594804.6,-2368529.7,-3162888.4,-3019964.8,1073015.3,1636334.6,1103926.4,1335740.9,1503948.1,2033518.7,-2359414.1,-3161601.9,-2921575.1}; -ST(0.056317057,0.058022103,0,0.045416206,0.061541227,0,0.048663579,0.053435419,0){3630316.8,3642820.9,3726394.8,2330872.5,2181474.8,2589713.3,197001.66,-155055.51,663071.82,-2007682.1,-2429600.5,-1465861.1,-3494460.7,-3730025.8,-3147918.6}; -ST(0.052494391,0.065958781,0,0.045416206,0.061541227,0,0.056317057,0.058022103,0){3640248,3642820.9,3630316.8,1971511.2,2181474.8,2330872.5,-601016.65,-155055.51,197001.66,-2898090,-2429600.5,-2007682.1,-3866942,-3730025.8,-3494460.7}; -ST(0.089437553,0.21298247,0,0.093706234,0.20596864,0,0.1,0.21428571,0){556322.48,360320.46,0,-1238115.4,-758974.46,0,961021.23,479351.87,0,60411.18,228803.73,0,-1035404.3,-732939.79,0}; -ST(0,0.021428571,0,0.0084994266,0.025462386,0,0,0.028571429,0){0,1014895.2,0,0,943121.65,0,0,804669.5,0,0,609367.99,0,0,370926.59,0}; -ST(0,0.27142857,0,0.0087746229,0.27470702,0,0,0.27857143,0){0,139476.7,0,0,-408686.72,0,0,649356.33,0,0,-844695.79,0,0,980930.37,0}; -ST(0.064352171,0.083117586,0,0.058212185,0.089881183,0,0.054828578,0.081464579,0){3167194.8,3344291.6,3492382.6,915483.69,593905.21,1101278.5,-1987167.2,-2645013.4,-2043909.2,-3477240.4,-3708817.1,-3789901.6,-2495770,-1722713.3,-2941538.5}; -ST(0.043491003,0.26677795,0,0.04563604,0.25694979,0,0.0528723,0.26429657,0){657627.62,859240.08,718299.05,-1894105.9,-2406042.8,-2055661.9,2903724.9,3472131.8,3109067.1,-3565612.1,-3844488.4,-3733060,3800401.2,3448330.3,3841282.5}; -ST(0.0528723,0.26429657,0,0.04563604,0.25694979,0,0.054010827,0.25507988,0){718299.05,859240.08,897184.36,-2055661.9,-2406042.8,-2496661.6,3109067.1,3472131.8,3553831.7,-3733060,-3844488.4,-3839088.9,3841282.5,3448330.3,3290330.5}; -ST(0.052748817,0.036292023,0,0.046341114,0.044942776,0,0.043838979,0.034579424,0){3796611.1,3748809.1,3745913.7,3254886.9,2933624.2,3260141.4,2248728.5,1480431.3,2351583.2,921690.78,-294933.53,1138042.7,-537197.11,-2006921.6,-223347.31}; -ST(0.054794838,0.043915046,0,0.046341114,0.044942776,0,0.052748817,0.036292023,0){3735662.6,3748809.1,3796611.1,2959425,2933624.2,3254886.9,1568238.5,1480431.3,2248728.5,-148813.91,-294933.53,921690.78,-1835117.4,-2006921.6,-537197.11}; -ST(0.064795861,0.023107998,0,0.057612168,0.01845715,0,0.064075209,0.013493001,0){3443592.1,3752599.8,3498581.2,3242943.8,3612875.5,3428890.3,2853338,3338613.5,3290906.4,2297494.4,2940029.2,3087427.7,1607540.9,2431782.4,2822154}; -ST(0.08812606,0.087328167,0,0.091953893,0.078440357,0,0.1,0.085714286,0){1269155.7,889726.23,0,279658.57,322434.75,0,-927894.68,-450550.32,0,-1412053.3,-936443.15,0,-795447.99,-825354.72,0}; -ST(0.1,0.21428571,0,0.091864029,0.22106993,0,0.089437553,0.21298247,0){0,394005.54,556322.48,0,-927852.61,-1238115.4,0,863120.02,961021.23,0,-241435.16,60411.18,0,-536498.87,-1035404.3}; -ST(0.091758141,0.11296708,0,0.08466046,0.11619385,0,0.082583958,0.10907049,0){824791.32,1475783,1698614.9,-201020.76,-452604.25,-286603.09,-976886.6,-1789662.1,-1936849,-537824.26,-788262.21,-1323464.6,570097.26,1243195.1,836522.31}; -ST(0.046341114,0.044942776,0,0.053426379,0.049768916,0,0.048663579,0.053435419,0){3748809.1,3727873.1,3726394.8,2933624.2,2738031.5,2589713.3,1480431.3,1021148,663071.82,-294933.53,-966926.63,-1465861.1,-2006921.6,-2698501,-3147918.6}; -ST(0.08596482,0.28314521,0,0.082516133,0.27647665,0,0.089232651,0.27618677,0){145967.81,248899.48,160151.6,-433371.98,-731674.12,-470555.02,707326.96,1170289.2,751874.95,-959333.22,-1538273.3,-986723.61,1181452.3,1813237.5,1160401.4}; -ST(0.089183466,0.023798504,0,0.082332164,0.023444943,0,0.085905658,0.016824409,0){1283383.3,2029600,1656238,1204105.7,1907886.4,1604967.9,1050439.6,1671751.1,1504009.2,831874.08,1335359.8,1356492.3,561630.79,918760.81,1166855}; -ST(0.051013063,0.11801667,0,0.052058531,0.12554764,0,0.045375723,0.12284566,0){3161388.4,3065498.6,3072436,-1083065.4,-1512626.5,-1348503.3,-3873486.3,-3831818,-3829159.4,-1463412.7,-428428.64,-800055.99,2911579,3614977.4,3380414.3}; -ST(0.076938259,0.060604721,0,0.080938662,0.054906318,0,0.08415119,0.061061125,0){2443533.2,2097661.4,1759442.9,1491930.8,1423084,1064240.3,-40674.57,290856.94,-51487.645,-1557435.8,-934922.56,-1146904.2,-2468002.6,-1860365.1,-1789550.6}; -ST(0.027903545,0.087518505,0,0.025411973,0.082310594,0,0.032911969,0.081185013,0){2674848,2525130.6,3037931.3,580994.77,762374.09,971274.35,-1967676.8,-1532614.6,-1756226.8,-2976106,-2757779.1,-3289165.4,-1655065.1,-2058136.4,-2584916.3}; -ST(0.045116599,0.21481108,0,0.053910411,0.21448753,0,0.049797208,0.2214244,0){1654487.5,1667429.4,1551864.2,-3731787.4,-3752161.8,-3662861.4,3030991.5,3023771,3430735.4,-73694.316,-28239.212,-1003918.8,-2938909.4,-2988983.1,-2065424.5}; -ST(0.064795861,0.023107998,0,0.057707972,0.025075094,0,0.057612168,0.01845715,0){3443592.1,3734947.8,3752599.8,3242943.8,3478918.2,3612875.5,2853338,2984396.6,3338613.5,2297494.4,2285289.9,2940029.2,1607540.9,1429238.8,2431782.4}; -ST(0.0093450955,0.28843768,0,0.0045473776,0.2936365,0,0,0.28571429,0){67949.514,18406.211,0,-202850.84,-55138.333,0,334776.34,91630.552,0,-461793.67,-127724.83,0,581935.08,162961.08,0}; -ST(0.1,0.13571429,0,0.093938974,0.13899,0,0.0910478,0.13167545,0){0,548364.78,831136.87,0,-422206.84,-514132.23,0,-645591.08,-1027305.8,0,273728.87,122313.64,0,708600.91,1073956.7}; -ST(0,0.014285714,0,0.0045481906,0.0063920675,0,0.0093389246,0.011691623,0){0,552257.15,1120186.5,0,549810.55,1103410.3,0,544927.47,1070108.3,0,537633.65,1020788.4,0,527798.54,956114.18}; -ST(0.085905658,0.016824409,0,0.093571257,0.018380777,0,0.089183466,0.023798504,0){1656238,774815.13,1283383.3,1604967.9,746204.54,1204105.7,1504009.2,690036.86,1050439.6,1356492.3,608388.09,831874.08,1166855,504051.02,561630.79}; -ST(0.089232651,0.27618677,0,0.093593186,0.28160993,0,0.08596482,0.28314521,0){160151.6,74588.283,145967.81,-470555.02,-221009.65,-433371.98,751874.95,359269.18,707326.96,-986723.61,-484261.41,-959333.22,1160401.4,591230.88,1181452.3}; -ST(0.015416139,0.018002698,0,0.006650898,0.018174199,0,0.0093389246,0.011691623,0){1798828.3,801243.34,1120186.5,1735136,772347.91,1103410.3,1609995.5,715593.27,1070108.3,1427830.3,633022.27,1020788.4,1194733.1,527557,956114.18}; -ST(0.0093450955,0.28843768,0,0.0067236406,0.28198319,0,0.015498485,0.28248556,0){67949.514,76627.274,166274.63,-202850.84,-227172.13,-493262.57,334776.34,369685.4,803759.61,-461793.67,-499127.77,-1087394.1,581935.08,610772.43,1334475.8}; -ST(0.048076401,0.17082416,0,0.048811039,0.17808485,0,0.041643161,0.17482395,0){2424680.5,2310715.6,2284160.6,-3473815.1,-3650410,-3458410.7,-921629.25,-194330.82,-506290.81,3872759.5,3763231.4,3718851.8,-754316.94,-1987755.8,-1405815.9}; -ST(0.041643161,0.17482395,0,0.048811039,0.17808485,0,0.043573225,0.18196099,0){2284160.6,2310715.6,2202933.2,-3458410.7,-3650410,-3650165.7,-506290.81,-194330.82,195066.32,3718851.8,3763231.4,3522129.2,-1405815.9,-1987755.8,-2509350}; -ST(0.020973714,0.16688371,0,0.021502186,0.15931359,0,0.029380008,0.16405835,0){1525118.3,1630158.4,2021292.5,-2061659.5,-1947614.2,-2614335.2,-799875.51,-1250943.8,-1254306.4,2343184.8,2191316.6,2982541.3,-24581.749,824223.66,378860.61}; -ST(0.075422073,0.20645372,0,0.06966854,0.20076802,0,0.079090117,0.19794942,0){1273700.5,1570520.4,1206859.6,-2693470,-3162888.4,-2368529.7,1728669,1636334.6,1073015.3,766631.5,1503948.1,1335740.9,-2583646.6,-3161601.9,-2359414.1}; -ST(0.077619244,0.18028791,0,0.077140734,0.17217741,0,0.085369203,0.17624497,0){1471797.4,1584233.7,1039089.6,-2389894.4,-2313491.7,-1603144.1,18944.546,-519338.58,-168940.91,2378251.6,2552719.3,1695116.9,-1502642.9,-655929.75,-751642.95}; -ST(0.0084994266,0.025462386,0,0.006650898,0.018174199,0,0.015416139,0.018002698,0){1014895.2,801243.34,1798828.3,943121.65,772347.91,1735136,804669.5,715593.27,1609995.5,609367.99,633022.27,1427830.3,370926.59,527557,1194733.1}; -ST(0.015498485,0.28248556,0,0.0067236406,0.28198319,0,0.0087746229,0.27470702,0){166274.63,76627.274,139476.7,-493262.57,-227172.13,-408686.72,803759.61,369685.4,649356.33,-1087394.1,-499127.77,-844695.79,1334475.8,610772.43,980930.37}; -ST(0.029380008,0.16405835,0,0.021502186,0.15931359,0,0.027609688,0.15620978,0){2021292.5,1630158.4,2023546.1,-2614335.2,-1947614.2,-2286520.9,-1254306.4,-1250943.8,-1726415,2982541.3,2191316.6,2510934.9,378860.61,824223.66,1400022.9}; -ST(0.0087746229,0.27470702,0,0.018422519,0.27450763,0,0.015498485,0.28248556,0){139476.7,282501.19,166274.63,-408686.72,-827496.14,-493262.57,649356.33,1313896,803759.61,-844695.79,-1707268.8,-1087394.1,980930.37,1979556.1,1334475.8}; -ST(0.014305262,0.26641769,0,0.018422519,0.27450763,0,0.0087746229,0.27470702,0){294901.31,282501.19,139476.7,-848621.76,-827496.14,-408686.72,1298521.9,1313896,649356.33,-1589572.3,-1707268.8,-844695.79,1686004.5,1979556.1,980930.37}; -ST(0.0084994266,0.025462386,0,0.016759526,0.025876157,0,0.014137494,0.034012185,0){1014895.2,1932221.9,1641076.4,943121.65,1791225.7,1435142,804669.5,1519509.7,1049094.4,609367.99,1136895.1,531342.12,370926.59,671081.1,-53364.585}; -ST(0.015416139,0.018002698,0,0.016759526,0.025876157,0,0.0084994266,0.025462386,0){1798828.3,1932221.9,1014895.2,1735136,1791225.7,943121.65,1609995.5,1519509.7,804669.5,1427830.3,1136895.1,609367.99,1194733.1,671081.1,370926.59}; -ST(0.025770754,0.10718168,0,0.032036001,0.10024616,0,0.034786476,0.1076516,0){2378738.7,2837469.6,2912738.3,-316264.13,-12660.65,-413135.58,-2653040.8,-2850146.6,-3267374.9,-1984140.6,-2824890.6,-2390915.6,932667.69,37524.098,1215377.6}; -ST(0.024938414,0.098415267,0,0.032036001,0.10024616,0,0.025770754,0.10718168,0){2383058.5,2837469.6,2378738.7,68195.72,-12660.65,-316264.13,-2312962.3,-2850146.6,-2653040.8,-2447461.4,-2824890.6,-1984140.6,-204726.33,37524.098,932667.69}; -ST(0.049797208,0.2214244,0,0.053910411,0.21448753,0,0.05718895,0.22161738,0){1551864.2,1667429.4,1508977,-3662861.4,-3752161.8,-3566099.1,3430735.4,3023771,3352547.9,-1003918.8,-28239.212,-1004251.2,-2065424.5,-2988983.1,-1983866.6}; -ST(0.1,0.21428571,0,0.093706234,0.20596864,0,0.1,0.20714286,0){0,360320.46,0,0,-758974.46,0,0,479351.87,0,0,228803.73,0,0,-732939.79,0}; -ST(0.066012722,0.055502179,0,0.064832361,0.062804408,0,0.056317057,0.058022103,0){3257272.9,3281120.4,3630316.8,2187557.2,1912310.8,2330872.5,399401.17,-254314.65,197001.66,-1519988.7,-2314932.7,-2007682.1,-2940625.1,-3410309.6,-3494460.7}; -ST(0.063265205,0.21633109,0,0.066992124,0.20847551,0,0.073708403,0.21517194,0){1505335.5,1540360.8,1225969.3,-3432481.9,-3311175.4,-2772471.1,2888962.8,2266191.6,2271379.1,-265885.87,706070.36,-92677.622,-2549234.8,-3078419.5,-2155133.8}; -ST(0.073708403,0.21517194,0,0.066992124,0.20847551,0,0.075422073,0.20645372,0){1225969.3,1540360.8,1273700.5,-2772471.1,-3311175.4,-2693470,2271379.1,2266191.6,1728669,-92677.622,706070.36,766631.5,-2155133.8,-3078419.5,-2583646.6}; -ST(0.015498485,0.28248556,0,0.017990672,0.29207379,0,0.0093450955,0.28843768,0){166274.63,86228.122,67949.514,-493262.57,-258100.45,-202850.84,803759.61,428229.3,334776.34,-1087394.1,-595472.42,-461793.67,1334475.8,758576.15,581935.08}; -ST(0.0093389246,0.011691623,0,0.01808004,0.0081573173,0,0.015416139,0.018002698,0){1120186.5,2085729.2,1798828.3,1103410.3,2070583.9,1735136,1070108.3,2040406.9,1609995.5,1020788.4,1995444.2,1427830.3,956114.18,1935913.6,1194733.1}; -ST(0.089949388,0.2453858,0,0.092168655,0.23668616,0,0.1,0.24285714,0){339950.36,307607.26,0,-911669.73,-792496.69,0,1193275.4,941630.33,0,-1095139.7,-691810.02,0,648419.14,148523.72,0}; -ST(0.077013163,0.11736903,0,0.074105201,0.11070107,0,0.082583958,0.10907049,0){2095773.2,2359475.3,1698614.9,-691227.47,-471755.94,-286603.09,-2559181.5,-2736894.8,-1936849,-1023961.4,-1717960.7,-1323464.6,1873161.8,1362139.4,836522.31}; -ST(0.1,0.13571429,0,0.0910478,0.13167545,0,0.1,0.12857143,0){0,831136.87,0,0,-514132.23,0,0,-1027305.8,0,0,122313.64,0,0,1073956.7,0}; -ST(0.087331535,0.0958472,0,0.081743274,0.092625466,0,0.08812606,0.087328167,0){1318484.3,1862860,1269155.7,98077.228,243386.47,279658.57,-1213131.9,-1587731,-927894.68,-1401481.2,-2038652.4,-1412053.3,-292629.72,-717394.49,-795447.99}; -ST(0.091053567,0.10618538,0,0.091758141,0.11296708,0,0.082583958,0.10907049,0){914271.31,824791.32,1698614.9,-104388.15,-201020.76,-286603.09,-1006721.9,-976886.6,-1936849,-787386.88,-537824.26,-1323464.6,309052.61,570097.26,836522.31}; -ST(0.092857143,0.3,0,0.091323117,0.29067423,0,0.1,0.29285714,0){0,51002.156,0,0,-152526.43,0,0,252617.29,0,0,-350336.87,0,0,444691.33,0}; -ST(0.1,0.0071428571,0,0.091308694,0.0093164623,0,0.092857143,0,0){0,1045151,863626.15,0,1035216.9,863662.39,0,1015442.8,863732,0,986027.05,863838.35,0,947106.05,863813.95}; -ST(0.011573719,0.041901165,0,0.0063343033,0.038958017,0,0.014137494,0.034012185,0){1347025.1,751213.74,1641076.4,1091815.8,627892.11,1435142,629744.45,401490.67,1049094.4,48353.226,109174.99,531342.12,-542301.86,-201236.23,-53364.585}; -ST(0.019499739,0.079597209,0,0.01882241,0.070374011,0,0.026270926,0.075674812,0){2040354.6,2018056.9,2630439.6,702945.71,970762.8,1063205.3,-1095289.5,-580354.6,-1137545.6,-2175701.2,-1830388.5,-2660659.2,-1830384.7,-2130853.3,-2599027.8}; -ST(0.011268327,0.1984065,0,0.015977634,0.20443356,0,0.007303543,0.20469543,0){682302.12,895779.15,422375.13,-1344805.9,-1862602.8,-880191.16,623458.07,1114548.4,531663.92,739532.85,659707.69,303952.91,-1341727.7,-1827076.9,-861341.37}; -ST(0.057323957,0.1204315,0,0.052058531,0.12554764,0,0.051013063,0.11801667,0){3051716.5,3065498.6,3161388.4,-1191883,-1512626.5,-1083065.4,-3778168.4,-3831818,-3873486.3,-1110713.1,-428428.64,-1463412.7,3101303,3614977.4,2911579}; -ST(0.089858368,0.18421461,0,0.091593501,0.1915477,0,0.084368038,0.19048099,0){692603.24,544831.72,992852.93,-1178349.1,-1004107.1,-1809621.2,133849.22,301623.68,495817.1,1084450.2,749822.54,1401810.9,-894447.98,-933881.71,-1649308.4}; -ST(0.015758122,0.23699049,0,0.0069516057,0.23320895,0,0.011838853,0.2301677,0){597291.98,288078.49,504229.49,-1541119.1,-728952.19,-1254859.2,1837947.1,827497.2,1363834.1,-1363109.4,-537397.4,-775392.51,315646.37,-5267.3055,-209768.04}; -ST(0.054794838,0.043915046,0,0.053426379,0.049768916,0,0.046341114,0.044942776,0){3735662.6,3727873.1,3748809.1,2959425,2738031.5,2933624.2,1568238.5,1021148,1480431.3,-148813.91,-966926.63,-294933.53,-1835117.4,-2698501,-2006921.6}; -ST(0,0.28571429,0,0.0067236406,0.28198319,0,0.0093450955,0.28843768,0){0,76627.274,67949.514,0,-227172.13,-202850.84,0,369685.4,334776.34,0,-499127.77,-461793.67,0,610772.43,581935.08}; -ST(0.0093389246,0.011691623,0,0.006650898,0.018174199,0,0,0.014285714,0){1120186.5,801243.34,0,1103410.3,772347.91,0,1070108.3,715593.27,0,1020788.4,633022.27,0,956114.18,527557,0}; -ST(0,0.078571429,0,0.0064539684,0.081629255,0,0,0.085714286,0){0,711139.06,0,0,222377.16,0,0,-419239.47,0,0,-772749.89,0,0,-595288.06,0}; -ST(0.085714286,0.3,0,0.081165886,0.29137431,0,0.091323117,0.29067423,0){0,97729.953,51002.156,0,-292395.17,-152526.43,0,484687.71,252617.29,0,-673055.06,-350336.87,0,855744.16,444691.33}; -ST(0.054876921,0.07294965,0,0.060416267,0.076932239,0,0.054828578,0.081464579,0){3558755.8,3380545.3,3492382.6,1580988.4,1302521.2,1101278.5,-1275447.3,-1576156.6,-2043909.2,-3423192.1,-3485992.8,-3789901.6,-3669097.1,-3253298.6,-2941538.5}; -ST(0.091308694,0.0093164623,0,0.081119523,0.0085521597,0,0.085714286,0,0){1045151,2167108.8,1683752,1035216.9,2149779.2,1683802.7,1015442.8,2115263.6,1683911.1,986027.05,2063869.7,1684108.7,947106.05,1995657.9,1684003.7}; -ST(0.044666369,0.11545829,0,0.042557423,0.10832344,0,0.050721192,0.10961634,0){3148096.1,3183930.6,3257974.6,-920013.3,-492142.06,-583831.78,-3799301.5,-3600076,-3737290.3,-1769018.1,-2551523.2,-2483878.9,2547335.8,1442840.6,1698581.7}; -ST(0.076498673,0.26519709,0,0.083190767,0.25723975,0,0.085115353,0.26563346,0){473307.48,434158.6,313056.52,-1357765.2,-1216864.4,-899063.8,2063933,1759626.8,1369900.4,-2499100.3,-1955417.3,-1665255.4,2605934.6,1765235.2,1747205.8}; -ST(0.084917502,0.034253561,0,0.082493405,0.042375289,0,0.075978544,0.034466341,0){1742331.8,1978611.8,2615244.9,1520580.8,1595319.9,2278283.7,1105294,902966.17,1647758.2,549324.68,35643.43,804880.96,-76880.401,-838916.97,-142067.87}; -ST(0.061244461,0.14481879,0,0.068478919,0.13862632,0,0.069467767,0.146519,0){2643484.5,2426951.1,2287173.5,-2356788.3,-1850187.5,-2120501.9,-2899198.4,-2866745.3,-2441744.6,2042509.4,1169007.7,1942651.5,3121060.9,3144665.9,2583122}; -ST(0.030075176,0.23324008,0,0.022740693,0.23189018,0,0.026971271,0.22659033,0){1077047.3,887604.04,1090633.5,-2725827,-2230116.3,-2658504.1,3095770.8,2485475.6,2731189,-2013325.9,-1529145.6,-1267784.1,-13872.597,-172982.46,-909068.56}; -ST(0.071449289,0.19423207,0,0.076430303,0.18837043,0,0.079090117,0.19794942,0){1594804.6,1444535.6,1206859.6,-3019964.8,-2574453.4,-2368529.7,1103926.4,569102.25,1073015.3,2033518.7,2129625.3,1335740.9,-2921575.1,-2235391.7,-2359414.1}; -ST(0.01062282,0.18656765,0,0.0066871595,0.19241823,0,0,0.18571429,0){711483.53,432113.5,0,-1243147.4,-803518.34,0,217509.34,258472.73,0,1080570.1,581490.34,0,-1025407.6,-758588.26,0}; -ST(0.028699663,0.054481756,0,0.032659307,0.059686042,0,0.025221599,0.062165695,0){2920693,3158137.1,2618029.3,1995520.8,1964024.3,1547191.2,438210.61,27282.242,-156575.4,-1257984.1,-1919818.3,-1796512.5,-2556170.3,-3141270.1,-2702051.5}; -ST(0.032911969,0.081185013,0,0.033761495,0.088496681,0,0.027903545,0.087518505,0){3037931.3,3029395.9,2674848,971274.35,608605.12,580994.77,-1756226.8,-2298547.5,-1967676.8,-3289165.4,-3368980,-2976106,-2584916.3,-1747439.7,-1655065.1}; -ST(0.0084994266,0.025462386,0,0.0058133292,0.032528446,0,0,0.028571429,0){1014895.2,694559.72,0,943121.65,614750.96,0,804669.5,464300.7,0,609367.99,260495.38,0,370926.59,26512.55,0}; -ST(0,0.27142857,0,0.0060732531,0.2674669,0,0.0087746229,0.27470702,0){0,124750.88,139476.7,0,-359918.85,-408686.72,0,553735.12,649356.33,0,-683931.42,-844695.79,0,735399.5,980930.37}; -ST(0.007303543,0.20469543,0,0.015977634,0.20443356,0,0.013229009,0.21171696,0){422375.13,895779.15,698716.07,-880191.16,-1862602.8,-1540332.8,531663.92,1114548.4,1156621.3,303952.91,659707.69,147278.69,-861341.37,-1827076.9,-1334554.8}; -ST(0.036912897,0.21765752,0,0.045116599,0.21481108,0,0.042541479,0.22296234,0){1486590.9,1654487.5,1481591,-3421295.1,-3731787.4,-3531706.6,2965983.4,3030991.5,3405357.4,-438566.7,-73694.316,-1180392.3,-2395869.1,-2938909.4,-1772446.7}; -ST(0.038009007,0.015147577,0,0.029163144,0.015558324,0,0.031710863,0.0075461758,0){3597209.6,3068207,3254919.5,3506943.3,2986953.6,3234618.2,3328697.3,2826596.5,3194153.7,3067010.9,2591406.1,3133832.1,2728518.9,2287504.7,3053845.3}; -ST(0.077069107,0.15686929,0,0.070175425,0.16144206,0,0.070477538,0.15360968,0){1743907.9,2074683.8,2153625.7,-1994600,-2570674.4,-2316413.6,-1457243.4,-1460177,-1978592.7,2204191.1,2919916.2,2466066.8,1140253.2,762077.82,1792310.4}; -ST(0.077393474,0.16425214,0,0.070175425,0.16144206,0,0.077069107,0.15686929,0){1650679.7,2074683.8,1743907.9,-2141613.9,-2570674.4,-1994600,-1013799.5,-1460177,-1457243.4,2443278.1,2919916.2,2204191.1,287063.28,762077.82,1140253.2}; -ST(0.060825265,0.17090728,0,0.054395265,0.16699477,0,0.061476805,0.16269562,0){2288734.2,2465605.5,2391378.9,-3282960.5,-3338618.7,-3025373.1,-862639.89,-1283530.8,-1589341.3,3657845.3,3793219.5,3446908.2,-726586.11,-59660.123,675366.83}; -ST(0.08415119,0.061061125,0,0.079822506,0.065677674,0,0.076938259,0.060604721,0){1759442.9,2163855.5,2443533.2,1064240.3,1180001.4,1491930.8,-51487.645,-340376.77,-40674.57,-1146904.2,-1706002.2,-1557435.8,-1789550.6,-2296197.5,-2468002.6}; -ST(0.038843793,0.21103197,0,0.045116599,0.21481108,0,0.036912897,0.21765752,0){1637090.1,1654487.5,1486590.9,-3590120.4,-3731787.4,-3421295.1,2645890.8,3030991.5,2965983.4,433646.44,-73694.316,-438566.7,-3163532.2,-2938909.4,-2395869.1}; -ST(0.049165273,0.076760106,0,0.054876921,0.07294965,0,0.054828578,0.081464579,0){3570137.5,3558755.8,3492382.6,1384898,1580988.4,1101278.5,-1648055.9,-1275447.3,-2043909.2,-3672308.6,-3423192.1,-3789901.6,-3449021.3,-3669097.1,-2941538.5}; -ST(0.016927821,0.11108648,0,0.017861336,0.10270337,0,0.025770754,0.10718168,0){1644246.3,1773538.4,2378738.7,-340994.5,-87655.931,-316264.13,-1914445.6,-1856823.6,-2653040.8,-1176430.8,-1677437.3,-1984140.6,981584.41,261812.45,932667.69}; -ST(0.028699663,0.054481756,0,0.025221599,0.062165695,0,0.021658338,0.054940441,0){2920693,2618029.3,2341024.9,1995520.8,1547191.2,1587273.2,438210.61,-156575.4,322446.89,-1257984.1,-1796512.5,-1046241,-2556170.3,-2702051.5,-2078353.5}; -ST(0.050721192,0.10961634,0,0.054240748,0.10280037,0,0.059543685,0.10776494,0){3257974.6,3302360.6,3132791.5,-583831.78,-169115.68,-451048.14,-3737290.3,-3462856.5,-3519016.9,-2483878.9,-3116478.2,-2561357.9,1698581.7,505791.56,1326599.2}; -ST(0.059543685,0.10776494,0,0.054240748,0.10280037,0,0.061027247,0.098743066,0){3132791.5,3302360.6,3173016.6,-451048.14,-169115.68,72008.811,-3519016.9,-3462856.5,-3099474,-2561357.9,-3116478.2,-3241975.4,1326599.2,505791.56,-216202.29}; -ST(0.026971271,0.22659033,0,0.034969012,0.22634925,0,0.030075176,0.23324008,0){1090633.5,1299939.6,1077047.3,-2658504.1,-3164156.1,-2725827,2731189,3237729.2,3095770.8,-1267784.1,-1478956,-2013325.9,-909068.56,-1117524.9,-13872.597}; -ST(0.060432552,0.20227914,0,0.066992124,0.20847551,0,0.059551151,0.20970619,0){1798951.1,1540360.8,1688112.8,-3671781.8,-3311175.4,-3664209.4,2023610.8,2266191.6,2601193.1,1565241.8,706070.36,619333.89,-3653837,-3078419.5,-3326584.6}; -ST(0.066799394,0.09162077,0,0.058212185,0.089881183,0,0.064352171,0.083117586,0){2974160.1,3344291.6,3167194.8,440022.16,593905.21,915483.69,-2469083.6,-2645013.4,-1987167.2,-3274492.4,-3708817.1,-3477240.4,-1290097.2,-1722713.3,-2495770}; -ST(0.082942949,0.21818591,0,0.081656406,0.2108727,0,0.089437553,0.21298247,0){823054.75,951384.03,556322.48,-1901094.8,-2083808.1,-1238115.4,1667014.3,1528962.6,961021.23,-282341.7,263916.4,60411.18,-1297502.9,-1843401,-1035404.3}; -ST(0.072126291,0.10515927,0,0.069968451,0.098831219,0,0.079063451,0.10043005,0){2539730.3,2730411,2051820.1,-241283.81,57648.531,-16056.497,-2758172.2,-2671597.7,-2067914.3,-2254933.2,-2785714.6,-2035845.1,717337.89,-173126.8,48244.512}; -ST(0.1,0.014285714,0,0.093571257,0.018380777,0,0.091308694,0.0093164623,0){0,774815.13,1045151,0,746204.54,1035216.9,0,690036.86,1015442.8,0,608388.09,986027.05,0,504051.02,947106.05}; -ST(0.091323117,0.29067423,0,0.093593186,0.28160993,0,0.1,0.28571429,0){51002.156,74588.283,0,-152526.43,-221009.65,0,252617.29,359269.18,0,-350336.87,-484261.41,0,444691.33,591230.88,0}; -ST(0.027746664,0.13122119,0,0.030046638,0.13690443,0,0.021167753,0.13548502,0){2296333.1,2369378.2,1816935.7,-1399007.9,-1721516.8,-1266652.3,-2843055.5,-2840145.3,-2200669.4,288094.78,944948.24,600161.11,2955532.6,3098367.4,2382629.9}; -ST(0.044666369,0.11545829,0,0.051013063,0.11801667,0,0.045375723,0.12284566,0){3148096.1,3161388.4,3072436,-920013.3,-1083065.4,-1348503.3,-3799301.5,-3873486.3,-3829159.4,-1769018.1,-1463412.7,-800055.99,2547335.8,2911579,3380414.3}; -ST(0.1,0.085714286,0,0.093922759,0.092262381,0,0.08812606,0.087328167,0){0,652083.63,1269155.7,0,89312.894,279658.57,0,-550573,-927894.68,0,-715327.2,-1412053.3,0,-262838.8,-795447.99}; -ST(0.056766116,0.23329497,0,0.053624899,0.22742186,0,0.059957308,0.22757204,0){1298096.4,1430137,1366903.5,-3286228.7,-3503302.1,-3351367.9,3735031.6,3648370.9,3498598.8,-2434254.7,-1785483,-1727811.3,-7070.0355,-1060301.4,-990620.01}; -ST(0.032911969,0.081185013,0,0.025411973,0.082310594,0,0.026270926,0.075674812,0){3037931.3,2525130.6,2630439.6,971274.35,762374.09,1063205.3,-1756226.8,-1532614.6,-1137545.6,-3289165.4,-2757779.1,-2660659.2,-2584916.3,-2058136.4,-2599027.8}; -ST(0.1,0.057142857,0,0.09230899,0.063522919,0,0.08944657,0.05485846,0){0,877619.52,1211526.2,0,503392.8,822600.19,0,-85524.836,169573.91,0,-638068.15,-537958.1,0,-918939.46,-1073022.7}; -ST(0.034969012,0.22634925,0,0.037546984,0.23452457,0,0.030075176,0.23324008,0){1299939.6,1205921.7,1077047.3,-3164156.1,-3072707.6,-2725827,3237729.2,3550700.1,3095770.8,-1478956,-2423829.8,-2013325.9,-1117524.9,201013.93,-13872.597}; -ST(0.073708403,0.21517194,0,0.081656406,0.2108727,0,0.082942949,0.21818591,0){1225969.3,951384.03,823054.75,-2772471.1,-2083808.1,-1901094.8,2271379.1,1528962.6,1667014.3,-92677.622,263916.4,-282341.7,-2155133.8,-1843401,-1297502.9}; -ST(0.038464606,0.12667013,0,0.033010101,0.13109378,0,0.030575169,0.1246812,0){2859316.3,2584208,2526238.7,-1476046.2,-1567613,-1202245.8,-3573486.5,-3200932.4,-3156412.2,-252868.56,308418.11,-451924.48,3451249.3,3322264.5,2919641.1}; -ST(0.031264826,0.29263185,0,0.028198926,0.28535727,0,0.036602132,0.28491153,0){124484.17,230200.16,279518.56,-372709.78,-685197.76,-831596.18,618717.86,1124120.6,1362985.6,-861054.65,-1536674.3,-1860498.2,1098239.8,1912913.1,2311728.5}; -ST(0.030575169,0.1246812,0,0.033010101,0.13109378,0,0.027746664,0.13122119,0){2526238.7,2584208,2296333.1,-1202245.8,-1567613,-1399007.9,-3156412.2,-3200932.4,-2843055.5,-451924.48,308418.11,288094.78,2919641.1,3322264.5,2955532.6}; -ST(0.077013163,0.11736903,0,0.070840483,0.12204614,0,0.069025318,0.11622387,0){2095773.2,2470738.2,2631986.5,-691227.47,-1044803.2,-808686.45,-2559181.5,-3073782.1,-3192250.9,-1023961.4,-729197.53,-1402768.4,1873161.8,2652961,2220554.1}; -ST(0.037705658,0.25939989,0,0.034582704,0.26623209,0,0.030217898,0.25971254,0){758443.36,604041.77,660621.26,-2140288.6,-1737386.1,-1866014.4,3141072.6,2655775,2744196,-3582615.2,-3245580.1,-3141188.1,3385872.9,3433603.3,2987009.7}; -ST(0.084604507,0.15255901,0,0.08264437,0.14444108,0,0.09156348,0.14589395,0){1258841.2,1463951.5,734092.88,-1326319,-1293607.4,-670961.7,-1187789.9,-1614532.1,-791796.8,1390056.3,1105781,602866.55,1113216.6,1743195.6,843431.47}; -ST(0.09156348,0.14589395,0,0.08264437,0.14444108,0,0.087083587,0.13880919,0){734092.88,1463951.5,1144744.3,-670961.7,-1293607.4,-877072.07,-791796.8,-1614532.1,-1349889.8,602866.55,1105781,561444.4,843431.47,1743195.6,1481228.8}; -ST(0.034582704,0.26623209,0,0.027951851,0.26533243,0,0.030217898,0.25971254,0){604041.77,539100.43,660621.26,-1737386.1,-1547025.6,-1866014.4,2655775,2353298.6,2744196,-3245580.1,-2852826.8,-3141188.1,3433603.3,2980285,2987009.7}; -ST(0.043573225,0.18196099,0,0.038433858,0.18005903,0,0.041643161,0.17482395,0){2202933.2,2131117.1,2284160.6,-3650165.7,-3450732.6,-3458410.7,195066.32,5612.0128,-506290.81,3522129.2,3447337.8,3718851.8,-2509350,-2140463.9,-1405815.9}; -ST(0.019247887,0.048569646,0,0.014691551,0.054118398,0,0.013132659,0.04767246,0){2135187.8,1659245.8,1507774.2,1594654.5,1140472.1,1139737.5,650408.09,265092.56,493500.09,-458538.7,-693242.8,-273193.01,-1451674.1,-1435183.5,-973395.4}; -ST(0.021167753,0.13548502,0,0.023379755,0.12686903,0,0.027746664,0.13122119,0){1816935.7,2047772.9,2296333.1,-1266652.3,-1065433.1,-1399007.9,-2200669.4,-2558991,-2843055.5,600161.11,-162203.53,288094.78,2382629.9,2481221.5,2955532.6}; -ST(0.044666369,0.11545829,0,0.038084092,0.1145524,0,0.042557423,0.10832344,0){3148096.1,2981407.2,3183930.6,-920013.3,-818508.93,-492142.06,-3799301.5,-3575257.7,-3600076,-1769018.1,-1775238,-2551523.2,2547335.8,2287308.3,1442840.6}; -ST(0.021658338,0.054940441,0,0.014691551,0.054118398,0,0.019247887,0.048569646,0){2341024.9,1659245.8,2135187.8,1587273.2,1140472.1,1594654.5,322446.89,265092.56,650408.09,-1046241,-693242.8,-458538.7,-2078353.5,-1435183.5,-1451674.1}; -ST(0.061027247,0.098743066,0,0.065931692,0.10408722,0,0.059543685,0.10776494,0){3173016.6,2911358.9,3132791.5,72008.811,-218409.17,-451048.14,-3099474,-3113407,-3519016.9,-3241975.4,-2661455,-2561357.9,-216202.29,651464.78,1326599.2}; -ST(0,0.22142857,0,0.0051799073,0.21317882,0,0.010546892,0.2198034,0){0,276031.48,514716.79,0,-615227.88,-1201974.2,0,479976.29,1090194.6,0,25450.705,-253690.09,0,-511551.59,-751659.26}; -ST(0,0.12857143,0,0.0072553778,0.13224921,0,0,0.13571429,0){0,674958.82,0,0,-425463.67,0,0,-832230.25,0,0,117822.57,0,0,875622.71,0}; -ST(0.059543685,0.10776494,0,0.05615957,0.1141762,0,0.050721192,0.10961634,0){3132791.5,3147681.4,3257974.6,-451048.14,-840990.83,-583831.78,-3519016.9,-3764018.8,-3737290.3,-2561357.9,-1917372.9,-2483878.9,1326599.2,2358868.4,1698581.7}; -ST(0.043491003,0.26677795,0,0.045592054,0.27439642,0,0.037999827,0.27482627,0){657627.62,513714.39,474219.19,-1894105.9,-1504437.2,-1389905,2903724.9,2387679.2,2209621.2,-3565612.1,-3100344.3,-2876809.4,3800401.2,3591305.7,3345267.4}; -ST(0.075422073,0.20645372,0,0.081656406,0.2108727,0,0.073708403,0.21517194,0){1273700.5,951384.03,1225969.3,-2693470,-2083808.1,-2772471.1,1728669,1528962.6,2271379.1,766631.5,263916.4,-92677.622,-2583646.6,-1843401,-2155133.8}; -ST(0.048663579,0.053435419,0,0.042113175,0.053290167,0,0.046341114,0.044942776,0){3726394.8,3616583.4,3748809.1,2589713.3,2519252.9,2933624.2,663071.82,657513.67,1480431.3,-1465861.1,-1403801.4,-294933.53,-3147918.6,-3039615.4,-2006921.6}; -ST(0.074105201,0.11070107,0,0.076969725,0.10634022,0,0.082583958,0.10907049,0){2359475.3,2181001.1,1698614.9,-471755.94,-255488.75,-286603.09,-2736894.8,-2406546.5,-1936849,-1717960.7,-1869163.7,-1323464.6,1362139.4,756176.24,836522.31}; -ST(0.08812606,0.087328167,0,0.081743274,0.092625466,0,0.079265602,0.086677581,0){1269155.7,1862860,2114636.1,279658.57,243386.47,488789.06,-927894.68,-1587731,-1512904.7,-1412053.3,-2038652.4,-2351470.6,-795447.99,-717394.49,-1382326.1}; -ST(0.079090117,0.19794942,0,0.076430303,0.18837043,0,0.084368038,0.19048099,0){1206859.6,1444535.6,992852.93,-2368529.7,-2574453.4,-1809621.2,1073015.3,569102.25,495817.1,1335740.9,2129625.3,1401810.9,-2359414.1,-2235391.7,-1649308.4}; -ST(0.0071147476,0.24137211,0,0.0069516057,0.23320895,0,0.015758122,0.23699049,0){259907.57,288078.49,597291.98,-684802.64,-728952.19,-1541119.1,859611.54,827497.2,1837947.1,-720499.62,-537397.4,-1363109.4,317972.39,-5267.3055,315646.37}; -ST(0.075872285,0.081656016,0,0.074756101,0.075901522,0,0.082390534,0.079333541,0){2427639,2549479.1,1865676.5,758134.07,1021825.1,650380.91,-1432759.9,-1118145.3,-988603.29,-2638364.3,-2588166.7,-1983689.6,-2029677.1,-2507455.8,-1686881.4}; -ST(0,0.078571429,0,0.0060853536,0.074713803,0,0.0064539684,0.081629255,0){0,681675.12,711139.06,0,285253.65,222377.16,0,-277070.48,-419239.47,0,-678306.76,-772749.89,0,-685312.86,-595288.06}; -ST(0.050960377,0.23252058,0,0.053624899,0.22742186,0,0.056766116,0.23329497,0){1342135.9,1430137,1298096.4,-3383651.2,-3503302.1,-3286228.7,3804738.6,3648370.9,3735031.6,-2403721.7,-1785483,-2434254.7,-148681.88,-1060301.4,-7070.0355}; -ST(0.085714286,0.3,0,0.091323117,0.29067423,0,0.092857143,0.3,0){0,51002.156,0,0,-152526.43,0,0,252617.29,0,0,-350336.87,0,0,444691.33,0}; -ST(0.1,0.014285714,0,0.091308694,0.0093164623,0,0.1,0.0071428571,0){0,1045151,0,0,1035216.9,0,0,1015442.8,0,0,986027.05,0,0,947106.05,0}; -ST(0.056317057,0.058022103,0,0.061015306,0.048529238,0,0.066012722,0.055502179,0){3630316.8,3533367.8,3257272.9,2330872.5,2640342.3,2187557.2,197001.66,1080012.2,399401.17,-2007682.1,-753291.7,-1519988.7,-3494460.7,-2396723.8,-2940625.1}; -ST(0.092857143,0,0,0.091308694,0.0093164623,0,0.085714286,0,0){863626.15,1045151,1683752,863662.39,1035216.9,1683802.7,863732,1015442.8,1683911.1,863838.35,986027.05,1684108.7,863813.95,947106.05,1684003.7}; -ST(0.1,0.29285714,0,0.091323117,0.29067423,0,0.1,0.28571429,0){0,51002.156,0,0,-152526.43,0,0,252617.29,0,0,-350336.87,0,0,444691.33,0}; -ST(0.03928574,0.29335694,0,0.031264826,0.29263185,0,0.036602132,0.28491153,0){127378.94,124484.17,279518.56,-381522.06,-372709.78,-831596.18,633829.06,618717.86,1362985.6,-883092.25,-861054.65,-1860498.2,1127859.7,1098239.8,2311728.5}; -ST(0.038009007,0.015147577,0,0.031710863,0.0075461758,0,0.039686874,0.0066116125,0){3597209.6,3254919.5,3676489.9,3506943.3,3234618.2,3658909.3,3328697.3,3194153.7,3623831.1,3067010.9,3133832.1,3571457.2,2728518.9,3053845.3,3501797.4}; -ST(0.066803853,0.25459223,0,0.071915087,0.24816524,0,0.074279052,0.25633166,0){789541.66,803363.84,635900.39,-2193455.3,-2179152.4,-1777029.4,3110738.9,2928525.2,2553015.8,-3337877,-2836050.6,-2804423.5,2824240.3,1927975,2479429.3}; -ST(0.0071908097,0.26035264,0,0.013885016,0.25805955,0,0.014305262,0.26641769,0){179155.76,357160.64,294901.31,-507033.49,-1003688.5,-848621.76,748779.14,1459712.7,1298521.9,-863311.12,-1638678.7,-1589572.3,830950.48,1506406.6,1686004.5}; -ST(0,0.28571429,0,0.0045473776,0.2936365,0,0,0.29285714,0){0,18406.211,0,0,-55138.333,0,0,91630.552,0,0,-127724.83,0,0,162961.08,0}; -ST(0,0.0071428571,0,0.0045481906,0.0063920675,0,0,0.014285714,0){0,552257.15,0,0,549810.55,0,0,544927.47,0,0,537633.65,0,0,527798.54,0}; -ST(0.084604507,0.15255901,0,0.076625322,0.14929356,0,0.08264437,0.14444108,0){1258841.2,1845555.4,1463951.5,-1326319,-1818255.1,-1293607.4,-1187789.9,-1872475.3,-1614532.1,1390056.3,1790618.2,1105781,1113216.6,1898765.5,1743195.6}; -ST(0.041803352,0.076750149,0,0.047307891,0.081963043,0,0.041002292,0.08644635,0){3453761.9,3516083,3351345,1340279.2,1080946.4,787437.3,-1593440.1,-2102837.3,-2379027.1,-3552303.7,-3830300,-3725698.5,-3337911.6,-2905310.5,-2222336.9}; -ST(0,0.21428571,0,0.0051799073,0.21317882,0,0,0.22142857,0){0,276031.48,0,0,-615227.88,0,0,479976.29,0,0,25450.705,0,0,-511551.59,0}; -ST(0.082390534,0.079333541,0,0.074756101,0.075901522,0,0.080160084,0.071577727,0){1865676.5,2549479.1,2107851.9,650380.91,1021825.1,977984.82,-988603.29,-1118145.3,-676141.96,-1983689.6,-2588166.7,-1967920.1,-1686881.4,-2507455.8,-2205119.3}; -ST(0.065478411,0.24860928,0,0.071915087,0.24816524,0,0.066803853,0.25459223,0){912058.17,803363.84,789541.66,-2478342.9,-2179152.4,-2193455.3,3344041.2,2928525.2,3110738.9,-3264436.9,-2836050.6,-3337877,2261773.6,1927975,2824240.3}; -ST(0.08812606,0.087328167,0,0.079265602,0.086677581,0,0.082390534,0.079333541,0){1269155.7,2114636.1,1865676.5,279658.57,488789.06,650380.91,-927894.68,-1512904.7,-988603.29,-1412053.3,-2351470.6,-1983689.6,-795447.99,-1382326.1,-1686881.4}; -ST(0.064832361,0.062804408,0,0.059054943,0.066788508,0,0.056317057,0.058022103,0){3281120.4,3499189.3,3630316.8,1912310.8,1856149.2,2330872.5,-254314.65,-658492.2,197001.66,-2314932.7,-2864039.1,-2007682.1,-3410309.6,-3725081.1,-3494460.7}; -ST(0.045416206,0.061541227,0,0.047469022,0.070467195,0,0.041057987,0.068843254,0){3642820.9,3608010.8,3488848.8,2181474.8,1730907.5,1752771.3,-155055.51,-1046792,-855539,-2429600.5,-3280034.9,-3038218.5,-3730025.8,-3807136.9,-3709409.4}; -ST(0.081119523,0.0085521597,0,0.078020383,0.017034313,0,0.073684623,0.0112317,0){2167108.8,2461848.1,2850123.3,2149779.2,2383750.6,2810738.2,2115263.6,2230032.5,2732509.2,2063869.7,2005590.6,2616540.6,1995657.9,1717239.5,2464223.2}; -ST(0.073754091,0.28851618,0,0.078222118,0.28277283,0,0.081165886,0.29137431,0){171229.59,220930.92,97729.953,-511212.67,-655625.13,-292395.17,843808.82,1069057.6,484687.71,-1164215.8,-1447830.3,-673055.06,1467609.3,1779434.3,855744.16}; -ST(0.029124573,0.24658198,0,0.025641665,0.25311603,0,0.02133326,0.24577003,0){849052.23,680173.91,675269.21,-2288340.2,-1879847.5,-1813848.4,3030093.5,2635470.4,2383092.9,-2848204.4,-2768550.2,-2204305.3,1797881.3,2247361.6,1333319.6}; -ST(0.02133326,0.24577003,0,0.025641665,0.25311603,0,0.018179834,0.25267212,0){675269.21,680173.91,514543.14,-1813848.4,-1879847.5,-1419813.2,2383092.9,2635470.4,1983439.5,-2204305.3,-2768550.2,-2069793.3,1333319.6,2247361.6,1657747.8}; -ST(0.036912897,0.21765752,0,0.030490983,0.2108424,0,0.038843793,0.21103197,0){1486590.9,1428644.1,1637090.1,-3421295.1,-3128471,-3590120.4,2965983.4,2293671,2645890.8,-438566.7,399562.24,433646.44,-2395869.1,-2769801.9,-3163532.2}; -ST(0.089437553,0.21298247,0,0.091864029,0.22106993,0,0.082942949,0.21818591,0){556322.48,394005.54,823054.75,-1238115.4,-927852.61,-1901094.8,961021.23,863120.02,1667014.3,60411.18,-241435.16,-282341.7,-1035404.3,-536498.87,-1297502.9}; -ST(0.0060732531,0.2674669,0,0.0071908097,0.26035264,0,0.014305262,0.26641769,0){124750.88,179155.76,294901.31,-359918.85,-507033.49,-848621.76,553735.12,748779.14,1298521.9,-683931.42,-863311.12,-1589572.3,735399.5,830950.48,1686004.5}; -ST(0.082583958,0.10907049,0,0.08466046,0.11619385,0,0.077013163,0.11736903,0){1698614.9,1475783,2095773.2,-286603.09,-452604.25,-691227.47,-1936849,-1789662.1,-2559181.5,-1323464.6,-788262.21,-1023961.4,836522.31,1243195.1,1873161.8}; -ST(0.060672554,0.13561545,0,0.068478919,0.13862632,0,0.061244461,0.14481879,0){2778852.8,2426951.1,2643484.5,-1944873,-1850187.5,-2356788.3,-3362653.4,-2866745.3,-2899198.4,935707.85,1169007.7,2042509.4,3643681.7,3144665.9,3121060.9}; -ST(0.037999827,0.27482627,0,0.045044357,0.28188841,0,0.036602132,0.28491153,0){474219.19,362990.51,279518.56,-1389905,-1075960.6,-831596.18,2209621.2,1750378.7,1362985.6,-2876809.4,-2362097.1,-1860498.2,3345267.4,2889034,2311728.5}; -ST(0.014137494,0.034012185,0,0.0063343033,0.038958017,0,0.0058133292,0.032528446,0){1641076.4,751213.74,694559.72,1435142,627892.11,614750.96,1049094.4,401490.67,464300.7,531342.12,109174.99,260495.38,-53364.585,-201236.23,26512.55}; -ST(0.070865224,0.080352924,0,0.072044079,0.08604506,0,0.064352171,0.083117586,0){2808030.6,2688599.4,3167194.8,934415.1,649473.83,915483.69,-1562677.5,-1882262.6,-1987167.2,-3017110.1,-2986497.2,-3477240.4,-2458745.5,-1825996.4,-2495770}; -ST(0.061476805,0.16269562,0,0.067098511,0.16826118,0,0.060825265,0.17090728,0){2391378.9,2121688.2,2288734.2,-3025373.1,-2928224.5,-3282960.5,-1589341.3,-1008555.7,-862639.89,3446908.2,3311710.7,3657845.3,675366.83,-250662.47,-726586.11}; -ST(0.052494391,0.065958781,0,0.047469022,0.070467195,0,0.045416206,0.061541227,0){3640248,3608010.8,3642820.9,1971511.2,1730907.5,2181474.8,-601016.65,-1046792,-155055.51,-2898090,-3280034.9,-2429600.5,-3866942,-3807136.9,-3730025.8}; -ST(0.034786476,0.1076516,0,0.030466665,0.11568191,0,0.025770754,0.10718168,0){2912738.3,2608170,2378738.7,-413135.58,-773675.45,-316264.13,-3267374.9,-3152461.4,-2653040.8,-2390915.6,-1443702.3,-1984140.6,1215377.6,2136967.4,932667.69}; -ST(0.054828578,0.081464579,0,0.058212185,0.089881183,0,0.049739958,0.088394034,0){3492382.6,3344291.6,3472240.4,1101278.5,593905.21,703521.31,-2043909.2,-2645013.4,-2626240.1,-3789901.6,-3708817.1,-3862017.3,-2941538.5,-1722713.3,-2018648.2}; -ST(0.079063451,0.10043005,0,0.069968451,0.098831219,0,0.07492972,0.092844339,0){2051820.1,2730411,2431427.6,-16056.497,57648.531,308451.38,-2067914.3,-2671597.7,-2083891.4,-2035845.1,-2785714.6,-2656803.1,48244.512,-173126.8,-910298.79}; -ST(0.013878694,0.17880836,0,0.020636298,0.17424253,0,0.021251228,0.18136297,0){971566.52,1433869.3,1398279.8,-1548960.4,-2154082.5,-2300353.4,-51095.574,-351921.61,85724.805,1579530,2330929.4,2245163.6,-887966.26,-819073.82,-1534338.6}; -ST(0.085905658,0.016824409,0,0.078020383,0.017034313,0,0.081119523,0.0085521597,0){1656238,2461848.1,2167108.8,1604967.9,2383750.6,2149779.2,1504009.2,2230032.5,2115263.6,1356492.3,2005590.6,2063869.7,1166855,1717239.5,1995657.9}; -ST(0.081165886,0.29137431,0,0.078222118,0.28277283,0,0.08596482,0.28314521,0){97729.953,220930.92,145967.81,-292395.17,-655625.13,-433371.98,484687.71,1069057.6,707326.96,-673055.06,-1447830.3,-959333.22,855744.16,1779434.3,1181452.3}; -ST(0.021167753,0.13548502,0,0.017312959,0.14496605,0,0.012304267,0.13852123,0){1816935.7,1456929,1094693.2,-1266652.3,-1303417.8,-832176.34,-2200669.4,-1594293.7,-1294374.3,600161.11,1135517.7,521821.54,2382629.9,1713822.2,1419655.5}; -ST(0.026018946,0.14387862,0,0.017312959,0.14496605,0,0.021167753,0.13548502,0){2064539,1456929,1816935.7,-1800072.3,-1303417.8,-1266652.3,-2295230.1,-1594293.7,-2200669.4,1506177.8,1135517.7,600161.11,2488196.2,1713822.2,2382629.9}; -ST(0.014137494,0.034012185,0,0.0058133292,0.032528446,0,0.0084994266,0.025462386,0){1641076.4,694559.72,1014895.2,1435142,614750.96,943121.65,1049094.4,464300.7,804669.5,531342.12,260495.38,609367.99,-53364.585,26512.55,370926.59}; -ST(0.0087746229,0.27470702,0,0.0060732531,0.2674669,0,0.014305262,0.26641769,0){139476.7,124750.88,294901.31,-408686.72,-359918.85,-848621.76,649356.33,553735.12,1298521.9,-844695.79,-683931.42,-1589572.3,980930.37,735399.5,1686004.5}; -ST(0.045375723,0.12284566,0,0.040442009,0.11996282,0,0.044666369,0.11545829,0){3072436,2999410,3148096.1,-1348503.3,-1143461.2,-920013.3,-3829159.4,-3706983.7,-3799301.5,-800055.99,-1150363.3,-1769018.1,3380414.3,2995190.5,2547335.8}; -ST(0,0.18571429,0,0.0066871595,0.19241823,0,0,0.19285714,0){0,432113.5,0,0,-803518.34,0,0,258472.73,0,0,581490.34,0,0,-758588.26,0}; -ST(0.038464606,0.12667013,0,0.030575169,0.1246812,0,0.035619257,0.12028764,0){2859316.3,2526238.7,2821397.9,-1476046.2,-1202245.8,-1093830.4,-3573486.5,-3156412.2,-3491178.8,-252868.56,-451924.48,-1043884.2,3451249.3,2919641.1,2851838.9}; -ST(0.025770754,0.10718168,0,0.017861336,0.10270337,0,0.024938414,0.098415267,0){2378738.7,1773538.4,2383058.5,-316264.13,-87655.931,68195.72,-2653040.8,-1856823.6,-2312962.3,-1984140.6,-1677437.3,-2447461.4,932667.69,261812.45,-204726.33}; -ST(0.022740693,0.23189018,0,0.025350652,0.23917347,0,0.015758122,0.23699049,0){887604.04,868665.73,597291.98,-2230116.3,-2265304,-1541119.1,2485475.6,2773502.3,1837947.1,-1529145.6,-2193941.8,-1363109.4,-172982.46,753574.67,315646.37}; -ST(0.032911969,0.081185013,0,0.041803352,0.076750149,0,0.041002292,0.08644635,0){3037931.3,3453761.9,3351345,971274.35,1340279.2,787437.3,-1756226.8,-1593440.1,-2379027.1,-3289165.4,-3552303.7,-3725698.5,-2584916.3,-3337911.6,-2222336.9}; -ST(0.0087746229,0.27470702,0,0.0067236406,0.28198319,0,0,0.27857143,0){139476.7,76627.274,0,-408686.72,-227172.13,0,649356.33,369685.4,0,-844695.79,-499127.77,0,980930.37,610772.43,0}; -ST(0,0.021428571,0,0.006650898,0.018174199,0,0.0084994266,0.025462386,0){0,801243.34,1014895.2,0,772347.91,943121.65,0,715593.27,804669.5,0,633022.27,609367.99,0,527557,370926.59}; -ST(0.013229009,0.21171696,0,0.018343869,0.21720619,0,0.010546892,0.2198034,0){698716.07,888277.19,514716.79,-1540332.8,-2037897.4,-1201974.2,1156621.3,1749211,1090194.6,147278.69,-225952.88,-253690.09,-1334554.8,-1457259.1,-751659.26}; -ST(0.010546892,0.2198034,0,0.018343869,0.21720619,0,0.017207343,0.22323305,0){514716.79,888277.19,781289.63,-1201974.2,-2037897.4,-1865590.4,1090194.6,1749211,1807835.2,-253690.09,-225952.88,-643322.1,-751659.26,-1457259.1,-915362.92}; -ST(0.060432552,0.20227914,0,0.06966854,0.20076802,0,0.066992124,0.20847551,0){1798951.1,1570520.4,1540360.8,-3671781.8,-3162888.4,-3311175.4,2023610.8,1636334.6,2266191.6,1565241.8,1503948.1,706070.36,-3653837,-3161601.9,-3078419.5}; -ST(0.066012722,0.055502179,0,0.073604017,0.054819307,0,0.070754378,0.060222618,0){3257272.9,2744584.6,2932444.5,2187557.2,1864679.8,1804303.3,399401.17,386939.94,-17984.254,-1519988.7,-1214908.7,-1833384.6,-2940625.1,-2427603.9,-2943704.7}; -ST(0.025770754,0.10718168,0,0.023213665,0.1150537,0,0.016927821,0.11108648,0){2378738.7,2130593.3,1644246.3,-316264.13,-605772.32,-340994.5,-2653040.8,-2564157.8,-1914445.6,-1984140.6,-1229375.9,-1176430.8,932667.69,1684092.7,981584.41}; -ST(0.024008584,0.022367291,0,0.016759526,0.025876157,0,0.015416139,0.018002698,0){2639060.6,1932221.9,1798828.3,2494948.4,1791225.7,1735136,2214593.6,1519509.7,1609995.5,1813324.4,1136895.1,1427830.3,1312931.3,671081.1,1194733.1}; -ST(0.076938259,0.060604721,0,0.079822506,0.065677674,0,0.072323403,0.067507008,0){2443533.2,2163855.5,2781512.1,1491930.8,1180001.4,1448400.9,-40674.57,-340376.77,-578922.09,-1557435.8,-1706002.2,-2328912.3,-2468002.6,-2296197.5,-2963263.7}; -ST(0.015498485,0.28248556,0,0.018422519,0.27450763,0,0.023483408,0.28013687,0){166274.63,282501.19,270985.88,-493262.57,-827496.14,-801278.39,803759.61,1313896,1297043.7,-1087394.1,-1707268.8,-1736920.8,1334475.8,1979556.1,2101746.5}; -ST(0.047556344,0.24377674,0,0.043027686,0.24899973,0,0.040431855,0.24188745,0){1122639.4,999522.33,1110505,-2989881.7,-2720190.5,-2932804,3850350.4,3683283.3,3702149.5,-3414324.1,-3620573.8,-3142324.5,1828478.4,2549278.8,1453973.2}; -ST(0.092295863,0.26000779,0,0.083190767,0.25723975,0,0.090077759,0.25268961,0){193329.27,434158.6,291813.61,-546576.12,-1216864.4,-805257.31,805368.84,1759626.8,1125037.4,-924990.4,-1955417.3,-1174248.1,884724.5,1765235.2,940920.06}; -ST(0.085115353,0.26563346,0,0.083190767,0.25723975,0,0.092295863,0.26000779,0){313056.52,434158.6,193329.27,-899063.8,-1216864.4,-546576.12,1369900.4,1759626.8,805368.84,-1665255.4,-1955417.3,-924990.4,1747205.8,1765235.2,884724.5}; -ST(0.08974924,0.047235181,0,0.082493405,0.042375289,0,0.092141527,0.03991184,0){1190814.4,1978611.8,927649.93,905328.07,1595319.9,767955.56,402804.56,902966.17,476054.53,-196265.4,35643.43,102192.68,-748421.11,-838916.97,-289378.9}; -ST(0.092141527,0.03991184,0,0.082493405,0.042375289,0,0.084917502,0.034253561,0){927649.93,1978611.8,1742331.8,767955.56,1595319.9,1520580.8,476054.53,902966.17,1105294,102192.68,35643.43,549324.68,-289378.9,-838916.97,-76880.401}; -ST(0.04704595,0.16277363,0,0.042155309,0.15589067,0,0.050010485,0.1548865,0){2543508.6,2577776.2,2672912.2,-3221973.5,-2895603.6,-2946373.7,-1684138.2,-2220826.4,-2371553.9,3671419.3,3169529.7,3189127.5,704902.67,1830012,2045305.7}; -ST(0.04704595,0.16277363,0,0.054395265,0.16699477,0,0.048076401,0.17082416,0){2543508.6,2465605.5,2424680.5,-3221973.5,-3338618.7,-3473815.1,-1684138.2,-1283530.8,-921629.25,3671419.3,3793219.5,3872759.5,704902.67,-59660.123,-754316.94}; -ST(0.046341114,0.044942776,0,0.03663522,0.040674234,0,0.043838979,0.034579424,0){3748809.1,3463485.9,3745913.7,2933624.2,2844620.6,3260141.4,1480431.3,1717431.6,2351583.2,-294933.53,283267.24,1138042.7,-2006921.6,-1201989.6,-223347.31}; -ST(0.038515413,0.047952704,0,0.03663522,0.040674234,0,0.046341114,0.044942776,0){3516906.1,3463485.9,3748809.1,2648581.9,2844620.6,2933624.2,1126309.3,1717431.6,1480431.3,-674068.75,283267.24,-294933.53,-2308227.3,-1201989.6,-2006921.6}; -ST(0.043491003,0.26677795,0,0.037705658,0.25939989,0,0.04563604,0.25694979,0){657627.62,758443.36,859240.08,-1894105.9,-2140288.6,-2406042.8,2903724.9,3141072.6,3472131.8,-3565612.1,-3582615.2,-3844488.4,3800401.2,3385872.9,3448330.3}; -ST(0.04563604,0.25694979,0,0.037705658,0.25939989,0,0.039157325,0.25334591,0){859240.08,758443.36,884627.38,-2406042.8,-2140288.6,-2446896,3472131.8,3141072.6,3436661.2,-3844488.4,-3582615.2,-3622356.9,3448330.3,3385872.9,2960330.2}; -ST(0.077069107,0.15686929,0,0.076625322,0.14929356,0,0.084604507,0.15255901,0){1743907.9,1845555.4,1258841.2,-1994600,-1818255.1,-1326319,-1457243.4,-1872475.3,-1187789.9,2204191.1,1790618.2,1390056.3,1140253.2,1898765.5,1113216.6}; -ST(0.07180958,0.22984275,0,0.076796159,0.2234596,0,0.078984823,0.22953004,0){1079159.6,1008421.8,858343.29,-2680718.2,-2411357.4,-2128428.8,2899261.6,2346331.8,2291087.1,-1622013.4,-852928.84,-1261656.1,-492395.98,-1160000.7,-424553.92}; -ST(0.048076401,0.17082416,0,0.042242048,0.16806859,0,0.04704595,0.16277363,0){2424680.5,2399442.3,2543508.6,-3473815.1,-3302042.1,-3221973.5,-921629.25,-1157324.9,-1684138.2,3872759.5,3737475.6,3671419.3,-754316.94,-248746.29,704902.67}; -ST(0.043027686,0.24899973,0,0.036308441,0.24745658,0,0.040431855,0.24188745,0){999522.33,958174.94,1110505,-2720190.5,-2591684.5,-2932804,3683283.3,3460190.4,3702149.5,-3620573.8,-3307339.6,-3142324.5,2549278.8,2177878.8,1453973.2}; -ST(0.026270926,0.075674812,0,0.025411973,0.082310594,0,0.019499739,0.079597209,0){2630439.6,2525130.6,2040354.6,1063205.3,762374.09,702945.71,-1137545.6,-1532614.6,-1095289.5,-2660659.2,-2757779.1,-2175701.2,-2599027.8,-2058136.4,-1830384.7}; -ST(0.073708403,0.21517194,0,0.069002793,0.22246209,0,0.063265205,0.21633109,0){1225969.3,1267491.2,1505335.5,-2772471.1,-3011719.2,-3432481.9,2271379.1,2877058.6,2888962.8,-92677.622,-947533.34,-265885.87,-2155133.8,-1573376.1,-2549234.8}; -ST(0.082390534,0.079333541,0,0.091953893,0.078440357,0,0.08812606,0.087328167,0){1865676.5,889726.23,1269155.7,650380.91,322434.75,279658.57,-988603.29,-450550.32,-927894.68,-1983689.6,-936443.15,-1412053.3,-1686881.4,-825354.72,-795447.99}; -ST(0.1,0.085714286,0,0.091953893,0.078440357,0,0.1,0.078571429,0){0,889726.23,0,0,322434.75,0,0,-450550.32,0,0,-936443.15,0,0,-825354.72,0}; -ST(0.061631884,0.26868773,0,0.06660802,0.27624666,0,0.059078636,0.27701937,0){591535.29,417349.44,447007.97,-1711593.4,-1226359.7,-1315269.1,2649353.2,1959900.4,2107766.2,-3304968.8,-2572844.1,-2778864.5,3608394.3,3027289.2,3289755.3}; -ST(0.014137494,0.034012185,0,0.017433092,0.042090914,0,0.011573719,0.041901165,0){1641076.4,1971771.3,1347025.1,1435142,1594855,1091815.8,1049094.4,913057.13,629744.45,531342.12,56690.05,48353.226,-53364.585,-810753.02,-542301.86}; -ST(0.1,0.24285714,0,0.092168655,0.23668616,0,0.1,0.23571429,0){0,307607.26,0,0,-792496.69,0,0,941630.33,0,0,-691810.02,0,0,148523.72,0}; -ST(0.0072553778,0.13224921,0,0.0054758376,0.13911323,0,0,0.13571429,0){674958.82,495708.7,0,-425463.67,-382921.42,0,-832230.25,-582869.54,0,117822.57,250325.59,0,875622.71,639819.51,0}; -ST(0.015758122,0.23699049,0,0.025350652,0.23917347,0,0.02133326,0.24577003,0){597291.98,868665.73,675269.21,-1541119.1,-2265304,-1813848.4,1837947.1,2773502.3,2383092.9,-1363109.4,-2193941.8,-2204305.3,315646.37,753574.67,1333319.6}; -ST(0.039157325,0.25334591,0,0.036308441,0.24745658,0,0.043027686,0.24899973,0){884627.38,958174.94,999522.33,-2446896,-2591684.5,-2720190.5,3436661.2,3460190.4,3683283.3,-3622356.9,-3307339.6,-3620573.8,2960330.2,2177878.8,2549278.8}; -ST(0.076158908,0.12549637,0,0.070840483,0.12204614,0,0.077013163,0.11736903,0){2092101.1,2470738.2,2095773.2,-1030118.9,-1044803.2,-691227.47,-2615047.7,-3073782.1,-2559181.5,-297340.89,-729197.53,-1023961.4,2464056,2652961,1873161.8}; -ST(0.041402067,0.22952626,0,0.037546984,0.23452457,0,0.034969012,0.22634925,0){1348916.4,1205921.7,1299939.6,-3344816,-3072707.6,-3164156.1,3600200.4,3550700.1,3237729.2,-1982154,-2423829.8,-1478956,-667743.82,201013.93,-1117524.9}; -ST(0.017207343,0.22323305,0,0.012706169,0.22573828,0,0.010546892,0.2198034,0){781289.63,571782.3,514716.79,-1865590.4,-1386624.6,-1201974.2,1807835.2,1404300.2,1090194.6,-643322.1,-614658.98,-253690.09,-915362.92,-528535.98,-751659.26}; -ST(0.01788586,0.12850833,0,0.023379755,0.12686903,0,0.021167753,0.13548502,0){1616906.9,2047772.9,1816935.7,-895214.81,-1065433.1,-1266652.3,-2016472.2,-2558991,-2200669.4,-4802.2192,-162203.53,600161.11,2014144.7,2481221.5,2382629.9}; -ST(0.042433189,0.024814669,0,0.048866761,0.029559705,0,0.043838979,0.034579424,0){3739739.8,3831772.8,3745913.7,3488658.7,3467532.3,3260141.4,3003356.3,2773676.3,2351583.2,2316430.4,1816186,1138042.7,1473602,685852.4,-223347.31}; -ST(0.051167355,0.022914381,0,0.048866761,0.029559705,0,0.042433189,0.024814669,0){3850137.8,3831772.8,3739739.8,3629520.4,3467532.3,3488658.7,3200919.1,2773676.3,3003356.3,2588908.3,1816186,2316430.4,1828396.4,685852.4,1473602}; -ST(0.092195724,0.16853594,0,0.093710586,0.16080643,0,0.1,0.16428571,0){598378.34,507346.27,0,-829189.07,-621948.04,0,-278570.16,-366919.85,0,936666.51,704920.6,0,-82641.6,207593.47,0}; -ST(0.040431855,0.24188745,0,0.045331711,0.23557633,0,0.047556344,0.24377674,0){1110505,1270563.3,1122639.4,-2932804,-3255008.9,-2989881.7,3702149.5,3813331,3850350.4,-3142324.5,-2700862,-3414324.1,1453973.2,404484.48,1828478.4}; -ST(0.01180171,0.25230222,0,0.013821768,0.24617185,0,0.018179834,0.25267212,0){347512.04,454053.45,514543.14,-957611.77,-1221678.8,-1419813.2,1333704.3,1611329.8,1983439.5,-1383899.6,-1502439.1,-2069793.3,1095718.6,928515.88,1657747.8}; -ST(0.073234584,0.04253025,0,0.067616069,0.037109229,0,0.075978544,0.034466341,0){2820532.7,3239242.7,2615244.9,2270240.9,2756202.5,2278283.7,1277003.9,1862139.4,1647758.2,34586.382,690369.93,804880.96,-1214797.7,-584563.48,-142067.87}; -ST(0.076498673,0.26519709,0,0.068237016,0.26229006,0,0.074279052,0.25633166,0){473307.48,639705.29,635900.39,-1357765.2,-1820649,-1777029.4,2063933,2721368.6,2553015.8,-2499100.3,-3203243.1,-2804423.5,2605934.6,3191912.1,2479429.3}; -ST(0.072323403,0.067507008,0,0.070754378,0.060222618,0,0.076938259,0.060604721,0){2781512.1,2932444.5,2443533.2,1448400.9,1804303.3,1491930.8,-578922.09,-17984.254,-40674.57,-2328912.3,-1833384.6,-1557435.8,-2963263.7,-2943704.7,-2468002.6}; -ST(0.021167753,0.13548502,0,0.030046638,0.13690443,0,0.026018946,0.14387862,0){1816935.7,2369378.2,2064539,-1266652.3,-1721516.8,-1800072.3,-2200669.4,-2840145.3,-2295230.1,600161.11,944948.24,1506177.8,2382629.9,3098367.4,2488196.2}; -ST(0.049721881,0.27094787,0,0.045592054,0.27439642,0,0.043491003,0.26677795,0){588018.61,513714.39,657627.62,-1710042.9,-1504437.2,-1894105.9,2675009.8,2387679.2,2903724.9,-3394309,-3100344.3,-3565612.1,3801713.7,3591305.7,3800401.2}; -ST(0.076271482,0.13373081,0,0.076158908,0.12549637,0,0.082709707,0.12855445,0){2012844.4,2092101.1,1568327.1,-1330317.6,-1030118.9,-869760.99,-2463975.8,-2615047.7,-1955764.1,494859.01,-297340.89,-1353.9511,2631758.9,2464056,1955094.7}; -ST(0.090077759,0.25268961,0,0.085145188,0.25032735,0,0.089949388,0.2453858,0){291813.61,448997.25,339950.36,-805257.31,-1228228.7,-911669.73,1125037.4,1682589.8,1193275.4,-1174248.1,-1691886.1,-1095139.7,940920.06,1253443,648419.14}; -ST(0.08944657,0.05485846,0,0.083998423,0.049627851,0,0.08974924,0.047235181,0){1211526.2,1806853.8,1190814.4,822600.19,1329741.5,905328.07,169573.91,501474.01,402804.56,-537958.1,-459273.5,-196265.4,-1073022.7,-1299103.8,-748421.11}; -ST(0.041643161,0.17482395,0,0.042242048,0.16806859,0,0.048076401,0.17082416,0){2284160.6,2399442.3,2424680.5,-3458410.7,-3302042.1,-3473815.1,-506290.81,-1157324.9,-921629.25,3718851.8,3737475.6,3872759.5,-1405815.9,-248746.29,-754316.94}; -ST(0.038009007,0.015147577,0,0.046063037,0.016810165,0,0.042433189,0.024814669,0){3597209.6,3836060.2,3739739.8,3506943.3,3717529.2,3488658.7,3328697.3,3484126.2,3003356.3,3067010.9,3143090.2,2316430.4,2728518.9,2704667.4,1473602}; -ST(0.037999827,0.27482627,0,0.030312881,0.27848596,0,0.029991713,0.27132489,0){474219.19,355416.48,469504.82,-1389905,-1048284.8,-1366503,2209621.2,1688178.9,2141236.7,-2876809.4,-2242771,-2724385.3,3345267.4,2683885.3,3063642.3}; -ST(0.074931673,0.27468874,0,0.069536278,0.26943087,0,0.076498673,0.26519709,0){363389.18,505602.11,473307.48,-1064791.9,-1465439,-1357765.2,1691857.9,2276404,2063933,-2200836.4,-2856108.7,-2499100.3,2556129.1,3145421.5,2605934.6}; -ST(0.075978544,0.034466341,0,0.068707287,0.030314019,0,0.074388951,0.025102472,0){2615244.9,3188897.7,2772012.4,2278283.7,2870259.7,2581574.2,1647758.2,2264806.3,2213781,804880.96,1433032.7,1693914.7,-142067.87,457746.25,1057277.9}; -ST(0.021251228,0.18136297,0,0.016878531,0.18478654,0,0.013878694,0.17880836,0){1398279.8,1113458.1,971566.52,-2300353.4,-1906862.4,-1548960.4,85724.805,245299.96,-51095.574,2245163.6,1732097.5,1579530,-1534338.6,-1479759.2,-887966.26}; -ST(0.076498673,0.26519709,0,0.081004963,0.27070547,0,0.074931673,0.27468874,0){473307.48,333174.81,363389.18,-1357765.2,-968418.7,-1064791.9,2063933,1513258.3,1691857.9,-2499100.3,-1916833.2,-2200836.4,2605934.6,2141327.9,2556129.1}; -ST(0.085115353,0.26563346,0,0.081004963,0.27070547,0,0.076498673,0.26519709,0){313056.52,333174.81,473307.48,-899063.8,-968418.7,-1357765.2,1369900.4,1513258.3,2063933,-1665255.4,-1916833.2,-2499100.3,1747205.8,2141327.9,2605934.6}; -ST(0.075978544,0.034466341,0,0.080699945,0.029142305,0,0.084917502,0.034253561,0){2615244.9,2185639.9,1742331.8,2278283.7,1983669.2,1520580.8,1647758.2,1598386.1,1105294,804880.96,1065401.8,549324.68,-142067.87,433818.71,-76880.401}; -ST(0.074388951,0.025102472,0,0.080699945,0.029142305,0,0.075978544,0.034466341,0){2772012.4,2185639.9,2615244.9,2581574.2,1983669.2,2278283.7,2213781,1598386.1,1647758.2,1693914.7,1065401.8,804880.96,1057277.9,433818.71,-142067.87}; -ST(0.058552205,0.15400025,0,0.05288218,0.14757716,0,0.061244461,0.14481879,0){2589572.8,2767228.4,2643484.5,-2806487.5,-2626819.9,-2356788.3,-2354581.2,-2900596.1,-2899198.4,3003966,2479722.6,2042509.4,2103059.1,3026446,3121060.9}; -ST(0.050010485,0.1548865,0,0.05288218,0.14757716,0,0.058552205,0.15400025,0){2672912.2,2767228.4,2589572.8,-2946373.7,-2626819.9,-2806487.5,-2371553.9,-2900596.1,-2354581.2,3189127.5,2479722.6,3003966,2045305.7,3026446,2103059.1}; -ST(0.089230742,0.11966768,0,0.08466046,0.11619385,0,0.091758141,0.11296708,0){1043332.5,1475783,824791.32,-391602.7,-452604.25,-201020.76,-1287980.7,-1789662.1,-976886.6,-412950.99,-788262.21,-537824.26,1030099.2,1243195.1,570097.26}; -ST(0.0078195435,0.14622426,0,0.017312959,0.14496605,0,0.013794295,0.15422926,0){680366.1,1456929,1126466.2,-626541.18,-1303417.8,-1226232.2,-729870.69,-1594293.7,-1017954.8,568744.13,1135517.7,1316565.7,774663.29,1713822.2,901352.54}; -ST(0.012304267,0.13852123,0,0.017312959,0.14496605,0,0.0078195435,0.14622426,0){1094693.2,1456929,680366.1,-832176.34,-1303417.8,-626541.18,-1294374.3,-1594293.7,-729870.69,521821.54,1135517.7,568744.13,1419655.5,1713822.2,774663.29}; -ST(0.066401409,0.0434645,0,0.067616069,0.037109229,0,0.073234584,0.04253025,0){3289675.8,3239242.7,2820532.7,2619840.6,2756202.5,2270240.9,1416557.6,1862139.4,1277003.9,-75156.319,690369.93,34586.382,-1551772,-584563.48,-1214797.7}; -ST(0.074279052,0.25633166,0,0.068237016,0.26229006,0,0.066803853,0.25459223,0){635900.39,639705.29,789541.66,-1777029.4,-1820649,-2193455.3,2553015.8,2721368.6,3110738.9,-2804423.5,-3203243.1,-3337877,2479429.3,3191912.1,2824240.3}; -ST(0.064352171,0.083117586,0,0.066925078,0.074981916,0,0.070865224,0.080352924,0){3167194.8,3090390.8,2808030.6,915483.69,1280900.5,934415.1,-1987167.2,-1278621.5,-1562677.5,-3477240.4,-3089611.2,-3017110.1,-2495770,-3091904.4,-2458745.5}; -ST(0.069536278,0.26943087,0,0.06660802,0.27624666,0,0.061631884,0.26868773,0){505602.11,417349.44,591535.29,-1465439,-1226359.7,-1711593.4,2276404,1959900.4,2649353.2,-2856108.7,-2572844.1,-3304968.8,3145421.5,3027289.2,3608394.3}; -ST(0.056317057,0.058022103,0,0.053426379,0.049768916,0,0.061015306,0.048529238,0){3630316.8,3727873.1,3533367.8,2330872.5,2738031.5,2640342.3,197001.66,1021148,1080012.2,-2007682.1,-966926.63,-753291.7,-3494460.7,-2698501,-2396723.8}; -ST(0.064276416,0.12183086,0,0.059246105,0.12763558,0,0.057323957,0.1204315,0){2809128.6,2918223.5,3051716.5,-1175750.5,-1563762.3,-1191883,-3492840.6,-3644117.3,-3778168.4,-855220.15,-127593.52,-1110713.1,2995580.4,3585046,3101303}; -ST(0.011838853,0.2301677,0,0.016939848,0.22904958,0,0.015758122,0.23699049,0){504229.49,714788.59,597291.98,-1254859.2,-1767596.2,-1541119.1,1363834.1,1888698.3,1837947.1,-775392.51,-1014237.8,-1363109.4,-209768.04,-395054.79,315646.37}; -ST(0.046341114,0.044942776,0,0.042113175,0.053290167,0,0.038515413,0.047952704,0){3748809.1,3616583.4,3516906.1,2933624.2,2519252.9,2648581.9,1480431.3,657513.67,1126309.3,-294933.53,-1403801.4,-674068.75,-2006921.6,-3039615.4,-2308227.3}; -ST(0.042433189,0.024814669,0,0.033039341,0.023173825,0,0.038009007,0.015147577,0){3739739.8,3318087.9,3597209.6,3488658.7,3123656.1,3506943.3,3003356.3,2746181,3328697.3,2316430.4,2207795.9,3067010.9,1473602,1539940.3,2728518.9}; -ST(0.050010485,0.1548865,0,0.054296142,0.16027015,0,0.04704595,0.16277363,0){2672912.2,2568973.7,2543508.6,-2946373.7,-3120486,-3221973.5,-2371553.9,-1899085.7,-1684138.2,3189127.5,3528266.9,3671419.3,2045305.7,1141594.9,704902.67}; -ST(0.089949388,0.2453858,0,0.085145188,0.25032735,0,0.083292987,0.24598228,0){339950.36,448997.25,542685.82,-911669.73,-1228228.7,-1458992.1,1193275.4,1682589.8,1920780.7,-1095139.7,-1691886.1,-1784182,648419.14,1253443,1091638.2}; -ST(0.080938662,0.054906318,0,0.083998423,0.049627851,0,0.08944657,0.05485846,0){2097661.4,1806853.8,1211526.2,1423084,1329741.5,822600.19,290856.94,501474.01,169573.91,-934922.56,-459273.5,-537958.1,-1860365.1,-1299103.8,-1073022.7}; -ST(0.021957304,0.26060316,0,0.025641665,0.25311603,0,0.030217898,0.25971254,0){505833.44,680173.91,660621.26,-1432636.8,-1879847.5,-1866014.4,2119105.6,2635470.4,2744196,-2450095.8,-2768550.2,-3141188.1,2369995.8,2247361.6,2987009.7}; -ST(0.018179834,0.25267212,0,0.025641665,0.25311603,0,0.021957304,0.26060316,0){514543.14,680173.91,505833.44,-1419813.2,-1879847.5,-1432636.8,1983439.5,2635470.4,2119105.6,-2069793.3,-2768550.2,-2450095.8,1657747.8,2247361.6,2369995.8}; -ST(0.080160084,0.071577727,0,0.086276325,0.073599227,0,0.082390534,0.079333541,0){2107851.9,1502743.3,1865676.5,977984.82,653401.45,650380.91,-676141.96,-565297.67,-988603.29,-1967920.1,-1464602.7,-1983689.6,-2205119.3,-1536324.4,-1686881.4}; -ST(0.059246105,0.12763558,0,0.052058531,0.12554764,0,0.057323957,0.1204315,0){2918223.5,3065498.6,3051716.5,-1563762.3,-1512626.5,-1191883,-3644117.3,-3831818,-3778168.4,-127593.52,-428428.64,-1110713.1,3585046,3614977.4,3101303}; -ST(0.0910478,0.13167545,0,0.093938974,0.13899,0,0.087083587,0.13880919,0){831136.87,548364.78,1144744.3,-514132.23,-422206.84,-877072.07,-1027305.8,-645591.08,-1349889.8,122313.64,273728.87,561444.4,1073956.7,708600.91,1481228.8}; -ST(0.026270926,0.075674812,0,0.033874053,0.071548869,0,0.032911969,0.081185013,0){2630439.6,3157862.8,3037931.3,1063205.3,1466537.3,971274.35,-1137545.6,-1010259.7,-1756226.8,-2660659.2,-2946084.6,-3289165.4,-2599027.8,-3304540.6,-2584916.3}; -ST(0.033874053,0.071548869,0,0.027058874,0.069011929,0,0.031105381,0.06529626,0){3157862.8,2727323.5,3030579.1,1466537.3,1363815.9,1667989.8,-1010259.7,-681543.48,-444570.51,-2946084.6,-2386220.5,-2357289.6,-3304540.6,-2898415.6,-3210321.2}; -ST(0.1,0.17142857,0,0.092195724,0.16853594,0,0.1,0.16428571,0){0,598378.34,0,0,-829189.07,0,0,-278570.16,0,0,936666.51,0,0,-82641.6,0}; -ST(0.016927821,0.11108648,0,0.023213665,0.1150537,0,0.017763535,0.12074209,0){1644246.3,2130593.3,1657769.5,-340994.5,-605772.32,-657738.05,-1914445.6,-2564157.8,-2054600.3,-1176430.8,-1229375.9,-581651.26,981584.41,1684092.7,1703675.4}; -ST(0.085369203,0.17624497,0,0.082729031,0.18391978,0,0.077619244,0.18028791,0){1039089.6,1144258.1,1471797.4,-1603144.1,-1940160.8,-2389894.4,-168940.91,205244.05,18944.546,1695116.9,1797438.3,2378251.6,-751642.95,-1455642.1,-1502642.9}; -ST(0.060825265,0.17090728,0,0.054692531,0.17439284,0,0.054395265,0.16699477,0){2288734.2,2346407.8,2465605.5,-3282960.5,-3532168.6,-3338618.7,-862639.89,-561454.61,-1283530.8,3657845.3,3816051.1,3793219.5,-726586.11,-1367177.6,-59660.123}; -ST(0.047385855,0.10193045,0,0.054240748,0.10280037,0,0.050721192,0.10961634,0){3329666.7,3302360.6,3257974.6,-117239.93,-169115.68,-583831.78,-3442848.4,-3462856.5,-3737290.3,-3204510.9,-3116478.2,-2483878.9,350991.89,505791.56,1698581.7}; -ST(0.018179834,0.25267212,0,0.013821768,0.24617185,0,0.02133326,0.24577003,0){514543.14,454053.45,675269.21,-1419813.2,-1221678.8,-1813848.4,1983439.5,1611329.8,2383092.9,-2069793.3,-1502439.1,-2204305.3,1657747.8,928515.88,1333319.6}; -ST(0.1,0.22142857,0,0.091864029,0.22106993,0,0.1,0.21428571,0){0,394005.54,0,0,-927852.61,0,0,863120.02,0,0,-241435.16,0,0,-536498.87,0}; -ST(0.038427921,0.16264679,0,0.042155309,0.15589067,0,0.04704595,0.16277363,0){2389351.9,2577776.2,2543508.6,-3020403.6,-2895603.6,-3221973.5,-1591681.4,-2220826.4,-1684138.2,3440909.6,3169529.7,3671419.3,682723.32,1830012,704902.67}; -ST(0.091323117,0.29067423,0,0.081165886,0.29137431,0,0.08596482,0.28314521,0){51002.156,97729.953,145967.81,-152526.43,-292395.17,-433371.98,252617.29,484687.71,707326.96,-350336.87,-673055.06,-959333.22,444691.33,855744.16,1181452.3}; -ST(0.085905658,0.016824409,0,0.081119523,0.0085521597,0,0.091308694,0.0093164623,0){1656238,2167108.8,1045151,1604967.9,2149779.2,1035216.9,1504009.2,2115263.6,1015442.8,1356492.3,2063869.7,986027.05,1166855,1995657.9,947106.05}; -ST(0.069025318,0.11622387,0,0.074105201,0.11070107,0,0.077013163,0.11736903,0){2631986.5,2359475.3,2095773.2,-808686.45,-471755.94,-691227.47,-3192250.9,-2736894.8,-2559181.5,-1402768.4,-1717960.7,-1023961.4,2220554.1,1362139.4,1873161.8}; -ST(0.043569257,0.19619451,0,0.036160627,0.1953007,0,0.039366597,0.19088868,0){1966078.6,1834250.2,1982365.2,-3794921.6,-3509998.2,-3628592.6,1563901,1372423.7,1030950.1,2340412.7,2256297.6,2772526.5,-3741435.4,-3434247.7,-3333638.5}; -ST(0.048791783,0.28884593,0,0.051519181,0.28417908,0,0.055764419,0.28986395,0){226341.07,320732.11,202473.1,-675936.71,-953415.16,-605163.67,1116322.7,1560004.1,1001119.7,-1541505,-2123899.5,-1385941.2,1945474.1,2629434.9,1755276.4}; -ST(0.1,0.092857143,0,0.093922759,0.092262381,0,0.1,0.085714286,0){0,652083.63,0,0,89312.894,0,0,-550573,0,0,-715327.2,0,0,-262838.8,0}; -ST(0.049232245,0.21047418,0,0.053910411,0.21448753,0,0.045116599,0.21481108,0){1752658.6,1667429.4,1654487.5,-3827070.5,-3752161.8,-3731787.4,2777012.8,3023771,3030991.5,540242.46,-28239.212,-73694.316,-3416565.4,-2988983.1,-2938909.4}; -ST(0.082493405,0.042375289,0,0.073234584,0.04253025,0,0.075978544,0.034466341,0){1978611.8,2820532.7,2615244.9,1595319.9,2270240.9,2278283.7,902966.17,1277003.9,1647758.2,35643.43,34586.382,804880.96,-838916.97,-1214797.7,-142067.87}; -ST(0.076498673,0.26519709,0,0.074279052,0.25633166,0,0.083190767,0.25723975,0){473307.48,635900.39,434158.6,-1357765.2,-1777029.4,-1216864.4,2063933,2553015.8,1759626.8,-2499100.3,-2804423.5,-1955417.3,2605934.6,2479429.3,1765235.2}; -ST(0.056199026,0.010061392,0,0.06203594,0.0060944193,0,0.064075209,0.013493001,0){3801979,3604620.2,3498581.2,3759859.9,3589956.2,3428890.3,3676084,3560685.5,3290906.4,3551608.2,3516960.1,3087427.7,3387596.5,3458793.9,2822154}; -ST(0.061476805,0.16269562,0,0.054296142,0.16027015,0,0.058552205,0.15400025,0){2391378.9,2568973.7,2589572.8,-3025373.1,-3120486,-2806487.5,-1589341.3,-1899085.7,-2354581.2,3446908.2,3528266.9,3003966,675366.83,1141594.9,2103059.1}; -ST(0.063469548,0.28521738,0,0.061805884,0.29356168,0,0.055764419,0.28986395,0){273598.49,121923.05,202473.1,-814255.31,-365207.83,-605163.67,1335465.2,606815.62,1001119.7,-1824812,-845641.09,-1385941.2,2270429.1,1080583.1,1755276.4}; -ST(0.08812606,0.087328167,0,0.093922759,0.092262381,0,0.087331535,0.0958472,0){1269155.7,652083.63,1318484.3,279658.57,89312.894,98077.228,-927894.68,-550573,-1213131.9,-1412053.3,-715327.2,-1401481.2,-795447.99,-262838.8,-292629.72}; -ST(0.06961584,0.048915995,0,0.073604017,0.054819307,0,0.066012722,0.055502179,0){3063466,2744584.6,3257272.9,2277085.6,1864679.8,2187557.2,906160.93,386939.94,399401.17,-697426.19,-1214908.7,-1519988.7,-2122325.6,-2427603.9,-2940625.1}; -ST(0.082942949,0.21818591,0,0.076796159,0.2234596,0,0.073708403,0.21517194,0){823054.75,1008421.8,1225969.3,-1901094.8,-2411357.4,-2772471.1,1667014.3,2346331.8,2271379.1,-282341.7,-852928.84,-92677.622,-1297502.9,-1160000.7,-2155133.8}; -ST(0.1,0.064285714,0,0.09230899,0.063522919,0,0.1,0.057142857,0){0,877619.52,0,0,503392.8,0,0,-85524.836,0,0,-638068.15,0,0,-918939.46,0}; -ST(0.067728608,0.12931058,0,0.076158908,0.12549637,0,0.076271482,0.13373081,0){2567539,2092101.1,2012844.4,-1463631.5,-1030118.9,-1330317.6,-3196956.5,-2615047.7,-2463975.8,89062.443,-297340.89,494859.01,3235608.2,2464056,2631758.9}; -ST(0.037999827,0.27482627,0,0.034582704,0.26623209,0,0.043491003,0.26677795,0){474219.19,604041.77,657627.62,-1389905,-1737386.1,-1894105.9,2209621.2,2655775,2903724.9,-2876809.4,-3245580.1,-3565612.1,3345267.4,3433603.3,3800401.2}; -ST(0.029991713,0.27132489,0,0.034582704,0.26623209,0,0.037999827,0.27482627,0){469504.82,604041.77,474219.19,-1366503,-1737386.1,-1389905,2141236.7,2655775,2209621.2,-2724385.3,-3245580.1,-2876809.4,3063642.3,3433603.3,3345267.4}; -ST(0.082516133,0.27647665,0,0.078222118,0.28277283,0,0.074931673,0.27468874,0){248899.48,220930.92,363389.18,-731674.12,-655625.13,-1064791.9,1170289.2,1069057.6,1691857.9,-1538273.3,-1447830.3,-2200836.4,1813237.5,1779434.3,2556129.1}; -ST(0.074388951,0.025102472,0,0.078020383,0.017034313,0,0.082332164,0.023444943,0){2772012.4,2461848.1,2029600,2581574.2,2383750.6,1907886.4,2213781,2230032.5,1671751.1,1693914.7,2005590.6,1335359.8,1057277.9,1717239.5,918760.81}; -ST(0.050721192,0.10961634,0,0.042557423,0.10832344,0,0.047385855,0.10193045,0){3257974.6,3183930.6,3329666.7,-583831.78,-492142.06,-117239.93,-3737290.3,-3600076,-3442848.4,-2483878.9,-2551523.2,-3204510.9,1698581.7,1442840.6,350991.89}; -ST(0.015416139,0.018002698,0,0.022427218,0.014872357,0,0.024008584,0.022367291,0){1798828.3,2505875.7,2639060.6,1735136,2445229.8,2494948.4,1609995.5,2325397.7,2214593.6,1427830.3,2149288.4,1813324.4,1194733.1,1920956.8,1312931.3}; -ST(0.023483408,0.28013687,0,0.0220603,0.28602893,0,0.015498485,0.28248556,0){270985.88,181204.07,166274.63,-801278.39,-539738.59,-493262.57,1297043.7,886739.53,803759.61,-1736920.8,-1214791.9,-1087394.1,2101746.5,1516611.7,1334475.8}; -ST(0.059957308,0.22757204,0,0.053624899,0.22742186,0,0.05718895,0.22161738,0){1366903.5,1430137,1508977,-3351367.9,-3503302.1,-3566099.1,3498598.8,3648370.9,3352547.9,-1727811.3,-1785483,-1004251.2,-990620.01,-1060301.4,-1983866.6}; -ST(0.042433189,0.024814669,0,0.046063037,0.016810165,0,0.051167355,0.022914381,0){3739739.8,3836060.2,3850137.8,3488658.7,3717529.2,3629520.4,3003356.3,3484126.2,3200919.1,2316430.4,3143090.2,2588908.3,1473602,2704667.4,1828396.4}; -ST(0.077619244,0.18028791,0,0.071841704,0.17726974,0,0.077140734,0.17217741,0){1471797.4,1799263.7,1584233.7,-2389894.4,-2812994.5,-2313491.7,18944.546,-214389.53,-519338.58,2378251.6,2933842.6,2552719.3,-1502642.9,-1438939.3,-655929.75}; -ST(0.1,0.29285714,0,0.1,0.3,0,0.092857143,0.3,0){0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; -ST(0.043838979,0.034579424,0,0.035858843,0.031497608,0,0.042433189,0.024814669,0){3745913.7,3456371.8,3739739.8,3260141.4,3083741.5,3488658.7,2351583.2,2378649.5,3003356.3,1138042.7,1417116.3,2316430.4,-223347.31,302618.73,1473602}; -ST(0.074931673,0.27468874,0,0.078222118,0.28277283,0,0.071000103,0.28243589,0){363389.18,220930.92,281581.81,-1064791.9,-655625.13,-835250.62,1691857.9,1069057.6,1360764.9,-2200836.4,-1447830.3,-1840418.5,2556129.1,1779434.3,2257916.8}; -ST(0.1,0,0,0.1,0.0071428571,0,0.092857143,0,0){0,0,863626.15,0,0,863662.39,0,0,863732,0,0,863838.35,0,0,863813.95}; -ST(0.070691378,0.017050195,0,0.078020383,0.017034313,0,0.074388951,0.025102472,0){3076870.7,2461848.1,2772012.4,2979073.3,2383750.6,2581574.2,2786592,2230032.5,2213781,2505581.5,2005590.6,1693914.7,2144710.8,1717239.5,1057277.9}; -ST(0.038597539,0.20095921,0,0.036160627,0.1953007,0,0.043569257,0.19619451,0){1801301.7,1834250.2,1966078.6,-3633864.6,-3509998.2,-3794921.6,1895634,1372423.7,1563901,1705394,2256297.6,2340412.7,-3630918.1,-3434247.7,-3741435.4}; -ST(0.059078636,0.27701937,0,0.06660802,0.27624666,0,0.063469548,0.28521738,0){447007.97,417349.44,273598.49,-1315269.1,-1226359.7,-814255.31,2107766.2,1959900.4,1335465.2,-2778864.5,-2572844.1,-1824812,3289755.3,3027289.2,2270429.1}; -ST(0.036602132,0.28491153,0,0.030312881,0.27848596,0,0.037999827,0.27482627,0){279518.56,355416.48,474219.19,-831596.18,-1048284.8,-1389905,1362985.6,1688178.9,2209621.2,-1860498.2,-2242771,-2876809.4,2311728.5,2683885.3,3345267.4}; -ST(0.091053567,0.10618538,0,0.09416017,0.099511923,0,0.1,0.10714286,0){914271.31,613994.66,0,-104388.15,5422.3845,0,-1006721.9,-608645.22,0,-787386.88,-619557.01,0,309052.61,-16415.987,0}; -ST(0.076938259,0.060604721,0,0.073604017,0.054819307,0,0.080938662,0.054906318,0){2443533.2,2744584.6,2097661.4,1491930.8,1864679.8,1423084,-40674.57,386939.94,290856.94,-1557435.8,-1214908.7,-934922.56,-2468002.6,-2427603.9,-1860365.1}; -ST(0.0064539684,0.081629255,0,0.0067127961,0.088875219,0,0,0.085714286,0){711139.06,725937.81,0,222377.16,141227.93,0,-419239.47,-557260.38,0,-772749.89,-806944.34,0,-595288.06,-406936.37,0}; -ST(0.070865224,0.080352924,0,0.074756101,0.075901522,0,0.075872285,0.081656016,0){2808030.6,2549479.1,2427639,934415.1,1021825.1,758134.07,-1562677.5,-1118145.3,-1432759.9,-3017110.1,-2588166.7,-2638364.3,-2458745.5,-2507455.8,-2029677.1}; -ST(0.024044461,0.20382537,0,0.03163445,0.20120488,0,0.030490983,0.2108424,0){1283805.9,1608414.7,1428644.1,-2655634.7,-3251875.6,-3128471,1553893.8,1714266.6,2293671,995311.88,1500504,399562.24,-2617892.2,-3248047,-2769801.9}; -ST(0.071915087,0.24816524,0,0.078142774,0.24370973,0,0.07921504,0.25033934,0){803363.84,714639.7,606155.6,-2179152.4,-1902709.3,-1658203,2928525.2,2448578.4,2271843.6,-2836050.6,-2167997.3,-2284831,1927975,1155455.3,1693484.6}; -ST(0.091308694,0.0093164623,0,0.093571257,0.018380777,0,0.085905658,0.016824409,0){1045151,774815.13,1656238,1035216.9,746204.54,1604967.9,1015442.8,690036.86,1504009.2,986027.05,608388.09,1356492.3,947106.05,504051.02,1166855}; -ST(0.08596482,0.28314521,0,0.093593186,0.28160993,0,0.091323117,0.29067423,0){145967.81,74588.283,51002.156,-433371.98,-221009.65,-152526.43,707326.96,359269.18,252617.29,-959333.22,-484261.41,-350336.87,1181452.3,591230.88,444691.33}; -ST(0.069002793,0.22246209,0,0.076796159,0.2234596,0,0.07180958,0.22984275,0){1267491.2,1008421.8,1079159.6,-3011719.2,-2411357.4,-2680718.2,2877058.6,2346331.8,2899261.6,-947533.34,-852928.84,-1622013.4,-1573376.1,-1160000.7,-492395.98}; -ST(0.04704595,0.16277363,0,0.042242048,0.16806859,0,0.038427921,0.16264679,0){2543508.6,2399442.3,2389351.9,-3221973.5,-3302042.1,-3020403.6,-1684138.2,-1157324.9,-1591681.4,3671419.3,3737475.6,3440909.6,704902.67,-248746.29,682723.32}; -ST(0.030466665,0.11568191,0,0.030575169,0.1246812,0,0.025139549,0.12057635,0){2608170,2526238.7,2224740.3,-773675.45,-1202245.8,-875333.98,-3152461.4,-3156412.2,-2755721.9,-1443702.3,-451924.48,-796179.51,2136967.4,2919641.1,2272644.8}; -ST(0.035619257,0.12028764,0,0.030575169,0.1246812,0,0.030466665,0.11568191,0){2821397.9,2526238.7,2608170,-1093830.4,-1202245.8,-773675.45,-3491178.8,-3156412.2,-3152461.4,-1043884.2,-451924.48,-1443702.3,2851838.9,2919641.1,2136967.4}; -ST(0.016927821,0.11108648,0,0.013465065,0.10662372,0,0.017861336,0.10270337,0){1644246.3,1351132.7,1773538.4,-340994.5,-165451.82,-87655.931,-1914445.6,-1496410,-1856823.6,-1176430.8,-1147793.4,-1677437.3,981584.41,489093.12,261812.45}; -ST(0.055764419,0.28986395,0,0.051519181,0.28417908,0,0.056292141,0.2827555,0){202473.1,320732.11,343081.75,-605163.67,-953415.16,-1018093.3,1001119.7,1560004.1,1660020.8,-1385941.2,-2123899.5,-2248005.1,1755276.4,2629434.9,2762903.8}; -ST(0.0068768393,0.16098373,0,0.0046637588,0.16745308,0,0,0.16428571,0){553409.29,362371.83,0,-680450.71,-494096.85,0,-397156.36,-182769.85,0,771605.48,560561.48,0,219690.78,-21256.565,0}; -ST(0.042541479,0.22296234,0,0.045116599,0.21481108,0,0.049797208,0.2214244,0){1481591,1654487.5,1551864.2,-3531706.6,-3731787.4,-3662861.4,3405357.4,3030991.5,3430735.4,-1180392.3,-73694.316,-1003918.8,-1772446.7,-2938909.4,-2065424.5}; -ST(0.07921504,0.25033934,0,0.078142774,0.24370973,0,0.083292987,0.24598228,0){606155.6,714639.7,542685.82,-1658203,-1902709.3,-1458992.1,2271843.6,2448578.4,1920780.7,-2284831,-2167997.3,-1784182,1693484.6,1155455.3,1091638.2}; -ST(0.042557423,0.10832344,0,0.038084092,0.1145524,0,0.034786476,0.1076516,0){3183930.6,2981407.2,2912738.3,-492142.06,-818508.93,-413135.58,-3600076,-3575257.7,-3267374.9,-2551523.2,-1775238,-2390915.6,1442840.6,2287308.3,1215377.6}; -ST(0.026270926,0.075674812,0,0.027058874,0.069011929,0,0.033874053,0.071548869,0){2630439.6,2727323.5,3157862.8,1063205.3,1363815.9,1466537.3,-1137545.6,-681543.48,-1010259.7,-2660659.2,-2386220.5,-2946084.6,-2599027.8,-2898415.6,-3304540.6}; -ST(0.070754378,0.060222618,0,0.073604017,0.054819307,0,0.076938259,0.060604721,0){2932444.5,2744584.6,2443533.2,1804303.3,1864679.8,1491930.8,-17984.254,386939.94,-40674.57,-1833384.6,-1214908.7,-1557435.8,-2943704.7,-2427603.9,-2468002.6}; -ST(0.061098586,0.072147464,0,0.060416267,0.076932239,0,0.054876921,0.07294965,0){3389933,3380545.3,3558755.8,1545196.6,1302521.2,1580988.4,-1140417.3,-1576156.6,-1275447.3,-3205469.9,-3485992.8,-3423192.1,-3526423.9,-3253298.6,-3669097.1}; -ST(0.061027247,0.098743066,0,0.058212185,0.089881183,0,0.066799394,0.09162077,0){3173016.6,3344291.6,2974160.1,72008.811,593905.21,440022.16,-3099474,-2645013.4,-2469083.6,-3241975.4,-3708817.1,-3274492.4,-216202.29,-1722713.3,-1290097.2}; -ST(0.05718895,0.22161738,0,0.053910411,0.21448753,0,0.063265205,0.21633109,0){1508977,1667429.4,1505335.5,-3566099.1,-3752161.8,-3432481.9,3352547.9,3023771,2888962.8,-1004251.2,-28239.212,-265885.87,-1983866.6,-2988983.1,-2549234.8}; -ST(0.076158908,0.12549637,0,0.082946441,0.12207685,0,0.082709707,0.12855445,0){2092101.1,1589878.9,1568327.1,-1030118.9,-673263.29,-869760.99,-2615047.7,-1978038.1,-1955764.1,-297340.89,-467139.5,-1353.9511,2464056,1708498.9,1955094.7}; -ST(0.052748817,0.036292023,0,0.060555575,0.040182349,0,0.054794838,0.043915046,0){3796611.1,3588260.7,3735662.6,3254886.9,2962222.2,2959425,2248728.5,1819353,1568238.5,921690.78,359025.67,-148813.91,-537197.11,-1164330.1,-1835117.4}; -ST(0.060819012,0.031697917,0,0.060555575,0.040182349,0,0.052748817,0.036292023,0){3608360,3588260.7,3796611.1,3214477.8,2962222.2,3254886.9,2469695.4,1819353,2248728.5,1455299.1,359025.67,921690.78,281702.17,-1164330.1,-537197.11}; -ST(0.054010827,0.25507988,0,0.060672356,0.25950081,0,0.0528723,0.26429657,0){897184.36,771273.27,718299.05,-2496661.6,-2177172.3,-2055661.9,3553831.7,3197356.1,3109067.1,-3839088.9,-3651078,-3733060,3290330.5,3457676.3,3841282.5}; -ST(0.0528723,0.26429657,0,0.060672356,0.25950081,0,0.061631884,0.26868773,0){718299.05,771273.27,591535.29,-2055661.9,-2177172.3,-1711593.4,3109067.1,3197356.1,2649353.2,-3733060,-3651078,-3304968.8,3841282.5,3457676.3,3608394.3}; -ST(0.064075209,0.013493001,0,0.06203594,0.0060944193,0,0.068476894,0.0069177029,0){3498581.2,3604620.2,3242851.4,3428890.3,3589956.2,3225849.8,3290906.4,3560685.5,3191931.3,3087427.7,3516960.1,3141298.2,2822154,3458793.9,3073847.6}; -ST(0.068366879,0.29272708,0,0.061805884,0.29356168,0,0.063469548,0.28521738,0){123803.43,121923.05,273598.49,-370697.46,-365207.83,-814255.31,615462.12,606815.62,1335465.2,-856697.17,-845641.09,-1824812,1092834.3,1080583.1,2270429.1}; -ST(0.036912897,0.21765752,0,0.029518097,0.21985532,0,0.030490983,0.2108424,0){1486590.9,1264894.2,1428644.1,-3421295.1,-2954793.2,-3128471,2965983.4,2682751.8,2293671,-438566.7,-629411.95,399562.24,-2395869.1,-1842177.8,-2769801.9}; -ST(0.012304267,0.13852123,0,0.0054758376,0.13911323,0,0.0072553778,0.13224921,0){1094693.2,495708.7,674958.82,-832176.34,-382921.42,-425463.67,-1294374.3,-582869.54,-832230.25,521821.54,250325.59,117822.57,1419655.5,639819.51,875622.71}; -ST(0.07492972,0.092844339,0,0.072044079,0.08604506,0,0.079265602,0.086677581,0){2431427.6,2688599.4,2114636.1,308451.38,649473.83,488789.06,-2083891.4,-1882262.6,-1512904.7,-2656803.1,-2986497.2,-2351470.6,-910298.79,-1825996.4,-1382326.1}; -ST(0.017373248,0.19021363,0,0.012931293,0.19295437,0,0.01062282,0.18656765,0){1095255.9,815194.79,711483.53,-1990705.9,-1524077.7,-1243147.4,532263.7,510133.92,217509.34,1555631.8,1080471.8,1080570.1,-1804413.6,-1450076.4,-1025407.6}; -ST(0.074388951,0.025102472,0,0.068707287,0.030314019,0,0.064795861,0.023107998,0){2772012.4,3188897.7,3443592.1,2581574.2,2870259.7,3242943.8,2213781,2264806.3,2853338,1693914.7,1433032.7,2297494.4,1057277.9,457746.25,1607540.9}; -ST(0.064795861,0.023107998,0,0.068707287,0.030314019,0,0.060819012,0.031697917,0){3443592.1,3188897.7,3608360,3242943.8,2870259.7,3214477.8,2853338,2264806.3,2469695.4,2297494.4,1433032.7,1455299.1,1607540.9,457746.25,281702.17}; -ST(0.084206466,0.24009781,0,0.092168655,0.23668616,0,0.089949388,0.2453858,0){569988.38,307607.26,339950.36,-1492933.9,-792496.69,-911669.73,1847439,941630.33,1193275.4,-1498530.8,-691810.02,-1095139.7,578923.58,148523.72,648419.14}; -ST(0.056199026,0.010061392,0,0.052049192,0.01582547,0,0.049204373,0.010884263,0){3801979,3859264.8,3873084,3759859.9,3753529.9,3822842.7,3676084,3544947.6,3723003.5,3551608.2,3239251.6,3574883.8,3387596.5,2844641.6,3380124.5}; -ST(0.025221599,0.062165695,0,0.032659307,0.059686042,0,0.031105381,0.06529626,0){2618029.3,3158137.1,3030579.1,1547191.2,1964024.3,1667989.8,-156575.4,27282.242,-444570.51,-1796512.5,-1919818.3,-2357289.6,-2702051.5,-3141270.1,-3210321.2}; -ST(0.031105381,0.06529626,0,0.037071258,0.0642048,0,0.033874053,0.071548869,0){3030579.1,3365311.2,3157862.8,1667989.8,1900443.5,1466537.3,-444570.51,-391679.98,-1010259.7,-2357289.6,-2513388.8,-2946084.6,-3210321.2,-3541461.8,-3304540.6}; -ST(0.064795861,0.023107998,0,0.070691378,0.017050195,0,0.074388951,0.025102472,0){3443592.1,3076870.7,2772012.4,3242943.8,2979073.3,2581574.2,2853338,2786592,2213781,2297494.4,2505581.5,1693914.7,1607540.9,2144710.8,1057277.9}; -ST(0.064075209,0.013493001,0,0.070691378,0.017050195,0,0.064795861,0.023107998,0){3498581.2,3076870.7,3443592.1,3428890.3,2979073.3,3242943.8,3290906.4,2786592,2853338,3087427.7,2505581.5,2297494.4,2822154,2144710.8,1607540.9}; -ST(0.024008584,0.022367291,0,0.033039341,0.023173825,0,0.028359285,0.029784535,0){2639060.6,3318087.9,2981166.2,2494948.4,3123656.1,2693525.9,2214593.6,2746181,2145980.7,1813324.4,2207795.9,1391347.7,1312931.3,1539940.3,502245.34}; -ST(0.075488644,0.14176328,0,0.068478919,0.13862632,0,0.076271482,0.13373081,0){1990888.2,2426951.1,2012844.4,-1647841.2,-1850187.5,-1330317.6,-2274843.7,-2866745.3,-2463975.8,1255935.2,1169007.7,494859.01,2491166.6,3144665.9,2631758.9}; -ST(0.076271482,0.13373081,0,0.068478919,0.13862632,0,0.067728608,0.12931058,0){2012844.4,2426951.1,2567539,-1330317.6,-1850187.5,-1463631.5,-2463975.8,-2866745.3,-3196956.5,494859.01,1169007.7,89062.443,2631758.9,3144665.9,3235608.2}; -ST(0.060432552,0.20227914,0,0.053221516,0.20704838,0,0.051624576,0.1997036,0){1798951.1,1805672.4,1943020.7,-3671781.8,-3837129.3,-3875569.2,2023610.8,2511247.5,1911651.5,1565241.8,1011998.4,1974364.4,-3653837,-3650194.7,-3875892.9}; -ST(0.079063451,0.10043005,0,0.076969725,0.10634022,0,0.072126291,0.10515927,0){2051820.1,2181001.1,2539730.3,-16056.497,-255488.75,-241283.81,-2067914.3,-2406546.5,-2758172.2,-2035845.1,-1869163.7,-2254933.2,48244.512,756176.24,717337.89}; -ST(0.063265205,0.21633109,0,0.053910411,0.21448753,0,0.059551151,0.20970619,0){1505335.5,1667429.4,1688112.8,-3432481.9,-3752161.8,-3664209.4,2888962.8,3023771,2601193.1,-265885.87,-28239.212,619333.89,-2549234.8,-2988983.1,-3326584.6}; -ST(0.059551151,0.20970619,0,0.066992124,0.20847551,0,0.063265205,0.21633109,0){1688112.8,1540360.8,1505335.5,-3664209.4,-3311175.4,-3432481.9,2601193.1,2266191.6,2888962.8,619333.89,706070.36,-265885.87,-3326584.6,-3078419.5,-2549234.8}; -ST(0.1,0.10714286,0,0.09416017,0.099511923,0,0.1,0.1,0){0,613994.66,0,0,5422.3845,0,0,-608645.22,0,0,-619557.01,0,0,-16415.987,0}; -ST(0,0.15714286,0,0.0068768393,0.16098373,0,0,0.16428571,0){0,553409.29,0,0,-680450.71,0,0,-397156.36,0,0,771605.48,0,0,219690.78,0}; -ST(0.031710863,0.0075461758,0,0.029163144,0.015558324,0,0.025468185,0.010276157,0){3254919.5,3068207,2780034,3234618.2,2986953.6,2747892,3194153.7,2826596.5,2683968.5,3133832.1,2591406.1,2589008.8,3053845.3,2287504.7,2463902.9}; -ST(0.072323403,0.067507008,0,0.079822506,0.065677674,0,0.080160084,0.071577727,0){2781512.1,2163855.5,2107851.9,1448400.9,1180001.4,977984.82,-578922.09,-340376.77,-676141.96,-2328912.3,-1706002.2,-1967920.1,-2963263.7,-2296197.5,-2205119.3}; -ST(0.085369203,0.17624497,0,0.093873231,0.17693503,0,0.089858368,0.18421461,0){1039089.6,445896.9,692603.24,-1603144.1,-694096.79,-1178349.1,-168940.91,-59504.029,133849.22,1695116.9,727141.13,1084450.2,-751642.95,-345394.37,-894447.98}; -ST(0.064352171,0.083117586,0,0.072044079,0.08604506,0,0.066799394,0.09162077,0){3167194.8,2688599.4,2974160.1,915483.69,649473.83,440022.16,-1987167.2,-1882262.6,-2469083.6,-3477240.4,-2986497.2,-3274492.4,-2495770,-1825996.4,-1290097.2}; -ST(0.0098751756,0.25600949,0,0.013885016,0.25805955,0,0.0071908097,0.26035264,0){270470.11,357160.64,179155.76,-755004.71,-1003688.5,-507033.49,1082095.4,1459712.7,748779.14,-1183544.7,-1638678.7,-863311.12,1038261.4,1506406.6,830950.48}; -ST(0.016759526,0.025876157,0,0.021348697,0.029751655,0,0.014137494,0.034012185,0){1932221.9,2382657.5,1641076.4,1791225.7,2153252.9,1435142,1519509.7,1716520.5,1049094.4,1136895.1,1114508.8,531342.12,671081.1,404958.41,-53364.585}; -ST(0.019499739,0.079597209,0,0.012549176,0.077039569,0,0.01882241,0.070374011,0){2040354.6,1370920.5,2018056.9,702945.71,525978.15,970762.8,-1095289.5,-643140.23,-580354.6,-2175701.2,-1415881.7,-1830388.5,-1830384.7,-1316306.1,-2130853.3}; -ST(0.0910478,0.13167545,0,0.083559522,0.13424014,0,0.082709707,0.12855445,0){831136.87,1462145.4,1568327.1,-514132.23,-981746.52,-869760.99,-1027305.8,-1784737.2,-1955764.1,122313.64,395362.65,-1353.9511,1073956.7,1914407.3,1955094.7}; -ST(0.087083587,0.13880919,0,0.083559522,0.13424014,0,0.0910478,0.13167545,0){1144744.3,1462145.4,831136.87,-877072.07,-981746.52,-514132.23,-1349889.8,-1784737.2,-1027305.8,561444.4,395362.65,122313.64,1481228.8,1914407.3,1073956.7}; -ST(0.018704911,0.19716585,0,0.015977634,0.20443356,0,0.011268327,0.1984065,0){1103230.1,895779.15,682302.12,-2149261.2,-1862602.8,-1344805.9,934589.13,1114548.4,623458.07,1263201.6,659707.69,739532.85,-2132672.2,-1827076.9,-1341727.7}; -ST(0.01882241,0.070374011,0,0.012549176,0.077039569,0,0.011197941,0.071439681,0){2018056.9,1370920.5,1244724.5,970762.8,525978.15,579995.21,-580354.6,-643140.23,-394493.66,-1830388.5,-1415881.7,-1158343.6,-2130853.3,-1316306.1,-1303869.8}; -ST(0.077013163,0.11736903,0,0.082946441,0.12207685,0,0.076158908,0.12549637,0){2095773.2,1589878.9,2092101.1,-691227.47,-673263.29,-1030118.9,-2559181.5,-1978038.1,-2615047.7,-1023961.4,-467139.5,-297340.89,1873161.8,1708498.9,2464056}; -ST(0.061244461,0.14481879,0,0.064971856,0.15110456,0,0.058552205,0.15400025,0){2643484.5,2431817,2589572.8,-2356788.3,-2488096.1,-2806487.5,-2899198.4,-2374265.3,-2354581.2,2042509.4,2543085,3003966,3121060.9,2315361.9,2103059.1}; -ST(0.0094805882,0.16707285,0,0.014405512,0.17061143,0,0.0069613667,0.17349451,0){730151.01,1063653,517779.21,-989834.58,-1519257.6,-769992.03,-378084.11,-412907.51,-142713.64,1124284.7,1696192.6,839532.94,-22095.939,-313907.63,-266340.1}; -ST(0.017763535,0.12074209,0,0.01198914,0.11616091,0,0.016927821,0.11108648,0){1657769.5,1171325.2,1644246.3,-657738.05,-358450.6,-340994.5,-2054600.3,-1420119.3,-1914445.6,-581651.26,-627101.02,-1176430.8,1703675.4,984768,981584.41}; -ST(0.051624576,0.1997036,0,0.043569257,0.19619451,0,0.050398693,0.1921099,0){1943020.7,1966078.6,2077292.2,-3875569.2,-3794921.6,-3850553.1,1911651.5,1563901,1209682,1974364.4,2340412.7,2818064.5,-3875892.9,-3741435.4,-3615771.1}; -ST(0.051624576,0.1997036,0,0.057391395,0.19462543,0,0.060432552,0.20227914,0){1943020.7,1979510.6,1798951.1,-3875569.2,-3763012.6,-3671781.8,1911651.5,1410875.8,2023610.8,1974364.4,2491970.2,1565241.8,-3875892.9,-3656419.8,-3653837}; -ST(0.03663522,0.040674234,0,0.032229878,0.047894836,0,0.028678488,0.042143634,0){3463485.9,3188476.9,2968313.4,2844620.6,2403076.1,2399521.8,1717431.6,1025710.6,1370917.4,283267.24,-604377.64,79587.615,-1201989.6,-2086050.7,-1227272.3}; -ST(0.038515413,0.047952704,0,0.032229878,0.047894836,0,0.03663522,0.040674234,0){3516906.1,3188476.9,3463485.9,2648581.9,2403076.1,2844620.6,1126309.3,1025710.6,1717431.6,-674068.75,-604377.64,283267.24,-2308227.3,-2086050.7,-1201989.6}; -ST(0.014137494,0.034012185,0,0.021348697,0.029751655,0,0.023478597,0.036718106,0){1641076.4,2382657.5,2561783.8,1435142,2153252.9,2187675.4,1049094.4,1716520.5,1494080.3,531342.12,1114508.8,582277.59,-53364.585,404958.41,-414804.14}; -ST(0.058552205,0.15400025,0,0.065117308,0.15657509,0,0.061476805,0.16269562,0){2589572.8,2354870.2,2391378.9,-2806487.5,-2678881.2,-3025373.1,-2354581.2,-1986291.9,-1589341.3,3003966,2952219.2,3446908.2,2103059.1,1580034,675366.83}; -ST(0.021957304,0.26060316,0,0.013885016,0.25805955,0,0.018179834,0.25267212,0){505833.44,357160.64,514543.14,-1432636.8,-1003688.5,-1419813.2,2119105.6,1459712.7,1983439.5,-2450095.8,-1638678.7,-2069793.3,2369995.8,1506406.6,1657747.8}; -ST(0.018179834,0.25267212,0,0.013885016,0.25805955,0,0.01180171,0.25230222,0){514543.14,357160.64,347512.04,-1419813.2,-1003688.5,-957611.77,1983439.5,1459712.7,1333704.3,-2069793.3,-1638678.7,-1383899.6,1657747.8,1506406.6,1095718.6}; -ST(0.078984823,0.22953004,0,0.077318805,0.23627719,0,0.07180958,0.22984275,0){858343.29,830868.27,1079159.6,-2128428.8,-2136157.9,-2680718.2,2291087.1,2525048.7,2899261.6,-1261656.1,-1830714.2,-1622013.4,-424553.92,350702.19,-492395.98}; -ST(0.1,0.15,0,0.09308158,0.15403623,0,0.09156348,0.14589395,0){0,579061.91,734092.88,0,-628036.95,-670961.7,0,-525997.02,-791796.8,0,672596.25,602866.55,0,469080.04,843431.47}; -ST(0.063469548,0.28521738,0,0.06660802,0.27624666,0,0.071000103,0.28243589,0){273598.49,417349.44,281581.81,-814255.31,-1226359.7,-835250.62,1335465.2,1959900.4,1360764.9,-1824812,-2572844.1,-1840418.5,2270429.1,3027289.2,2257916.8}; -ST(0.056317057,0.058022103,0,0.059054943,0.066788508,0,0.052494391,0.065958781,0){3630316.8,3499189.3,3640248,2330872.5,1856149.2,1971511.2,197001.66,-658492.2,-601016.65,-2007682.1,-2864039.1,-2898090,-3494460.7,-3725081.1,-3866942}; -ST(0.028359285,0.029784535,0,0.021348697,0.029751655,0,0.024008584,0.022367291,0){2981166.2,2382657.5,2639060.6,2693525.9,2153252.9,2494948.4,2145980.7,1716520.5,2214593.6,1391347.7,1114508.8,1813324.4,502245.34,404958.41,1312931.3}; -ST(0.054395265,0.16699477,0,0.054692531,0.17439284,0,0.048076401,0.17082416,0){2465605.5,2346407.8,2424680.5,-3338618.7,-3532168.6,-3473815.1,-1283530.8,-561454.61,-921629.25,3793219.5,3816051.1,3872759.5,-59660.123,-1367177.6,-754316.94}; -ST(0.088381846,0.16289419,0,0.093710586,0.16080643,0,0.092195724,0.16853594,0){911153.68,507346.27,598378.34,-1156470.7,-621948.04,-829189.07,-599768.12,-366919.85,-278570.16,1317920.1,704920.6,936666.51,244888.24,207593.47,-82641.6}; -ST(0.08944657,0.05485846,0,0.09230899,0.063522919,0,0.08415119,0.061061125,0){1211526.2,877619.52,1759442.9,822600.19,503392.8,1064240.3,169573.91,-85524.836,-51487.645,-537958.1,-638068.15,-1146904.2,-1073022.7,-918939.46,-1789550.6}; -ST(0.1,0.19285714,0,0.093164956,0.1980516,0,0.091593501,0.1915477,0){0,420734.09,544831.72,0,-826537.04,-1004107.1,0,376428.12,301623.68,0,463603.83,749822.54,0,-823893.15,-933881.71}; -ST(0,0.042857143,0,0.0063343033,0.038958017,0,0.0064812773,0.046734878,0){0,751213.74,761350.4,0,627892.11,582610.88,0,401490.67,267082.8,0,109174.99,-111174.21,0,-201236.23,-463416.67}; -ST(0.014285714,0.3,0,0.017990672,0.29207379,0,0.021428571,0.3,0){0,86228.122,0,0,-258100.45,0,0,428229.3,0,0,-595472.42,0,0,758576.15,0}; -ST(0.021428571,0,0,0.01808004,0.0081573173,0,0.014285714,0,0){2419501.9,2085729.2,1683701.5,2419561.9,2070583.9,1683671.3,2419679.8,2040406.9,1683611.9,2419876.4,1995444.2,1683542.6,2419989.4,1935913.6,1683226}; -ST(0.080160084,0.071577727,0,0.074756101,0.075901522,0,0.072323403,0.067507008,0){2107851.9,2549479.1,2781512.1,977984.82,1021825.1,1448400.9,-676141.96,-1118145.3,-578922.09,-1967920.1,-2588166.7,-2328912.3,-2205119.3,-2507455.8,-2963263.7}; -ST(0.050398693,0.1921099,0,0.057391395,0.19462543,0,0.051624576,0.1997036,0){2077292.2,1979510.6,1943020.7,-3850553.1,-3763012.6,-3875569.2,1209682,1410875.8,1911651.5,2818064.5,2491970.2,1974364.4,-3615771.1,-3656419.8,-3875892.9}; -ST(0.0062494098,0.068021592,0,0.0060853536,0.074713803,0,0,0.071428571,0){709501.16,681675.12,0,364477.97,285253.65,0,-157824.6,-277070.48,0,-603457.47,-678306.76,0,-756039.79,-685312.86,0}; -ST(0.045331711,0.23557633,0,0.052478219,0.23860916,0,0.047556344,0.24377674,0){1270563.3,1222305.6,1122639.4,-3255008.9,-3178913.4,-2989881.7,3813331,3866354.4,3850350.4,-2700862,-3010118,-3414324.1,404484.48,951644.63,1828478.4}; -ST(0.050960377,0.23252058,0,0.052478219,0.23860916,0,0.045331711,0.23557633,0){1342135.9,1222305.6,1270563.3,-3383651.2,-3178913.4,-3255008.9,3804738.6,3866354.4,3813331,-2403721.7,-3010118,-2700862,-148681.88,951644.63,404484.48}; -ST(0.089949388,0.2453858,0,0.083292987,0.24598228,0,0.084206466,0.24009781,0){339950.36,542685.82,569988.38,-911669.73,-1458992.1,-1492933.9,1193275.4,1920780.7,1847439,-1095139.7,-1784182,-1498530.8,648419.14,1091638.2,578923.58}; -ST(0.08415119,0.061061125,0,0.080938662,0.054906318,0,0.08944657,0.05485846,0){1759442.9,2097661.4,1211526.2,1064240.3,1423084,822600.19,-51487.645,290856.94,169573.91,-1146904.2,-934922.56,-537958.1,-1789550.6,-1860365.1,-1073022.7}; -ST(0.014285714,0.3,0,0.010662343,0.29482959,0,0.017990672,0.29207379,0){0,34537.041,86228.122,0,-103506.64,-258100.45,0,172164.12,428229.3,0,-240303.04,-595472.42,0,307518.14,758576.15}; -ST(0.08944657,0.05485846,0,0.094913401,0.051076335,0,0.1,0.057142857,0){1211526.2,595503.05,0,822600.19,429138.45,0,169573.91,142901.48,0,-537958.1,-183223.65,0,-1073022.7,-458373.75,0}; -ST(0.1,0.24285714,0,0.095090425,0.2489538,0,0.089949388,0.2453858,0){0,157454.16,339950.36,0,-428416.46,-911669.73,0,579817.55,1193275.4,0,-569427.53,-1095139.7,0,400020.01,648419.14}; -ST(0.01808004,0.0081573173,0,0.010679145,0.0052482016,0,0.014285714,0,0){2085729.2,1277155.8,1683701.5,2070583.9,1273289.3,1683671.3,2040406.9,1265566.3,1683611.9,1995444.2,1254019.7,1683542.6,1935913.6,1238493.9,1683226}; -ST(0.045375723,0.12284566,0,0.052058531,0.12554764,0,0.045894811,0.13135905,0){3072436,3065498.6,2973475.7,-1348503.3,-1512626.5,-1819976.4,-3829159.4,-3831818,-3679581.9,-800055.99,-428428.64,392676.16,3380414.3,3614977.4,3832095.1}; -ST(0.045894811,0.13135905,0,0.052058531,0.12554764,0,0.053497526,0.1329974,0){2973475.7,3065498.6,2959143.9,-1819976.4,-1512626.5,-1911000.9,-3679581.9,-3831818,-3636096,392676.16,-428428.64,623103.97,3832095.1,3614977.4,3857035.6}; -ST(0.03163445,0.20120488,0,0.036840853,0.20596239,0,0.030490983,0.2108424,0){1608414.7,1679916.9,1428644.1,-3251875.6,-3538121.9,-3128471,1714266.6,2233718.4,2293671,1500504,1067350,399562.24,-3248047,-3414669.4,-2769801.9}; -ST(0.089858368,0.18421461,0,0.082729031,0.18391978,0,0.085369203,0.17624497,0){692603.24,1144258.1,1039089.6,-1178349.1,-1940160.8,-1603144.1,133849.22,205244.05,-168940.91,1084450.2,1797438.3,1695116.9,-894447.98,-1455642.1,-751642.95}; -ST(0.02463475,0.21609565,0,0.021120118,0.21068669,0,0.030490983,0.2108424,0){1153636.1,1077357.5,1428644.1,-2626116.1,-2356401.7,-3128471,2198315,1720167.1,2293671,-179791.92,314292.11,399562.24,-1969098.8,-2093742.8,-2769801.9}; -ST(0.030490983,0.2108424,0,0.021120118,0.21068669,0,0.024044461,0.20382537,0){1428644.1,1077357.5,1283805.9,-3128471,-2356401.7,-2655634.7,2293671,1720167.1,1553893.8,399562.24,314292.11,995311.88,-2769801.9,-2093742.8,-2617892.2}; -ST(0.047385855,0.10193045,0,0.039702853,0.10111678,0,0.044548934,0.094607351,0){3329666.7,3175586.8,3364209.6,-117239.93,-64516.934,323528.56,-3442848.4,-3238866.3,-3009655.6,-3204510.9,-3108635.2,-3622750.1,350991.89,193445.51,-961698.97}; -ST(0.050721192,0.10961634,0,0.051013063,0.11801667,0,0.044666369,0.11545829,0){3257974.6,3161388.4,3148096.1,-583831.78,-1083065.4,-920013.3,-3737290.3,-3873486.3,-3799301.5,-2483878.9,-1463412.7,-1769018.1,1698581.7,2911579,2547335.8}; -ST(0.055764419,0.28986395,0,0.056292141,0.2827555,0,0.063469548,0.28521738,0){202473.1,343081.75,273598.49,-605163.67,-1018093.3,-814255.31,1001119.7,1660020.8,1335465.2,-1385941.2,-2248005.1,-1824812,1755276.4,2762903.8,2270429.1}; -ST(0.058552205,0.15400025,0,0.054296142,0.16027015,0,0.050010485,0.1548865,0){2589572.8,2568973.7,2672912.2,-2806487.5,-3120486,-2946373.7,-2354581.2,-1899085.7,-2371553.9,3003966,3528266.9,3189127.5,2103059.1,1141594.9,2045305.7}; -ST(0.01062282,0.18656765,0,0.0062925762,0.18063125,0,0.013878694,0.17880836,0){711483.53,445914.92,971566.52,-1243147.4,-727143.63,-1548960.4,217509.34,12632.594,-51095.574,1080570.1,719304.1,1579530,-1025407.6,-466469.22,-887966.26}; -ST(0.030490983,0.2108424,0,0.029518097,0.21985532,0,0.02463475,0.21609565,0){1428644.1,1264894.2,1153636.1,-3128471,-2954793.2,-2626116.1,2293671,2682751.8,2198315,399562.24,-629411.95,-179791.92,-2769801.9,-1842177.8,-1969098.8}; -ST(0.030312881,0.27848596,0,0.025044032,0.27464897,0,0.029991713,0.27132489,0){355416.48,363665.57,469504.82,-1048284.8,-1065519.5,-1366503,1688178.9,1692735.8,2141236.7,-2242771,-2201379.5,-2724385.3,2683885.3,2555652.6,3063642.3}; -ST(0.1,0.15,0,0.09156348,0.14589395,0,0.1,0.14285714,0){0,734092.88,0,0,-670961.7,0,0,-791796.8,0,0,602866.55,0,0,843431.47,0}; -ST(0.054957014,0.24657048,0,0.052478219,0.23860916,0,0.059437672,0.2400817,0){1058545,1222305.6,1145348.7,-2852831,-3178913.4,-2999714,3777171.8,3866354.4,3711340.5,-3549694.2,-3010118,-3009146,2239441.1,951644.63,1160252.2}; -ST(0.047556344,0.24377674,0,0.052478219,0.23860916,0,0.054957014,0.24657048,0){1122639.4,1222305.6,1058545,-2989881.7,-3178913.4,-2852831,3850350.4,3866354.4,3777171.8,-3414324.1,-3010118,-3549694.2,1828478.4,951644.63,2239441.1}; -ST(0.016702178,0.061420197,0,0.025221599,0.062165695,0,0.01882241,0.070374011,0){1844408.3,2618029.3,2018056.9,1107331.1,1547191.2,970762.8,-72241.295,-156575.4,-580354.6,-1222910.6,-1796512.5,-1830388.5,-1885264.1,-2702051.5,-2130853.3}; -ST(0.029380008,0.16405835,0,0.034314476,0.15645926,0,0.038427921,0.16264679,0){2021292.5,2334400.9,2389351.9,-2614335.2,-2649968.2,-3020403.6,-1254306.4,-1976247.7,-1591681.4,2982541.3,2917237.1,3440909.6,378860.61,1581967.4,682723.32}; -ST(0.027609688,0.15620978,0,0.034314476,0.15645926,0,0.029380008,0.16405835,0){2023546.1,2334400.9,2021292.5,-2286520.9,-2649968.2,-2614335.2,-1726415,-1976247.7,-1254306.4,2510934.9,2917237.1,2982541.3,1400022.9,1581967.4,378860.61}; -ST(0.041057987,0.068843254,0,0.037071258,0.0642048,0,0.045416206,0.061541227,0){3488848.8,3365311.2,3642820.9,1752771.3,1900443.5,2181474.8,-855539,-391679.98,-155055.51,-3038218.5,-2513388.8,-2429600.5,-3709409.4,-3541461.8,-3730025.8}; -ST(0.084368038,0.19048099,0,0.082729031,0.18391978,0,0.089858368,0.18421461,0){992852.93,1144258.1,692603.24,-1809621.2,-1940160.8,-1178349.1,495817.1,205244.05,133849.22,1401810.9,1797438.3,1084450.2,-1649308.4,-1455642.1,-894447.98}; -ST(0.020973714,0.16688371,0,0.014405512,0.17061143,0,0.014502412,0.16316663,0){1525118.3,1063653,1121335,-2061659.5,-1519257.6,-1429592.9,-799875.51,-412907.51,-728363.13,2343184.8,1696192.6,1629901.1,-24581.749,-313907.63,280110.31}; -ST(0.03663522,0.040674234,0,0.035858843,0.031497608,0,0.043838979,0.034579424,0){3463485.9,3456371.8,3745913.7,2844620.6,3083741.5,3260141.4,1717431.6,2378649.5,2351583.2,283267.24,1417116.3,1138042.7,-1201989.6,302618.73,-223347.31}; -ST(0.064075209,0.013493001,0,0.057612168,0.01845715,0,0.056199026,0.010061392,0){3498581.2,3752599.8,3801979,3428890.3,3612875.5,3759859.9,3290906.4,3338613.5,3676084,3087427.7,2940029.2,3551608.2,2822154,2431782.4,3387596.5}; -ST(0.025130011,0.29009115,0,0.028198926,0.28535727,0,0.031264826,0.29263185,0){142877.47,230200.16,124484.17,-427099.39,-685197.76,-372709.78,706741.94,1124120.6,618717.86,-978805.55,-1536674.3,-861054.65,1240164.3,1912913.1,1098239.8}; -ST(0.066799394,0.09162077,0,0.069968451,0.098831219,0,0.061027247,0.098743066,0){2974160.1,2730411,3173016.6,440022.16,57648.531,72008.811,-2469083.6,-2671597.7,-3099474,-3274492.4,-2785714.6,-3241975.4,-1290097.2,-173126.8,-216202.29}; -ST(0.063469548,0.28521738,0,0.056292141,0.2827555,0,0.059078636,0.27701937,0){273598.49,343081.75,447007.97,-814255.31,-1018093.3,-1315269.1,1335465.2,1660020.8,2107766.2,-1824812,-2248005.1,-2778864.5,2270429.1,2762903.8,3289755.3}; -ST(0.05718895,0.22161738,0,0.062992669,0.22303634,0,0.059957308,0.22757204,0){1508977,1396775.9,1366903.5,-3566099.1,-3331109.7,-3351367.9,3352547.9,3216330,3498598.8,-1004251.2,-1122974.8,-1727811.3,-1983866.6,-1661551.4,-990620.01}; -ST(0.063265205,0.21633109,0,0.062992669,0.22303634,0,0.05718895,0.22161738,0){1505335.5,1396775.9,1508977,-3432481.9,-3331109.7,-3566099.1,2888962.8,3216330,3352547.9,-265885.87,-1122974.8,-1004251.2,-2549234.8,-1661551.4,-1983866.6}; -ST(0.044637502,0.20577347,0,0.045116599,0.21481108,0,0.038843793,0.21103197,0){1811821.2,1654487.5,1637090.1,-3810004,-3731787.4,-3590120.4,2390091.8,3030991.5,2645890.8,1174216.7,-73694.316,433646.44,-3685779.4,-2938909.4,-3163532.2}; -ST(0.061631884,0.26868773,0,0.055001581,0.27169863,0,0.0528723,0.26429657,0){591535.29,565900.8,718299.05,-1711593.4,-1648356.5,-2055661.9,2649353.2,2587095.5,3109067.1,-3304968.8,-3300283.2,-3733060,3608394.3,3725567.5,3841282.5}; -ST(0.049232245,0.21047418,0,0.045116599,0.21481108,0,0.044637502,0.20577347,0){1752658.6,1654487.5,1811821.2,-3827070.5,-3731787.4,-3810004,2777012.8,3030991.5,2390091.8,540242.46,-73694.316,1174216.7,-3416565.4,-2938909.4,-3685779.4}; -ST(0.1,0.17142857,0,0.093873231,0.17693503,0,0.092195724,0.16853594,0){0,445896.9,598378.34,0,-694096.79,-829189.07,0,-59504.029,-278570.16,0,727141.13,936666.51,0,-345394.37,-82641.6}; -ST(0.0060491453,0.25298129,0,0.0071908097,0.26035264,0,0,0.25714286,0){178654.23,179155.76,0,-493529.07,-507033.49,0,691183.17,748779.14,0,-724662.05,-863311.12,0,585970.08,830950.48,0}; -ST(0.0072553778,0.13224921,0,0.014210915,0.13228117,0,0.012304267,0.13852123,0){674958.82,1289449.4,1094693.2,-425463.67,-813665.75,-832176.34,-832230.25,-1589638.3,-1294374.3,117822.57,227067.92,521821.54,875622.71,1673024.3,1419655.5}; -ST(0.028359285,0.029784535,0,0.030602087,0.036163623,0,0.023478597,0.036718106,0){2981166.2,3125169.1,2561783.8,2693525.9,2682310.4,2187675.4,2145980.7,1859340.6,1494080.3,1391347.7,772883.67,582277.59,502245.34,-423255.99,-414804.14}; -ST(0.023478597,0.036718106,0,0.030602087,0.036163623,0,0.028678488,0.042143634,0){2561783.8,3125169.1,2968313.4,2187675.4,2682310.4,2399521.8,1494080.3,1859340.6,1370917.4,582277.59,772883.67,79587.615,-414804.14,-423255.99,-1227272.3}; -ST(0.0069613667,0.17349451,0,0.014405512,0.17061143,0,0.013878694,0.17880836,0){517779.21,1063653,971566.52,-769992.03,-1519257.6,-1548960.4,-142713.64,-412907.51,-51095.574,839532.94,1696192.6,1579530,-266340.1,-313907.63,-887966.26}; -ST(0.069467767,0.146519,0,0.068478919,0.13862632,0,0.075488644,0.14176328,0){2287173.5,2426951.1,1990888.2,-2120501.9,-1850187.5,-1647841.2,-2441744.6,-2866745.3,-2274843.7,1942651.5,1169007.7,1255935.2,2583122,3144665.9,2491166.6}; -ST(0.043838979,0.034579424,0,0.048866761,0.029559705,0,0.052748817,0.036292023,0){3745913.7,3831772.8,3796611.1,3260141.4,3467532.3,3254886.9,2351583.2,2773676.3,2248728.5,1138042.7,1816186,921690.78,-223347.31,685852.4,-537197.11}; -ST(0.0528723,0.26429657,0,0.049721881,0.27094787,0,0.043491003,0.26677795,0){718299.05,588018.61,657627.62,-2055661.9,-1710042.9,-1894105.9,3109067.1,2675009.8,2903724.9,-3733060,-3394309,-3565612.1,3841282.5,3801713.7,3800401.2}; -ST(0.044548934,0.094607351,0,0.039702853,0.10111678,0,0.03690243,0.09394169,0){3364209.6,3175586.8,3135041.5,323528.56,-64516.934,337961.95,-3009655.6,-3238866.3,-2760700,-3622750.1,-3108635.2,-3396384.7,-961698.97,193445.51,-1002139.6}; -ST(0.089858368,0.18421461,0,0.095453592,0.18738967,0,0.091593501,0.1915477,0){692603.24,307137.29,544831.72,-1178349.1,-541566.85,-1004107.1,133849.22,106216.39,301623.68,1084450.2,460538.95,749822.54,-894447.98,-458087.35,-933881.71}; -ST(0,0.12857143,0,0.0061411468,0.1246533,0,0.0072553778,0.13224921,0){0,591118.91,674958.82,0,-280990.71,-425463.67,0,-738586.84,-832230.25,0,-106527.54,117822.57,0,682629.18,875622.71}; -ST(0.057612168,0.01845715,0,0.052049192,0.01582547,0,0.056199026,0.010061392,0){3752599.8,3859264.8,3801979,3612875.5,3753529.9,3759859.9,3338613.5,3544947.6,3676084,2940029.2,3239251.6,3551608.2,2431782.4,2844641.6,3387596.5}; -ST(0.015977634,0.20443356,0,0.021120118,0.21068669,0,0.013229009,0.21171696,0){895779.15,1077357.5,698716.07,-1862602.8,-2356401.7,-1540332.8,1114548.4,1720167.1,1156621.3,659707.69,314292.11,147278.69,-1827076.9,-2093742.8,-1334554.8}; -ST(0.0064812773,0.046734878,0,0.0063343033,0.038958017,0,0.011573719,0.041901165,0){761350.4,751213.74,1347025.1,582610.88,627892.11,1091815.8,267082.8,401490.67,629744.45,-111174.21,109174.99,48353.226,-463416.67,-201236.23,-542301.86}; -ST(0.054395265,0.16699477,0,0.054296142,0.16027015,0,0.061476805,0.16269562,0){2465605.5,2568973.7,2391378.9,-3338618.7,-3120486,-3025373.1,-1283530.8,-1899085.7,-1589341.3,3793219.5,3528266.9,3446908.2,-59660.123,1141594.9,675366.83}; -ST(0.0094805882,0.16707285,0,0.0046637588,0.16745308,0,0.0068768393,0.16098373,0){730151.01,362371.83,553409.29,-989834.58,-494096.85,-680450.71,-378084.11,-182769.85,-397156.36,1124284.7,560561.48,771605.48,-22095.939,-21256.565,219690.78}; -ST(0.017763535,0.12074209,0,0.023213665,0.1150537,0,0.025139549,0.12057635,0){1657769.5,2130593.3,2224740.3,-657738.05,-605772.32,-875333.98,-2054600.3,-2564157.8,-2755721.9,-581651.26,-1229375.9,-796179.51,1703675.4,1684092.7,2272644.8}; -ST(0,0.14285714,0,0.0078195435,0.14622426,0,0,0.15,0){0,680366.1,0,0,-626541.18,0,0,-729870.69,0,0,568744.13,0,0,774663.29,0}; -ST(0,0.10714286,0,0.0081152275,0.10988635,0,0,0.11428571,0){0,821145.89,0,0,-151361.79,0,0,-944689.8,0,0,-619246.83,0,0,439508.43,0}; -ST(0.023483408,0.28013687,0,0.025044032,0.27464897,0,0.030312881,0.27848596,0){270985.88,363665.57,355416.48,-801278.39,-1065519.5,-1048284.8,1297043.7,1692735.8,1688178.9,-1736920.8,-2201379.5,-2242771,2101746.5,2555652.6,2683885.3}; -ST(0.085369203,0.17624497,0,0.083969261,0.16737329,0,0.092195724,0.16853594,0){1039089.6,1198489.7,598378.34,-1603144.1,-1632158.2,-829189.07,-168940.91,-607916.58,-278570.16,1695116.9,1852187.2,936666.51,-751642.95,-62490.334,-82641.6}; -ST(0.0910478,0.13167545,0,0.093823791,0.12410599,0,0.1,0.12857143,0){831136.87,595735.92,0,-514132.23,-276601.23,0,-1027305.8,-743959.63,0,122313.64,-121937.8,0,1073956.7,678759.2,0}; -ST(0.1,0.10714286,0,0.091758141,0.11296708,0,0.091053567,0.10618538,0){0,824791.32,914271.31,0,-201020.76,-104388.15,0,-976886.6,-1006721.9,0,-537824.26,-787386.88,0,570097.26,309052.61}; -ST(0.01808004,0.0081573173,0,0.022427218,0.014872357,0,0.015416139,0.018002698,0){2085729.2,2505875.7,1798828.3,2070583.9,2445229.8,1735136,2040406.9,2325397.7,1609995.5,1995444.2,2149288.4,1427830.3,1935913.6,1920956.8,1194733.1}; -ST(0.015498485,0.28248556,0,0.0220603,0.28602893,0,0.017990672,0.29207379,0){166274.63,181204.07,86228.122,-493262.57,-539738.59,-258100.45,803759.61,886739.53,428229.3,-1087394.1,-1214791.9,-595472.42,1334475.8,1516611.7,758576.15}; -ST(0.013229009,0.21171696,0,0.021120118,0.21068669,0,0.018343869,0.21720619,0){698716.07,1077357.5,888277.19,-1540332.8,-2356401.7,-2037897.4,1156621.3,1720167.1,1749211,147278.69,314292.11,-225952.88,-1334554.8,-2093742.8,-1457259.1}; -ST(0.061015306,0.048529238,0,0.060555575,0.040182349,0,0.066401409,0.0434645,0){3533367.8,3588260.7,3289675.8,2640342.3,2962222.2,2619840.6,1080012.2,1819353,1416557.6,-753291.7,359025.67,-75156.319,-2396723.8,-1164330.1,-1551772}; -ST(0.054794838,0.043915046,0,0.060555575,0.040182349,0,0.061015306,0.048529238,0){3735662.6,3588260.7,3533367.8,2959425,2962222.2,2640342.3,1568238.5,1819353,1080012.2,-148813.91,359025.67,-753291.7,-1835117.4,-1164330.1,-2396723.8}; -ST(0.01062282,0.18656765,0,0.012931293,0.19295437,0,0.0066871595,0.19241823,0){711483.53,815194.79,432113.5,-1243147.4,-1524077.7,-803518.34,217509.34,510133.92,258472.73,1080570.1,1080471.8,581490.34,-1025407.6,-1450076.4,-758588.26}; -ST(0.010546892,0.2198034,0,0.0069979116,0.22643766,0,0,0.22142857,0){514716.79,317964.48,0,-1201974.2,-774386.26,0,1090194.6,793599.18,0,-253690.09,-364658.79,0,-751659.26,-270536.88,0}; -ST(0.04704595,0.16277363,0,0.054296142,0.16027015,0,0.054395265,0.16699477,0){2543508.6,2568973.7,2465605.5,-3221973.5,-3120486,-3338618.7,-1684138.2,-1899085.7,-1283530.8,3671419.3,3528266.9,3793219.5,704902.67,1141594.9,-59660.123}; -ST(0.015758122,0.23699049,0,0.016939848,0.22904958,0,0.022740693,0.23189018,0){597291.98,714788.59,887604.04,-1541119.1,-1767596.2,-2230116.3,1837947.1,1888698.3,2485475.6,-1363109.4,-1014237.8,-1529145.6,315646.37,-395054.79,-172982.46}; -ST(0.076430303,0.18837043,0,0.082729031,0.18391978,0,0.084368038,0.19048099,0){1444535.6,1144258.1,992852.93,-2574453.4,-1940160.8,-1809621.2,569102.25,205244.05,495817.1,2129625.3,1797438.3,1401810.9,-2235391.7,-1455642.1,-1649308.4}; -ST(0.077619244,0.18028791,0,0.082729031,0.18391978,0,0.076430303,0.18837043,0){1471797.4,1144258.1,1444535.6,-2389894.4,-1940160.8,-2574453.4,18944.546,205244.05,569102.25,2378251.6,1797438.3,2129625.3,-1502642.9,-1455642.1,-2235391.7}; -ST(0.059078636,0.27701937,0,0.056292141,0.2827555,0,0.051703203,0.27754162,0){447007.97,343081.75,454636.43,-1315269.1,-1018093.3,-1338881.7,2107766.2,1660020.8,2149437.1,-2778864.5,-2248005.1,-2841702,3289755.3,2762903.8,3377384.9}; -ST(0.010546892,0.2198034,0,0.0051799073,0.21317882,0,0.013229009,0.21171696,0){514716.79,276031.48,698716.07,-1201974.2,-615227.88,-1540332.8,1090194.6,479976.29,1156621.3,-253690.09,25450.705,147278.69,-751659.26,-511551.59,-1334554.8}; -ST(0.061027247,0.098743066,0,0.052532368,0.096036702,0,0.058212185,0.089881183,0){3173016.6,3389506.1,3344291.6,72008.811,240670.51,593905.21,-3099474,-3131818.5,-2645013.4,-3241975.4,-3594959.1,-3708817.1,-216202.29,-718569.73,-1722713.3}; -ST(0.09156348,0.14589395,0,0.09308158,0.15403623,0,0.084604507,0.15255901,0){734092.88,579061.91,1258841.2,-670961.7,-628036.95,-1326319,-791796.8,-525997.02,-1187789.9,602866.55,672596.25,1390056.3,843431.47,469080.04,1113216.6}; -ST(0,0.2,0,0.007303543,0.20469543,0,0,0.20714286,0){0,422375.13,0,0,-880191.16,0,0,531663.92,0,0,303952.91,0,0,-861341.37,0}; -ST(0.052478219,0.23860916,0,0.056766116,0.23329497,0,0.059437672,0.2400817,0){1222305.6,1298096.4,1145348.7,-3178913.4,-3286228.7,-2999714,3866354.4,3735031.6,3711340.5,-3010118,-2434254.7,-3009146,951644.63,-7070.0355,1160252.2}; -ST(0.045331711,0.23557633,0,0.04727629,0.22823863,0,0.050960377,0.23252058,0){1270563.3,1418822.2,1342135.9,-3255008.9,-3492237.2,-3383651.2,3813331,3684627.2,3804738.6,-2700862,-1892328,-2403721.7,404484.48,-919608.01,-148681.88}; -ST(0.072044079,0.08604506,0,0.075872285,0.081656016,0,0.079265602,0.086677581,0){2688599.4,2427639,2114636.1,649473.83,758134.07,488789.06,-1882262.6,-1432759.9,-1512904.7,-2986497.2,-2638364.3,-2351470.6,-1825996.4,-2029677.1,-1382326.1}; -ST(0.084917502,0.034253561,0,0.092450683,0.030760689,0,0.092141527,0.03991184,0){1742331.8,900007.85,927649.93,1520580.8,807431.66,767955.56,1105294,631804.95,476054.53,549324.68,391202.83,102192.68,-76880.401,110124.82,-289378.9}; -ST(0.092295863,0.26000779,0,0.092520768,0.26920591,0,0.085115353,0.26563346,0){193329.27,145042.72,313056.52,-546576.12,-420173.4,-899063.8,805368.84,651988.34,1369900.4,-924990.4,-816598.86,-1665255.4,884724.5,896908.09,1747205.8}; -ST(0.059437672,0.2400817,0,0.056766116,0.23329497,0,0.064373335,0.2338171,0){1145348.7,1298096.4,1185902.3,-2999714,-3286228.7,-3010536.1,3711340.5,3735031.6,3446119.8,-3009146,-2434254.7,-2291596.2,1160252.2,-7070.0355,79206.699}; -ST(0.075978544,0.034466341,0,0.067616069,0.037109229,0,0.068707287,0.030314019,0){2615244.9,3239242.7,3188897.7,2278283.7,2756202.5,2870259.7,1647758.2,1862139.4,2264806.3,804880.96,690369.93,1433032.7,-142067.87,-584563.48,457746.25}; -ST(0.01062282,0.18656765,0,0.016878531,0.18478654,0,0.017373248,0.19021363,0){711483.53,1113458.1,1095255.9,-1243147.4,-1906862.4,-1990705.9,217509.34,245299.96,532263.7,1080570.1,1732097.5,1555631.8,-1025407.6,-1479759.2,-1804413.6}; -ST(0.013878694,0.17880836,0,0.016878531,0.18478654,0,0.01062282,0.18656765,0){971566.52,1113458.1,711483.53,-1548960.4,-1906862.4,-1243147.4,-51095.574,245299.96,217509.34,1579530,1732097.5,1080570.1,-887966.26,-1479759.2,-1025407.6}; -ST(0.069536278,0.26943087,0,0.068237016,0.26229006,0,0.076498673,0.26519709,0){505602.11,639705.29,473307.48,-1465439,-1820649,-1357765.2,2276404,2721368.6,2063933,-2856108.7,-3203243.1,-2499100.3,3145421.5,3191912.1,2605934.6}; -ST(0.059551151,0.20970619,0,0.053221516,0.20704838,0,0.060432552,0.20227914,0){1688112.8,1805672.4,1798951.1,-3664209.4,-3837129.3,-3671781.8,2601193.1,2511247.5,2023610.8,619333.89,1011998.4,1565241.8,-3326584.6,-3650194.7,-3653837}; -ST(0.066799394,0.09162077,0,0.072044079,0.08604506,0,0.07492972,0.092844339,0){2974160.1,2688599.4,2431427.6,440022.16,649473.83,308451.38,-2469083.6,-1882262.6,-2083891.4,-3274492.4,-2986497.2,-2656803.1,-1290097.2,-1825996.4,-910298.79}; -ST(0.0098751756,0.25600949,0,0.0071908097,0.26035264,0,0.0060491453,0.25298129,0){270470.11,179155.76,178654.23,-755004.71,-507033.49,-493529.07,1082095.4,748779.14,691183.17,-1183544.7,-863311.12,-724662.05,1038261.4,830950.48,585970.08}; -ST(0.077140734,0.17217741,0,0.083969261,0.16737329,0,0.085369203,0.17624497,0){1584233.7,1198489.7,1039089.6,-2313491.7,-1632158.2,-1603144.1,-519338.58,-607916.58,-168940.91,2552719.3,1852187.2,1695116.9,-655929.75,-62490.334,-751642.95}; -ST(0.041402067,0.22952626,0,0.04727629,0.22823863,0,0.045331711,0.23557633,0){1348916.4,1418822.2,1270563.3,-3344816,-3492237.2,-3255008.9,3600200.4,3684627.2,3813331,-1982154,-1892328,-2700862,-667743.82,-919608.01,404484.48}; -ST(0.0071147476,0.24137211,0,0.013821768,0.24617185,0,0.0087429334,0.24792416,0){259907.57,454053.45,283453.34,-684802.64,-1221678.8,-768118.62,859611.54,1611329.8,1029935.2,-720499.62,-1502439.1,-992967.39,317972.39,928515.88,667809.3}; -ST(0.007303543,0.20469543,0,0.0051799073,0.21317882,0,0,0.20714286,0){422375.13,276031.48,0,-880191.16,-615227.88,0,531663.92,479976.29,0,303952.91,25450.705,0,-861341.37,-511551.59,0}; -ST(0.052748817,0.036292023,0,0.054261983,0.029107824,0,0.060819012,0.031697917,0){3796611.1,3801269,3608360,3254886.9,3450822.2,3214477.8,2248728.5,2782228.4,2469695.4,921690.78,1857139.4,1455299.1,-537197.11,760852.59,281702.17}; -ST(0.064832361,0.062804408,0,0.070754378,0.060222618,0,0.072323403,0.067507008,0){3281120.4,2932444.5,2781512.1,1912310.8,1804303.3,1448400.9,-254314.65,-17984.254,-578922.09,-2314932.7,-1833384.6,-2328912.3,-3410309.6,-2943704.7,-2963263.7}; -ST(0.011197941,0.071439681,0,0.0060853536,0.074713803,0,0.0062494098,0.068021592,0){1244724.5,681675.12,709501.16,579995.21,285253.65,364477.97,-394493.66,-277070.48,-157824.6,-1158343.6,-678306.76,-603457.47,-1303869.8,-685312.86,-756039.79}; -ST(0.05288218,0.14757716,0,0.045364072,0.14896511,0,0.047918899,0.14257657,0){2767228.4,2729630.7,2842478.3,-2626819.9,-2670475.8,-2400971.6,-2900596.1,-2787568.3,-3215455,2479722.6,2610132.2,1901551.7,3026446,2844182.1,3510918.5}; -ST(0,0.18571429,0,0.0062925762,0.18063125,0,0.01062282,0.18656765,0){0,445914.92,711483.53,0,-727143.63,-1243147.4,0,12632.594,217509.34,0,719304.1,1080570.1,0,-466469.22,-1025407.6}; -ST(0.077140734,0.17217741,0,0.071841704,0.17726974,0,0.071059851,0.17209017,0){1584233.7,1799263.7,1900690.4,-2313491.7,-2812994.5,-2772233.4,-519338.58,-214389.53,-629520.98,2552719.3,2933842.6,3060958.1,-655929.75,-1438939.3,-774142.34}; -ST(0.066992124,0.20847551,0,0.06966854,0.20076802,0,0.075422073,0.20645372,0){1540360.8,1570520.4,1273700.5,-3311175.4,-3162888.4,-2693470,2266191.6,1636334.6,1728669,706070.36,1503948.1,766631.5,-3078419.5,-3161601.9,-2583646.6}; -ST(0.039157325,0.25334591,0,0.043027686,0.24899973,0,0.04563604,0.25694979,0){884627.38,999522.33,859240.08,-2446896,-2720190.5,-2406042.8,3436661.2,3683283.3,3472131.8,-3622356.9,-3620573.8,-3844488.4,2960330.2,2549278.8,3448330.3}; -ST(0.070175425,0.16144206,0,0.072573599,0.16764459,0,0.067098511,0.16826118,0){2074683.8,1881427.5,2121688.2,-2570674.4,-2572760.4,-2928224.5,-1460177,-936075.04,-1008555.7,2919916.2,2916777.1,3311710.7,762077.82,-135849.37,-250662.47}; -ST(0.014502412,0.16316663,0,0.014405512,0.17061143,0,0.0094805882,0.16707285,0){1121335,1063653,730151.01,-1429592.9,-1519257.6,-989834.58,-728363.13,-412907.51,-378084.11,1629901.1,1696192.6,1124284.7,280110.31,-313907.63,-22095.939}; -ST(0.060819012,0.031697917,0,0.057707972,0.025075094,0,0.064795861,0.023107998,0){3608360,3734947.8,3443592.1,3214477.8,3478918.2,3242943.8,2469695.4,2984396.6,2853338,1455299.1,2285289.9,2297494.4,281702.17,1429238.8,1607540.9}; -ST(0.01882241,0.070374011,0,0.012193394,0.066188359,0,0.016702178,0.061420197,0){2018056.9,1364188,1844408.3,970762.8,734639.92,1107331.1,-580354.6,-233939.49,-72241.295,-1830388.5,-1094586.7,-1222910.6,-2130853.3,-1450385,-1885264.1}; -ST(0.011197941,0.071439681,0,0.012193394,0.066188359,0,0.01882241,0.070374011,0){1244724.5,1364188,2018056.9,579995.21,734639.92,970762.8,-394493.66,-233939.49,-580354.6,-1158343.6,-1094586.7,-1830388.5,-1303869.8,-1450385,-2130853.3}; -ST(0.013132659,0.04767246,0,0.014691551,0.054118398,0,0.0094132111,0.052421332,0){1507774.2,1659245.8,1088603.4,1139737.5,1140472.1,768702.62,493500.09,265092.56,222919.17,-273193.01,-693242.8,-388347.22,-973395.4,-1435183.5,-885762.83}; -ST(0,0.14285714,0,0.0054758376,0.13911323,0,0.0078195435,0.14622426,0){0,495708.7,680366.1,0,-382921.42,-626541.18,0,-582869.54,-729870.69,0,250325.59,568744.13,0,639819.51,774663.29}; -ST(0.09071018,0.22887426,0,0.084319616,0.22565969,0,0.091864029,0.22106993,0){406264.77,696453.76,394005.54,-1003622.2,-1688204.7,-927852.61,1069446.3,1707540.6,863120.02,-568907.82,-743250.94,-241435.16,-233040.27,-649719.93,-536498.87}; -ST(0.033874053,0.071548869,0,0.037071258,0.0642048,0,0.041057987,0.068843254,0){3157862.8,3365311.2,3488848.8,1466537.3,1900443.5,1752771.3,-1010259.7,-391679.98,-855539,-2946084.6,-2513388.8,-3038218.5,-3304540.6,-3541461.8,-3709409.4}; -ST(0.07492972,0.092844339,0,0.069968451,0.098831219,0,0.066799394,0.09162077,0){2431427.6,2730411,2974160.1,308451.38,57648.531,440022.16,-2083891.4,-2671597.7,-2469083.6,-2656803.1,-2785714.6,-3274492.4,-910298.79,-173126.8,-1290097.2}; -ST(0,0.2,0,0.005051806,0.19767546,0,0.007303543,0.20469543,0){0,313084.45,422375.13,0,-612892.85,-880191.16,0,273796.53,531663.92,0,350786.74,303952.91,0,-609909.8,-861341.37}; -ST(0.04563604,0.25694979,0,0.049037582,0.25027532,0,0.054010827,0.25507988,0){859240.08,998508.07,897184.36,-2406042.8,-2730849.8,-2496661.6,3472131.8,3739350.2,3553831.7,-3844488.4,-3756698.7,-3839088.9,3448330.3,2778087.3,3290330.5}; -ST(0.084604507,0.15255901,0,0.083337094,0.16031526,0,0.077069107,0.15686929,0){1258841.2,1295652.6,1743907.9,-1326319,-1575018.8,-1994600,-1187789.9,-956036.82,-1457243.4,1390056.3,1781183.7,2204191.1,1113216.6,571788.58,1140253.2}; -ST(0.082709707,0.12855445,0,0.083559522,0.13424014,0,0.076271482,0.13373081,0){1568327.1,1462145.4,2012844.4,-869760.99,-981746.52,-1330317.6,-1955764.1,-1784737.2,-2463975.8,-1353.9511,395362.65,494859.01,1955094.7,1914407.3,2631758.9}; -ST(0.025468185,0.010276157,0,0.022427218,0.014872357,0,0.01808004,0.0081573173,0){2780034,2505875.7,2085729.2,2747892,2445229.8,2070583.9,2683968.5,2325397.7,2040406.9,2589008.8,2149288.4,1995444.2,2463902.9,1920956.8,1935913.6}; -ST(0.017990672,0.29207379,0,0.0220603,0.28602893,0,0.025130011,0.29009115,0){86228.122,181204.07,142877.47,-258100.45,-539738.59,-427099.39,428229.3,886739.53,706741.94,-595472.42,-1214791.9,-978805.55,758576.15,1516611.7,1240164.3}; -ST(0.076271482,0.13373081,0,0.081009521,0.1385969,0,0.075488644,0.14176328,0){2012844.4,1630909.4,1990888.2,-1330317.6,-1242340.3,-1647841.2,-2463975.8,-1926924,-2274843.7,494859.01,783271.16,1255935.2,2631758.9,2113542.9,2491166.6}; -ST(0.024008584,0.022367291,0,0.021348697,0.029751655,0,0.016759526,0.025876157,0){2639060.6,2382657.5,1932221.9,2494948.4,2153252.9,1791225.7,2214593.6,1716520.5,1519509.7,1813324.4,1114508.8,1136895.1,1312931.3,404958.41,671081.1}; -ST(0.020473685,0.087577432,0,0.025411973,0.082310594,0,0.027903545,0.087518505,0){2087024.2,2525130.6,2674848,451292.51,762374.09,580994.77,-1538224.3,-1532614.6,-1967676.8,-2322280.1,-2757779.1,-2976106,-1286407.6,-2058136.4,-1655065.1}; -ST(0.019499739,0.079597209,0,0.025411973,0.082310594,0,0.020473685,0.087577432,0){2040354.6,2525130.6,2087024.2,702945.71,762374.09,451292.51,-1095289.5,-1532614.6,-1538224.3,-2175701.2,-2757779.1,-2322280.1,-1830384.7,-2058136.4,-1286407.6}; -ST(0.039366597,0.19088868,0,0.044234359,0.18859393,0,0.043569257,0.19619451,0){1982365.2,2102462.5,1966078.6,-3628592.6,-3756018.8,-3794921.6,1030950.1,851571.98,1563901,2772526.5,3086402.5,2340412.7,-3333638.5,-3279385.1,-3741435.4}; -ST(0.042857143,0,0,0.039686874,0.0066116125,0,0.035714286,0,0){3783299.5,3676489.9,3496308.9,3783327.5,3658909.3,3496337.7,3783379.6,3623831.1,3496399.5,3783486.4,3571457.2,3496538.6,3783576.5,3501797.4,3496562.8}; -ST(0.035714286,0.3,0,0.03928574,0.29335694,0,0.042857143,0.3,0){0,127378.94,0,0,-381522.06,0,0,633829.06,0,0,-883092.25,0,0,1127859.7,0}; -ST(0.049165273,0.076760106,0,0.047307891,0.081963043,0,0.041803352,0.076750149,0){3570137.5,3516083,3453761.9,1384898,1080946.4,1340279.2,-1648055.9,-2102837.3,-1593440.1,-3672308.6,-3830300,-3552303.7,-3449021.3,-2905310.5,-3337911.6}; -ST(0.1,0.057142857,0,0.094913401,0.051076335,0,0.1,0.05,0){0,595503.05,0,0,429138.45,0,0,142901.48,0,0,-183223.65,0,0,-458373.75,0}; -ST(0.1,0.25,0,0.095090425,0.2489538,0,0.1,0.24285714,0){0,157454.16,0,0,-428416.46,0,0,579817.55,0,0,-569427.53,0,0,400020.01,0}; -ST(0.071428571,0,0,0.068476894,0.0069177029,0,0.064285714,0,0){3033974.4,3242851.4,3496327.6,3033978.9,3225849.8,3496358.5,3033982.8,3191931.3,3496415,3034008.5,3141298.2,3496523.2,3033714,3073847.6,3496472.9}; -ST(0.064285714,0.3,0,0.068366879,0.29272708,0,0.071428571,0.3,0){0,123803.43,0,0,-370697.46,0,0,615462.12,0,0,-856697.17,0,0,1092834.3,0}; -ST(0.057612168,0.01845715,0,0.057707972,0.025075094,0,0.051167355,0.022914381,0){3752599.8,3734947.8,3850137.8,3612875.5,3478918.2,3629520.4,3338613.5,2984396.6,3200919.1,2940029.2,2285289.9,2588908.3,2431782.4,1429238.8,1828396.4}; -ST(0.021658338,0.054940441,0,0.025221599,0.062165695,0,0.016702178,0.061420197,0){2341024.9,2618029.3,1844408.3,1587273.2,1547191.2,1107331.1,322446.89,-156575.4,-72241.295,-1046241,-1796512.5,-1222910.6,-2078353.5,-2702051.5,-1885264.1}; -ST(0.03663522,0.040674234,0,0.030602087,0.036163623,0,0.035858843,0.031497608,0){3463485.9,3125169.1,3456371.8,2844620.6,2682310.4,3083741.5,1717431.6,1859340.6,2378649.5,283267.24,772883.67,1417116.3,-1201989.6,-423255.99,302618.73}; -ST(0.054240748,0.10280037,0,0.052532368,0.096036702,0,0.061027247,0.098743066,0){3302360.6,3389506.1,3173016.6,-169115.68,240670.51,72008.811,-3462856.5,-3131818.5,-3099474,-3116478.2,-3594959.1,-3241975.4,505791.56,-718569.73,-216202.29}; -ST(0.030046638,0.13690443,0,0.033990129,0.14330646,0,0.026018946,0.14387862,0){2369378.2,2486957.5,2064539,-1721516.8,-2138608.5,-1800072.3,-2840145.3,-2786553.8,-2295230.1,944948.24,1748365.6,1506177.8,3098367.4,3031412.6,2488196.2}; -ST(0.054957014,0.24657048,0,0.060567191,0.25172758,0,0.054010827,0.25507988,0){1058545,917440.34,897184.36,-2852831,-2522838.3,-2496661.6,3777171.8,3497206.6,3553831.7,-3549694.2,-3596815.5,-3839088.9,2239441.1,2796536,3290330.5}; -ST(0.014305262,0.26641769,0,0.023009638,0.26878949,0,0.018422519,0.27450763,0){294901.31,417665.14,282501.19,-848621.76,-1208783.5,-827496.14,1298521.9,1871958.7,1313896,-1589572.3,-2337004.8,-1707268.8,1686004.5,2554445.3,1979556.1}; -ST(0.1,0.2,0,0.093164956,0.1980516,0,0.1,0.19285714,0){0,420734.09,0,0,-826537.04,0,0,376428.12,0,0,463603.83,0,0,-823893.15,0}; -ST(0.049204373,0.010884263,0,0.051745598,0.0053231545,0,0.056199026,0.010061392,0){3873084,3873250.9,3801979,3822842.7,3861228.9,3759859.9,3723003.5,3837214.6,3676084,3574883.8,3801308.2,3551608.2,3380124.5,3753417.7,3387596.5}; -ST(0.050010485,0.1548865,0,0.045364072,0.14896511,0,0.05288218,0.14757716,0){2672912.2,2729630.7,2767228.4,-2946373.7,-2670475.8,-2626819.9,-2371553.9,-2787568.3,-2900596.1,3189127.5,2610132.2,2479722.6,2045305.7,2844182.1,3026446}; -ST(0.055764419,0.28986395,0,0.051526128,0.29458598,0,0.048791783,0.28884593,0){202473.1,109871.78,226341.07,-605163.67,-329256.34,-675936.71,1001119.7,547568.39,1116322.7,-1385941.2,-764098.34,-1541505,1755276.4,977975.34,1945474.1}; -ST(0.083190767,0.25723975,0,0.074279052,0.25633166,0,0.07921504,0.25033934,0){434158.6,635900.39,606155.6,-1216864.4,-1777029.4,-1658203,1759626.8,2553015.8,2271843.6,-1955417.3,-2804423.5,-2284831,1765235.2,2479429.3,1693484.6}; -ST(0.077364239,0.048764008,0,0.073234584,0.04253025,0,0.082493405,0.042375289,0){2450679,2820532.7,1978611.8,1825420.5,2270240.9,1595319.9,734405.59,1277003.9,902966.17,-544039.45,34586.382,35643.43,-1683943.8,-1214797.7,-838916.97}; -ST(0.091953893,0.078440357,0,0.086276325,0.073599227,0,0.09123018,0.070922096,0){889726.23,1502743.3,983713.53,322434.75,653401.45,465586.72,-450550.32,-565297.67,-297764.17,-936443.15,-1464602.7,-904277.98,-825354.72,-1536324.4,-1034644.8}; -ST(0.041002292,0.08644635,0,0.033761495,0.088496681,0,0.032911969,0.081185013,0){3351345,3029395.9,3037931.3,787437.3,608605.12,971274.35,-2379027.1,-2298547.5,-1756226.8,-3725698.5,-3368980,-3289165.4,-2222336.9,-1747439.7,-2584916.3}; -ST(0.038843793,0.21103197,0,0.036840853,0.20596239,0,0.044637502,0.20577347,0){1637090.1,1679916.9,1811821.2,-3590120.4,-3538121.9,-3810004,2645890.8,2233718.4,2390091.8,433646.44,1067350,1174216.7,-3163532.2,-3414669.4,-3685779.4}; -ST(0.013794295,0.15422926,0,0.014502412,0.16316663,0,0.0068768393,0.16098373,0){1126466.2,1121335,553409.29,-1226232.2,-1429592.9,-680450.71,-1017954.8,-728363.13,-397156.36,1316565.7,1629901.1,771605.48,901352.54,280110.31,219690.78}; -ST(0.044637502,0.20577347,0,0.036840853,0.20596239,0,0.038597539,0.20095921,0){1811821.2,1679916.9,1801301.7,-3810004,-3538121.9,-3633864.6,2390091.8,2233718.4,1895634,1174216.7,1067350,1705394,-3685779.4,-3414669.4,-3630918.1}; -ST(0.056199026,0.010061392,0,0.051745598,0.0053231545,0,0.057142857,0,0){3801979,3873250.9,3783317.5,3759859.9,3861228.9,3783357,3676084,3837214.6,3783457.6,3551608.2,3801308.2,3783701.2,3387596.5,3753417.7,3783873.9}; -ST(0.057142857,0,0,0.06203594,0.0060944193,0,0.056199026,0.010061392,0){3783317.5,3604620.2,3801979,3783357,3589956.2,3759859.9,3783457.6,3560685.5,3676084,3783701.2,3516960.1,3551608.2,3783873.9,3458793.9,3387596.5}; -ST(0.049739958,0.088394034,0,0.047307891,0.081963043,0,0.054828578,0.081464579,0){3472240.4,3516083,3492382.6,703521.31,1080946.4,1101278.5,-2626240.1,-2102837.3,-2043909.2,-3862017.3,-3830300,-3789901.6,-2018648.2,-2905310.5,-2941538.5}; -ST(0.054828578,0.081464579,0,0.047307891,0.081963043,0,0.049165273,0.076760106,0){3492382.6,3516083,3570137.5,1101278.5,1080946.4,1384898,-2043909.2,-2102837.3,-1648055.9,-3789901.6,-3830300,-3672308.6,-2941538.5,-2905310.5,-3449021.3}; -ST(0.057142857,0.3,0,0.051526128,0.29458598,0,0.055764419,0.28986395,0){0,109871.78,202473.1,0,-329256.34,-605163.67,0,547568.39,1001119.7,0,-764098.34,-1385941.2,0,977975.34,1755276.4}; -ST(0.055764419,0.28986395,0,0.061805884,0.29356168,0,0.057142857,0.3,0){202473.1,121923.05,0,-605163.67,-365207.83,0,1001119.7,606815.62,0,-1385941.2,-845641.09,0,1755276.4,1080583.1,0}; -ST(0.089949388,0.2453858,0,0.095090425,0.2489538,0,0.090077759,0.25268961,0){339950.36,157454.16,291813.61,-911669.73,-428416.46,-805257.31,1193275.4,579817.55,1125037.4,-1095139.7,-569427.53,-1174248.1,648419.14,400020.01,940920.06}; -ST(0.08974924,0.047235181,0,0.094913401,0.051076335,0,0.08944657,0.05485846,0){1190814.4,595503.05,1211526.2,905328.07,429138.45,822600.19,402804.56,142901.48,169573.91,-196265.4,-183223.65,-537958.1,-748421.11,-458373.75,-1073022.7}; -ST(0.012304267,0.13852123,0,0.014210915,0.13228117,0,0.021167753,0.13548502,0){1094693.2,1289449.4,1816935.7,-832176.34,-813665.75,-1266652.3,-1294374.3,-1589638.3,-2200669.4,521821.54,227067.92,600161.11,1419655.5,1673024.3,2382629.9}; -ST(0.021167753,0.13548502,0,0.014210915,0.13228117,0,0.01788586,0.12850833,0){1816935.7,1289449.4,1616906.9,-1266652.3,-813665.75,-895214.81,-2200669.4,-1589638.3,-2016472.2,600161.11,227067.92,-4802.2192,2382629.9,1673024.3,2014144.7}; -ST(0.045375723,0.12284566,0,0.045894811,0.13135905,0,0.038464606,0.12667013,0){3072436,2973475.7,2859316.3,-1348503.3,-1819976.4,-1476046.2,-3829159.4,-3679581.9,-3573486.5,-800055.99,392676.16,-252868.56,3380414.3,3832095.1,3451249.3}; -ST(0.038464606,0.12667013,0,0.045894811,0.13135905,0,0.038217426,0.13599196,0){2859316.3,2973475.7,2738753.8,-1476046.2,-1819976.4,-1938161,-3573486.5,-3679581.9,-3305386.1,-252868.56,392676.16,972060.89,3451249.3,3832095.1,3589652.3}; -ST(0.0087429334,0.24792416,0,0.013821768,0.24617185,0,0.01180171,0.25230222,0){283453.34,454053.45,347512.04,-768118.62,-1221678.8,-957611.77,1029935.2,1611329.8,1333704.3,-992967.39,-1502439.1,-1383899.6,667809.3,928515.88,1095718.6}; -ST(0.025139549,0.12057635,0,0.023379755,0.12686903,0,0.017763535,0.12074209,0){2224740.3,2047772.9,1657769.5,-875333.98,-1065433.1,-657738.05,-2755721.9,-2558991,-2054600.3,-796179.51,-162203.53,-581651.26,2272644.8,2481221.5,1703675.4}; -ST(0.1,0.1,0,0.09416017,0.099511923,0,0.1,0.092857143,0){0,613994.66,0,0,5422.3845,0,0,-608645.22,0,0,-619557.01,0,0,-16415.987,0}; -ST(0.061015306,0.048529238,0,0.06961584,0.048915995,0,0.066012722,0.055502179,0){3533367.8,3063466,3257272.9,2640342.3,2277085.6,2187557.2,1080012.2,906160.93,399401.17,-753291.7,-697426.19,-1519988.7,-2396723.8,-2122325.6,-2940625.1}; -ST(0.066401409,0.0434645,0,0.06961584,0.048915995,0,0.061015306,0.048529238,0){3289675.8,3063466,3533367.8,2619840.6,2277085.6,2640342.3,1416557.6,906160.93,1080012.2,-75156.319,-697426.19,-753291.7,-1551772,-2122325.6,-2396723.8}; -ST(0.051703203,0.27754162,0,0.055001581,0.27169863,0,0.059078636,0.27701937,0){454636.43,565900.8,447007.97,-1338881.7,-1648356.5,-1315269.1,2149437.1,2587095.5,2107766.2,-2841702,-3300283.2,-2778864.5,3377384.9,3725567.5,3289755.3}; -ST(0.036308441,0.24745658,0,0.033025927,0.25326882,0,0.029124573,0.24658198,0){958174.94,809560.38,849052.23,-2591684.5,-2238649.8,-2288340.2,3460190.4,3142273.3,3030093.5,-3307339.6,-3308331.9,-2848204.4,2177878.8,2697705.3,1797881.3}; -ST(0.020636298,0.17424253,0,0.025851591,0.17077962,0,0.027644767,0.17736901,0){1433869.3,1763476.8,1774040.3,-2154082.5,-2524912.6,-2777088.7,-351921.61,-673288.62,-203929.31,2330929.4,2815714.9,2892544.7,-819073.82,-542697.73,-1431643.3}; -ST(0.1,0.092857143,0,0.09416017,0.099511923,0,0.093922759,0.092262381,0){0,613994.66,652083.63,0,5422.3845,89312.894,0,-608645.22,-550573,0,-619557.01,-715327.2,0,-16415.987,-262838.8}; -ST(0.084604507,0.15255901,0,0.088623123,0.15812222,0,0.083337094,0.16031526,0){1258841.2,918302.92,1295652.6,-1326319,-1074338,-1575018.8,-1187789.9,-735787.48,-956036.82,1390056.3,1199414.9,1781183.7,1113216.6,531983.03,571788.58}; -ST(0.017312959,0.14496605,0,0.022775714,0.15147437,0,0.013794295,0.15422926,0){1456929,1786181.8,1126466.2,-1303417.8,-1841345.2,-1226232.2,-1594293.7,-1729359.8,-1017954.8,1135517.7,1894858,1316565.7,1713822.2,1670732.8,901352.54}; -ST(0.057391395,0.19462543,0,0.064671223,0.19505087,0,0.060432552,0.20227914,0){1979510.6,1815232.4,1798951.1,-3763012.6,-3465163,-3671781.8,1410875.8,1334352.3,2023610.8,2491970.2,2252470.6,1565241.8,-3656419.8,-3382100.5,-3653837}; -ST(0,0.057142857,0,0.0079950318,0.059686314,0,0,0.064285714,0){0,917766.47,0,0,570756.35,0,0,7912.4367,0,0,-557994.72,0,0,-913265.38,0}; -ST(0.1,0.20714286,0,0.093706234,0.20596864,0,0.1,0.2,0){0,360320.46,0,0,-758974.46,0,0,479351.87,0,0,228803.73,0,0,-732939.79,0}; -ST(0.1,0.021428571,0,0.093571257,0.018380777,0,0.1,0.014285714,0){0,774815.13,0,0,746204.54,0,0,690036.86,0,0,608388.09,0,0,504051.02,0}; -ST(0.1,0.28571429,0,0.093593186,0.28160993,0,0.1,0.27857143,0){0,74588.283,0,0,-221009.65,0,0,359269.18,0,0,-484261.41,0,0,591230.88,0}; -ST(0.042155309,0.15589067,0,0.045364072,0.14896511,0,0.050010485,0.1548865,0){2577776.2,2729630.7,2672912.2,-2895603.6,-2670475.8,-2946373.7,-2220826.4,-2787568.3,-2371553.9,3169529.7,2610132.2,3189127.5,1830012,2844182.1,2045305.7}; -ST(0.059078636,0.27701937,0,0.055001581,0.27169863,0,0.061631884,0.26868773,0){447007.97,565900.8,591535.29,-1315269.1,-1648356.5,-1711593.4,2107766.2,2587095.5,2649353.2,-2778864.5,-3300283.2,-3304968.8,3289755.3,3725567.5,3608394.3}; -ST(0.024044461,0.20382537,0,0.015977634,0.20443356,0,0.018704911,0.19716585,0){1283805.9,895779.15,1103230.1,-2655634.7,-1862602.8,-2149261.2,1553893.8,1114548.4,934589.13,995311.88,659707.69,1263201.6,-2617892.2,-1827076.9,-2132672.2}; -ST(0.045416206,0.061541227,0,0.037071258,0.0642048,0,0.038435934,0.058364632,0){3642820.9,3365311.2,3459248.5,2181474.8,1900443.5,2206750.4,-155055.51,-391679.98,155241.86,-2429600.5,-2513388.8,-1952496,-3730025.8,-3541461.8,-3353689.4}; -ST(0.092195724,0.16853594,0,0.083969261,0.16737329,0,0.088381846,0.16289419,0){598378.34,1198489.7,911153.68,-829189.07,-1632158.2,-1156470.7,-278570.16,-607916.58,-599768.12,936666.51,1852187.2,1317920.1,-82641.6,-62490.334,244888.24}; -ST(0.067098511,0.16826118,0,0.072573599,0.16764459,0,0.071059851,0.17209017,0){2121688.2,1881427.5,1900690.4,-2928224.5,-2572760.4,-2772233.4,-1008555.7,-936075.04,-629520.98,3311710.7,2916777.1,3060958.1,-250662.47,-135849.37,-774142.34}; -ST(0.05718895,0.22161738,0,0.053624899,0.22742186,0,0.049797208,0.2214244,0){1508977,1430137,1551864.2,-3566099.1,-3503302.1,-3662861.4,3352547.9,3648370.9,3430735.4,-1004251.2,-1785483,-1003918.8,-1983866.6,-1060301.4,-2065424.5}; -ST(0.085714286,0,0,0.081119523,0.0085521597,0,0.078571429,0,0){1683752,2167108.8,2419478.6,1683802.7,2149779.2,2419535.2,1683911.1,2115263.6,2419645.1,1684108.7,2063869.7,2419827.2,1684003.7,1995657.9,2420024.4}; -ST(0.078571429,0.3,0,0.081165886,0.29137431,0,0.085714286,0.3,0){0,97729.953,0,0,-292395.17,0,0,484687.71,0,0,-673055.06,0,0,855744.16,0}; -ST(0.082709707,0.12855445,0,0.087905667,0.12517971,0,0.0910478,0.13167545,0){1568327.1,1140990.9,831136.87,-869760.99,-554517.87,-514132.23,-1955764.1,-1425990.8,-1027305.8,-1353.9511,-178453.87,122313.64,1955094.7,1334087.8,1073956.7}; -ST(0,0.20714286,0,0.0051799073,0.21317882,0,0,0.21428571,0){0,276031.48,0,0,-615227.88,0,0,479976.29,0,0,25450.705,0,0,-511551.59,0}; -ST(0.018704911,0.19716585,0,0.012931293,0.19295437,0,0.017373248,0.19021363,0){1103230.1,815194.79,1095255.9,-2149261.2,-1524077.7,-1990705.9,934589.13,510133.92,532263.7,1263201.6,1080471.8,1555631.8,-2132672.2,-1450076.4,-1804413.6}; -ST(0.011268327,0.1984065,0,0.012931293,0.19295437,0,0.018704911,0.19716585,0){682302.12,815194.79,1103230.1,-1344805.9,-1524077.7,-2149261.2,623458.07,510133.92,934589.13,739532.85,1080471.8,1263201.6,-1341727.7,-1450076.4,-2132672.2}; -ST(0.1,0.26428571,0,0.092295863,0.26000779,0,0.1,0.25714286,0){0,193329.27,0,0,-546576.12,0,0,805368.84,0,0,-924990.4,0,0,884724.5,0}; -ST(0.1,0.042857143,0,0.092141527,0.03991184,0,0.1,0.035714286,0){0,927649.93,0,0,767955.56,0,0,476054.53,0,0,102192.68,0,0,-289378.9,0}; -ST(0.1,0.17857143,0,0.093873231,0.17693503,0,0.1,0.17142857,0){0,445896.9,0,0,-694096.79,0,0,-59504.029,0,0,727141.13,0,0,-345394.37,0}; -ST(0.069002793,0.22246209,0,0.065627137,0.22734606,0,0.062992669,0.22303634,0){1267491.2,1270705.1,1396775.9,-3011719.2,-3111357.1,-3331109.7,2877058.6,3236198.8,3216330,-947533.34,-1576358.2,-1122974.8,-1573376.1,-953054.66,-1661551.4}; -ST(0.03690243,0.09394169,0,0.033761495,0.088496681,0,0.041002292,0.08644635,0){3135041.5,3029395.9,3351345,337961.95,608605.12,787437.3,-2760700,-2298547.5,-2379027.1,-3396384.7,-3368980,-3725698.5,-1002139.6,-1747439.7,-2222336.9}; -ST(0.021957304,0.26060316,0,0.023009638,0.26878949,0,0.014305262,0.26641769,0){505833.44,417665.14,294901.31,-1432636.8,-1208783.5,-848621.76,2119105.6,1871958.7,1298521.9,-2450095.8,-2337004.8,-1589572.3,2369995.8,2554445.3,1686004.5}; -ST(0.071428571,0,0,0.074656208,0.0053403125,0,0.068476894,0.0069177029,0){3033974.4,2772385.5,3242851.4,3033978.9,2763721.5,3225849.8,3033982.8,2746414.1,3191931.3,3034008.5,2720533.7,3141298.2,3033714,2685936.9,3073847.6}; -ST(0.042433189,0.024814669,0,0.035858843,0.031497608,0,0.033039341,0.023173825,0){3739739.8,3456371.8,3318087.9,3488658.7,3083741.5,3123656.1,3003356.3,2378649.5,2746181,2316430.4,1417116.3,2207795.9,1473602,302618.73,1539940.3}; -ST(0.033039341,0.023173825,0,0.035858843,0.031497608,0,0.028359285,0.029784535,0){3318087.9,3456371.8,2981166.2,3123656.1,3083741.5,2693525.9,2746181,2378649.5,2145980.7,2207795.9,1417116.3,1391347.7,1539940.3,302618.73,502245.34}; -ST(0.069002793,0.22246209,0,0.062992669,0.22303634,0,0.063265205,0.21633109,0){1267491.2,1396775.9,1505335.5,-3011719.2,-3331109.7,-3432481.9,2877058.6,3216330,2888962.8,-947533.34,-1122974.8,-265885.87,-1573376.1,-1661551.4,-2549234.8}; -ST(0.068366879,0.29272708,0,0.074657371,0.29452352,0,0.071428571,0.3,0){123803.43,79525.554,0,-370697.46,-238312.39,0,615462.12,396309.36,0,-856697.17,-552992.95,0,1092834.3,707611.71,0}; -ST(0.029124573,0.24658198,0,0.033025927,0.25326882,0,0.025641665,0.25311603,0){849052.23,809560.38,680173.91,-2288340.2,-2238649.8,-1879847.5,3030093.5,3142273.3,2635470.4,-2848204.4,-3308331.9,-2768550.2,1797881.3,2697705.3,2247361.6}; -ST(0.091593501,0.1915477,0,0.095453592,0.18738967,0,0.1,0.19285714,0){544831.72,307137.29,0,-1004107.1,-541566.85,0,301623.68,106216.39,0,749822.54,460538.95,0,-933881.71,-458087.35,0}; -ST(0.091593501,0.1915477,0,0.087008075,0.19596841,0,0.084368038,0.19048099,0){544831.72,798107.94,992852.93,-1004107.1,-1537171.7,-1809621.2,301623.68,625323.3,495817.1,749822.54,958187.81,1401810.9,-933881.71,-1512909.8,-1649308.4}; -ST(0.021251228,0.18136297,0,0.027644767,0.17736901,0,0.027249449,0.18607819,0){1398279.8,1774040.3,1646413.8,-2300353.4,-2777088.7,-2861109.6,85724.805,-203929.31,464444.42,2245163.6,2892544.7,2518610.9,-1534338.6,-1431643.3,-2323177.4}; -ST(0.027249449,0.18607819,0,0.027644767,0.17736901,0,0.03345202,0.18222482,0){1646413.8,1774040.3,1947746.5,-2861109.6,-2777088.7,-3237509.5,464444.42,-203929.31,196057.01,2518610.9,2892544.7,3107788.7,-2323177.4,-1431643.3,-2254322.8}; -ST(0.030466665,0.11568191,0,0.023213665,0.1150537,0,0.025770754,0.10718168,0){2608170,2130593.3,2378738.7,-773675.45,-605772.32,-316264.13,-3152461.4,-2564157.8,-2653040.8,-1443702.3,-1229375.9,-1984140.6,2136967.4,1684092.7,932667.69}; -ST(0.028678488,0.042143634,0,0.025565101,0.048609543,0,0.022876349,0.043626948,0){2968313.4,2702312,2488553.5,2399521.8,2017092.5,1978130.3,1370917.4,820389.33,1061959.9,79587.615,-584372.75,-72059.632,-1227272.3,-1841258.2,-1191549.5}; -ST(0.032229878,0.047894836,0,0.025565101,0.048609543,0,0.028678488,0.042143634,0){3188476.9,2702312,2968313.4,2403076.1,2017092.5,2399521.8,1025710.6,820389.33,1370917.4,-604377.64,-584372.75,79587.615,-2086050.7,-1841258.2,-1227272.3}; -ST(0.091864029,0.22106993,0,0.084319616,0.22565969,0,0.082942949,0.21818591,0){394005.54,696453.76,823054.75,-927852.61,-1688204.7,-1901094.8,863120.02,1707540.6,1667014.3,-241435.16,-743250.94,-282341.7,-536498.87,-649719.93,-1297502.9}; -ST(0.023478597,0.036718106,0,0.017433092,0.042090914,0,0.014137494,0.034012185,0){2561783.8,1971771.3,1641076.4,2187675.4,1594855,1435142,1494080.3,913057.13,1049094.4,582277.59,56690.05,531342.12,-414804.14,-810753.02,-53364.585}; -ST(0.013794295,0.15422926,0,0.022775714,0.15147437,0,0.021502186,0.15931359,0){1126466.2,1786181.8,1630158.4,-1226232.2,-1841345.2,-1947614.2,-1017954.8,-1729359.8,-1250943.8,1316565.7,1894858,2191316.6,901352.54,1670732.8,824223.66}; -ST(0.020473685,0.087577432,0,0.019165757,0.095107709,0,0.013428016,0.091778472,0){2087024.2,1930971.9,1408980.1,451292.51,168744.63,204626.15,-1538224.3,-1747493.7,-1174648.8,-2322280.1,-2069009.1,-1549888.7,-1286407.6,-502664.26,-600683.83}; -ST(0.06137482,0.19024807,0,0.064671223,0.19505087,0,0.057391395,0.19462543,0){1976038.9,1815232.4,1979510.6,-3592882,-3465163,-3763012.6,963745.22,1334352.3,1410875.8,2804392.5,2252470.6,2491970.2,-3258719.1,-3382100.5,-3656419.8}; -ST(0.038217426,0.13599196,0,0.033990129,0.14330646,0,0.030046638,0.13690443,0){2738753.8,2486957.5,2369378.2,-1938161,-2138608.5,-1721516.8,-3305386.1,-2786553.8,-2840145.3,972060.89,1748365.6,944948.24,3589652.3,3031412.6,3098367.4}; -ST(0,0.12142857,0,0.0062042788,0.11791514,0,0.0061411468,0.1246533,0){0,612847.32,591118.91,0,-208741.13,-280990.71,0,-750565.55,-738586.84,0,-286207.66,-106527.54,0,561848.67,682629.18}; -ST(0.0078195435,0.14622426,0,0.0054758376,0.13911323,0,0.012304267,0.13852123,0){680366.1,495708.7,1094693.2,-626541.18,-382921.42,-832176.34,-729870.69,-582869.54,-1294374.3,568744.13,250325.59,521821.54,774663.29,639819.51,1419655.5}; -ST(0.082390534,0.079333541,0,0.086276325,0.073599227,0,0.091953893,0.078440357,0){1865676.5,1502743.3,889726.23,650380.91,653401.45,322434.75,-988603.29,-565297.67,-450550.32,-1983689.6,-1464602.7,-936443.15,-1686881.4,-1536324.4,-825354.72}; -ST(0.038084092,0.1145524,0,0.040442009,0.11996282,0,0.035619257,0.12028764,0){2981407.2,2999410,2821397.9,-818508.93,-1143461.2,-1093830.4,-3575257.7,-3706983.7,-3491178.8,-1775238,-1150363.3,-1043884.2,2287308.3,2995190.5,2851838.9}; -ST(0.027644767,0.17736901,0,0.025851591,0.17077962,0,0.030623168,0.1713445,0){1774040.3,1763476.8,1985985.4,-2777088.7,-2524912.6,-2866418.8,-203929.31,-673288.62,-715248.18,2892544.7,2815714.9,3183566.3,-1431643.3,-542697.73,-696442.05}; -ST(0.025139549,0.12057635,0,0.023213665,0.1150537,0,0.030466665,0.11568191,0){2224740.3,2130593.3,2608170,-875333.98,-605772.32,-773675.45,-2755721.9,-2564157.8,-3152461.4,-796179.51,-1229375.9,-1443702.3,2272644.8,1684092.7,2136967.4}; -ST(0.08682376,0.20181233,0,0.087008075,0.19596841,0,0.093164956,0.1980516,0){767576.83,798107.94,420734.09,-1560255.4,-1537171.7,-826537.04,843726.65,625323.3,376428.12,688912.23,958187.81,463603.83,-1555436.8,-1512909.8,-823893.15}; -ST(0.093164956,0.1980516,0,0.087008075,0.19596841,0,0.091593501,0.1915477,0){420734.09,798107.94,544831.72,-826537.04,-1537171.7,-1004107.1,376428.12,625323.3,301623.68,463603.83,958187.81,749822.54,-823893.15,-1512909.8,-933881.71}; -ST(0.1,0.26428571,0,0.092520768,0.26920591,0,0.092295863,0.26000779,0){0,145042.72,193329.27,0,-420173.4,-546576.12,0,651988.34,805368.84,0,-816598.86,-924990.4,0,896908.09,884724.5}; -ST(0.092141527,0.03991184,0,0.092450683,0.030760689,0,0.1,0.035714286,0){927649.93,900007.85,0,767955.56,807431.66,0,476054.53,631804.95,0,102192.68,391202.83,0,-289378.9,110124.82,0}; -ST(0.015758122,0.23699049,0,0.013821768,0.24617185,0,0.0071147476,0.24137211,0){597291.98,454053.45,259907.57,-1541119.1,-1221678.8,-684802.64,1837947.1,1611329.8,859611.54,-1363109.4,-1502439.1,-720499.62,315646.37,928515.88,317972.39}; -ST(0.08264437,0.14444108,0,0.076625322,0.14929356,0,0.075488644,0.14176328,0){1463951.5,1845555.4,1990888.2,-1293607.4,-1818255.1,-1647841.2,-1614532.1,-1872475.3,-2274843.7,1105781,1790618.2,1255935.2,1743195.6,1898765.5,2491166.6}; -ST(0.093706234,0.20596864,0,0.093164956,0.1980516,0,0.1,0.2,0){360320.46,420734.09,0,-758974.46,-826537.04,0,479351.87,376428.12,0,228803.73,463603.83,0,-732939.79,-823893.15,0}; -ST(0.048663579,0.053435419,0,0.053426379,0.049768916,0,0.056317057,0.058022103,0){3726394.8,3727873.1,3630316.8,2589713.3,2738031.5,2330872.5,663071.82,1021148,197001.66,-1465861.1,-966926.63,-2007682.1,-3147918.6,-2698501,-3494460.7}; -ST(0.052532368,0.096036702,0,0.044548934,0.094607351,0,0.049739958,0.088394034,0){3389506.1,3364209.6,3472240.4,240670.51,323528.56,703521.31,-3131818.5,-3009655.6,-2626240.1,-3594959.1,-3622750.1,-3862017.3,-718569.73,-961698.97,-2018648.2}; -ST(0.070175425,0.16144206,0,0.067098511,0.16826118,0,0.061476805,0.16269562,0){2074683.8,2121688.2,2391378.9,-2570674.4,-2928224.5,-3025373.1,-1460177,-1008555.7,-1589341.3,2919916.2,3311710.7,3446908.2,762077.82,-250662.47,675366.83}; -ST(0.0087429334,0.24792416,0,0.0043813653,0.24702694,0,0.0071147476,0.24137211,0){283453.34,145794.38,259907.57,-768118.62,-393661.32,-684802.64,1029935.2,523477.05,859611.54,-992967.39,-496310.62,-720499.62,667809.3,320224.07,317972.39}; -ST(0.092195724,0.16853594,0,0.093873231,0.17693503,0,0.085369203,0.17624497,0){598378.34,445896.9,1039089.6,-829189.07,-694096.79,-1603144.1,-278570.16,-59504.029,-168940.91,936666.51,727141.13,1695116.9,-82641.6,-345394.37,-751642.95}; -ST(0.082583958,0.10907049,0,0.086838536,0.10220901,0,0.091053567,0.10618538,0){1698614.9,1341203.8,914271.31,-286603.09,-54099.381,-104388.15,-1936849,-1393108.8,-1006721.9,-1323464.6,-1282822.5,-787386.88,836522.31,161880.97,309052.61}; -ST(0.044637502,0.20577347,0,0.053221516,0.20704838,0,0.049232245,0.21047418,0){1811821.2,1805672.4,1752658.6,-3810004,-3837129.3,-3827070.5,2390091.8,2511247.5,2777012.8,1174216.7,1011998.4,540242.46,-3685779.4,-3650194.7,-3416565.4}; -ST(0.051624576,0.1997036,0,0.053221516,0.20704838,0,0.044637502,0.20577347,0){1943020.7,1805672.4,1811821.2,-3875569.2,-3837129.3,-3810004,1911651.5,2511247.5,2390091.8,1974364.4,1011998.4,1174216.7,-3875892.9,-3650194.7,-3685779.4}; -ST(0.013794295,0.15422926,0,0.0056981356,0.15371602,0,0.0078195435,0.14622426,0){1126466.2,478995.44,680366.1,-1226232.2,-516269.88,-626541.18,-1017954.8,-438816.38,-729870.69,1316565.7,550400.04,568744.13,901352.54,395913.98,774663.29}; -ST(0.013878694,0.17880836,0,0.0062925762,0.18063125,0,0.0069613667,0.17349451,0){971566.52,445914.92,517779.21,-1548960.4,-727143.63,-769992.03,-51095.574,12632.594,-142713.64,1579530,719304.1,839532.94,-887966.26,-466469.22,-266340.1}; -ST(0,0.23571429,0,0.0071147476,0.24137211,0,0,0.24285714,0){0,259907.57,0,0,-684802.64,0,0,859611.54,0,0,-720499.62,0,0,317972.39,0}; -ST(0.021502186,0.15931359,0,0.014502412,0.16316663,0,0.013794295,0.15422926,0){1630158.4,1121335,1126466.2,-1947614.2,-1429592.9,-1226232.2,-1250943.8,-728363.13,-1017954.8,2191316.6,1629901.1,1316565.7,824223.66,280110.31,901352.54}; -ST(0.01882241,0.070374011,0,0.027058874,0.069011929,0,0.026270926,0.075674812,0){2018056.9,2727323.5,2630439.6,970762.8,1363815.9,1063205.3,-580354.6,-681543.48,-1137545.6,-1830388.5,-2386220.5,-2660659.2,-2130853.3,-2898415.6,-2599027.8}; -ST(0.072323403,0.067507008,0,0.074756101,0.075901522,0,0.066925078,0.074981916,0){2781512.1,2549479.1,3090390.8,1448400.9,1021825.1,1280900.5,-578922.09,-1118145.3,-1278621.5,-2328912.3,-2588166.7,-3089611.2,-2963263.7,-2507455.8,-3091904.4}; -ST(0.010955873,0.10281868,0,0.013465065,0.10662372,0,0.0081152275,0.10988635,0){1124212.8,1351132.7,821145.89,-57954.543,-165451.82,-151361.79,-1179275.3,-1496410,-944689.8,-1060620.9,-1147793.4,-619246.83,173274.75,489093.12,439508.43}; -ST(0.069968451,0.098831219,0,0.065931692,0.10408722,0,0.061027247,0.098743066,0){2730411,2911358.9,3173016.6,57648.531,-218409.17,72008.811,-2671597.7,-3113407,-3099474,-2785714.6,-2661455,-3241975.4,-173126.8,651464.78,-216202.29}; -ST(0.018704911,0.19716585,0,0.025476801,0.19755762,0,0.024044461,0.20382537,0){1103230.1,1423125.8,1283805.9,-2149261.2,-2782737.9,-2655634.7,934589.13,1235431.1,1553893.8,1263201.6,1602470.1,995311.88,-2132672.2,-2766638.2,-2617892.2}; -ST(0,0.27857143,0,0.0067236406,0.28198319,0,0,0.28571429,0){0,76627.274,0,0,-227172.13,0,0,369685.4,0,0,-499127.77,0,0,610772.43,0}; -ST(0.026018946,0.14387862,0,0.033990129,0.14330646,0,0.030440206,0.150204,0){2064539,2486957.5,2239650.6,-1800072.3,-2138608.5,-2249230.7,-2295230.1,-2786553.8,-2230054.7,1506177.8,1748365.6,2258843.4,2488196.2,3031412.6,2220211.9}; -ST(0,0.014285714,0,0.006650898,0.018174199,0,0,0.021428571,0){0,801243.34,0,0,772347.91,0,0,715593.27,0,0,633022.27,0,0,527557,0}; -ST(0.022740693,0.23189018,0,0.021374843,0.22646669,0,0.026971271,0.22659033,0){887604.04,906782.43,1090633.5,-2230116.3,-2208721,-2658504.1,2485475.6,2264460.9,2731189,-1529145.6,-1042528.4,-1267784.1,-172982.46,-767856.24,-909068.56}; -ST(0.030075176,0.23324008,0,0.025350652,0.23917347,0,0.022740693,0.23189018,0){1077047.3,868665.73,887604.04,-2725827,-2265304,-2230116.3,3095770.8,2773502.3,2485475.6,-2013325.9,-2193941.8,-1529145.6,-13872.597,753574.67,-172982.46}; -ST(0.054957014,0.24657048,0,0.061408089,0.24582042,0,0.060567191,0.25172758,0){1058545,1017142.7,917440.34,-2852831,-2732695.2,-2522838.3,3777171.8,3591948.1,3497206.6,-3549694.2,-3325647.6,-3596815.5,2239441.1,2017029.8,2796536}; -ST(0.047385855,0.10193045,0,0.044548934,0.094607351,0,0.052532368,0.096036702,0){3329666.7,3364209.6,3389506.1,-117239.93,323528.56,240670.51,-3442848.4,-3009655.6,-3131818.5,-3204510.9,-3622750.1,-3594959.1,350991.89,-961698.97,-718569.73}; -ST(0.069467767,0.146519,0,0.064971856,0.15110456,0,0.061244461,0.14481879,0){2287173.5,2431817,2643484.5,-2120501.9,-2488096.1,-2356788.3,-2441744.6,-2374265.3,-2899198.4,1942651.5,2543085,2042509.4,2583122,2315361.9,3121060.9}; -ST(0.0081152275,0.10988635,0,0.0052460498,0.10332732,0,0.010955873,0.10281868,0){821145.89,545715.18,1124212.8,-151361.79,-33256.292,-57954.543,-944689.8,-576983.54,-1179275.3,-619246.83,-508602.25,-1060620.9,439508.43,99155.047,173274.75}; -ST(0.030466665,0.11568191,0,0.038084092,0.1145524,0,0.035619257,0.12028764,0){2608170,2981407.2,2821397.9,-773675.45,-818508.93,-1093830.4,-3152461.4,-3575257.7,-3491178.8,-1443702.3,-1775238,-1043884.2,2136967.4,2287308.3,2851838.9}; -ST(0.0094132111,0.052421332,0,0.014691551,0.054118398,0,0.0079950318,0.059686314,0){1088603.4,1659245.8,917766.47,768702.62,1140472.1,570756.35,222919.17,265092.56,7912.4367,-388347.22,-693242.8,-557994.72,-885762.83,-1435183.5,-913265.38}; -ST(0.020636298,0.17424253,0,0.027644767,0.17736901,0,0.021251228,0.18136297,0){1433869.3,1774040.3,1398279.8,-2154082.5,-2777088.7,-2300353.4,-351921.61,-203929.31,85724.805,2330929.4,2892544.7,2245163.6,-819073.82,-1431643.3,-1534338.6}; -ST(0.0081152275,0.10988635,0,0.013465065,0.10662372,0,0.016927821,0.11108648,0){821145.89,1351132.7,1644246.3,-151361.79,-165451.82,-340994.5,-944689.8,-1496410,-1914445.6,-619246.83,-1147793.4,-1176430.8,439508.43,489093.12,981584.41}; -ST(0.054828578,0.081464579,0,0.060416267,0.076932239,0,0.064352171,0.083117586,0){3492382.6,3380545.3,3167194.8,1101278.5,1302521.2,915483.69,-2043909.2,-1576156.6,-1987167.2,-3789901.6,-3485992.8,-3477240.4,-2941538.5,-3253298.6,-2495770}; -ST(0.0069979116,0.22643766,0,0.0069516057,0.23320895,0,0,0.22857143,0){317964.48,288078.49,0,-774386.26,-728952.19,0,793599.18,827497.2,0,-364658.79,-537397.4,0,-270536.88,-5267.3055,0}; -ST(0.0068768393,0.16098373,0,0.0056981356,0.15371602,0,0.013794295,0.15422926,0){553409.29,478995.44,1126466.2,-680450.71,-516269.88,-1226232.2,-397156.36,-438816.38,-1017954.8,771605.48,550400.04,1316565.7,219690.78,395913.98,901352.54}; -ST(0.08264437,0.14444108,0,0.081009521,0.1385969,0,0.087083587,0.13880919,0){1463951.5,1630909.4,1144744.3,-1293607.4,-1242340.3,-877072.07,-1614532.1,-1926924,-1349889.8,1105781,783271.16,561444.4,1743195.6,2113542.9,1481228.8}; -ST(0.064373335,0.2338171,0,0.066600159,0.24211306,0,0.059437672,0.2400817,0){1185902.3,1004296.2,1145348.7,-3010536.1,-2655015,-2999714,3446119.8,3359675.2,3711340.5,-2291596.2,-2867211.3,-3009146,79206.699,1352854.8,1160252.2}; -ST(0.061015306,0.048529238,0,0.053426379,0.049768916,0,0.054794838,0.043915046,0){3533367.8,3727873.1,3735662.6,2640342.3,2738031.5,2959425,1080012.2,1021148,1568238.5,-753291.7,-966926.63,-148813.91,-2396723.8,-2698501,-1835117.4}; -ST(0.074931673,0.27468874,0,0.081004963,0.27070547,0,0.082516133,0.27647665,0){363389.18,333174.81,248899.48,-1064791.9,-968418.7,-731674.12,1691857.9,1513258.3,1170289.2,-2200836.4,-1916833.2,-1538273.3,2556129.1,2141327.9,1813237.5}; -ST(0.082332164,0.023444943,0,0.080699945,0.029142305,0,0.074388951,0.025102472,0){2029600,2185639.9,2772012.4,1907886.4,1983669.2,2581574.2,1671751.1,1598386.1,2213781,1335359.8,1065401.8,1693914.7,918760.81,433818.71,1057277.9}; -ST(0,0.10714286,0,0.0052460498,0.10332732,0,0.0081152275,0.10988635,0){0,545715.18,821145.89,0,-33256.292,-151361.79,0,-576983.54,-944689.8,0,-508602.25,-619246.83,0,99155.047,439508.43}; -ST(0.019499739,0.079597209,0,0.01318623,0.084416193,0,0.012549176,0.077039569,0){2040354.6,1411871.7,1370920.5,702945.71,378554.62,525978.15,-1095289.5,-931831.12,-643140.23,-2175701.2,-1560266,-1415881.7,-1830384.7,-1046999.7,-1316306.1}; -ST(0.084917502,0.034253561,0,0.085916752,0.02828,0,0.092450683,0.030760689,0){1742331.8,1643257.2,900007.85,1520580.8,1500211.7,807431.66,1105294,1226559.7,631804.95,549324.68,846114.35,391202.83,-76880.401,391827.49,110124.82}; -ST(0.092520768,0.26920591,0,0.086077973,0.27164165,0,0.085115353,0.26563346,0){145042.72,243157.03,313056.52,-420173.4,-708191.99,-899063.8,651988.34,1111255.9,1369900.4,-816598.86,-1417072.6,-1665255.4,896908.09,1598582.9,1747205.8}; -ST(0.037999827,0.27482627,0,0.045592054,0.27439642,0,0.045044357,0.28188841,0){474219.19,513714.39,362990.51,-1389905,-1504437.2,-1075960.6,2209621.2,2387679.2,1750378.7,-2876809.4,-3100344.3,-2362097.1,3345267.4,3591305.7,2889034}; -ST(0.077393474,0.16425214,0,0.083969261,0.16737329,0,0.077140734,0.17217741,0){1650679.7,1198489.7,1584233.7,-2141613.9,-1632158.2,-2313491.7,-1013799.5,-607916.58,-519338.58,2443278.1,1852187.2,2552719.3,287063.28,-62490.334,-655929.75}; -ST(0.066925078,0.074981916,0,0.074756101,0.075901522,0,0.070865224,0.080352924,0){3090390.8,2549479.1,2808030.6,1280900.5,1021825.1,934415.1,-1278621.5,-1118145.3,-1562677.5,-3089611.2,-2588166.7,-3017110.1,-3091904.4,-2507455.8,-2458745.5}; -ST(0.017373248,0.19021363,0,0.023309936,0.19197185,0,0.018704911,0.19716585,0){1095255.9,1390526.6,1103230.1,-1990705.9,-2573914.4,-2149261.2,532263.7,799964.88,934589.13,1555631.8,1893175.4,1263201.6,-1804413.6,-2411477.9,-2132672.2}; -ST(0.079090117,0.19794942,0,0.081922129,0.20489902,0,0.075422073,0.20645372,0){1206859.6,996952.98,1273700.5,-2368529.7,-2081157.6,-2693470,1073015.3,1266338.6,1728669,1335740.9,704044.3,766631.5,-2359414.1,-2032271.3,-2583646.6}; -ST(0.08682376,0.20181233,0,0.081922129,0.20489902,0,0.079090117,0.19794942,0){767576.83,996952.98,1206859.6,-1560255.4,-2081157.6,-2368529.7,843726.65,1266338.6,1073015.3,688912.23,704044.3,1335740.9,-1555436.8,-2032271.3,-2359414.1}; -ST(0.039686874,0.0066116125,0,0.031710863,0.0075461758,0,0.035714286,0,0){3676489.9,3254919.5,3496308.9,3658909.3,3234618.2,3496337.7,3623831.1,3194153.7,3496399.5,3571457.2,3133832.1,3496538.6,3501797.4,3053845.3,3496562.8}; -ST(0.035714286,0.3,0,0.031264826,0.29263185,0,0.03928574,0.29335694,0){0,124484.17,127378.94,0,-372709.78,-381522.06,0,618717.86,633829.06,0,-861054.65,-883092.25,0,1098239.8,1127859.7}; -ST(0.022775714,0.15147437,0,0.030440206,0.150204,0,0.027609688,0.15620978,0){1786181.8,2239650.6,2023546.1,-1841345.2,-2249230.7,-2286520.9,-1729359.8,-2230054.7,-1726415,1894858,2258843.4,2510934.9,1670732.8,2220211.9,1400022.9}; -ST(0.0079950318,0.059686314,0,0.014691551,0.054118398,0,0.016702178,0.061420197,0){917766.47,1659245.8,1844408.3,570756.35,1140472.1,1107331.1,7912.4367,265092.56,-72241.295,-557994.72,-693242.8,-1222910.6,-913265.38,-1435183.5,-1885264.1}; -ST(0,0.028571429,0,0.0058133292,0.032528446,0,0,0.035714286,0){0,694559.72,0,0,614750.96,0,0,464300.7,0,0,260495.38,0,0,26512.55,0}; -ST(0.067728608,0.12931058,0,0.068478919,0.13862632,0,0.060672554,0.13561545,0){2567539,2426951.1,2778852.8,-1463631.5,-1850187.5,-1944873,-3196956.5,-2866745.3,-3362653.4,89062.443,1169007.7,935707.85,3235608.2,3144665.9,3643681.7}; -ST(0,0.26428571,0,0.0060732531,0.2674669,0,0,0.27142857,0){0,124750.88,0,0,-359918.85,0,0,553735.12,0,0,-683931.42,0,0,735399.5,0}; -ST(0.072323403,0.067507008,0,0.064846874,0.068845861,0,0.064832361,0.062804408,0){2781512.1,3243292.3,3281120.4,1448400.9,1629296.1,1912310.8,-578922.09,-795531.06,-254314.65,-2328912.3,-2824516.6,-2314932.7,-2963263.7,-3448034.5,-3410309.6}; -ST(0.1,0.15714286,0,0.09308158,0.15403623,0,0.1,0.15,0){0,579061.91,0,0,-628036.95,0,0,-525997.02,0,0,672596.25,0,0,469080.04,0}; -ST(0.040431855,0.24188745,0,0.037546984,0.23452457,0,0.045331711,0.23557633,0){1110505,1205921.7,1270563.3,-2932804,-3072707.6,-3255008.9,3702149.5,3550700.1,3813331,-3142324.5,-2423829.8,-2700862,1453973.2,201013.93,404484.48}; -ST(0.067728608,0.12931058,0,0.070840483,0.12204614,0,0.076158908,0.12549637,0){2567539,2470738.2,2092101.1,-1463631.5,-1044803.2,-1030118.9,-3196956.5,-3073782.1,-2615047.7,89062.443,-729197.53,-297340.89,3235608.2,2652961,2464056}; -ST(0.046181733,0.0056701177,0,0.043829005,0.011024747,0,0.039686874,0.0066116125,0){3851009.3,3801549.1,3676489.9,3837454.5,3750937.1,3658909.3,3810385,3650381.9,3623831.1,3769920.5,3501249.8,3571457.2,3715901.2,3305260.3,3501797.4}; -ST(0.066803853,0.25459223,0,0.060567191,0.25172758,0,0.065478411,0.24860928,0){789541.66,917440.34,912058.17,-2193455.3,-2522838.3,-2478342.9,3110738.9,3497206.6,3344041.2,-3337877,-3596815.5,-3264436.9,2824240.3,2796536,2261773.6}; -ST(0.03928574,0.29335694,0,0.043131118,0.28864457,0,0.045931579,0.29422002,0){127378.94,225252.57,116468.36,-381522.06,-672574.82,-348980.73,633829.06,1110400.5,580225.36,-883092.25,-1532552.2,-809364.6,1127859.7,1932837.8,1035478}; -ST(0.038597539,0.20095921,0,0.043569257,0.19619451,0,0.044637502,0.20577347,0){1801301.7,1966078.6,1811821.2,-3633864.6,-3794921.6,-3810004,1895634,1563901,2390091.8,1705394,2340412.7,1174216.7,-3630918.1,-3741435.4,-3685779.4}; -ST(0.044637502,0.20577347,0,0.043569257,0.19619451,0,0.051624576,0.1997036,0){1811821.2,1966078.6,1943020.7,-3810004,-3794921.6,-3875569.2,2390091.8,1563901,1911651.5,1174216.7,2340412.7,1974364.4,-3685779.4,-3741435.4,-3875892.9}; -ST(0,0.092857143,0,0.0071591483,0.096788703,0,0,0.1,0){0,756711.76,0,0,43634.951,0,0,-710572.63,0,0,-795194.2,0,0,-130859.45,0}; -ST(0.017990672,0.29207379,0,0.010662343,0.29482959,0,0.0093450955,0.28843768,0){86228.122,34537.041,67949.514,-258100.45,-103506.64,-202850.84,428229.3,172164.12,334776.34,-595472.42,-240303.04,-461793.67,758576.15,307518.14,581935.08}; -ST(0.0093389246,0.011691623,0,0.010679145,0.0052482016,0,0.01808004,0.0081573173,0){1120186.5,1277155.8,2085729.2,1103410.3,1273289.3,2070583.9,1070108.3,1265566.3,2040406.9,1020788.4,1254019.7,1995444.2,956114.18,1238493.9,1935913.6}; -ST(0.060672554,0.13561545,0,0.054237851,0.14012792,0,0.053497526,0.1329974,0){2778852.8,2856617.8,2959143.9,-1944873,-2267029,-1911000.9,-3362653.4,-3324577.4,-3636096,935707.85,1580891.3,623103.97,3643681.7,3650971.5,3857035.6}; -ST(0.074279052,0.25633166,0,0.071915087,0.24816524,0,0.07921504,0.25033934,0){635900.39,803363.84,606155.6,-1777029.4,-2179152.4,-1658203,2553015.8,2928525.2,2271843.6,-2804423.5,-2836050.6,-2284831,2479429.3,1927975,1693484.6}; -ST(0.091864029,0.22106993,0,0.095652827,0.22622146,0,0.09071018,0.22887426,0){394005.54,199039.37,406264.77,-927852.61,-484109.58,-1003622.2,863120.02,494313.66,1069446.3,-241435.16,-223837.82,-568907.82,-536498.87,-173819.74,-233040.27}; -ST(0.021658338,0.054940441,0,0.025565101,0.048609543,0,0.028699663,0.054481756,0){2341024.9,2702312,2920693,1587273.2,2017092.5,1995520.8,322446.89,820389.33,438210.61,-1046241,-584372.75,-1257984.1,-2078353.5,-1841258.2,-2556170.3}; -ST(0.019247887,0.048569646,0,0.025565101,0.048609543,0,0.021658338,0.054940441,0){2135187.8,2702312,2341024.9,1594654.5,2017092.5,1587273.2,650408.09,820389.33,322446.89,-458538.7,-584372.75,-1046241,-1451674.1,-1841258.2,-2078353.5}; -ST(0.084368038,0.19048099,0,0.087008075,0.19596841,0,0.079090117,0.19794942,0){992852.93,798107.94,1206859.6,-1809621.2,-1537171.7,-2368529.7,495817.1,625323.3,1073015.3,1401810.9,958187.81,1335740.9,-1649308.4,-1512909.8,-2359414.1}; -ST(0.029991713,0.27132489,0,0.027951851,0.26533243,0,0.034582704,0.26623209,0){469504.82,539100.43,604041.77,-1366503,-1547025.6,-1737386.1,2141236.7,2353298.6,2655775,-2724385.3,-2852826.8,-3245580.1,3063642.3,2980285,3433603.3}; -ST(0.043569257,0.19619451,0,0.044234359,0.18859393,0,0.050398693,0.1921099,0){1966078.6,2102462.5,2077292.2,-3794921.6,-3756018.8,-3850553.1,1563901,851571.98,1209682,2340412.7,3086402.5,2818064.5,-3741435.4,-3279385.1,-3615771.1}; -ST(0.0069613667,0.17349451,0,0.0046637588,0.16745308,0,0.0094805882,0.16707285,0){517779.21,362371.83,730151.01,-769992.03,-494096.85,-989834.58,-142713.64,-182769.85,-378084.11,839532.94,560561.48,1124284.7,-266340.1,-21256.565,-22095.939}; -ST(0.074931673,0.27468874,0,0.06660802,0.27624666,0,0.069536278,0.26943087,0){363389.18,417349.44,505602.11,-1064791.9,-1226359.7,-1465439,1691857.9,1959900.4,2276404,-2200836.4,-2572844.1,-2856108.7,2556129.1,3027289.2,3145421.5}; -ST(0.068476894,0.0069177029,0,0.074656208,0.0053403125,0,0.073684623,0.0112317,0){3242851.4,2772385.5,2850123.3,3225849.8,2763721.5,2810738.2,3191931.3,2746414.1,2732509.2,3141298.2,2720533.7,2616540.6,3073847.6,2685936.9,2464223.2}; -ST(0.073754091,0.28851618,0,0.074657371,0.29452352,0,0.068366879,0.29272708,0){171229.59,79525.554,123803.43,-511212.67,-238312.39,-370697.46,843808.82,396309.36,615462.12,-1164215.8,-552992.95,-856697.17,1467609.3,707611.71,1092834.3}; -ST(0.025130011,0.29009115,0,0.024877102,0.29495936,0,0.017990672,0.29207379,0){142877.47,72135.52,86228.122,-427099.39,-216205.93,-258100.45,706741.94,359676.71,428229.3,-978805.55,-502149.61,-595472.42,1240164.3,642973.44,758576.15}; -ST(0.017990672,0.29207379,0,0.024877102,0.29495936,0,0.021428571,0.3,0){86228.122,72135.52,0,-258100.45,-216205.93,0,428229.3,359676.71,0,-595472.42,-502149.61,0,758576.15,642973.44,0}; -ST(0.021428571,0,0,0.025051818,0.0051959301,0,0.01808004,0.0081573173,0){2419501.9,2747435.6,2085729.2,2419561.9,2739316.7,2070583.9,2419679.8,2723095.2,2040406.9,2419876.4,2698832.3,1995444.2,2419989.4,2666496.7,1935913.6}; -ST(0.01808004,0.0081573173,0,0.025051818,0.0051959301,0,0.025468185,0.010276157,0){2085729.2,2747435.6,2780034,2070583.9,2739316.7,2747892,2040406.9,2723095.2,2683968.5,1995444.2,2698832.3,2589008.8,1935913.6,2666496.7,2463902.9}; -ST(0.061244461,0.14481879,0,0.054237851,0.14012792,0,0.060672554,0.13561545,0){2643484.5,2856617.8,2778852.8,-2356788.3,-2267029,-1944873,-2899198.4,-3324577.4,-3362653.4,2042509.4,1580891.3,935707.85,3121060.9,3650971.5,3643681.7}; -ST(0.079090117,0.19794942,0,0.087008075,0.19596841,0,0.08682376,0.20181233,0){1206859.6,798107.94,767576.83,-2368529.7,-1537171.7,-1560255.4,1073015.3,625323.3,843726.65,1335740.9,958187.81,688912.23,-2359414.1,-1512909.8,-1555436.8}; -ST(0.093710586,0.16080643,0,0.088623123,0.15812222,0,0.09308158,0.15403623,0){507346.27,918302.92,579061.91,-621948.04,-1074338,-628036.95,-366919.85,-735787.48,-525997.02,704920.6,1199414.9,672596.25,207593.47,531983.03,469080.04}; -ST(0.088381846,0.16289419,0,0.088623123,0.15812222,0,0.093710586,0.16080643,0){911153.68,918302.92,507346.27,-1156470.7,-1074338,-621948.04,-599768.12,-735787.48,-366919.85,1317920.1,1199414.9,704920.6,244888.24,531983.03,207593.47}; -ST(0.060672554,0.13561545,0,0.059246105,0.12763558,0,0.067728608,0.12931058,0){2778852.8,2918223.5,2567539,-1944873,-1563762.3,-1463631.5,-3362653.4,-3644117.3,-3196956.5,935707.85,-127593.52,89062.443,3643681.7,3585046,3235608.2}; -ST(0.02133326,0.24577003,0,0.025350652,0.23917347,0,0.029124573,0.24658198,0){675269.21,868665.73,849052.23,-1813848.4,-2265304,-2288340.2,2383092.9,2773502.3,3030093.5,-2204305.3,-2193941.8,-2848204.4,1333319.6,753574.67,1797881.3}; -ST(0.037897724,0.149701,0,0.045364072,0.14896511,0,0.042155309,0.15589067,0){2552043.8,2729630.7,2577776.2,-2536068.8,-2670475.8,-2895603.6,-2567975.2,-2787568.3,-2220826.4,2520076,2610132.2,3169529.7,2583694.6,2844182.1,1830012}; -ST(0.071449289,0.19423207,0,0.06771074,0.1881525,0,0.076430303,0.18837043,0){1594804.6,1821405.7,1444535.6,-3019964.8,-3238423,-2574453.4,1103926.4,698008.36,569102.25,2033518.7,2695511.5,2129625.3,-2921575.1,-2795478.4,-2235391.7}; -ST(0.078984823,0.22953004,0,0.084619556,0.23283838,0,0.077318805,0.23627719,0){858343.29,621044.17,830868.27,-2128428.8,-1568398.7,-2136157.9,2291087.1,1771426.2,2525048.7,-1261656.1,-1133733.9,-1830714.2,-424553.92,-42283.716,350702.19}; -ST(0.077318805,0.23627719,0,0.084619556,0.23283838,0,0.084206466,0.24009781,0){830868.27,621044.17,569988.38,-2136157.9,-1568398.7,-1492933.9,2525048.7,1771426.2,1847439,-1830714.2,-1133733.9,-1498530.8,350702.19,-42283.716,578923.58}; -ST(0.026018946,0.14387862,0,0.030440206,0.150204,0,0.022775714,0.15147437,0){2064539,2239650.6,1786181.8,-1800072.3,-2249230.7,-1841345.2,-2295230.1,-2230054.7,-1729359.8,1506177.8,2258843.4,1894858,2488196.2,2220211.9,1670732.8}; -ST(0.07492972,0.092844339,0,0.081743274,0.092625466,0,0.079063451,0.10043005,0){2431427.6,1862860,2051820.1,308451.38,243386.47,-16056.497,-2083891.4,-1587731,-2067914.3,-2656803.1,-2038652.4,-2035845.1,-910298.79,-717394.49,48244.512}; -ST(0.079063451,0.10043005,0,0.081743274,0.092625466,0,0.087331535,0.0958472,0){2051820.1,1862860,1318484.3,-16056.497,243386.47,98077.228,-2067914.3,-1587731,-1213131.9,-2035845.1,-2038652.4,-1401481.2,48244.512,-717394.49,-292629.72}; -ST(0.066012722,0.055502179,0,0.070754378,0.060222618,0,0.064832361,0.062804408,0){3257272.9,2932444.5,3281120.4,2187557.2,1804303.3,1912310.8,399401.17,-17984.254,-254314.65,-1519988.7,-1833384.6,-2314932.7,-2940625.1,-2943704.7,-3410309.6}; -ST(0.069467767,0.146519,0,0.076625322,0.14929356,0,0.070477538,0.15360968,0){2287173.5,1845555.4,2153625.7,-2120501.9,-1818255.1,-2316413.6,-2441744.6,-1872475.3,-1978592.7,1942651.5,1790618.2,2466066.8,2583122,1898765.5,1792310.4}; -ST(0.075488644,0.14176328,0,0.076625322,0.14929356,0,0.069467767,0.146519,0){1990888.2,1845555.4,2287173.5,-1647841.2,-1818255.1,-2120501.9,-2274843.7,-1872475.3,-2441744.6,1255935.2,1790618.2,1942651.5,2491166.6,1898765.5,2583122}; -ST(0.070607657,0.23670872,0,0.066600159,0.24211306,0,0.064373335,0.2338171,0){1007105.3,1004296.2,1185902.3,-2594870.8,-2655015,-3010536.1,3083897.2,3359675.2,3446119.8,-2267120.1,-2867211.3,-2291596.2,490193.02,1352854.8,79206.699}; -ST(0.1,0.11428571,0,0.091758141,0.11296708,0,0.1,0.10714286,0){0,824791.32,0,0,-201020.76,0,0,-976886.6,0,0,-537824.26,0,0,570097.26,0}; -ST(0.017763535,0.12074209,0,0.023379755,0.12686903,0,0.01788586,0.12850833,0){1657769.5,2047772.9,1616906.9,-657738.05,-1065433.1,-895214.81,-2054600.3,-2558991,-2016472.2,-581651.26,-162203.53,-4802.2192,1703675.4,2481221.5,2014144.7}; -ST(0.016927821,0.11108648,0,0.01198914,0.11616091,0,0.0081152275,0.10988635,0){1644246.3,1171325.2,821145.89,-340994.5,-358450.6,-151361.79,-1914445.6,-1420119.3,-944689.8,-1176430.8,-627101.02,-619246.83,981584.41,984768,439508.43}; -ST(0.1,0.021428571,0,0.095041081,0.024587994,0,0.093571257,0.018380777,0){0,597113.29,774815.13,0,557751.32,746204.54,0,481620.22,690036.86,0,373740.48,608388.09,0,241099.33,504051.02}; -ST(0.093593186,0.28160993,0,0.095069321,0.27540052,0,0.1,0.27857143,0){74588.283,76899.446,0,-221009.65,-225624.71,0,359269.18,359465.9,0,-484261.41,-469594.27,0,591230.88,548580.83,0}; -ST(0.0071591483,0.096788703,0,0.0052460498,0.10332732,0,0,0.1,0){756711.76,545715.18,0,43634.951,-33256.292,0,-710572.63,-576983.54,0,-795194.2,-508602.25,0,-130859.45,99155.047,0}; -ST(0.09416017,0.099511923,0,0.086838536,0.10220901,0,0.087331535,0.0958472,0){613994.66,1341203.8,1318484.3,5422.3845,-54099.381,98077.228,-608645.22,-1393108.8,-1213131.9,-619557.01,-1282822.5,-1401481.2,-16415.987,161880.97,-292629.72}; -ST(0.049204373,0.010884263,0,0.043829005,0.011024747,0,0.046181733,0.0056701177,0){3873084,3801549.1,3851009.3,3822842.7,3750937.1,3837454.5,3723003.5,3650381.9,3810385,3574883.8,3501249.8,3769920.5,3380124.5,3305260.3,3715901.2}; -ST(0.045931579,0.29422002,0,0.043131118,0.28864457,0,0.048791783,0.28884593,0){116468.36,225252.57,226341.07,-348980.73,-672574.82,-675936.71,580225.36,1110400.5,1116322.7,-809364.6,-1532552.2,-1541505,1035478,1932837.8,1945474.1}; -ST(0.020473685,0.087577432,0,0.024499807,0.092422798,0,0.019165757,0.095107709,0){2087024.2,2390452.1,1930971.9,451292.51,320672.29,168744.63,-1538224.3,-2026771.7,-1747493.7,-2322280.1,-2619357.9,-2069009.1,-1286407.6,-944222.72,-502664.26}; -ST(0.041002292,0.08644635,0,0.044548934,0.094607351,0,0.03690243,0.09394169,0){3351345,3364209.6,3135041.5,787437.3,323528.56,337961.95,-2379027.1,-3009655.6,-2760700,-3725698.5,-3622750.1,-3396384.7,-2222336.9,-961698.97,-1002139.6}; -ST(0.049739958,0.088394034,0,0.044548934,0.094607351,0,0.041002292,0.08644635,0){3472240.4,3364209.6,3351345,703521.31,323528.56,787437.3,-2626240.1,-3009655.6,-2379027.1,-3862017.3,-3622750.1,-3725698.5,-2018648.2,-961698.97,-2222336.9}; -ST(0.041319833,0.14315875,0,0.033990129,0.14330646,0,0.038217426,0.13599196,0){2735557.7,2486957.5,2738753.8,-2343944,-2138608.5,-1938161,-3071175.4,-2786553.8,-3305386.1,1904337.3,1748365.6,972060.89,3343927.4,3031412.6,3589652.3}; -ST(0.042857143,0,0,0.046181733,0.0056701177,0,0.039686874,0.0066116125,0){3783299.5,3851009.3,3676489.9,3783327.5,3837454.5,3658909.3,3783379.6,3810385,3623831.1,3783486.4,3769920.5,3571457.2,3783576.5,3715901.2,3501797.4}; -ST(0.03928574,0.29335694,0,0.045931579,0.29422002,0,0.042857143,0.3,0){127378.94,116468.36,0,-381522.06,-348980.73,0,633829.06,580225.36,0,-883092.25,-809364.6,0,1127859.7,1035478,0}; -ST(0.030217898,0.25971254,0,0.027951851,0.26533243,0,0.021957304,0.26060316,0){660621.26,539100.43,505833.44,-1866014.4,-1547025.6,-1432636.8,2744196,2353298.6,2119105.6,-3141188.1,-2852826.8,-2450095.8,2987009.7,2980285,2369995.8}; -ST(0.091053567,0.10618538,0,0.086838536,0.10220901,0,0.09416017,0.099511923,0){914271.31,1341203.8,613994.66,-104388.15,-54099.381,5422.3845,-1006721.9,-1393108.8,-608645.22,-787386.88,-1282822.5,-619557.01,309052.61,161880.97,-16415.987}; -ST(0.0045473776,0.2936365,0,0.010662343,0.29482959,0,0.0071428571,0.3,0){18406.211,34537.041,0,-55138.333,-103506.64,0,91630.552,172164.12,0,-127724.83,-240303.04,0,162961.08,307518.14,0}; -ST(0.01093484,0.12117452,0,0.01198914,0.11616091,0,0.017763535,0.12074209,0){1052666.9,1171325.2,1657769.5,-426753.37,-358450.6,-657738.05,-1306415.4,-1420119.3,-2054600.3,-350052.21,-627101.02,-581651.26,1098212.1,984768,1703675.4}; -ST(0.043491003,0.26677795,0,0.034582704,0.26623209,0,0.037705658,0.25939989,0){657627.62,604041.77,758443.36,-1894105.9,-1737386.1,-2140288.6,2903724.9,2655775,3141072.6,-3565612.1,-3245580.1,-3582615.2,3800401.2,3433603.3,3385872.9}; -ST(0.0071428571,0,0,0.010679145,0.0052482016,0,0.0045481906,0.0063920675,0){863498.79,1277155.8,552257.15,863505.11,1273289.3,549810.55,863516.31,1265566.3,544927.47,863538.53,1254019.7,537633.65,863596.62,1238493.9,527798.54}; -ST(0.020636298,0.17424253,0,0.014405512,0.17061143,0,0.020973714,0.16688371,0){1433869.3,1063653,1525118.3,-2154082.5,-1519257.6,-2061659.5,-351921.61,-412907.51,-799875.51,2330929.4,1696192.6,2343184.8,-819073.82,-313907.63,-24581.749}; -ST(0.018422519,0.27450763,0,0.025044032,0.27464897,0,0.023483408,0.28013687,0){282501.19,363665.57,270985.88,-827496.14,-1065519.5,-801278.39,1313896,1692735.8,1297043.7,-1707268.8,-2201379.5,-1736920.8,1979556.1,2555652.6,2101746.5}; -ST(0.0061411468,0.1246533,0,0.0062042788,0.11791514,0,0.01093484,0.12117452,0){591118.91,612847.32,1052666.9,-280990.71,-208741.13,-426753.37,-738586.84,-750565.55,-1306415.4,-106527.54,-286207.66,-350052.21,682629.18,561848.67,1098212.1}; -ST(0.042557423,0.10832344,0,0.039702853,0.10111678,0,0.047385855,0.10193045,0){3183930.6,3175586.8,3329666.7,-492142.06,-64516.934,-117239.93,-3600076,-3238866.3,-3442848.4,-2551523.2,-3108635.2,-3204510.9,1442840.6,193445.51,350991.89}; -ST(0.0081152275,0.10988635,0,0.0062042788,0.11791514,0,0,0.11428571,0){821145.89,612847.32,0,-151361.79,-208741.13,0,-944689.8,-750565.55,0,-619246.83,-286207.66,0,439508.43,561848.67,0}; -ST(0.067728608,0.12931058,0,0.059246105,0.12763558,0,0.064276416,0.12183086,0){2567539,2918223.5,2809128.6,-1463631.5,-1563762.3,-1175750.5,-3196956.5,-3644117.3,-3492840.6,89062.443,-127593.52,-855220.15,3235608.2,3585046,2995580.4}; -ST(0.0079950318,0.059686314,0,0.004777904,0.053197076,0,0.0094132111,0.052421332,0){917766.47,557925.04,1088603.4,570756.35,389224.92,768702.62,7912.4367,102822.82,222919.17,-557994.72,-214698.3,-388347.22,-913265.38,-467537.22,-885762.83}; -ST(0.064276416,0.12183086,0,0.062195955,0.11505156,0,0.069025318,0.11622387,0){2809128.6,2965673.8,2631986.5,-1175750.5,-843057.19,-808686.45,-3492840.6,-3569130.8,-3192250.9,-855220.15,-1711501.2,-1402768.4,2995580.4,2344130.4,2220554.1}; -ST(0.057323957,0.1204315,0,0.062195955,0.11505156,0,0.064276416,0.12183086,0){3051716.5,2965673.8,2809128.6,-1191883,-843057.19,-1175750.5,-3778168.4,-3569130.8,-3492840.6,-1110713.1,-1711501.2,-855220.15,3101303,2344130.4,2995580.4}; -ST(0.073684623,0.0112317,0,0.074656208,0.0053403125,0,0.081119523,0.0085521597,0){2850123.3,2772385.5,2167108.8,2810738.2,2763721.5,2149779.2,2732509.2,2746414.1,2115263.6,2616540.6,2720533.7,2063869.7,2464223.2,2685936.9,1995657.9}; -ST(0.081165886,0.29137431,0,0.074657371,0.29452352,0,0.073754091,0.28851618,0){97729.953,79525.554,171229.59,-292395.17,-238312.39,-511212.67,484687.71,396309.36,843808.82,-673055.06,-552992.95,-1164215.8,855744.16,707611.71,1467609.3}; -ST(0.064276416,0.12183086,0,0.070840483,0.12204614,0,0.067728608,0.12931058,0){2809128.6,2470738.2,2567539,-1175750.5,-1044803.2,-1463631.5,-3492840.6,-3073782.1,-3196956.5,-855220.15,-729197.53,89062.443,2995580.4,2652961,3235608.2}; -ST(0.058212185,0.089881183,0,0.052532368,0.096036702,0,0.049739958,0.088394034,0){3344291.6,3389506.1,3472240.4,593905.21,240670.51,703521.31,-2645013.4,-3131818.5,-2626240.1,-3708817.1,-3594959.1,-3862017.3,-1722713.3,-718569.73,-2018648.2}; -ST(0.017433092,0.042090914,0,0.013132659,0.04767246,0,0.011573719,0.041901165,0){1971771.3,1507774.2,1347025.1,1594855,1139737.5,1091815.8,913057.13,493500.09,629744.45,56690.05,-273193.01,48353.226,-810753.02,-973395.4,-542301.86}; -ST(0.042155309,0.15589067,0,0.034314476,0.15645926,0,0.037897724,0.149701,0){2577776.2,2334400.9,2552043.8,-2895603.6,-2649968.2,-2536068.8,-2220826.4,-1976247.7,-2567975.2,3169529.7,2917237.1,2520076,1830012,1581967.4,2583694.6}; -ST(0.038427921,0.16264679,0,0.034314476,0.15645926,0,0.042155309,0.15589067,0){2389351.9,2334400.9,2577776.2,-3020403.6,-2649968.2,-2895603.6,-1591681.4,-1976247.7,-2220826.4,3440909.6,2917237.1,3169529.7,682723.32,1581967.4,1830012}; -ST(0.044666369,0.11545829,0,0.040442009,0.11996282,0,0.038084092,0.1145524,0){3148096.1,2999410,2981407.2,-920013.3,-1143461.2,-818508.93,-3799301.5,-3706983.7,-3575257.7,-1769018.1,-1150363.3,-1775238,2547335.8,2995190.5,2287308.3}; -ST(0.041002292,0.08644635,0,0.047307891,0.081963043,0,0.049739958,0.088394034,0){3351345,3516083,3472240.4,787437.3,1080946.4,703521.31,-2379027.1,-2102837.3,-2626240.1,-3725698.5,-3830300,-3862017.3,-2222336.9,-2905310.5,-2018648.2}; -ST(0.09156348,0.14589395,0,0.093938974,0.13899,0,0.1,0.14285714,0){734092.88,548364.78,0,-670961.7,-422206.84,0,-791796.8,-645591.08,0,602866.55,273728.87,0,843431.47,708600.91,0}; -ST(0.1,0.12857143,0,0.093823791,0.12410599,0,0.1,0.12142857,0){0,595735.92,0,0,-276601.23,0,0,-743959.63,0,0,-121937.8,0,0,678759.2,0}; -ST(0.080938662,0.054906318,0,0.073604017,0.054819307,0,0.077364239,0.048764008,0){2097661.4,2744584.6,2450679,1423084,1864679.8,1825420.5,290856.94,386939.94,734405.59,-934922.56,-1214908.7,-544039.45,-1860365.1,-2427603.9,-1683943.8}; -ST(0.082942949,0.21818591,0,0.084319616,0.22565969,0,0.076796159,0.2234596,0){823054.75,696453.76,1008421.8,-1901094.8,-1688204.7,-2411357.4,1667014.3,1707540.6,2346331.8,-282341.7,-743250.94,-852928.84,-1297502.9,-649719.93,-1160000.7}; -ST(0.1,0.27142857,0,0.092520768,0.26920591,0,0.1,0.26428571,0){0,145042.72,0,0,-420173.4,0,0,651988.34,0,0,-816598.86,0,0,896908.09,0}; -ST(0.1,0.035714286,0,0.092450683,0.030760689,0,0.1,0.028571429,0){0,900007.85,0,0,807431.66,0,0,631804.95,0,0,391202.83,0,0,110124.82,0}; -ST(0.045416206,0.061541227,0,0.042113175,0.053290167,0,0.048663579,0.053435419,0){3642820.9,3616583.4,3726394.8,2181474.8,2519252.9,2589713.3,-155055.51,657513.67,663071.82,-2429600.5,-1403801.4,-1465861.1,-3730025.8,-3039615.4,-3147918.6}; -ST(0.038435934,0.058364632,0,0.042113175,0.053290167,0,0.045416206,0.061541227,0){3459248.5,3616583.4,3642820.9,2206750.4,2519252.9,2181474.8,155241.86,657513.67,-155055.51,-1952496,-1403801.4,-2429600.5,-3353689.4,-3039615.4,-3730025.8}; -ST(0.0528723,0.26429657,0,0.055001581,0.27169863,0,0.049721881,0.27094787,0){718299.05,565900.8,588018.61,-2055661.9,-1648356.5,-1710042.9,3109067.1,2587095.5,2675009.8,-3733060,-3300283.2,-3394309,3841282.5,3725567.5,3801713.7}; -ST(0.082516133,0.27647665,0,0.086077973,0.27164165,0,0.089232651,0.27618677,0){248899.48,243157.03,160151.6,-731674.12,-708191.99,-470555.02,1170289.2,1111255.9,751874.95,-1538273.3,-1417072.6,-986723.61,1813237.5,1598582.9,1160401.4}; -ST(0.089183466,0.023798504,0,0.085916752,0.02828,0,0.082332164,0.023444943,0){1283383.3,1643257.2,2029600,1204105.7,1500211.7,1907886.4,1050439.6,1226559.7,1671751.1,831874.08,846114.35,1335359.8,561630.79,391827.49,918760.81}; -ST(0.079063451,0.10043005,0,0.086838536,0.10220901,0,0.082583958,0.10907049,0){2051820.1,1341203.8,1698614.9,-16056.497,-54099.381,-286603.09,-2067914.3,-1393108.8,-1936849,-2035845.1,-1282822.5,-1323464.6,48244.512,161880.97,836522.31}; -ST(0.059543685,0.10776494,0,0.06715469,0.10983132,0,0.062195955,0.11505156,0){3132791.5,2794834,2965673.8,-451048.14,-512277.78,-843057.19,-3519016.9,-3213264.7,-3569130.8,-2561357.9,-2112070.8,-1711501.2,1326599.2,1488257.3,2344130.4}; -ST(0.011838853,0.2301677,0,0.0069516057,0.23320895,0,0.0069979116,0.22643766,0){504229.49,288078.49,317964.48,-1254859.2,-728952.19,-774386.26,1363834.1,827497.2,793599.18,-775392.51,-537397.4,-364658.79,-209768.04,-5267.3055,-270536.88}; -ST(0.070477538,0.15360968,0,0.076625322,0.14929356,0,0.077069107,0.15686929,0){2153625.7,1845555.4,1743907.9,-2316413.6,-1818255.1,-1994600,-1978592.7,-1872475.3,-1457243.4,2466066.8,1790618.2,2204191.1,1792310.4,1898765.5,1140253.2}; -ST(0.09123018,0.070922096,0,0.095795895,0.073622969,0,0.091953893,0.078440357,0){983713.53,473503.74,889726.23,465586.72,205720.2,322434.75,-297764.17,-178405.32,-450550.32,-904277.98,-461642.03,-936443.15,-1034644.8,-483922.03,-825354.72}; -ST(0.041057987,0.068843254,0,0.041803352,0.076750149,0,0.033874053,0.071548869,0){3488848.8,3453761.9,3157862.8,1752771.3,1340279.2,1466537.3,-855539,-1593440.1,-1010259.7,-3038218.5,-3552303.7,-2946084.6,-3709409.4,-3337911.6,-3304540.6}; -ST(0.075422073,0.20645372,0,0.081922129,0.20489902,0,0.081656406,0.2108727,0){1273700.5,996952.98,951384.03,-2693470,-2081157.6,-2083808.1,1728669,1266338.6,1528962.6,766631.5,704044.3,263916.4,-2583646.6,-2032271.3,-1843401}; -ST(0.084206466,0.24009781,0,0.084619556,0.23283838,0,0.092168655,0.23668616,0){569988.38,621044.17,307607.26,-1492933.9,-1568398.7,-792496.69,1847439,1771426.2,941630.33,-1498530.8,-1133733.9,-691810.02,578923.58,-42283.716,148523.72}; -ST(0.092168655,0.23668616,0,0.084619556,0.23283838,0,0.09071018,0.22887426,0){307607.26,621044.17,406264.77,-792496.69,-1568398.7,-1003622.2,941630.33,1771426.2,1069446.3,-691810.02,-1133733.9,-568907.82,148523.72,-42283.716,-233040.27}; -ST(0.071000103,0.28243589,0,0.078222118,0.28277283,0,0.073754091,0.28851618,0){281581.81,220930.92,171229.59,-835250.62,-655625.13,-511212.67,1360764.9,1069057.6,843808.82,-1840418.5,-1447830.3,-1164215.8,2257916.8,1779434.3,1467609.3}; -ST(0.073684623,0.0112317,0,0.078020383,0.017034313,0,0.070691378,0.017050195,0){2850123.3,2461848.1,3076870.7,2810738.2,2383750.6,2979073.3,2732509.2,2230032.5,2786592,2616540.6,2005590.6,2505581.5,2464223.2,1717239.5,2144710.8}; -ST(0.028678488,0.042143634,0,0.022876349,0.043626948,0,0.023478597,0.036718106,0){2968313.4,2488553.5,2561783.8,2399521.8,1978130.3,2187675.4,1370917.4,1061959.9,1494080.3,79587.615,-72059.632,582277.59,-1227272.3,-1191549.5,-414804.14}; -ST(0.053497526,0.1329974,0,0.059246105,0.12763558,0,0.060672554,0.13561545,0){2959143.9,2918223.5,2778852.8,-1911000.9,-1563762.3,-1944873,-3636096,-3644117.3,-3362653.4,623103.97,-127593.52,935707.85,3857035.6,3585046,3643681.7}; -ST(0.087083587,0.13880919,0,0.093938974,0.13899,0,0.09156348,0.14589395,0){1144744.3,548364.78,734092.88,-877072.07,-422206.84,-670961.7,-1349889.8,-645591.08,-791796.8,561444.4,273728.87,602866.55,1481228.8,708600.91,843431.47}; -ST(0.054957014,0.24657048,0,0.049037582,0.25027532,0,0.047556344,0.24377674,0){1058545,998508.07,1122639.4,-2852831,-2730849.8,-2989881.7,3777171.8,3739350.2,3850350.4,-3549694.2,-3756698.7,-3414324.1,2239441.1,2778087.3,1828478.4}; -ST(0.06771074,0.1881525,0,0.07206248,0.1830344,0,0.076430303,0.18837043,0){1821405.7,1716055.3,1444535.6,-3238423,-2879815.5,-2574453.4,698008.36,236909.5,569102.25,2695511.5,2719220.1,2129625.3,-2795478.4,-2081132.3,-2235391.7}; -ST(0.093571257,0.018380777,0,0.095041081,0.024587994,0,0.089183466,0.023798504,0){774815.13,597113.29,1283383.3,746204.54,557751.32,1204105.7,690036.86,481620.22,1050439.6,608388.09,373740.48,831874.08,504051.02,241099.33,561630.79}; -ST(0.089232651,0.27618677,0,0.095069321,0.27540052,0,0.093593186,0.28160993,0){160151.6,76899.446,74588.283,-470555.02,-225624.71,-221009.65,751874.95,359465.9,359269.18,-986723.61,-469594.27,-484261.41,1160401.4,548580.83,591230.88}; -ST(0.017861336,0.10270337,0,0.019165757,0.095107709,0,0.024938414,0.098415267,0){1773538.4,1930971.9,2383058.5,-87655.931,168744.63,68195.72,-1856823.6,-1747493.7,-2312962.3,-1677437.3,-2069009.1,-2447461.4,261812.45,-502664.26,-204726.33}; -ST(0.082583958,0.10907049,0,0.076969725,0.10634022,0,0.079063451,0.10043005,0){1698614.9,2181001.1,2051820.1,-286603.09,-255488.75,-16056.497,-1936849,-2406546.5,-2067914.3,-1323464.6,-1869163.7,-2035845.1,836522.31,756176.24,48244.512}; -ST(0.020473685,0.087577432,0,0.01318623,0.084416193,0,0.019499739,0.079597209,0){2087024.2,1411871.7,2040354.6,451292.51,378554.62,702945.71,-1538224.3,-931831.12,-1095289.5,-2322280.1,-1560266,-2175701.2,-1286407.6,-1046999.7,-1830384.7}; -ST(0.087331535,0.0958472,0,0.086838536,0.10220901,0,0.079063451,0.10043005,0){1318484.3,1341203.8,2051820.1,98077.228,-54099.381,-16056.497,-1213131.9,-1393108.8,-2067914.3,-1401481.2,-1282822.5,-2035845.1,-292629.72,161880.97,48244.512}; -ST(0.019247887,0.048569646,0,0.013132659,0.04767246,0,0.017433092,0.042090914,0){2135187.8,1507774.2,1971771.3,1594654.5,1139737.5,1594855,650408.09,493500.09,913057.13,-458538.7,-273193.01,56690.05,-1451674.1,-973395.4,-810753.02}; -ST(0.071000103,0.28243589,0,0.06660802,0.27624666,0,0.074931673,0.27468874,0){281581.81,417349.44,363389.18,-835250.62,-1226359.7,-1064791.9,1360764.9,1959900.4,1691857.9,-1840418.5,-2572844.1,-2200836.4,2257916.8,3027289.2,2556129.1}; -ST(0.076796159,0.2234596,0,0.084319616,0.22565969,0,0.078984823,0.22953004,0){1008421.8,696453.76,858343.29,-2411357.4,-1688204.7,-2128428.8,2346331.8,1707540.6,2291087.1,-852928.84,-743250.94,-1261656.1,-1160000.7,-649719.93,-424553.92}; -ST(0.087083587,0.13880919,0,0.081009521,0.1385969,0,0.083559522,0.13424014,0){1144744.3,1630909.4,1462145.4,-877072.07,-1242340.3,-981746.52,-1349889.8,-1926924,-1784737.2,561444.4,783271.16,395362.65,1481228.8,2113542.9,1914407.3}; -ST(0,0.057142857,0,0.004777904,0.053197076,0,0.0079950318,0.059686314,0){0,557925.04,917766.47,0,389224.92,570756.35,0,102822.82,7912.4367,0,-214698.3,-557994.72,0,-467537.22,-913265.38}; -ST(0.0079950318,0.059686314,0,0.0062494098,0.068021592,0,0,0.064285714,0){917766.47,709501.16,0,570756.35,364477.97,0,7912.4367,-157824.6,0,-557994.72,-603457.47,0,-913265.38,-756039.79,0}; -ST(0.041057987,0.068843254,0,0.047469022,0.070467195,0,0.041803352,0.076750149,0){3488848.8,3608010.8,3453761.9,1752771.3,1730907.5,1340279.2,-855539,-1046792,-1593440.1,-3038218.5,-3280034.9,-3552303.7,-3709409.4,-3807136.9,-3337911.6}; -ST(0.0071591483,0.096788703,0,0.0067127961,0.088875219,0,0.013428016,0.091778472,0){756711.76,725937.81,1408980.1,43634.951,141227.93,204626.15,-710572.63,-557260.38,-1174648.8,-795194.2,-806944.34,-1549888.7,-130859.45,-406936.37,-600683.83}; -ST(0.081119523,0.0085521597,0,0.074656208,0.0053403125,0,0.078571429,0,0){2167108.8,2772385.5,2419478.6,2149779.2,2763721.5,2419535.2,2115263.6,2746414.1,2419645.1,2063869.7,2720533.7,2419827.2,1995657.9,2685936.9,2420024.4}; -ST(0.078571429,0.3,0,0.074657371,0.29452352,0,0.081165886,0.29137431,0){0,79525.554,97729.953,0,-238312.39,-292395.17,0,396309.36,484687.71,0,-552992.95,-673055.06,0,707611.71,855744.16}; -ST(0.082332164,0.023444943,0,0.078020383,0.017034313,0,0.085905658,0.016824409,0){2029600,2461848.1,1656238,1907886.4,2383750.6,1604967.9,1671751.1,2230032.5,1504009.2,1335359.8,2005590.6,1356492.3,918760.81,1717239.5,1166855}; -ST(0.08596482,0.28314521,0,0.078222118,0.28277283,0,0.082516133,0.27647665,0){145967.81,220930.92,248899.48,-433371.98,-655625.13,-731674.12,707326.96,1069057.6,1170289.2,-959333.22,-1447830.3,-1538273.3,1181452.3,1779434.3,1813237.5}; -ST(0.072908259,0.24139656,0,0.078142774,0.24370973,0,0.071915087,0.24816524,0){881474.92,714639.7,803363.84,-2322734,-1902709.3,-2179152.4,2916335.3,2448578.4,2928525.2,-2445637.4,-2167997.3,-2836050.6,1082242,1155455.3,1927975}; -ST(0.010955873,0.10281868,0,0.013714026,0.097839388,0,0.017861336,0.10270337,0){1124212.8,1412613.2,1773538.4,-57954.543,55008.627,-87655.931,-1179275.3,-1355500.2,-1856823.6,-1060620.9,-1463354,-1677437.3,173274.75,-165174.7,261812.45}; -ST(0,0.092857143,0,0.0067127961,0.088875219,0,0.0071591483,0.096788703,0){0,725937.81,756711.76,0,141227.93,43634.951,0,-557260.38,-710572.63,0,-806944.34,-795194.2,0,-406936.37,-130859.45}; -ST(0.081656406,0.2108727,0,0.086709216,0.20730703,0,0.089437553,0.21298247,0){951384.03,734117.03,556322.48,-2083808.1,-1563285.8,-1238115.4,1528962.6,1031586.7,961021.23,263916.4,398134,60411.18,-1843401,-1481512.9,-1035404.3}; -ST(0.033761495,0.088496681,0,0.030017634,0.093495078,0,0.027903545,0.087518505,0){3029395.9,2771844.6,2674848,608605.12,320378.42,580994.77,-2298547.5,-2414486.4,-1967676.8,-3368980,-3014031.4,-2976106,-1747439.7,-948223.96,-1655065.1}; -ST(0.073708403,0.21517194,0,0.076796159,0.2234596,0,0.069002793,0.22246209,0){1225969.3,1008421.8,1267491.2,-2772471.1,-2411357.4,-3011719.2,2271379.1,2346331.8,2877058.6,-92677.622,-852928.84,-947533.34,-2155133.8,-1160000.7,-1573376.1}; -ST(0.072126291,0.10515927,0,0.065931692,0.10408722,0,0.069968451,0.098831219,0){2539730.3,2911358.9,2730411,-241283.81,-218409.17,57648.531,-2758172.2,-3113407,-2671597.7,-2254933.2,-2661455,-2785714.6,717337.89,651464.78,-173126.8}; -ST(0.066401409,0.0434645,0,0.073234584,0.04253025,0,0.06961584,0.048915995,0){3289675.8,2820532.7,3063466,2619840.6,2270240.9,2277085.6,1416557.6,1277003.9,906160.93,-75156.319,34586.382,-697426.19,-1551772,-1214797.7,-2122325.6}; -ST(0.06961584,0.048915995,0,0.073234584,0.04253025,0,0.077364239,0.048764008,0){3063466,2820532.7,2450679,2277085.6,2270240.9,1825420.5,906160.93,1277003.9,734405.59,-697426.19,34586.382,-544039.45,-2122325.6,-1214797.7,-1683943.8}; -ST(0.030017634,0.093495078,0,0.024499807,0.092422798,0,0.027903545,0.087518505,0){2771844.6,2390452.1,2674848,320378.42,320672.29,580994.77,-2414486.4,-2026771.7,-1967676.8,-3014031.4,-2619357.9,-2976106,-948223.96,-944222.72,-1655065.1}; -ST(0.079265602,0.086677581,0,0.081743274,0.092625466,0,0.07492972,0.092844339,0){2114636.1,1862860,2431427.6,488789.06,243386.47,308451.38,-1512904.7,-1587731,-2083891.4,-2351470.6,-2038652.4,-2656803.1,-1382326.1,-717394.49,-910298.79}; -ST(0.083969261,0.16737329,0,0.083337094,0.16031526,0,0.088381846,0.16289419,0){1198489.7,1295652.6,911153.68,-1632158.2,-1575018.8,-1156470.7,-607916.58,-956036.82,-599768.12,1852187.2,1781183.7,1317920.1,-62490.334,571788.58,244888.24}; -ST(0,0.071428571,0,0.0060853536,0.074713803,0,0,0.078571429,0){0,681675.12,0,0,285253.65,0,0,-277070.48,0,0,-678306.76,0,0,-685312.86,0}; -ST(0.0068768393,0.16098373,0,0.014502412,0.16316663,0,0.0094805882,0.16707285,0){553409.29,1121335,730151.01,-680450.71,-1429592.9,-989834.58,-397156.36,-728363.13,-378084.11,771605.48,1629901.1,1124284.7,219690.78,280110.31,-22095.939}; -ST(0.09123018,0.070922096,0,0.085646934,0.067722415,0,0.09230899,0.063522919,0){983713.53,1585902.9,877619.52,465586.72,821166.94,503392.8,-297764.17,-339583.13,-85524.836,-904277.98,-1336670.3,-638068.15,-1034644.8,-1689538.4,-918939.46}; -ST(0.09230899,0.063522919,0,0.085646934,0.067722415,0,0.08415119,0.061061125,0){877619.52,1585902.9,1759442.9,503392.8,821166.94,1064240.3,-85524.836,-339583.13,-51487.645,-638068.15,-1336670.3,-1146904.2,-918939.46,-1689538.4,-1789550.6}; -ST(0.035619257,0.12028764,0,0.040442009,0.11996282,0,0.038464606,0.12667013,0){2821397.9,2999410,2859316.3,-1093830.4,-1143461.2,-1476046.2,-3491178.8,-3706983.7,-3573486.5,-1043884.2,-1150363.3,-252868.56,2851838.9,2995190.5,3451249.3}; -ST(0.038464606,0.12667013,0,0.040442009,0.11996282,0,0.045375723,0.12284566,0){2859316.3,2999410,3072436,-1476046.2,-1143461.2,-1348503.3,-3573486.5,-3706983.7,-3829159.4,-252868.56,-1150363.3,-800055.99,3451249.3,2995190.5,3380414.3}; -ST(0.051167355,0.022914381,0,0.054261983,0.029107824,0,0.048866761,0.029559705,0){3850137.8,3801269,3831772.8,3629520.4,3450822.2,3467532.3,3200919.1,2782228.4,2773676.3,2588908.3,1857139.4,1816186,1828396.4,760852.59,685852.4}; -ST(0,0.15714286,0,0.0056981356,0.15371602,0,0.0068768393,0.16098373,0){0,478995.44,553409.29,0,-516269.88,-680450.71,0,-438816.38,-397156.36,0,550400.04,771605.48,0,395913.98,219690.78}; -ST(0.029380008,0.16405835,0,0.036146522,0.16944297,0,0.030623168,0.1713445,0){2021292.5,2222447.1,1985985.4,-2614335.2,-3121229.8,-2866418.8,-1254306.4,-960241.74,-715248.18,2982541.3,3509731.4,3183566.3,378860.61,-459324.98,-696442.05}; -ST(0.038427921,0.16264679,0,0.036146522,0.16944297,0,0.029380008,0.16405835,0){2389351.9,2222447.1,2021292.5,-3020403.6,-3121229.8,-2614335.2,-1591681.4,-960241.74,-1254306.4,3440909.6,3509731.4,2982541.3,682723.32,-459324.98,378860.61}; -ST(0.057707972,0.025075094,0,0.054261983,0.029107824,0,0.051167355,0.022914381,0){3734947.8,3801269,3850137.8,3478918.2,3450822.2,3629520.4,2984396.6,2782228.4,3200919.1,2285289.9,1857139.4,2588908.3,1429238.8,760852.59,1828396.4}; -ST(0.033039341,0.023173825,0,0.029163144,0.015558324,0,0.038009007,0.015147577,0){3318087.9,3068207,3597209.6,3123656.1,2986953.6,3506943.3,2746181,2826596.5,3328697.3,2207795.9,2591406.1,3067010.9,1539940.3,2287504.7,2728518.9}; -ST(0.0071428571,0.3,0,0.010662343,0.29482959,0,0.014285714,0.3,0){0,34537.041,0,0,-103506.64,0,0,172164.12,0,0,-240303.04,0,0,307518.14,0}; -ST(0.014285714,0,0,0.010679145,0.0052482016,0,0.0071428571,0,0){1683701.5,1277155.8,863498.79,1683671.3,1273289.3,863505.11,1683611.9,1265566.3,863516.31,1683542.6,1254019.7,863538.53,1683226,1238493.9,863596.62}; -ST(0.0078195435,0.14622426,0,0.0056981356,0.15371602,0,0,0.15,0){680366.1,478995.44,0,-626541.18,-516269.88,0,-729870.69,-438816.38,0,568744.13,550400.04,0,774663.29,395913.98,0}; -ST(0.062195955,0.11505156,0,0.06715469,0.10983132,0,0.069025318,0.11622387,0){2965673.8,2794834,2631986.5,-843057.19,-512277.78,-808686.45,-3569130.8,-3213264.7,-3192250.9,-1711501.2,-2112070.8,-1402768.4,2344130.4,1488257.3,2220554.1}; -ST(0.010955873,0.10281868,0,0.0052460498,0.10332732,0,0.0071591483,0.096788703,0){1124212.8,545715.18,756711.76,-57954.543,-33256.292,43634.951,-1179275.3,-576983.54,-710572.63,-1060620.9,-508602.25,-795194.2,173274.75,99155.047,-130859.45}; -ST(0.059054943,0.066788508,0,0.064846874,0.068845861,0,0.061098586,0.072147464,0){3499189.3,3243292.3,3389933,1856149.2,1629296.1,1545196.6,-658492.2,-795531.06,-1140417.3,-2864039.1,-2824516.6,-3205469.9,-3725081.1,-3448034.5,-3526423.9}; -ST(0.064832361,0.062804408,0,0.064846874,0.068845861,0,0.059054943,0.066788508,0){3281120.4,3243292.3,3499189.3,1912310.8,1629296.1,1856149.2,-254314.65,-795531.06,-658492.2,-2314932.7,-2824516.6,-2864039.1,-3410309.6,-3448034.5,-3725081.1}; -ST(0.016702178,0.061420197,0,0.012193394,0.066188359,0,0.0079950318,0.059686314,0){1844408.3,1364188,917766.47,1107331.1,734639.92,570756.35,-72241.295,-233939.49,7912.4367,-1222910.6,-1094586.7,-557994.72,-1885264.1,-1450385,-913265.38}; -ST(0.029380008,0.16405835,0,0.025851591,0.17077962,0,0.020973714,0.16688371,0){2021292.5,1763476.8,1525118.3,-2614335.2,-2524912.6,-2061659.5,-1254306.4,-673288.62,-799875.51,2982541.3,2815714.9,2343184.8,378860.61,-542697.73,-24581.749}; -ST(0.045331711,0.23557633,0,0.037546984,0.23452457,0,0.041402067,0.22952626,0){1270563.3,1205921.7,1348916.4,-3255008.9,-3072707.6,-3344816,3813331,3550700.1,3600200.4,-2700862,-2423829.8,-1982154,404484.48,201013.93,-667743.82}; -ST(0.018343869,0.21720619,0,0.02301506,0.22157032,0,0.017207343,0.22323305,0){888277.19,1025043.6,781289.63,-2037897.4,-2421684.9,-1865590.4,1749211,2274566.1,1807835.2,-225952.88,-677461.35,-643322.1,-1457259.1,-1351813.7,-915362.92}; -ST(0.02463475,0.21609565,0,0.02301506,0.22157032,0,0.018343869,0.21720619,0){1153636.1,1025043.6,888277.19,-2626116.1,-2421684.9,-2037897.4,2198315,2274566.1,1749211,-179791.92,-677461.35,-225952.88,-1969098.8,-1351813.7,-1457259.1}; -ST(0.077318805,0.23627719,0,0.070607657,0.23670872,0,0.07180958,0.22984275,0){830868.27,1007105.3,1079159.6,-2136157.9,-2594870.8,-2680718.2,2525048.7,3083897.2,2899261.6,-1830714.2,-2267120.1,-1622013.4,350702.19,490193.02,-492395.98}; -ST(0.0071147476,0.24137211,0,0.0043813653,0.24702694,0,0,0.24285714,0){259907.57,145794.38,0,-684802.64,-393661.32,0,859611.54,523477.05,0,-720499.62,-496310.62,0,317972.39,320224.07,0}; -ST(0.079265602,0.086677581,0,0.075872285,0.081656016,0,0.082390534,0.079333541,0){2114636.1,2427639,1865676.5,488789.06,758134.07,650380.91,-1512904.7,-1432759.9,-988603.29,-2351470.6,-2638364.3,-1983689.6,-1382326.1,-2029677.1,-1686881.4}; -ST(0,0.17142857,0,0.0069613667,0.17349451,0,0,0.17857143,0){0,517779.21,0,0,-769992.03,0,0,-142713.64,0,0,839532.94,0,0,-266340.1,0}; -ST(0.038009007,0.015147577,0,0.043829005,0.011024747,0,0.046063037,0.016810165,0){3597209.6,3801549.1,3836060.2,3506943.3,3750937.1,3717529.2,3328697.3,3650381.9,3484126.2,3067010.9,3501249.8,3143090.2,2728518.9,3305260.3,2704667.4}; -ST(0.025221599,0.062165695,0,0.027058874,0.069011929,0,0.01882241,0.070374011,0){2618029.3,2727323.5,2018056.9,1547191.2,1363815.9,970762.8,-156575.4,-681543.48,-580354.6,-1796512.5,-2386220.5,-1830388.5,-2702051.5,-2898415.6,-2130853.3}; -ST(0.077393474,0.16425214,0,0.083337094,0.16031526,0,0.083969261,0.16737329,0){1650679.7,1295652.6,1198489.7,-2141613.9,-1575018.8,-1632158.2,-1013799.5,-956036.82,-607916.58,2443278.1,1781183.7,1852187.2,287063.28,571788.58,-62490.334}; -ST(0.05288218,0.14757716,0,0.054237851,0.14012792,0,0.061244461,0.14481879,0){2767228.4,2856617.8,2643484.5,-2626819.9,-2267029,-2356788.3,-2900596.1,-3324577.4,-2899198.4,2479722.6,1580891.3,2042509.4,3026446,3650971.5,3121060.9}; -ST(0.047918899,0.14257657,0,0.054237851,0.14012792,0,0.05288218,0.14757716,0){2842478.3,2856617.8,2767228.4,-2400971.6,-2267029,-2626819.9,-3215455,-3324577.4,-2900596.1,1901551.7,1580891.3,2479722.6,3510918.5,3650971.5,3026446}; -ST(0.026018946,0.14387862,0,0.022775714,0.15147437,0,0.017312959,0.14496605,0){2064539,1786181.8,1456929,-1800072.3,-1841345.2,-1303417.8,-2295230.1,-1729359.8,-1594293.7,1506177.8,1894858,1135517.7,2488196.2,1670732.8,1713822.2}; -ST(0,0.042857143,0,0.0064812773,0.046734878,0,0,0.05,0){0,761350.4,0,0,582610.88,0,0,267082.8,0,0,-111174.21,0,0,-463416.67,0}; -ST(0.024008584,0.022367291,0,0.029163144,0.015558324,0,0.033039341,0.023173825,0){2639060.6,3068207,3318087.9,2494948.4,2986953.6,3123656.1,2214593.6,2826596.5,2746181,1813324.4,2591406.1,2207795.9,1312931.3,2287504.7,1539940.3}; -ST(0.053497526,0.1329974,0,0.052058531,0.12554764,0,0.059246105,0.12763558,0){2959143.9,3065498.6,2918223.5,-1911000.9,-1512626.5,-1563762.3,-3636096,-3831818,-3644117.3,623103.97,-428428.64,-127593.52,3857035.6,3614977.4,3585046}; -ST(0.020973714,0.16688371,0,0.014502412,0.16316663,0,0.021502186,0.15931359,0){1525118.3,1121335,1630158.4,-2061659.5,-1429592.9,-1947614.2,-799875.51,-728363.13,-1250943.8,2343184.8,1629901.1,2191316.6,-24581.749,280110.31,824223.66}; -ST(0.083292987,0.24598228,0,0.078142774,0.24370973,0,0.084206466,0.24009781,0){542685.82,714639.7,569988.38,-1458992.1,-1902709.3,-1492933.9,1920780.7,2448578.4,1847439,-1784182,-2167997.3,-1498530.8,1091638.2,1155455.3,578923.58}; -ST(0.039686874,0.0066116125,0,0.043829005,0.011024747,0,0.038009007,0.015147577,0){3676489.9,3801549.1,3597209.6,3658909.3,3750937.1,3506943.3,3623831.1,3650381.9,3328697.3,3571457.2,3501249.8,3067010.9,3501797.4,3305260.3,2728518.9}; -ST(0,0.085714286,0,0.0067127961,0.088875219,0,0,0.092857143,0){0,725937.81,0,0,141227.93,0,0,-557260.38,0,0,-806944.34,0,0,-406936.37,0}; -ST(0.036602132,0.28491153,0,0.043131118,0.28864457,0,0.03928574,0.29335694,0){279518.56,225252.57,127378.94,-831596.18,-672574.82,-381522.06,1362985.6,1110400.5,633829.06,-1860498.2,-1532552.2,-883092.25,2311728.5,1932837.8,1127859.7}; -ST(0.023478597,0.036718106,0,0.021348697,0.029751655,0,0.028359285,0.029784535,0){2561783.8,2382657.5,2981166.2,2187675.4,2153252.9,2693525.9,1494080.3,1716520.5,2145980.7,582277.59,1114508.8,1391347.7,-414804.14,404958.41,502245.34}; -ST(0.014305262,0.26641769,0,0.013885016,0.25805955,0,0.021957304,0.26060316,0){294901.31,357160.64,505833.44,-848621.76,-1003688.5,-1432636.8,1298521.9,1459712.7,2119105.6,-1589572.3,-1638678.7,-2450095.8,1686004.5,1506406.6,2369995.8}; -ST(0.050960377,0.23252058,0,0.056766116,0.23329497,0,0.052478219,0.23860916,0){1342135.9,1298096.4,1222305.6,-3383651.2,-3286228.7,-3178913.4,3804738.6,3735031.6,3866354.4,-2403721.7,-2434254.7,-3010118,-148681.88,-7070.0355,951644.63}; -ST(0.027746664,0.13122119,0,0.033010101,0.13109378,0,0.030046638,0.13690443,0){2296333.1,2584208,2369378.2,-1399007.9,-1567613,-1721516.8,-2843055.5,-3200932.4,-2840145.3,288094.78,308418.11,944948.24,2955532.6,3322264.5,3098367.4}; -ST(0.030046638,0.13690443,0,0.033010101,0.13109378,0,0.038217426,0.13599196,0){2369378.2,2584208,2738753.8,-1721516.8,-1567613,-1938161,-2840145.3,-3200932.4,-3305386.1,944948.24,308418.11,972060.89,3098367.4,3322264.5,3589652.3}; -ST(0.077140734,0.17217741,0,0.072573599,0.16764459,0,0.077393474,0.16425214,0){1584233.7,1881427.5,1650679.7,-2313491.7,-2572760.4,-2141613.9,-519338.58,-936075.04,-1013799.5,2552719.3,2916777.1,2443278.1,-655929.75,-135849.37,287063.28}; -ST(0.071059851,0.17209017,0,0.072573599,0.16764459,0,0.077140734,0.17217741,0){1900690.4,1881427.5,1584233.7,-2772233.4,-2572760.4,-2313491.7,-629520.98,-936075.04,-519338.58,3060958.1,2916777.1,2552719.3,-774142.34,-135849.37,-655929.75}; -ST(0.1,0.22142857,0,0.095652827,0.22622146,0,0.091864029,0.22106993,0){0,199039.37,394005.54,0,-484109.58,-927852.61,0,494313.66,863120.02,0,-223837.82,-241435.16,0,-173819.74,-536498.87}; -ST(0.0067127961,0.088875219,0,0.01318623,0.084416193,0,0.013428016,0.091778472,0){725937.81,1411871.7,1408980.1,141227.93,378554.62,204626.15,-557260.38,-931831.12,-1174648.8,-806944.34,-1560266,-1549888.7,-406936.37,-1046999.7,-600683.83}; -ST(0.034786476,0.1076516,0,0.038084092,0.1145524,0,0.030466665,0.11568191,0){2912738.3,2981407.2,2608170,-413135.58,-818508.93,-773675.45,-3267374.9,-3575257.7,-3152461.4,-2390915.6,-1775238,-1443702.3,1215377.6,2287308.3,2136967.4}; -ST(0.1,0.15714286,0,0.093710586,0.16080643,0,0.09308158,0.15403623,0){0,507346.27,579061.91,0,-621948.04,-628036.95,0,-366919.85,-525997.02,0,704920.6,672596.25,0,207593.47,469080.04}; -ST(0.0071428571,0,0,0.0045481906,0.0063920675,0,0,0,0){863498.79,552257.15,0,863505.11,549810.55,0,863516.31,544927.47,0,863538.53,537633.65,0,863596.62,527798.54,0}; -ST(0,0,0,0.0045481906,0.0063920675,0,0,0.0071428571,0){0,552257.15,0,0,549810.55,0,0,544927.47,0,0,537633.65,0,0,527798.54,0}; -ST(0,0.29285714,0,0.0045473776,0.2936365,0,0,0.3,0){0,18406.211,0,0,-55138.333,0,0,91630.552,0,0,-127724.83,0,0,162961.08,0}; -ST(0,0.3,0,0.0045473776,0.2936365,0,0.0071428571,0.3,0){0,18406.211,0,0,-55138.333,0,0,91630.552,0,0,-127724.83,0,0,162961.08,0}; -ST(0.092295863,0.26000779,0,0.095492809,0.25375881,0,0.1,0.25714286,0){193329.27,131307.15,0,-546576.12,-363726.6,0,805368.84,512510.07,0,-924990.4,-543451.99,0,884724.5,449348.78,0}; -ST(0.1,0.042857143,0,0.095360834,0.0462161,0,0.092141527,0.03991184,0){0,547145.45,927649.93,0,421466.87,767955.56,0,198977.54,476054.53,0,-69217.008,102192.68,0,-321602.09,-289378.9}; -ST(0.017861336,0.10270337,0,0.013465065,0.10662372,0,0.010955873,0.10281868,0){1773538.4,1351132.7,1124212.8,-87655.931,-165451.82,-57954.543,-1856823.6,-1496410,-1179275.3,-1677437.3,-1147793.4,-1060620.9,261812.45,489093.12,173274.75}; -ST(0.029690249,0.19362013,0,0.034128539,0.18892309,0,0.036160627,0.1953007,0){1647856.1,1872288.6,1834250.2,-3101495.4,-3356683.8,-3509998.2,1088093.1,788949.65,1372423.7,2141745.7,2731311.2,2256297.6,-2977851,-2954777.5,-3434247.7}; -ST(0.070175425,0.16144206,0,0.065117308,0.15657509,0,0.070477538,0.15360968,0){2074683.8,2354870.2,2153625.7,-2570674.4,-2678881.2,-2316413.6,-1460177,-1986291.9,-1978592.7,2919916.2,2952219.2,2466066.8,762077.82,1580034,1792310.4}; -ST(0.061476805,0.16269562,0,0.065117308,0.15657509,0,0.070175425,0.16144206,0){2391378.9,2354870.2,2074683.8,-3025373.1,-2678881.2,-2570674.4,-1589341.3,-1986291.9,-1460177,3446908.2,2952219.2,2919916.2,675366.83,1580034,762077.82}; -ST(0.016702178,0.061420197,0,0.014691551,0.054118398,0,0.021658338,0.054940441,0){1844408.3,1659245.8,2341024.9,1107331.1,1140472.1,1587273.2,-72241.295,265092.56,322446.89,-1222910.6,-693242.8,-1046241,-1885264.1,-1435183.5,-2078353.5}; -ST(0.029690249,0.19362013,0,0.023309936,0.19197185,0,0.027249449,0.18607819,0){1647856.1,1390526.6,1646413.8,-3101495.4,-2573914.4,-2861109.6,1088093.1,799964.88,464444.42,2141745.7,1893175.4,2518610.9,-2977851,-2411477.9,-2323177.4}; -ST(0.030217898,0.25971254,0,0.033025927,0.25326882,0,0.037705658,0.25939989,0){660621.26,809560.38,758443.36,-1866014.4,-2238649.8,-2140288.6,2744196,3142273.3,3141072.6,-3141188.1,-3308331.9,-3582615.2,2987009.7,2697705.3,3385872.9}; -ST(0.037705658,0.25939989,0,0.033025927,0.25326882,0,0.039157325,0.25334591,0){758443.36,809560.38,884627.38,-2140288.6,-2238649.8,-2446896,3141072.6,3142273.3,3436661.2,-3582615.2,-3308331.9,-3622356.9,3385872.9,2697705.3,2960330.2}; -ST(0.072908259,0.24139656,0,0.070607657,0.23670872,0,0.077318805,0.23627719,0){881474.92,1007105.3,830868.27,-2322734,-2594870.8,-2136157.9,2916335.3,3083897.2,2525048.7,-2445637.4,-2267120.1,-1830714.2,1082242,490193.02,350702.19}; -ST(0.013229009,0.21171696,0,0.0051799073,0.21317882,0,0.007303543,0.20469543,0){698716.07,276031.48,422375.13,-1540332.8,-615227.88,-880191.16,1156621.3,479976.29,531663.92,147278.69,25450.705,303952.91,-1334554.8,-511551.59,-861341.37}; -ST(0.047918899,0.14257657,0,0.045364072,0.14896511,0,0.041319833,0.14315875,0){2842478.3,2729630.7,2735557.7,-2400971.6,-2670475.8,-2343944,-3215455,-2787568.3,-3071175.4,1901551.7,2610132.2,1904337.3,3510918.5,2844182.1,3343927.4}; -ST(0.035714286,0,0,0.031710863,0.0075461758,0,0.028571429,0,0){3496308.9,3254919.5,3033980.1,3496337.7,3234618.2,3033983.4,3496399.5,3194153.7,3033988.7,3496538.6,3133832.1,3034024.4,3496562.8,3053845.3,3033982.5}; -ST(0.028571429,0.3,0,0.031264826,0.29263185,0,0.035714286,0.3,0){0,124484.17,0,0,-372709.78,0,0,618717.86,0,0,-861054.65,0,0,1098239.8,0}; -ST(0.077069107,0.15686929,0,0.083337094,0.16031526,0,0.077393474,0.16425214,0){1743907.9,1295652.6,1650679.7,-1994600,-1575018.8,-2141613.9,-1457243.4,-956036.82,-1013799.5,2204191.1,1781183.7,2443278.1,1140253.2,571788.58,287063.28}; -ST(0.032036001,0.10024616,0,0.030017634,0.093495078,0,0.03690243,0.09394169,0){2837469.6,2771844.6,3135041.5,-12660.65,320378.42,337961.95,-2850146.6,-2414486.4,-2760700,-2824890.6,-3014031.4,-3396384.7,37524.098,-948223.96,-1002139.6}; -ST(0.091953893,0.078440357,0,0.095795895,0.073622969,0,0.1,0.078571429,0){889726.23,473503.74,0,322434.75,205720.2,0,-450550.32,-178405.32,0,-936443.15,-461642.03,0,-825354.72,-483922.03,0}; -ST(0.084206466,0.24009781,0,0.078142774,0.24370973,0,0.077318805,0.23627719,0){569988.38,714639.7,830868.27,-1492933.9,-1902709.3,-2136157.9,1847439,2448578.4,2525048.7,-1498530.8,-2167997.3,-1830714.2,578923.58,1155455.3,350702.19}; -ST(0.021502186,0.15931359,0,0.022775714,0.15147437,0,0.027609688,0.15620978,0){1630158.4,1786181.8,2023546.1,-1947614.2,-1841345.2,-2286520.9,-1250943.8,-1729359.8,-1726415,2191316.6,1894858,2510934.9,824223.66,1670732.8,1400022.9}; -ST(0.0066871595,0.19241823,0,0.005051806,0.19767546,0,0,0.19285714,0){432113.5,313084.45,0,-803518.34,-612892.85,0,258472.73,273796.53,0,581490.34,350786.74,0,-758588.26,-609909.8,0}; -ST(0.013878694,0.17880836,0,0.014405512,0.17061143,0,0.020636298,0.17424253,0){971566.52,1063653,1433869.3,-1548960.4,-1519257.6,-2154082.5,-51095.574,-412907.51,-351921.61,1579530,1696192.6,2330929.4,-887966.26,-313907.63,-819073.82}; -ST(0.02133326,0.24577003,0,0.013821768,0.24617185,0,0.015758122,0.23699049,0){675269.21,454053.45,597291.98,-1813848.4,-1221678.8,-1541119.1,2383092.9,1611329.8,1837947.1,-2204305.3,-1502439.1,-1363109.4,1333319.6,928515.88,315646.37}; -ST(0.049721881,0.27094787,0,0.055001581,0.27169863,0,0.051703203,0.27754162,0){588018.61,565900.8,454636.43,-1710042.9,-1648356.5,-1338881.7,2675009.8,2587095.5,2149437.1,-3394309,-3300283.2,-2841702,3801713.7,3725567.5,3377384.9}; -ST(0.030490983,0.2108424,0,0.036840853,0.20596239,0,0.038843793,0.21103197,0){1428644.1,1679916.9,1637090.1,-3128471,-3538121.9,-3590120.4,2293671,2233718.4,2645890.8,399562.24,1067350,433646.44,-2769801.9,-3414669.4,-3163532.2}; -ST(0.028678488,0.042143634,0,0.030602087,0.036163623,0,0.03663522,0.040674234,0){2968313.4,3125169.1,3463485.9,2399521.8,2682310.4,2844620.6,1370917.4,1859340.6,1717431.6,79587.615,772883.67,283267.24,-1227272.3,-423255.99,-1201989.6}; -ST(0,0.25,0,0.0060491453,0.25298129,0,0,0.25714286,0){0,178654.23,0,0,-493529.07,0,0,691183.17,0,0,-724662.05,0,0,585970.08,0}; -ST(0.024044461,0.20382537,0,0.025476801,0.19755762,0,0.03163445,0.20120488,0){1283805.9,1423125.8,1608414.7,-2655634.7,-2782737.9,-3251875.6,1553893.8,1235431.1,1714266.6,995311.88,1602470.1,1500504,-2617892.2,-2766638.2,-3248047}; -ST(0.065478411,0.24860928,0,0.066600159,0.24211306,0,0.071915087,0.24816524,0){912058.17,1004296.2,803363.84,-2478342.9,-2655015,-2179152.4,3344041.2,3359675.2,2928525.2,-3264436.9,-2867211.3,-2836050.6,2261773.6,1352854.8,1927975}; -ST(0.071915087,0.24816524,0,0.066600159,0.24211306,0,0.072908259,0.24139656,0){803363.84,1004296.2,881474.92,-2179152.4,-2655015,-2322734,2928525.2,3359675.2,2916335.3,-2836050.6,-2867211.3,-2445637.4,1927975,1352854.8,1082242}; -ST(0.032036001,0.10024616,0,0.039702853,0.10111678,0,0.034786476,0.1076516,0){2837469.6,3175586.8,2912738.3,-12660.65,-64516.934,-413135.58,-2850146.6,-3238866.3,-3267374.9,-2824890.6,-3108635.2,-2390915.6,37524.098,193445.51,1215377.6}; -ST(0.047556344,0.24377674,0,0.049037582,0.25027532,0,0.043027686,0.24899973,0){1122639.4,998508.07,999522.33,-2989881.7,-2730849.8,-2720190.5,3850350.4,3739350.2,3683283.3,-3414324.1,-3756698.7,-3620573.8,1828478.4,2778087.3,2549278.8}; -ST(0.070865224,0.080352924,0,0.075872285,0.081656016,0,0.072044079,0.08604506,0){2808030.6,2427639,2688599.4,934415.1,758134.07,649473.83,-1562677.5,-1432759.9,-1882262.6,-3017110.1,-2638364.3,-2986497.2,-2458745.5,-2029677.1,-1825996.4}; -ST(0.021957304,0.26060316,0,0.027951851,0.26533243,0,0.023009638,0.26878949,0){505833.44,539100.43,417665.14,-1432636.8,-1547025.6,-1208783.5,2119105.6,2353298.6,1871958.7,-2450095.8,-2852826.8,-2337004.8,2369995.8,2980285,2554445.3}; -ST(0.081004963,0.27070547,0,0.086077973,0.27164165,0,0.082516133,0.27647665,0){333174.81,243157.03,248899.48,-968418.7,-708191.99,-731674.12,1513258.3,1111255.9,1170289.2,-1916833.2,-1417072.6,-1538273.3,2141327.9,1598582.9,1813237.5}; -ST(0.082332164,0.023444943,0,0.085916752,0.02828,0,0.080699945,0.029142305,0){2029600,1643257.2,2185639.9,1907886.4,1500211.7,1983669.2,1671751.1,1226559.7,1598386.1,1335359.8,846114.35,1065401.8,918760.81,391827.49,433818.71}; -ST(0.047385855,0.10193045,0,0.052532368,0.096036702,0,0.054240748,0.10280037,0){3329666.7,3389506.1,3302360.6,-117239.93,240670.51,-169115.68,-3442848.4,-3131818.5,-3462856.5,-3204510.9,-3594959.1,-3116478.2,350991.89,-718569.73,505791.56}; -ST(0.012549176,0.077039569,0,0.01318623,0.084416193,0,0.0064539684,0.081629255,0){1370920.5,1411871.7,711139.06,525978.15,378554.62,222377.16,-643140.23,-931831.12,-419239.47,-1415881.7,-1560266,-772749.89,-1316306.1,-1046999.7,-595288.06}; -ST(0.054010827,0.25507988,0,0.060567191,0.25172758,0,0.060672356,0.25950081,0){897184.36,917440.34,771273.27,-2496661.6,-2522838.3,-2177172.3,3553831.7,3497206.6,3197356.1,-3839088.9,-3596815.5,-3651078,3290330.5,2796536,3457676.3}; -ST(0.060672356,0.25950081,0,0.060567191,0.25172758,0,0.066803853,0.25459223,0){771273.27,917440.34,789541.66,-2177172.3,-2522838.3,-2193455.3,3197356.1,3497206.6,3110738.9,-3651078,-3596815.5,-3337877,3457676.3,2796536,2824240.3}; -ST(0.092450683,0.030760689,0,0.085916752,0.02828,0,0.089183466,0.023798504,0){900007.85,1643257.2,1283383.3,807431.66,1500211.7,1204105.7,631804.95,1226559.7,1050439.6,391202.83,846114.35,831874.08,110124.82,391827.49,561630.79}; -ST(0.089232651,0.27618677,0,0.086077973,0.27164165,0,0.092520768,0.26920591,0){160151.6,243157.03,145042.72,-470555.02,-708191.99,-420173.4,751874.95,1111255.9,651988.34,-986723.61,-1417072.6,-816598.86,1160401.4,1598582.9,896908.09}; -ST(0.064373335,0.2338171,0,0.065627137,0.22734606,0,0.07180958,0.22984275,0){1185902.3,1270705.1,1079159.6,-3010536.1,-3111357.1,-2680718.2,3446119.8,3236198.8,2899261.6,-2291596.2,-1576358.2,-1622013.4,79206.699,-953054.66,-492395.98}; -ST(0.059957308,0.22757204,0,0.065627137,0.22734606,0,0.064373335,0.2338171,0){1366903.5,1270705.1,1185902.3,-3351367.9,-3111357.1,-3010536.1,3498598.8,3236198.8,3446119.8,-1727811.3,-1576358.2,-2291596.2,-990620.01,-953054.66,79206.699}; -ST(0.027609688,0.15620978,0,0.030440206,0.150204,0,0.034314476,0.15645926,0){2023546.1,2239650.6,2334400.9,-2286520.9,-2249230.7,-2649968.2,-1726415,-2230054.7,-1976247.7,2510934.9,2258843.4,2917237.1,1400022.9,2220211.9,1581967.4}; -ST(0.03690243,0.09394169,0,0.030017634,0.093495078,0,0.033761495,0.088496681,0){3135041.5,2771844.6,3029395.9,337961.95,320378.42,608605.12,-2760700,-2414486.4,-2298547.5,-3396384.7,-3014031.4,-3368980,-1002139.6,-948223.96,-1747439.7}; -ST(0.023478597,0.036718106,0,0.022876349,0.043626948,0,0.017433092,0.042090914,0){2561783.8,2488553.5,1971771.3,2187675.4,1978130.3,1594855,1494080.3,1061959.9,913057.13,582277.59,-72059.632,56690.05,-414804.14,-1191549.5,-810753.02}; -ST(0,0.064285714,0,0.0062494098,0.068021592,0,0,0.071428571,0){0,709501.16,0,0,364477.97,0,0,-157824.6,0,0,-603457.47,0,0,-756039.79,0}; -ST(0.020973714,0.16688371,0,0.025851591,0.17077962,0,0.020636298,0.17424253,0){1525118.3,1763476.8,1433869.3,-2061659.5,-2524912.6,-2154082.5,-799875.51,-673288.62,-351921.61,2343184.8,2815714.9,2330929.4,-24581.749,-542697.73,-819073.82}; -ST(0.075488644,0.14176328,0,0.081009521,0.1385969,0,0.08264437,0.14444108,0){1990888.2,1630909.4,1463951.5,-1647841.2,-1242340.3,-1293607.4,-2274843.7,-1926924,-1614532.1,1255935.2,783271.16,1105781,2491166.6,2113542.9,1743195.6}; -ST(0.01180171,0.25230222,0,0.013885016,0.25805955,0,0.0098751756,0.25600949,0){347512.04,357160.64,270470.11,-957611.77,-1003688.5,-755004.71,1333704.3,1459712.7,1082095.4,-1383899.6,-1638678.7,-1183544.7,1095718.6,1506406.6,1038261.4}; -ST(0.0064539684,0.081629255,0,0.01318623,0.084416193,0,0.0067127961,0.088875219,0){711139.06,1411871.7,725937.81,222377.16,378554.62,141227.93,-419239.47,-931831.12,-557260.38,-772749.89,-1560266,-806944.34,-595288.06,-1046999.7,-406936.37}; -ST(0.034786476,0.1076516,0,0.039702853,0.10111678,0,0.042557423,0.10832344,0){2912738.3,3175586.8,3183930.6,-413135.58,-64516.934,-492142.06,-3267374.9,-3238866.3,-3600076,-2390915.6,-3108635.2,-2551523.2,1215377.6,193445.51,1442840.6}; -ST(0.064373335,0.2338171,0,0.056766116,0.23329497,0,0.059957308,0.22757204,0){1185902.3,1298096.4,1366903.5,-3010536.1,-3286228.7,-3351367.9,3446119.8,3735031.6,3498598.8,-2291596.2,-2434254.7,-1727811.3,79206.699,-7070.0355,-990620.01}; -ST(0.071000103,0.28243589,0,0.069147655,0.28722413,0,0.063469548,0.28521738,0){281581.81,213884.16,273598.49,-835250.62,-637821.62,-814255.31,1360764.9,1050341,1335465.2,-1840418.5,-1444059.1,-1824812,2257916.8,1811586.6,2270429.1}; -ST(0.073754091,0.28851618,0,0.069147655,0.28722413,0,0.071000103,0.28243589,0){171229.59,213884.16,281581.81,-511212.67,-637821.62,-835250.62,843808.82,1050341,1360764.9,-1164215.8,-1444059.1,-1840418.5,1467609.3,1811586.6,2257916.8}; -ST(0.064075209,0.013493001,0,0.069232026,0.01217315,0,0.070691378,0.017050195,0){3498581.2,3187096.8,3076870.7,3428890.3,3135369.8,2979073.3,3290906.4,3032749.5,2786592,3087427.7,2880922.9,2505581.5,2822154,2682056.5,2144710.8}; -ST(0.070691378,0.017050195,0,0.069232026,0.01217315,0,0.073684623,0.0112317,0){3076870.7,3187096.8,2850123.3,2979073.3,3135369.8,2810738.2,2786592,3032749.5,2732509.2,2505581.5,2880922.9,2616540.6,2144710.8,2682056.5,2464223.2}; -ST(0.062992669,0.22303634,0,0.065627137,0.22734606,0,0.059957308,0.22757204,0){1396775.9,1270705.1,1366903.5,-3331109.7,-3111357.1,-3351367.9,3216330,3236198.8,3498598.8,-1122974.8,-1576358.2,-1727811.3,-1661551.4,-953054.66,-990620.01}; -ST(0.007303543,0.20469543,0,0.005051806,0.19767546,0,0.011268327,0.1984065,0){422375.13,313084.45,682302.12,-880191.16,-612892.85,-1344805.9,531663.92,273796.53,623458.07,303952.91,350786.74,739532.85,-861341.37,-609909.8,-1341727.7}; -ST(0.054876921,0.07294965,0,0.047469022,0.070467195,0,0.052494391,0.065958781,0){3558755.8,3608010.8,3640248,1580988.4,1730907.5,1971511.2,-1275447.3,-1046792,-601016.65,-3423192.1,-3280034.9,-2898090,-3669097.1,-3807136.9,-3866942}; -ST(0.041803352,0.076750149,0,0.047469022,0.070467195,0,0.049165273,0.076760106,0){3453761.9,3608010.8,3570137.5,1340279.2,1730907.5,1384898,-1593440.1,-1046792,-1648055.9,-3552303.7,-3280034.9,-3672308.6,-3337911.6,-3807136.9,-3449021.3}; -ST(0,0.23571429,0,0.0069516057,0.23320895,0,0.0071147476,0.24137211,0){0,288078.49,259907.57,0,-728952.19,-684802.64,0,827497.2,859611.54,0,-537397.4,-720499.62,0,-5267.3055,317972.39}; -ST(0.038597539,0.20095921,0,0.036840853,0.20596239,0,0.03163445,0.20120488,0){1801301.7,1679916.9,1608414.7,-3633864.6,-3538121.9,-3251875.6,1895634,2233718.4,1714266.6,1705394,1067350,1500504,-3630918.1,-3414669.4,-3248047}; -ST(0.033874053,0.071548869,0,0.041803352,0.076750149,0,0.032911969,0.081185013,0){3157862.8,3453761.9,3037931.3,1466537.3,1340279.2,971274.35,-1010259.7,-1593440.1,-1756226.8,-2946084.6,-3552303.7,-3289165.4,-3304540.6,-3337911.6,-2584916.3}; -ST(0.1,0.05,0,0.095360834,0.0462161,0,0.1,0.042857143,0){0,547145.45,0,0,421466.87,0,0,198977.54,0,0,-69217.008,0,0,-321602.09,0}; -ST(0.069025318,0.11622387,0,0.070840483,0.12204614,0,0.064276416,0.12183086,0){2631986.5,2470738.2,2809128.6,-808686.45,-1044803.2,-1175750.5,-3192250.9,-3073782.1,-3492840.6,-1402768.4,-729197.53,-855220.15,2220554.1,2652961,2995580.4}; -ST(0.1,0.25714286,0,0.095492809,0.25375881,0,0.1,0.25,0){0,131307.15,0,0,-363726.6,0,0,512510.07,0,0,-543451.99,0,0,449348.78,0}; -ST(0,0.11428571,0,0.0062042788,0.11791514,0,0,0.12142857,0){0,612847.32,0,0,-208741.13,0,0,-750565.55,0,0,-286207.66,0,0,561848.67,0}; -ST(0.092141527,0.03991184,0,0.095360834,0.0462161,0,0.08974924,0.047235181,0){927649.93,547145.45,1190814.4,767955.56,421466.87,905328.07,476054.53,198977.54,402804.56,102192.68,-69217.008,-196265.4,-289378.9,-321602.09,-748421.11}; -ST(0.090077759,0.25268961,0,0.095492809,0.25375881,0,0.092295863,0.26000779,0){291813.61,131307.15,193329.27,-805257.31,-363726.6,-546576.12,1125037.4,512510.07,805368.84,-1174248.1,-543451.99,-924990.4,940920.06,449348.78,884724.5}; -ST(0.054010827,0.25507988,0,0.049037582,0.25027532,0,0.054957014,0.24657048,0){897184.36,998508.07,1058545,-2496661.6,-2730849.8,-2852831,3553831.7,3739350.2,3777171.8,-3839088.9,-3756698.7,-3549694.2,3290330.5,2778087.3,2239441.1}; -ST(0,0.19285714,0,0.005051806,0.19767546,0,0,0.2,0){0,313084.45,0,0,-612892.85,0,0,273796.53,0,0,350786.74,0,0,-609909.8,0}; -ST(0.024938414,0.098415267,0,0.030017634,0.093495078,0,0.032036001,0.10024616,0){2383058.5,2771844.6,2837469.6,68195.72,320378.42,-12660.65,-2312962.3,-2414486.4,-2850146.6,-2447461.4,-3014031.4,-2824890.6,-204726.33,-948223.96,37524.098}; -ST(0.06966854,0.20076802,0,0.064671223,0.19505087,0,0.071449289,0.19423207,0){1570520.4,1815232.4,1594804.6,-3162888.4,-3465163,-3019964.8,1636334.6,1334352.3,1103926.4,1503948.1,2252470.6,2033518.7,-3161601.9,-3382100.5,-2921575.1}; -ST(0.060432552,0.20227914,0,0.064671223,0.19505087,0,0.06966854,0.20076802,0){1798951.1,1815232.4,1570520.4,-3671781.8,-3465163,-3162888.4,2023610.8,1334352.3,1636334.6,1565241.8,2252470.6,1503948.1,-3653837,-3382100.5,-3161601.9}; -ST(0.014210915,0.13228117,0,0.012365279,0.12660144,0,0.01788586,0.12850833,0){1289449.4,1158576.2,1616906.9,-813665.75,-596487.84,-895214.81,-1589638.3,-1447959.2,-2016472.2,227067.92,-105993.81,-4802.2192,1673024.3,1396357.8,2014144.7}; -ST(0.0072553778,0.13224921,0,0.012365279,0.12660144,0,0.014210915,0.13228117,0){674958.82,1158576.2,1289449.4,-425463.67,-596487.84,-813665.75,-832230.25,-1447959.2,-1589638.3,117822.57,-105993.81,227067.92,875622.71,1396357.8,1673024.3}; -ST(0.030575169,0.1246812,0,0.023379755,0.12686903,0,0.025139549,0.12057635,0){2526238.7,2047772.9,2224740.3,-1202245.8,-1065433.1,-875333.98,-3156412.2,-2558991,-2755721.9,-451924.48,-162203.53,-796179.51,2919641.1,2481221.5,2272644.8}; -ST(0.036160627,0.1953007,0,0.034128539,0.18892309,0,0.039366597,0.19088868,0){1834250.2,1872288.6,1982365.2,-3509998.2,-3356683.8,-3628592.6,1372423.7,788949.65,1030950.1,2256297.6,2731311.2,2772526.5,-3434247.7,-2954777.5,-3333638.5}; -ST(0.041319833,0.14315875,0,0.045364072,0.14896511,0,0.037897724,0.149701,0){2735557.7,2729630.7,2552043.8,-2343944,-2670475.8,-2536068.8,-3071175.4,-2787568.3,-2567975.2,1904337.3,2610132.2,2520076,3343927.4,2844182.1,2583694.6}; -ST(0.0058133292,0.032528446,0,0.0063343033,0.038958017,0,0,0.035714286,0){694559.72,751213.74,0,614750.96,627892.11,0,464300.7,401490.67,0,260495.38,109174.99,0,26512.55,-201236.23,0}; -ST(0.045044357,0.28188841,0,0.045592054,0.27439642,0,0.051703203,0.27754162,0){362990.51,513714.39,454636.43,-1075960.6,-1504437.2,-1338881.7,1750378.7,2387679.2,2149437.1,-2362097.1,-3100344.3,-2841702,2889034,3591305.7,3377384.9}; -ST(0.068476894,0.0069177029,0,0.06203594,0.0060944193,0,0.064285714,0,0){3242851.4,3604620.2,3496327.6,3225849.8,3589956.2,3496358.5,3191931.3,3560685.5,3496415,3141298.2,3516960.1,3496523.2,3073847.6,3458793.9,3496472.9}; -ST(0.064285714,0.3,0,0.061805884,0.29356168,0,0.068366879,0.29272708,0){0,121923.05,123803.43,0,-365207.83,-370697.46,0,606815.62,615462.12,0,-845641.09,-856697.17,0,1080583.1,1092834.3}; -ST(0.07180958,0.22984275,0,0.065627137,0.22734606,0,0.069002793,0.22246209,0){1079159.6,1270705.1,1267491.2,-2680718.2,-3111357.1,-3011719.2,2899261.6,3236198.8,2877058.6,-1622013.4,-1576358.2,-947533.34,-492395.98,-953054.66,-1573376.1}; -ST(0.066925078,0.074981916,0,0.060416267,0.076932239,0,0.061098586,0.072147464,0){3090390.8,3380545.3,3389933,1280900.5,1302521.2,1545196.6,-1278621.5,-1576156.6,-1140417.3,-3089611.2,-3485992.8,-3205469.9,-3091904.4,-3253298.6,-3526423.9}; -ST(0.064352171,0.083117586,0,0.060416267,0.076932239,0,0.066925078,0.074981916,0){3167194.8,3380545.3,3090390.8,915483.69,1302521.2,1280900.5,-1987167.2,-1576156.6,-1278621.5,-3477240.4,-3485992.8,-3089611.2,-2495770,-3253298.6,-3091904.4}; -ST(0.0060491453,0.25298129,0,0.01180171,0.25230222,0,0.0098751756,0.25600949,0){178654.23,347512.04,270470.11,-493529.07,-957611.77,-755004.71,691183.17,1333704.3,1082095.4,-724662.05,-1383899.6,-1183544.7,585970.08,1095718.6,1038261.4}; -ST(0.0087429334,0.24792416,0,0.01180171,0.25230222,0,0.0060491453,0.25298129,0){283453.34,347512.04,178654.23,-768118.62,-957611.77,-493529.07,1029935.2,1333704.3,691183.17,-992967.39,-1383899.6,-724662.05,667809.3,1095718.6,585970.08}; -ST(0.055202425,0.1814475,0,0.061291474,0.18447479,0,0.055890502,0.18802963,0){2227021.2,2069396,2110328.4,-3667462.5,-3531333.7,-3747121.1,145084.74,425331.11,795966.68,3573754.5,3230965.1,3129878.5,-2457046.3,-2708277.6,-3224012.4}; -ST(0.025350652,0.23917347,0,0.033139613,0.24047735,0,0.029124573,0.24658198,0){868665.73,1026889.2,849052.23,-2265304,-2694450.7,-2288340.2,2773502.3,3348643.4,3030093.5,-2193941.8,-2743423.6,-2848204.4,753574.67,1106136.5,1797881.3}; -ST(0,0.12142857,0,0.0061411468,0.1246533,0,0,0.12857143,0){0,591118.91,0,0,-280990.71,0,0,-738586.84,0,0,-106527.54,0,0,682629.18,0}; -ST(0.03163445,0.20120488,0,0.036160627,0.1953007,0,0.038597539,0.20095921,0){1608414.7,1834250.2,1801301.7,-3251875.6,-3509998.2,-3633864.6,1714266.6,1372423.7,1895634,1500504,2256297.6,1705394,-3248047,-3434247.7,-3630918.1}; -ST(0.029690249,0.19362013,0,0.036160627,0.1953007,0,0.03163445,0.20120488,0){1647856.1,1834250.2,1608414.7,-3101495.4,-3509998.2,-3251875.6,1088093.1,1372423.7,1714266.6,2141745.7,2256297.6,1500504,-2977851,-3434247.7,-3248047}; -ST(0,0.17142857,0,0.0046637588,0.16745308,0,0.0069613667,0.17349451,0){0,362371.83,517779.21,0,-494096.85,-769992.03,0,-182769.85,-142713.64,0,560561.48,839532.94,0,-21256.565,-266340.1}; -ST(0.034314476,0.15645926,0,0.030440206,0.150204,0,0.037897724,0.149701,0){2334400.9,2239650.6,2552043.8,-2649968.2,-2249230.7,-2536068.8,-1976247.7,-2230054.7,-2567975.2,2917237.1,2258843.4,2520076,1581967.4,2220211.9,2583694.6}; -ST(0.077393474,0.16425214,0,0.072573599,0.16764459,0,0.070175425,0.16144206,0){1650679.7,1881427.5,2074683.8,-2141613.9,-2572760.4,-2570674.4,-1013799.5,-936075.04,-1460177,2443278.1,2916777.1,2919916.2,287063.28,-135849.37,762077.82}; -ST(0.050398693,0.1921099,0,0.055890502,0.18802963,0,0.057391395,0.19462543,0){2077292.2,2110328.4,1979510.6,-3850553.1,-3747121.1,-3763012.6,1209682,795966.68,1410875.8,2818064.5,3129878.5,2491970.2,-3615771.1,-3224012.4,-3656419.8}; -ST(0.057391395,0.19462543,0,0.055890502,0.18802963,0,0.06137482,0.19024807,0){1979510.6,2110328.4,1976038.9,-3763012.6,-3747121.1,-3592882,1410875.8,795966.68,963745.22,2491970.2,3129878.5,2804392.5,-3656419.8,-3224012.4,-3258719.1}; -ST(0,0.13571429,0,0.0054758376,0.13911323,0,0,0.14285714,0){0,495708.7,0,0,-382921.42,0,0,-582869.54,0,0,250325.59,0,0,639819.51,0}; -ST(0.063469548,0.28521738,0,0.069147655,0.28722413,0,0.068366879,0.29272708,0){273598.49,213884.16,123803.43,-814255.31,-637821.62,-370697.46,1335465.2,1050341,615462.12,-1824812,-1444059.1,-856697.17,2270429.1,1811586.6,1092834.3}; -ST(0.068366879,0.29272708,0,0.069147655,0.28722413,0,0.073754091,0.28851618,0){123803.43,213884.16,171229.59,-370697.46,-637821.62,-511212.67,615462.12,1050341,843808.82,-856697.17,-1444059.1,-1164215.8,1092834.3,1811586.6,1467609.3}; -ST(0.068476894,0.0069177029,0,0.069232026,0.01217315,0,0.064075209,0.013493001,0){3242851.4,3187096.8,3498581.2,3225849.8,3135369.8,3428890.3,3191931.3,3032749.5,3290906.4,3141298.2,2880922.9,3087427.7,3073847.6,2682056.5,2822154}; -ST(0.073684623,0.0112317,0,0.069232026,0.01217315,0,0.068476894,0.0069177029,0){2850123.3,3187096.8,3242851.4,2810738.2,3135369.8,3225849.8,2732509.2,3032749.5,3191931.3,2616540.6,2880922.9,3141298.2,2464223.2,2682056.5,3073847.6}; -ST(0,0.26428571,0,0.0071908097,0.26035264,0,0.0060732531,0.2674669,0){0,179155.76,124750.88,0,-507033.49,-359918.85,0,748779.14,553735.12,0,-863311.12,-683931.42,0,830950.48,735399.5}; -ST(0.093873231,0.17693503,0,0.095837038,0.182565,0,0.089858368,0.18421461,0){445896.9,291932.87,692603.24,-694096.79,-487211.17,-1178349.1,-59504.029,33971.767,133849.22,727141.13,464480.32,1084450.2,-345394.37,-344762.9,-894447.98}; -ST(0.023309936,0.19197185,0,0.021212478,0.18688263,0,0.027249449,0.18607819,0){1390526.6,1339179.6,1646413.8,-2573914.4,-2348119.2,-2861109.6,799964.88,429909.33,464444.42,1893175.4,2024227.8,2518610.9,-2411477.9,-1955356.8,-2323177.4}; -ST(0,0.035714286,0,0.0063343033,0.038958017,0,0,0.042857143,0){0,751213.74,0,0,627892.11,0,0,401490.67,0,0,109174.99,0,0,-201236.23,0}; -ST(0,0.22857143,0,0.0069516057,0.23320895,0,0,0.23571429,0){0,288078.49,0,0,-728952.19,0,0,827497.2,0,0,-537397.4,0,0,-5267.3055,0}; -ST(0.031710863,0.0075461758,0,0.025051818,0.0051959301,0,0.028571429,0,0){3254919.5,2747435.6,3033980.1,3234618.2,2739316.7,3033983.4,3194153.7,2723095.2,3033988.7,3133832.1,2698832.3,3034024.4,3053845.3,2666496.7,3033982.5}; -ST(0.028571429,0.3,0,0.024877102,0.29495936,0,0.031264826,0.29263185,0){0,72135.52,124484.17,0,-216205.93,-372709.78,0,359676.71,618717.86,0,-502149.61,-861054.65,0,642973.44,1098239.8}; -ST(0.025468185,0.010276157,0,0.025051818,0.0051959301,0,0.031710863,0.0075461758,0){2780034,2747435.6,3254919.5,2747892,2739316.7,3234618.2,2683968.5,2723095.2,3194153.7,2589008.8,2698832.3,3133832.1,2463902.9,2666496.7,3053845.3}; -ST(0.031264826,0.29263185,0,0.024877102,0.29495936,0,0.025130011,0.29009115,0){124484.17,72135.52,142877.47,-372709.78,-216205.93,-427099.39,618717.86,359676.71,706741.94,-861054.65,-502149.61,-978805.55,1098239.8,642973.44,1240164.3}; -ST(0.024938414,0.098415267,0,0.024499807,0.092422798,0,0.030017634,0.093495078,0){2383058.5,2390452.1,2771844.6,68195.72,320672.29,320378.42,-2312962.3,-2026771.7,-2414486.4,-2447461.4,-2619357.9,-3014031.4,-204726.33,-944222.72,-948223.96}; -ST(0.083292987,0.24598228,0,0.085145188,0.25032735,0,0.07921504,0.25033934,0){542685.82,448997.25,606155.6,-1458992.1,-1228228.7,-1658203,1920780.7,1682589.8,2271843.6,-1784182,-1691886.1,-2284831,1091638.2,1253443,1693484.6}; -ST(0.077364239,0.048764008,0,0.083998423,0.049627851,0,0.080938662,0.054906318,0){2450679,1806853.8,2097661.4,1825420.5,1329741.5,1423084,734405.59,501474.01,290856.94,-544039.45,-459273.5,-934922.56,-1683943.8,-1299103.8,-1860365.1}; -ST(0,0.25714286,0,0.0071908097,0.26035264,0,0,0.26428571,0){0,179155.76,0,0,-507033.49,0,0,748779.14,0,0,-863311.12,0,0,830950.48,0}; -ST(0.059437672,0.2400817,0,0.061408089,0.24582042,0,0.054957014,0.24657048,0){1145348.7,1017142.7,1058545,-2999714,-2732695.2,-2852831,3711340.5,3591948.1,3777171.8,-3009146,-3325647.6,-3549694.2,1160252.2,2017029.8,2239441.1}; -ST(0.052494391,0.065958781,0,0.059054943,0.066788508,0,0.054876921,0.07294965,0){3640248,3499189.3,3558755.8,1971511.2,1856149.2,1580988.4,-601016.65,-658492.2,-1275447.3,-2898090,-2864039.1,-3423192.1,-3866942,-3725081.1,-3669097.1}; -ST(0.054876921,0.07294965,0,0.059054943,0.066788508,0,0.061098586,0.072147464,0){3558755.8,3499189.3,3389933,1580988.4,1856149.2,1545196.6,-1275447.3,-658492.2,-1140417.3,-3423192.1,-2864039.1,-3205469.9,-3669097.1,-3725081.1,-3526423.9}; -ST(0.1,0.14285714,0,0.093938974,0.13899,0,0.1,0.13571429,0){0,548364.78,0,0,-422206.84,0,0,-645591.08,0,0,273728.87,0,0,708600.91,0}; -ST(0.030623168,0.1713445,0,0.025851591,0.17077962,0,0.029380008,0.16405835,0){1985985.4,1763476.8,2021292.5,-2866418.8,-2524912.6,-2614335.2,-715248.18,-673288.62,-1254306.4,3183566.3,2815714.9,2982541.3,-696442.05,-542697.73,378860.61}; -ST(0.0064812773,0.046734878,0,0.013132659,0.04767246,0,0.0094132111,0.052421332,0){761350.4,1507774.2,1088603.4,582610.88,1139737.5,768702.62,267082.8,493500.09,222919.17,-111174.21,-273193.01,-388347.22,-463416.67,-973395.4,-885762.83}; -ST(0.011573719,0.041901165,0,0.013132659,0.04767246,0,0.0064812773,0.046734878,0){1347025.1,1507774.2,761350.4,1091815.8,1139737.5,582610.88,629744.45,493500.09,267082.8,48353.226,-273193.01,-111174.21,-542301.86,-973395.4,-463416.67}; -ST(0.092168655,0.23668616,0,0.095706332,0.23121352,0,0.1,0.23571429,0){307607.26,183910.78,0,-792496.69,-460364.34,0,941630.33,508106.39,0,-691810.02,-303408.65,0,148523.72,-52245.513,0}; -ST(0.048791783,0.28884593,0,0.043131118,0.28864457,0,0.045044357,0.28188841,0){226341.07,225252.57,362990.51,-675936.71,-672574.82,-1075960.6,1116322.7,1110400.5,1750378.7,-1541505,-1532552.2,-2362097.1,1945474.1,1932837.8,2889034}; -ST(0.045044357,0.28188841,0,0.043131118,0.28864457,0,0.036602132,0.28491153,0){362990.51,225252.57,279518.56,-1075960.6,-672574.82,-831596.18,1750378.7,1110400.5,1362985.6,-2362097.1,-1532552.2,-1860498.2,2889034,1932837.8,2311728.5}; -ST(0.071449289,0.19423207,0,0.064671223,0.19505087,0,0.06771074,0.1881525,0){1594804.6,1815232.4,1821405.7,-3019964.8,-3465163,-3238423,1103926.4,1334352.3,698008.36,2033518.7,2252470.6,2695511.5,-2921575.1,-3382100.5,-2795478.4}; -ST(0.06771074,0.1881525,0,0.064671223,0.19505087,0,0.06137482,0.19024807,0){1821405.7,1815232.4,1976038.9,-3238423,-3465163,-3592882,698008.36,1334352.3,963745.22,2695511.5,2252470.6,2804392.5,-2795478.4,-3382100.5,-3258719.1}; -ST(0.051703203,0.27754162,0,0.051519181,0.28417908,0,0.045044357,0.28188841,0){454636.43,320732.11,362990.51,-1338881.7,-953415.16,-1075960.6,2149437.1,1560004.1,1750378.7,-2841702,-2123899.5,-2362097.1,3377384.9,2629434.9,2889034}; -ST(0.045044357,0.28188841,0,0.051519181,0.28417908,0,0.048791783,0.28884593,0){362990.51,320732.11,226341.07,-1075960.6,-953415.16,-675936.71,1750378.7,1560004.1,1116322.7,-2362097.1,-2123899.5,-1541505,2889034,2629434.9,1945474.1}; -ST(0.066925078,0.074981916,0,0.064846874,0.068845861,0,0.072323403,0.067507008,0){3090390.8,3243292.3,2781512.1,1280900.5,1629296.1,1448400.9,-1278621.5,-795531.06,-578922.09,-3089611.2,-2824516.6,-2328912.3,-3091904.4,-3448034.5,-2963263.7}; -ST(0.017861336,0.10270337,0,0.013714026,0.097839388,0,0.019165757,0.095107709,0){1773538.4,1412613.2,1930971.9,-87655.931,55008.627,168744.63,-1856823.6,-1355500.2,-1747493.7,-1677437.3,-1463354,-2069009.1,261812.45,-165174.7,-502664.26}; -ST(0.072126291,0.10515927,0,0.076969725,0.10634022,0,0.074105201,0.11070107,0){2539730.3,2181001.1,2359475.3,-241283.81,-255488.75,-471755.94,-2758172.2,-2406546.5,-2736894.8,-2254933.2,-1869163.7,-1717960.7,717337.89,756176.24,1362139.4}; -ST(0.077318805,0.23627719,0,0.078142774,0.24370973,0,0.072908259,0.24139656,0){830868.27,714639.7,881474.92,-2136157.9,-1902709.3,-2322734,2525048.7,2448578.4,2916335.3,-1830714.2,-2167997.3,-2445637.4,350702.19,1155455.3,1082242}; -ST(0,0.17857143,0,0.0062925762,0.18063125,0,0,0.18571429,0){0,445914.92,0,0,-727143.63,0,0,12632.594,0,0,719304.1,0,0,-466469.22,0}; -ST(0.045894811,0.13135905,0,0.044512931,0.13802764,0,0.038217426,0.13599196,0){2973475.7,2867370.6,2738753.8,-1819976.4,-2150242,-1938161,-3679581.9,-3405187.4,-3305386.1,392676.16,1298632.3,972060.89,3832095.1,3729885,3589652.3}; -ST(0.028198926,0.28535727,0,0.0220603,0.28602893,0,0.023483408,0.28013687,0){230200.16,181204.07,270985.88,-685197.76,-539738.59,-801278.39,1124120.6,886739.53,1297043.7,-1536674.3,-1214791.9,-1736920.8,1912913.1,1516611.7,2101746.5}; -ST(0.053497526,0.1329974,0,0.049213686,0.13705186,0,0.045894811,0.13135905,0){2959143.9,2922689.8,2973475.7,-1911000.9,-2132523.3,-1819976.4,-3636096,-3499251.9,-3679581.9,623103.97,1186505.2,392676.16,3857035.6,3819996.4,3832095.1}; -ST(0.060819012,0.031697917,0,0.054261983,0.029107824,0,0.057707972,0.025075094,0){3608360,3801269,3734947.8,3214477.8,3450822.2,3478918.2,2469695.4,2782228.4,2984396.6,1455299.1,1857139.4,2285289.9,281702.17,760852.59,1429238.8}; -ST(0.038217426,0.13599196,0,0.033010101,0.13109378,0,0.038464606,0.12667013,0){2738753.8,2584208,2859316.3,-1938161,-1567613,-1476046.2,-3305386.1,-3200932.4,-3573486.5,972060.89,308418.11,-252868.56,3589652.3,3322264.5,3451249.3}; -ST(0.07180958,0.22984275,0,0.070607657,0.23670872,0,0.064373335,0.2338171,0){1079159.6,1007105.3,1185902.3,-2680718.2,-2594870.8,-3010536.1,2899261.6,3083897.2,3446119.8,-1622013.4,-2267120.1,-2291596.2,-492395.98,490193.02,79206.699}; -ST(0.09308158,0.15403623,0,0.088623123,0.15812222,0,0.084604507,0.15255901,0){579061.91,918302.92,1258841.2,-628036.95,-1074338,-1326319,-525997.02,-735787.48,-1187789.9,672596.25,1199414.9,1390056.3,469080.04,531983.03,1113216.6}; -ST(0.031105381,0.06529626,0,0.027058874,0.069011929,0,0.025221599,0.062165695,0){3030579.1,2727323.5,2618029.3,1667989.8,1363815.9,1547191.2,-444570.51,-681543.48,-156575.4,-2357289.6,-2386220.5,-1796512.5,-3210321.2,-2898415.6,-2702051.5}; -ST(0,0.15,0,0.0056981356,0.15371602,0,0,0.15714286,0){0,478995.44,0,0,-516269.88,0,0,-438816.38,0,0,550400.04,0,0,395913.98,0}; -ST(0.040431855,0.24188745,0,0.033139613,0.24047735,0,0.037546984,0.23452457,0){1110505,1026889.2,1205921.7,-2932804,-2694450.7,-3072707.6,3702149.5,3348643.4,3550700.1,-3142324.5,-2743423.6,-2423829.8,1453973.2,1106136.5,201013.93}; -ST(0.077364239,0.048764008,0,0.073604017,0.054819307,0,0.06961584,0.048915995,0){2450679,2744584.6,3063466,1825420.5,1864679.8,2277085.6,734405.59,386939.94,906160.93,-544039.45,-1214908.7,-697426.19,-1683943.8,-2427603.9,-2122325.6}; -ST(0.037546984,0.23452457,0,0.033139613,0.24047735,0,0.030075176,0.23324008,0){1205921.7,1026889.2,1077047.3,-3072707.6,-2694450.7,-2725827,3550700.1,3348643.4,3095770.8,-2423829.8,-2743423.6,-2013325.9,201013.93,1106136.5,-13872.597}; -ST(0.03690243,0.09394169,0,0.039702853,0.10111678,0,0.032036001,0.10024616,0){3135041.5,3175586.8,2837469.6,337961.95,-64516.934,-12660.65,-2760700,-3238866.3,-2850146.6,-3396384.7,-3108635.2,-2824890.6,-1002139.6,193445.51,37524.098}; -ST(0.054692531,0.17439284,0,0.060859952,0.17787963,0,0.055202425,0.1814475,0){2346407.8,2182203,2227021.2,-3532168.6,-3438395.7,-3667462.5,-561454.61,-202892.1,145084.74,3816051.1,3555311.4,3573754.5,-1367177.6,-1844119.8,-2457046.3}; -ST(0.060825265,0.17090728,0,0.060859952,0.17787963,0,0.054692531,0.17439284,0){2288734.2,2182203,2346407.8,-3282960.5,-3438395.7,-3532168.6,-862639.89,-202892.1,-561454.61,3657845.3,3555311.4,3816051.1,-726586.11,-1844119.8,-1367177.6}; -ST(0.092520768,0.26920591,0,0.095069321,0.27540052,0,0.089232651,0.27618677,0){145042.72,76899.446,160151.6,-420173.4,-225624.71,-470555.02,651988.34,359465.9,751874.95,-816598.86,-469594.27,-986723.61,896908.09,548580.83,1160401.4}; -ST(0.1,0.27142857,0,0.095069321,0.27540052,0,0.092520768,0.26920591,0){0,76899.446,145042.72,0,-225624.71,-420173.4,0,359465.9,651988.34,0,-469594.27,-816598.86,0,548580.83,896908.09}; -ST(0.092450683,0.030760689,0,0.095041081,0.024587994,0,0.1,0.028571429,0){900007.85,597113.29,0,807431.66,557751.32,0,631804.95,481620.22,0,391202.83,373740.48,0,110124.82,241099.33,0}; -ST(0.089183466,0.023798504,0,0.095041081,0.024587994,0,0.092450683,0.030760689,0){1283383.3,597113.29,900007.85,1204105.7,557751.32,807431.66,1050439.6,481620.22,631804.95,831874.08,373740.48,391202.83,561630.79,241099.33,110124.82}; -ST(0.041643161,0.17482395,0,0.034648589,0.17585937,0,0.036146522,0.16944297,0){2284160.6,2080615.7,2222447.1,-3458410.7,-3193762.3,-3121229.8,-506290.81,-371953.81,-960241.74,3718851.8,3392886,3509731.4,-1405815.9,-1443588.4,-459324.98}; -ST(0.1,0.25,0,0.095492809,0.25375881,0,0.095090425,0.2489538,0){0,131307.15,157454.16,0,-363726.6,-428416.46,0,512510.07,579817.55,0,-543451.99,-569427.53,0,449348.78,400020.01}; -ST(0.094913401,0.051076335,0,0.095360834,0.0462161,0,0.1,0.05,0){595503.05,547145.45,0,429138.45,421466.87,0,142901.48,198977.54,0,-183223.65,-69217.008,0,-458373.75,-321602.09,0}; -ST(0.068707287,0.030314019,0,0.067616069,0.037109229,0,0.060819012,0.031697917,0){3188897.7,3239242.7,3608360,2870259.7,2756202.5,3214477.8,2264806.3,1862139.4,2469695.4,1433032.7,690369.93,1455299.1,457746.25,-584563.48,281702.17}; -ST(0.061631884,0.26868773,0,0.068237016,0.26229006,0,0.069536278,0.26943087,0){591535.29,639705.29,505602.11,-1711593.4,-1820649,-1465439,2649353.2,2721368.6,2276404,-3304968.8,-3203243.1,-2856108.7,3608394.3,3191912.1,3145421.5}; -ST(0.057142857,0,0,0.051745598,0.0053231545,0,0.05,0,0){3783317.5,3873250.9,3880596.9,3783357,3861228.9,3880622.4,3783457.6,3837214.6,3880662.8,3783701.2,3801308.2,3880737.9,3783873.9,3753417.7,3880625.6}; -ST(0.05,0.3,0,0.051526128,0.29458598,0,0.057142857,0.3,0){0,109871.78,0,0,-329256.34,0,0,547568.39,0,0,-764098.34,0,0,977975.34,0}; -ST(0.1,0.064285714,0,0.095867013,0.068756454,0,0.09230899,0.063522919,0){0,470210.65,877619.52,0,236792.42,503392.8,0,-114175.46,-85524.836,0,-408471.99,-638068.15,0,-500215.61,-918939.46}; -ST(0.039157325,0.25334591,0,0.033025927,0.25326882,0,0.036308441,0.24745658,0){884627.38,809560.38,958174.94,-2446896,-2238649.8,-2591684.5,3436661.2,3142273.3,3460190.4,-3622356.9,-3308331.9,-3307339.6,2960330.2,2697705.3,2177878.8}; -ST(0.030440206,0.150204,0,0.033990129,0.14330646,0,0.037897724,0.149701,0){2239650.6,2486957.5,2552043.8,-2249230.7,-2138608.5,-2536068.8,-2230054.7,-2786553.8,-2567975.2,2258843.4,1748365.6,2520076,2220211.9,3031412.6,2583694.6}; -ST(0.025130011,0.29009115,0,0.0220603,0.28602893,0,0.028198926,0.28535727,0){142877.47,181204.07,230200.16,-427099.39,-539738.59,-685197.76,706741.94,886739.53,1124120.6,-978805.55,-1214791.9,-1536674.3,1240164.3,1516611.7,1912913.1}; -ST(0.013428016,0.091778472,0,0.013714026,0.097839388,0,0.0071591483,0.096788703,0){1408980.1,1412613.2,756711.76,204626.15,55008.627,43634.951,-1174648.8,-1355500.2,-710572.63,-1549888.7,-1463354,-795194.2,-600683.83,-165174.7,-130859.45}; -ST(0.0071591483,0.096788703,0,0.013714026,0.097839388,0,0.010955873,0.10281868,0){756711.76,1412613.2,1124212.8,43634.951,55008.627,-57954.543,-710572.63,-1355500.2,-1179275.3,-795194.2,-1463354,-1060620.9,-130859.45,-165174.7,173274.75}; -ST(0.037897724,0.149701,0,0.033990129,0.14330646,0,0.041319833,0.14315875,0){2552043.8,2486957.5,2735557.7,-2536068.8,-2138608.5,-2343944,-2567975.2,-2786553.8,-3071175.4,2520076,1748365.6,1904337.3,2583694.6,3031412.6,3343927.4}; -ST(0.035858843,0.031497608,0,0.030602087,0.036163623,0,0.028359285,0.029784535,0){3456371.8,3125169.1,2981166.2,3083741.5,2682310.4,2693525.9,2378649.5,1859340.6,2145980.7,1417116.3,772883.67,1391347.7,302618.73,-423255.99,502245.34}; -ST(0.026971271,0.22659033,0,0.029518097,0.21985532,0,0.034969012,0.22634925,0){1090633.5,1264894.2,1299939.6,-2658504.1,-2954793.2,-3164156.1,2731189,2682751.8,3237729.2,-1267784.1,-629411.95,-1478956,-909068.56,-1842177.8,-1117524.9}; -ST(0.034969012,0.22634925,0,0.029518097,0.21985532,0,0.036912897,0.21765752,0){1299939.6,1264894.2,1486590.9,-3164156.1,-2954793.2,-3421295.1,3237729.2,2682751.8,2965983.4,-1478956,-629411.95,-438566.7,-1117524.9,-1842177.8,-2395869.1}; -ST(0.051167355,0.022914381,0,0.052049192,0.01582547,0,0.057612168,0.01845715,0){3850137.8,3859264.8,3752599.8,3629520.4,3753529.9,3612875.5,3200919.1,3544947.6,3338613.5,2588908.3,3239251.6,2940029.2,1828396.4,2844641.6,2431782.4}; -ST(0.09071018,0.22887426,0,0.095706332,0.23121352,0,0.092168655,0.23668616,0){406264.77,183910.78,307607.26,-1003622.2,-460364.34,-792496.69,1069446.3,508106.39,941630.33,-568907.82,-303408.65,-691810.02,-233040.27,-52245.513,148523.72}; -ST(0.027903545,0.087518505,0,0.024499807,0.092422798,0,0.020473685,0.087577432,0){2674848,2390452.1,2087024.2,580994.77,320672.29,451292.51,-1967676.8,-2026771.7,-1538224.3,-2976106,-2619357.9,-2322280.1,-1655065.1,-944222.72,-1286407.6}; -ST(0.036146522,0.16944297,0,0.034648589,0.17585937,0,0.030623168,0.1713445,0){2222447.1,2080615.7,1985985.4,-3121229.8,-3193762.3,-2866418.8,-960241.74,-371953.81,-715248.18,3509731.4,3392886,3183566.3,-459324.98,-1443588.4,-696442.05}; -ST(0.027249449,0.18607819,0,0.034128539,0.18892309,0,0.029690249,0.19362013,0){1646413.8,1872288.6,1647856.1,-2861109.6,-3356683.8,-3101495.4,464444.42,788949.65,1088093.1,2518610.9,2731311.2,2141745.7,-2323177.4,-2954777.5,-2977851}; -ST(0,0.22142857,0,0.0069979116,0.22643766,0,0,0.22857143,0){0,317964.48,0,0,-774386.26,0,0,793599.18,0,0,-364658.79,0,0,-270536.88,0}; -ST(0.059551151,0.20970619,0,0.053910411,0.21448753,0,0.053221516,0.20704838,0){1688112.8,1667429.4,1805672.4,-3664209.4,-3752161.8,-3837129.3,2601193.1,3023771,2511247.5,619333.89,-28239.212,1011998.4,-3326584.6,-2988983.1,-3650194.7}; -ST(0.053221516,0.20704838,0,0.053910411,0.21448753,0,0.049232245,0.21047418,0){1805672.4,1667429.4,1752658.6,-3837129.3,-3752161.8,-3827070.5,2511247.5,3023771,2777012.8,1011998.4,-28239.212,540242.46,-3650194.7,-2988983.1,-3416565.4}; -ST(0.024008584,0.022367291,0,0.022427218,0.014872357,0,0.029163144,0.015558324,0){2639060.6,2505875.7,3068207,2494948.4,2445229.8,2986953.6,2214593.6,2325397.7,2826596.5,1813324.4,2149288.4,2591406.1,1312931.3,1920956.8,2287504.7}; -ST(0.029163144,0.015558324,0,0.022427218,0.014872357,0,0.025468185,0.010276157,0){3068207,2505875.7,2780034,2986953.6,2445229.8,2747892,2826596.5,2325397.7,2683968.5,2591406.1,2149288.4,2589008.8,2287504.7,1920956.8,2463902.9}; -ST(0.01788586,0.12850833,0,0.012365279,0.12660144,0,0.017763535,0.12074209,0){1616906.9,1158576.2,1657769.5,-895214.81,-596487.84,-657738.05,-2016472.2,-1447959.2,-2054600.3,-4802.2192,-105993.81,-581651.26,2014144.7,1396357.8,1703675.4}; -ST(0.017763535,0.12074209,0,0.012365279,0.12660144,0,0.01093484,0.12117452,0){1657769.5,1158576.2,1052666.9,-657738.05,-596487.84,-426753.37,-2054600.3,-1447959.2,-1306415.4,-581651.26,-105993.81,-350052.21,1703675.4,1396357.8,1098212.1}; -ST(0.03163445,0.20120488,0,0.025476801,0.19755762,0,0.029690249,0.19362013,0){1608414.7,1423125.8,1647856.1,-3251875.6,-2782737.9,-3101495.4,1714266.6,1235431.1,1088093.1,1500504,1602470.1,2141745.7,-3248047,-2766638.2,-2977851}; -ST(0.09230899,0.063522919,0,0.095867013,0.068756454,0,0.09123018,0.070922096,0){877619.52,470210.65,983713.53,503392.8,236792.42,465586.72,-85524.836,-114175.46,-297764.17,-638068.15,-408471.99,-904277.98,-918939.46,-500215.61,-1034644.8}; -ST(0.0079950318,0.059686314,0,0.012193394,0.066188359,0,0.0062494098,0.068021592,0){917766.47,1364188,709501.16,570756.35,734639.92,364477.97,7912.4367,-233939.49,-157824.6,-557994.72,-1094586.7,-603457.47,-913265.38,-1450385,-756039.79}; -ST(0.050721192,0.10961634,0,0.05615957,0.1141762,0,0.051013063,0.11801667,0){3257974.6,3147681.4,3161388.4,-583831.78,-840990.83,-1083065.4,-3737290.3,-3764018.8,-3873486.3,-2483878.9,-1917372.9,-1463412.7,1698581.7,2358868.4,2911579}; -ST(0.051703203,0.27754162,0,0.045592054,0.27439642,0,0.049721881,0.27094787,0){454636.43,513714.39,588018.61,-1338881.7,-1504437.2,-1710042.9,2149437.1,2387679.2,2675009.8,-2841702,-3100344.3,-3394309,3377384.9,3591305.7,3801713.7}; -ST(0.024044461,0.20382537,0,0.021120118,0.21068669,0,0.015977634,0.20443356,0){1283805.9,1077357.5,895779.15,-2655634.7,-2356401.7,-1862602.8,1553893.8,1720167.1,1114548.4,995311.88,314292.11,659707.69,-2617892.2,-2093742.8,-1827076.9}; -ST(0.08682376,0.20181233,0,0.093164956,0.1980516,0,0.093706234,0.20596864,0){767576.83,420734.09,360320.46,-1560255.4,-826537.04,-758974.46,843726.65,376428.12,479351.87,688912.23,463603.83,228803.73,-1555436.8,-823893.15,-732939.79}; -ST(0.030075176,0.23324008,0,0.033139613,0.24047735,0,0.025350652,0.23917347,0){1077047.3,1026889.2,868665.73,-2725827,-2694450.7,-2265304,3095770.8,3348643.4,2773502.3,-2013325.9,-2743423.6,-2193941.8,-13872.597,1106136.5,753574.67}; -ST(0.032229878,0.047894836,0,0.035422008,0.053603109,0,0.028699663,0.054481756,0){3188476.9,3344502.1,2920693,2403076.1,2318078.8,1995520.8,1025710.6,580213.58,438210.61,-604377.64,-1335777.4,-1257984.1,-2086050.7,-2842327.2,-2556170.3}; -ST(0.038515413,0.047952704,0,0.035422008,0.053603109,0,0.032229878,0.047894836,0){3516906.1,3344502.1,3188476.9,2648581.9,2318078.8,2403076.1,1126309.3,580213.58,1025710.6,-674068.75,-1335777.4,-604377.64,-2308227.3,-2842327.2,-2086050.7}; -ST(0.0093450955,0.28843768,0,0.010662343,0.29482959,0,0.0045473776,0.2936365,0){67949.514,34537.041,18406.211,-202850.84,-103506.64,-55138.333,334776.34,172164.12,91630.552,-461793.67,-240303.04,-127724.83,581935.08,307518.14,162961.08}; -ST(0.0045481906,0.0063920675,0,0.010679145,0.0052482016,0,0.0093389246,0.011691623,0){552257.15,1277155.8,1120186.5,549810.55,1273289.3,1103410.3,544927.47,1265566.3,1070108.3,537633.65,1254019.7,1020788.4,527798.54,1238493.9,956114.18}; -ST(0.064285714,0,0,0.06203594,0.0060944193,0,0.057142857,0,0){3496327.6,3604620.2,3783317.5,3496358.5,3589956.2,3783357,3496415,3560685.5,3783457.6,3496523.2,3516960.1,3783701.2,3496472.9,3458793.9,3783873.9}; -ST(0.057142857,0.3,0,0.061805884,0.29356168,0,0.064285714,0.3,0){0,121923.05,0,0,-365207.83,0,0,606815.62,0,0,-845641.09,0,0,1080583.1,0}; -ST(0.070477538,0.15360968,0,0.064971856,0.15110456,0,0.069467767,0.146519,0){2153625.7,2431817,2287173.5,-2316413.6,-2488096.1,-2120501.9,-1978592.7,-2374265.3,-2441744.6,2466066.8,2543085,1942651.5,1792310.4,2315361.9,2583122}; -ST(0.048791783,0.28884593,0,0.051526128,0.29458598,0,0.045931579,0.29422002,0){226341.07,109871.78,116468.36,-675936.71,-329256.34,-348980.73,1116322.7,547568.39,580225.36,-1541505,-764098.34,-809364.6,1945474.1,977975.34,1035478}; -ST(0.046181733,0.0056701177,0,0.051745598,0.0053231545,0,0.049204373,0.010884263,0){3851009.3,3873250.9,3873084,3837454.5,3861228.9,3822842.7,3810385,3837214.6,3723003.5,3769920.5,3801308.2,3574883.8,3715901.2,3753417.7,3380124.5}; -ST(0.089230742,0.11966768,0,0.082946441,0.12207685,0,0.08466046,0.11619385,0){1043332.5,1589878.9,1475783,-391602.7,-673263.29,-452604.25,-1287980.7,-1978038.1,-1789662.1,-412950.99,-467139.5,-788262.21,1030099.2,1708498.9,1243195.1}; -ST(0.1,0.078571429,0,0.095795895,0.073622969,0,0.1,0.071428571,0){0,473503.74,0,0,205720.2,0,0,-178405.32,0,0,-461642.03,0,0,-483922.03,0}; -ST(0.017433092,0.042090914,0,0.022876349,0.043626948,0,0.019247887,0.048569646,0){1971771.3,2488553.5,2135187.8,1594855,1978130.3,1594654.5,913057.13,1061959.9,650408.09,56690.05,-72059.632,-458538.7,-810753.02,-1191549.5,-1451674.1}; -ST(0.060819012,0.031697917,0,0.067616069,0.037109229,0,0.060555575,0.040182349,0){3608360,3239242.7,3588260.7,3214477.8,2756202.5,2962222.2,2469695.4,1862139.4,1819353,1455299.1,690369.93,359025.67,281702.17,-584563.48,-1164330.1}; -ST(0.060672356,0.25950081,0,0.068237016,0.26229006,0,0.061631884,0.26868773,0){771273.27,639705.29,591535.29,-2177172.3,-1820649,-1711593.4,3197356.1,2721368.6,2649353.2,-3651078,-3203243.1,-3304968.8,3457676.3,3191912.1,3608394.3}; -ST(0.043027686,0.24899973,0,0.049037582,0.25027532,0,0.04563604,0.25694979,0){999522.33,998508.07,859240.08,-2720190.5,-2730849.8,-2406042.8,3683283.3,3739350.2,3472131.8,-3620573.8,-3756698.7,-3844488.4,2549278.8,2778087.3,3448330.3}; -ST(0.061098586,0.072147464,0,0.064846874,0.068845861,0,0.066925078,0.074981916,0){3389933,3243292.3,3090390.8,1545196.6,1629296.1,1280900.5,-1140417.3,-795531.06,-1278621.5,-3205469.9,-2824516.6,-3089611.2,-3526423.9,-3448034.5,-3091904.4}; -ST(0.051013063,0.11801667,0,0.05615957,0.1141762,0,0.057323957,0.1204315,0){3161388.4,3147681.4,3051716.5,-1083065.4,-840990.83,-1191883,-3873486.3,-3764018.8,-3778168.4,-1463412.7,-1917372.9,-1110713.1,2911579,2358868.4,3101303}; -ST(0.1,0.22857143,0,0.095652827,0.22622146,0,0.1,0.22142857,0){0,199039.37,0,0,-484109.58,0,0,494313.66,0,0,-223837.82,0,0,-173819.74,0}; -ST(0.1,0.19285714,0,0.095453592,0.18738967,0,0.1,0.18571429,0){0,307137.29,0,0,-541566.85,0,0,106216.39,0,0,460538.95,0,0,-458087.35,0}; -ST(0.049678492,0.18505966,0,0.048811039,0.17808485,0,0.055202425,0.1814475,0){2196886.7,2310715.6,2227021.2,-3774046.6,-3650410,-3667462.5,512508.07,-194330.82,145084.74,3406255.6,3763231.4,3573754.5,-2958276.7,-1987755.8,-2457046.3}; -ST(0.089437553,0.21298247,0,0.086709216,0.20730703,0,0.093706234,0.20596864,0){556322.48,734117.03,360320.46,-1238115.4,-1563285.8,-758974.46,961021.23,1031586.7,479351.87,60411.18,398134,228803.73,-1035404.3,-1481512.9,-732939.79}; -ST(0.093706234,0.20596864,0,0.086709216,0.20730703,0,0.08682376,0.20181233,0){360320.46,734117.03,767576.83,-758974.46,-1563285.8,-1560255.4,479351.87,1031586.7,843726.65,228803.73,398134,688912.23,-732939.79,-1481512.9,-1555436.8}; -ST(0.074105201,0.11070107,0,0.06715469,0.10983132,0,0.072126291,0.10515927,0){2359475.3,2794834,2539730.3,-471755.94,-512277.78,-241283.81,-2736894.8,-3213264.7,-2758172.2,-1717960.7,-2112070.8,-2254933.2,1362139.4,1488257.3,717337.89}; -ST(0.056292141,0.2827555,0,0.051519181,0.28417908,0,0.051703203,0.27754162,0){343081.75,320732.11,454636.43,-1018093.3,-953415.16,-1338881.7,1660020.8,1560004.1,2149437.1,-2248005.1,-2123899.5,-2841702,2762903.8,2629434.9,3377384.9}; -ST(0.055202425,0.1814475,0,0.048811039,0.17808485,0,0.054692531,0.17439284,0){2227021.2,2310715.6,2346407.8,-3667462.5,-3650410,-3532168.6,145084.74,-194330.82,-561454.61,3573754.5,3763231.4,3816051.1,-2457046.3,-1987755.8,-1367177.6}; -ST(0.046063037,0.016810165,0,0.043829005,0.011024747,0,0.049204373,0.010884263,0){3836060.2,3801549.1,3873084,3717529.2,3750937.1,3822842.7,3484126.2,3650381.9,3723003.5,3143090.2,3501249.8,3574883.8,2704667.4,3305260.3,3380124.5}; -ST(0.037071258,0.0642048,0,0.032659307,0.059686042,0,0.038435934,0.058364632,0){3365311.2,3158137.1,3459248.5,1900443.5,1964024.3,2206750.4,-391679.98,27282.242,155241.86,-2513388.8,-1919818.3,-1952496,-3541461.8,-3141270.1,-3353689.4}; -ST(0.011268327,0.1984065,0,0.005051806,0.19767546,0,0.0066871595,0.19241823,0){682302.12,313084.45,432113.5,-1344805.9,-612892.85,-803518.34,623458.07,273796.53,258472.73,739532.85,350786.74,581490.34,-1341727.7,-609909.8,-758588.26}; -ST(0.011197941,0.071439681,0,0.012549176,0.077039569,0,0.0060853536,0.074713803,0){1244724.5,1370920.5,681675.12,579995.21,525978.15,285253.65,-394493.66,-643140.23,-277070.48,-1158343.6,-1415881.7,-678306.76,-1303869.8,-1316306.1,-685312.86}; -ST(0.0060853536,0.074713803,0,0.012549176,0.077039569,0,0.0064539684,0.081629255,0){681675.12,1370920.5,711139.06,285253.65,525978.15,222377.16,-277070.48,-643140.23,-419239.47,-678306.76,-1415881.7,-772749.89,-685312.86,-1316306.1,-595288.06}; -ST(0.0910478,0.13167545,0,0.087905667,0.12517971,0,0.093823791,0.12410599,0){831136.87,1140990.9,595735.92,-514132.23,-554517.87,-276601.23,-1027305.8,-1425990.8,-743959.63,122313.64,-178453.87,-121937.8,1073956.7,1334087.8,678759.2}; -ST(0.087905667,0.12517971,0,0.082946441,0.12207685,0,0.089230742,0.11966768,0){1140990.9,1589878.9,1043332.5,-554517.87,-673263.29,-391602.7,-1425990.8,-1978038.1,-1287980.7,-178453.87,-467139.5,-412950.99,1334087.8,1708498.9,1030099.2}; -ST(0.0066871595,0.19241823,0,0.012931293,0.19295437,0,0.011268327,0.1984065,0){432113.5,815194.79,682302.12,-803518.34,-1524077.7,-1344805.9,258472.73,510133.92,623458.07,581490.34,1080471.8,739532.85,-758588.26,-1450076.4,-1341727.7}; -ST(0.05,0,0,0.046181733,0.0056701177,0,0.042857143,0,0){3880596.9,3851009.3,3783299.5,3880622.4,3837454.5,3783327.5,3880662.8,3810385,3783379.6,3880737.9,3769920.5,3783486.4,3880625.6,3715901.2,3783576.5}; -ST(0.042857143,0.3,0,0.045931579,0.29422002,0,0.05,0.3,0){0,116468.36,0,0,-348980.73,0,0,580225.36,0,0,-809364.6,0,0,1035478,0}; -ST(0.057323957,0.1204315,0,0.05615957,0.1141762,0,0.062195955,0.11505156,0){3051716.5,3147681.4,2965673.8,-1191883,-840990.83,-843057.19,-3778168.4,-3764018.8,-3569130.8,-1110713.1,-1917372.9,-1711501.2,3101303,2358868.4,2344130.4}; -ST(0.013428016,0.091778472,0,0.01318623,0.084416193,0,0.020473685,0.087577432,0){1408980.1,1411871.7,2087024.2,204626.15,378554.62,451292.51,-1174648.8,-931831.12,-1538224.3,-1549888.7,-1560266,-2322280.1,-600683.83,-1046999.7,-1286407.6}; -ST(0.030312881,0.27848596,0,0.028198926,0.28535727,0,0.023483408,0.28013687,0){355416.48,230200.16,270985.88,-1048284.8,-685197.76,-801278.39,1688178.9,1124120.6,1297043.7,-2242771,-1536674.3,-1736920.8,2683885.3,1912913.1,2101746.5}; -ST(0.0069613667,0.17349451,0,0.0062925762,0.18063125,0,0,0.17857143,0){517779.21,445914.92,0,-769992.03,-727143.63,0,-142713.64,12632.594,0,839532.94,719304.1,0,-266340.1,-466469.22,0}; -ST(0.046063037,0.016810165,0,0.052049192,0.01582547,0,0.051167355,0.022914381,0){3836060.2,3859264.8,3850137.8,3717529.2,3753529.9,3629520.4,3484126.2,3544947.6,3200919.1,3143090.2,3239251.6,2588908.3,2704667.4,2844641.6,1828396.4}; -ST(0.065931692,0.10408722,0,0.06715469,0.10983132,0,0.059543685,0.10776494,0){2911358.9,2794834,3132791.5,-218409.17,-512277.78,-451048.14,-3113407,-3213264.7,-3519016.9,-2661455,-2112070.8,-2561357.9,651464.78,1488257.3,1326599.2}; -ST(0.083190767,0.25723975,0,0.085145188,0.25032735,0,0.090077759,0.25268961,0){434158.6,448997.25,291813.61,-1216864.4,-1228228.7,-805257.31,1759626.8,1682589.8,1125037.4,-1955417.3,-1691886.1,-1174248.1,1765235.2,1253443,940920.06}; -ST(0.07921504,0.25033934,0,0.085145188,0.25032735,0,0.083190767,0.25723975,0){606155.6,448997.25,434158.6,-1658203,-1228228.7,-1216864.4,2271843.6,1682589.8,1759626.8,-2284831,-1691886.1,-1955417.3,1693484.6,1253443,1765235.2}; -ST(0.08974924,0.047235181,0,0.083998423,0.049627851,0,0.082493405,0.042375289,0){1190814.4,1806853.8,1978611.8,905328.07,1329741.5,1595319.9,402804.56,501474.01,902966.17,-196265.4,-459273.5,35643.43,-748421.11,-1299103.8,-838916.97}; -ST(0.082493405,0.042375289,0,0.083998423,0.049627851,0,0.077364239,0.048764008,0){1978611.8,1806853.8,2450679,1595319.9,1329741.5,1825420.5,902966.17,501474.01,734405.59,35643.43,-459273.5,-544039.45,-838916.97,-1299103.8,-1683943.8}; -ST(0.1,0.23571429,0,0.095706332,0.23121352,0,0.1,0.22857143,0){0,183910.78,0,0,-460364.34,0,0,508106.39,0,0,-303408.65,0,0,-52245.513,0}; -ST(0.055890502,0.18802963,0,0.061291474,0.18447479,0,0.06137482,0.19024807,0){2110328.4,2069396,1976038.9,-3747121.1,-3531333.7,-3592882,795966.68,425331.11,963745.22,3129878.5,3230965.1,2804392.5,-3224012.4,-2708277.6,-3258719.1}; -ST(0.049204373,0.010884263,0,0.052049192,0.01582547,0,0.046063037,0.016810165,0){3873084,3859264.8,3836060.2,3822842.7,3753529.9,3717529.2,3723003.5,3544947.6,3484126.2,3574883.8,3239251.6,3143090.2,3380124.5,2844641.6,2704667.4}; -ST(0.021428571,0.3,0,0.024877102,0.29495936,0,0.028571429,0.3,0){0,72135.52,0,0,-216205.93,0,0,359676.71,0,0,-502149.61,0,0,642973.44,0}; -ST(0.028571429,0,0,0.025051818,0.0051959301,0,0.021428571,0,0){3033980.1,2747435.6,2419501.9,3033983.4,2739316.7,2419561.9,3033988.7,2723095.2,2419679.8,3034024.4,2698832.3,2419876.4,3033982.5,2666496.7,2419989.4}; -ST(0.093922759,0.092262381,0,0.09416017,0.099511923,0,0.087331535,0.0958472,0){652083.63,613994.66,1318484.3,89312.894,5422.3845,98077.228,-550573,-608645.22,-1213131.9,-715327.2,-619557.01,-1401481.2,-262838.8,-16415.987,-292629.72}; -ST(0.01093484,0.12117452,0,0.012365279,0.12660144,0,0.0061411468,0.1246533,0){1052666.9,1158576.2,591118.91,-426753.37,-596487.84,-280990.71,-1306415.4,-1447959.2,-738586.84,-350052.21,-105993.81,-106527.54,1098212.1,1396357.8,682629.18}; -ST(0.0061411468,0.1246533,0,0.012365279,0.12660144,0,0.0072553778,0.13224921,0){591118.91,1158576.2,674958.82,-280990.71,-596487.84,-425463.67,-738586.84,-1447959.2,-832230.25,-106527.54,-105993.81,117822.57,682629.18,1396357.8,875622.71}; -ST(0.066803853,0.25459223,0,0.068237016,0.26229006,0,0.060672356,0.25950081,0){789541.66,639705.29,771273.27,-2193455.3,-1820649,-2177172.3,3110738.9,2721368.6,3197356.1,-3337877,-3203243.1,-3651078,2824240.3,3191912.1,3457676.3}; -ST(0.060555575,0.040182349,0,0.067616069,0.037109229,0,0.066401409,0.0434645,0){3588260.7,3239242.7,3289675.8,2962222.2,2756202.5,2619840.6,1819353,1862139.4,1416557.6,359025.67,690369.93,-75156.319,-1164330.1,-584563.48,-1551772}; -ST(0.016878531,0.18478654,0,0.021212478,0.18688263,0,0.017373248,0.19021363,0){1113458.1,1339179.6,1095255.9,-1906862.4,-2348119.2,-1990705.9,245299.96,429909.33,532263.7,1732097.5,2024227.8,1555631.8,-1479759.2,-1955356.8,-1804413.6}; -ST(0.021251228,0.18136297,0,0.021212478,0.18688263,0,0.016878531,0.18478654,0){1398279.8,1339179.6,1113458.1,-2300353.4,-2348119.2,-1906862.4,85724.805,429909.33,245299.96,2245163.6,2024227.8,1732097.5,-1534338.6,-1955356.8,-1479759.2}; -ST(0.029991713,0.27132489,0,0.025044032,0.27464897,0,0.023009638,0.26878949,0){469504.82,363665.57,417665.14,-1366503,-1065519.5,-1208783.5,2141236.7,1692735.8,1871958.7,-2724385.3,-2201379.5,-2337004.8,3063642.3,2555652.6,2554445.3}; -ST(0.023009638,0.26878949,0,0.025044032,0.27464897,0,0.018422519,0.27450763,0){417665.14,363665.57,282501.19,-1208783.5,-1065519.5,-827496.14,1871958.7,1692735.8,1313896,-2337004.8,-2201379.5,-1707268.8,2554445.3,2555652.6,1979556.1}; -ST(0.048866761,0.029559705,0,0.054261983,0.029107824,0,0.052748817,0.036292023,0){3831772.8,3801269,3796611.1,3467532.3,3450822.2,3254886.9,2773676.3,2782228.4,2248728.5,1816186,1857139.4,921690.78,685852.4,760852.59,-537197.11}; -ST(0.069025318,0.11622387,0,0.06715469,0.10983132,0,0.074105201,0.11070107,0){2631986.5,2794834,2359475.3,-808686.45,-512277.78,-471755.94,-3192250.9,-3213264.7,-2736894.8,-1402768.4,-2112070.8,-1717960.7,2220554.1,1488257.3,1362139.4}; -ST(0.036912897,0.21765752,0,0.042541479,0.22296234,0,0.034969012,0.22634925,0){1486590.9,1481591,1299939.6,-3421295.1,-3531706.6,-3164156.1,2965983.4,3405357.4,3237729.2,-438566.7,-1180392.3,-1478956,-2395869.1,-1772446.7,-1117524.9}; -ST(0.034969012,0.22634925,0,0.042541479,0.22296234,0,0.041402067,0.22952626,0){1299939.6,1481591,1348916.4,-3164156.1,-3531706.6,-3344816,3237729.2,3405357.4,3600200.4,-1478956,-1180392.3,-1982154,-1117524.9,-1772446.7,-667743.82}; -ST(0.036602132,0.28491153,0,0.028198926,0.28535727,0,0.030312881,0.27848596,0){279518.56,230200.16,355416.48,-831596.18,-685197.76,-1048284.8,1362985.6,1124120.6,1688178.9,-1860498.2,-1536674.3,-2242771,2311728.5,1912913.1,2683885.3}; -ST(0.072126291,0.10515927,0,0.06715469,0.10983132,0,0.065931692,0.10408722,0){2539730.3,2794834,2911358.9,-241283.81,-512277.78,-218409.17,-2758172.2,-3213264.7,-3113407,-2254933.2,-2112070.8,-2661455,717337.89,1488257.3,651464.78}; -ST(0.049165273,0.076760106,0,0.047469022,0.070467195,0,0.054876921,0.07294965,0){3570137.5,3608010.8,3558755.8,1384898,1730907.5,1580988.4,-1648055.9,-1046792,-1275447.3,-3672308.6,-3280034.9,-3423192.1,-3449021.3,-3807136.9,-3669097.1}; -ST(0.085115353,0.26563346,0,0.086077973,0.27164165,0,0.081004963,0.27070547,0){313056.52,243157.03,333174.81,-899063.8,-708191.99,-968418.7,1369900.4,1111255.9,1513258.3,-1665255.4,-1417072.6,-1916833.2,1747205.8,1598582.9,2141327.9}; -ST(0.080699945,0.029142305,0,0.085916752,0.02828,0,0.084917502,0.034253561,0){2185639.9,1643257.2,1742331.8,1983669.2,1500211.7,1520580.8,1598386.1,1226559.7,1105294,1065401.8,846114.35,549324.68,433818.71,391827.49,-76880.401}; -ST(0.016939848,0.22904958,0,0.012706169,0.22573828,0,0.017207343,0.22323305,0){714788.59,571782.3,781289.63,-1767596.2,-1386624.6,-1865590.4,1888698.3,1404300.2,1807835.2,-1014237.8,-614658.98,-643322.1,-395054.79,-528535.98,-915362.92}; -ST(0.011838853,0.2301677,0,0.012706169,0.22573828,0,0.016939848,0.22904958,0){504229.49,571782.3,714788.59,-1254859.2,-1386624.6,-1767596.2,1363834.1,1404300.2,1888698.3,-775392.51,-614658.98,-1014237.8,-209768.04,-528535.98,-395054.79}; -ST(0.018343869,0.21720619,0,0.021120118,0.21068669,0,0.02463475,0.21609565,0){888277.19,1077357.5,1153636.1,-2037897.4,-2356401.7,-2626116.1,1749211,1720167.1,2198315,-225952.88,314292.11,-179791.92,-1457259.1,-2093742.8,-1969098.8}; -ST(0.054237851,0.14012792,0,0.049213686,0.13705186,0,0.053497526,0.1329974,0){2856617.8,2922689.8,2959143.9,-2267029,-2132523.3,-1911000.9,-3324577.4,-3499251.9,-3636096,1580891.3,1186505.2,623103.97,3650971.5,3819996.4,3857035.6}; -ST(0.023009638,0.26878949,0,0.027951851,0.26533243,0,0.029991713,0.27132489,0){417665.14,539100.43,469504.82,-1208783.5,-1547025.6,-1366503,1871958.7,2353298.6,2141236.7,-2337004.8,-2852826.8,-2724385.3,2554445.3,2980285,3063642.3}; -ST(0.1,0.071428571,0,0.095867013,0.068756454,0,0.1,0.064285714,0){0,470210.65,0,0,236792.42,0,0,-114175.46,0,0,-408471.99,0,0,-500215.61,0}; -ST(0.039366597,0.19088868,0,0.038852293,0.18542603,0,0.044234359,0.18859393,0){1982365.2,2057873,2102462.5,-3628592.6,-3549951.2,-3756018.8,1030950.1,516044.6,851571.98,2772526.5,3175871.5,3086402.5,-3333638.5,-2819104.7,-3279385.1}; -ST(0.044234359,0.18859393,0,0.038852293,0.18542603,0,0.043573225,0.18196099,0){2102462.5,2057873,2202933.2,-3756018.8,-3549951.2,-3650165.7,851571.98,516044.6,195066.32,3086402.5,3175871.5,3522129.2,-3279385.1,-2819104.7,-2509350}; -ST(0.010546892,0.2198034,0,0.012706169,0.22573828,0,0.0069979116,0.22643766,0){514716.79,571782.3,317964.48,-1201974.2,-1386624.6,-774386.26,1090194.6,1404300.2,793599.18,-253690.09,-614658.98,-364658.79,-751659.26,-528535.98,-270536.88}; -ST(0.0069979116,0.22643766,0,0.012706169,0.22573828,0,0.011838853,0.2301677,0){317964.48,571782.3,504229.49,-774386.26,-1386624.6,-1254859.2,793599.18,1404300.2,1363834.1,-364658.79,-614658.98,-775392.51,-270536.88,-528535.98,-209768.04}; -ST(0.078571429,0,0,0.074656208,0.0053403125,0,0.071428571,0,0){2419478.6,2772385.5,3033974.4,2419535.2,2763721.5,3033978.9,2419645.1,2746414.1,3033982.8,2419827.2,2720533.7,3034008.5,2420024.4,2685936.9,3033714}; -ST(0,0.1,0,0.0052460498,0.10332732,0,0,0.10714286,0){0,545715.18,0,0,-33256.292,0,0,-576983.54,0,0,-508602.25,0,0,99155.047,0}; -ST(0.071428571,0.3,0,0.074657371,0.29452352,0,0.078571429,0.3,0){0,79525.554,0,0,-238312.39,0,0,396309.36,0,0,-552992.95,0,0,707611.71,0}; -ST(0.1,0.16428571,0,0.093710586,0.16080643,0,0.1,0.15714286,0){0,507346.27,0,0,-621948.04,0,0,-366919.85,0,0,704920.6,0,0,207593.47,0}; -ST(0.042113175,0.053290167,0,0.035422008,0.053603109,0,0.038515413,0.047952704,0){3616583.4,3344502.1,3516906.1,2519252.9,2318078.8,2648581.9,657513.67,580213.58,1126309.3,-1403801.4,-1335777.4,-674068.75,-3039615.4,-2842327.2,-2308227.3}; -ST(0.038435934,0.058364632,0,0.035422008,0.053603109,0,0.042113175,0.053290167,0){3459248.5,3344502.1,3616583.4,2206750.4,2318078.8,2519252.9,155241.86,580213.58,657513.67,-1952496,-1335777.4,-1403801.4,-3353689.4,-2842327.2,-3039615.4}; -ST(0.03345202,0.18222482,0,0.034128539,0.18892309,0,0.027249449,0.18607819,0){1947746.5,1872288.6,1646413.8,-3237509.5,-3356683.8,-2861109.6,196057.01,788949.65,464444.42,3107788.7,2731311.2,2518610.9,-2254322.8,-2954777.5,-2323177.4}; -ST(0.1,0.17857143,0,0.095837038,0.182565,0,0.093873231,0.17693503,0){0,291932.87,445896.9,0,-487211.17,-694096.79,0,33971.767,-59504.029,0,464480.32,727141.13,0,-344762.9,-345394.37}; -ST(0.031105381,0.06529626,0,0.032659307,0.059686042,0,0.037071258,0.0642048,0){3030579.1,3158137.1,3365311.2,1667989.8,1964024.3,1900443.5,-444570.51,27282.242,-391679.98,-2357289.6,-1919818.3,-2513388.8,-3210321.2,-3141270.1,-3541461.8}; -ST(0.08415119,0.061061125,0,0.085646934,0.067722415,0,0.079822506,0.065677674,0){1759442.9,1585902.9,2163855.5,1064240.3,821166.94,1180001.4,-51487.645,-339583.13,-340376.77,-1146904.2,-1336670.3,-1706002.2,-1789550.6,-1689538.4,-2296197.5}; -ST(0.079822506,0.065677674,0,0.085646934,0.067722415,0,0.080160084,0.071577727,0){2163855.5,1585902.9,2107851.9,1180001.4,821166.94,977984.82,-340376.77,-339583.13,-676141.96,-1706002.2,-1336670.3,-1967920.1,-2296197.5,-1689538.4,-2205119.3}; -ST(0.067098511,0.16826118,0,0.066399282,0.17458324,0,0.060825265,0.17090728,0){2121688.2,2061554.2,2288734.2,-2928224.5,-3111294.6,-3282960.5,-1008555.7,-477290.81,-862639.89,3311710.7,3354405.6,3657845.3,-250662.47,-1230983.2,-726586.11}; -ST(0.060859952,0.17787963,0,0.061291474,0.18447479,0,0.055202425,0.1814475,0){2182203,2069396,2227021.2,-3438395.7,-3531333.7,-3667462.5,-202892.1,425331.11,145084.74,3555311.4,3230965.1,3573754.5,-1844119.8,-2708277.6,-2457046.3}; -ST(0.1,0.12142857,0,0.094962535,0.11849101,0,0.1,0.11428571,0){0,497557.04,0,0,-175139.73,0,0,-611084.48,0,0,-220851.73,0,0,467971.5,0}; -ST(0.091758141,0.11296708,0,0.094962535,0.11849101,0,0.089230742,0.11966768,0){824791.32,497557.04,1043332.5,-201020.76,-175139.73,-391602.7,-976886.6,-611084.48,-1287980.7,-537824.26,-220851.73,-412950.99,570097.26,467971.5,1030099.2}; -ST(0.1,0.11428571,0,0.094962535,0.11849101,0,0.091758141,0.11296708,0){0,497557.04,824791.32,0,-175139.73,-201020.76,0,-611084.48,-976886.6,0,-220851.73,-537824.26,0,467971.5,570097.26}; -ST(0,0.24285714,0,0.0043813653,0.24702694,0,0,0.25,0){0,145794.38,0,0,-393661.32,0,0,523477.05,0,0,-496310.62,0,0,320224.07,0}; -ST(0,0.05,0,0.004777904,0.053197076,0,0,0.057142857,0){0,557925.04,0,0,389224.92,0,0,102822.82,0,0,-214698.3,0,0,-467537.22,0}; -ST(0.047918899,0.14257657,0,0.049213686,0.13705186,0,0.054237851,0.14012792,0){2842478.3,2922689.8,2856617.8,-2400971.6,-2132523.3,-2267029,-3215455,-3499251.9,-3324577.4,1901551.7,1186505.2,1580891.3,3510918.5,3819996.4,3650971.5}; -ST(0.049678492,0.18505966,0,0.044234359,0.18859393,0,0.043573225,0.18196099,0){2196886.7,2102462.5,2202933.2,-3774046.6,-3756018.8,-3650165.7,512508.07,851571.98,195066.32,3406255.6,3086402.5,3522129.2,-2958276.7,-3279385.1,-2509350}; -ST(0.050398693,0.1921099,0,0.044234359,0.18859393,0,0.049678492,0.18505966,0){2077292.2,2102462.5,2196886.7,-3850553.1,-3756018.8,-3774046.6,1209682,851571.98,512508.07,2818064.5,3086402.5,3406255.6,-3615771.1,-3279385.1,-2958276.7}; -ST(0.055202425,0.1814475,0,0.055890502,0.18802963,0,0.049678492,0.18505966,0){2227021.2,2110328.4,2196886.7,-3667462.5,-3747121.1,-3774046.6,145084.74,795966.68,512508.07,3573754.5,3129878.5,3406255.6,-2457046.3,-3224012.4,-2958276.7}; -ST(0.1,0.27857143,0,0.095069321,0.27540052,0,0.1,0.27142857,0){0,76899.446,0,0,-225624.71,0,0,359465.9,0,0,-469594.27,0,0,548580.83,0}; -ST(0.066600159,0.24211306,0,0.061408089,0.24582042,0,0.059437672,0.2400817,0){1004296.2,1017142.7,1145348.7,-2655015,-2732695.2,-2999714,3359675.2,3591948.1,3711340.5,-2867211.3,-3325647.6,-3009146,1352854.8,2017029.8,1160252.2}; -ST(0.065478411,0.24860928,0,0.061408089,0.24582042,0,0.066600159,0.24211306,0){912058.17,1017142.7,1004296.2,-2478342.9,-2732695.2,-2655015,3344041.2,3591948.1,3359675.2,-3264436.9,-3325647.6,-2867211.3,2261773.6,2017029.8,1352854.8}; -ST(0.1,0.028571429,0,0.095041081,0.024587994,0,0.1,0.021428571,0){0,597113.29,0,0,557751.32,0,0,481620.22,0,0,373740.48,0,0,241099.33,0}; -ST(0.019165757,0.095107709,0,0.024499807,0.092422798,0,0.024938414,0.098415267,0){1930971.9,2390452.1,2383058.5,168744.63,320672.29,68195.72,-1747493.7,-2026771.7,-2312962.3,-2069009.1,-2619357.9,-2447461.4,-502664.26,-944222.72,-204726.33}; -ST(0.041643161,0.17482395,0,0.036146522,0.16944297,0,0.042242048,0.16806859,0){2284160.6,2222447.1,2399442.3,-3458410.7,-3121229.8,-3302042.1,-506290.81,-960241.74,-1157324.9,3718851.8,3509731.4,3737475.6,-1405815.9,-459324.98,-248746.29}; -ST(0.022876349,0.043626948,0,0.025565101,0.048609543,0,0.019247887,0.048569646,0){2488553.5,2702312,2135187.8,1978130.3,2017092.5,1594654.5,1061959.9,820389.33,650408.09,-72059.632,-584372.75,-458538.7,-1191549.5,-1841258.2,-1451674.1}; -ST(0.038217426,0.13599196,0,0.044512931,0.13802764,0,0.041319833,0.14315875,0){2738753.8,2867370.6,2735557.7,-1938161,-2150242,-2343944,-3305386.1,-3405187.4,-3071175.4,972060.89,1298632.3,1904337.3,3589652.3,3729885,3343927.4}; -ST(0.083559522,0.13424014,0,0.081009521,0.1385969,0,0.076271482,0.13373081,0){1462145.4,1630909.4,2012844.4,-981746.52,-1242340.3,-1330317.6,-1784737.2,-1926924,-2463975.8,395362.65,783271.16,494859.01,1914407.3,2113542.9,2631758.9}; -ST(0.071059851,0.17209017,0,0.066399282,0.17458324,0,0.067098511,0.16826118,0){1900690.4,2061554.2,2121688.2,-2772233.4,-3111294.6,-2928224.5,-629520.98,-477290.81,-1008555.7,3060958.1,3354405.6,3311710.7,-774142.34,-1230983.2,-250662.47}; -ST(0.041319833,0.14315875,0,0.044512931,0.13802764,0,0.047918899,0.14257657,0){2735557.7,2867370.6,2842478.3,-2343944,-2150242,-2400971.6,-3071175.4,-3405187.4,-3215455,1904337.3,1298632.3,1901551.7,3343927.4,3729885,3510918.5}; -ST(0,0.16428571,0,0.0046637588,0.16745308,0,0,0.17142857,0){0,362371.83,0,0,-494096.85,0,0,-182769.85,0,0,560561.48,0,0,-21256.565,0}; -ST(0.049678492,0.18505966,0,0.055890502,0.18802963,0,0.050398693,0.1921099,0){2196886.7,2110328.4,2077292.2,-3774046.6,-3747121.1,-3850553.1,512508.07,795966.68,1209682,3406255.6,3129878.5,2818064.5,-2958276.7,-3224012.4,-3615771.1}; -ST(0.043573225,0.18196099,0,0.048811039,0.17808485,0,0.049678492,0.18505966,0){2202933.2,2310715.6,2196886.7,-3650165.7,-3650410,-3774046.6,195066.32,-194330.82,512508.07,3522129.2,3763231.4,3406255.6,-2509350,-1987755.8,-2958276.7}; -ST(0.066710408,0.18109144,0,0.07206248,0.1830344,0,0.06771074,0.1881525,0){1958233.8,1716055.3,1821405.7,-3210995.9,-2879815.5,-3238423,95959.418,236909.5,698008.36,3149708.8,2719220.1,2695511.5,-2111256.9,-2081132.3,-2795478.4}; -ST(0.1,0.18571429,0,0.095837038,0.182565,0,0.1,0.17857143,0){0,291932.87,0,0,-487211.17,0,0,33971.767,0,0,464480.32,0,0,-344762.9,0}; -ST(0.042242048,0.16806859,0,0.036146522,0.16944297,0,0.038427921,0.16264679,0){2399442.3,2222447.1,2389351.9,-3302042.1,-3121229.8,-3020403.6,-1157324.9,-960241.74,-1591681.4,3737475.6,3509731.4,3440909.6,-248746.29,-459324.98,682723.32}; -ST(0.042541479,0.22296234,0,0.04727629,0.22823863,0,0.041402067,0.22952626,0){1481591,1418822.2,1348916.4,-3531706.6,-3492237.2,-3344816,3405357.4,3684627.2,3600200.4,-1180392.3,-1892328,-1982154,-1772446.7,-919608.01,-667743.82}; -ST(0.049797208,0.2214244,0,0.04727629,0.22823863,0,0.042541479,0.22296234,0){1551864.2,1418822.2,1481591,-3662861.4,-3492237.2,-3531706.6,3430735.4,3684627.2,3405357.4,-1003918.8,-1892328,-1180392.3,-2065424.5,-919608.01,-1772446.7}; -ST(0.062195955,0.11505156,0,0.05615957,0.1141762,0,0.059543685,0.10776494,0){2965673.8,3147681.4,3132791.5,-843057.19,-840990.83,-451048.14,-3569130.8,-3764018.8,-3519016.9,-1711501.2,-1917372.9,-2561357.9,2344130.4,2358868.4,1326599.2}; -ST(0.093823791,0.12410599,0,0.087905667,0.12517971,0,0.089230742,0.11966768,0){595735.92,1140990.9,1043332.5,-276601.23,-554517.87,-391602.7,-743959.63,-1425990.8,-1287980.7,-121937.8,-178453.87,-412950.99,678759.2,1334087.8,1030099.2}; -ST(0.066710408,0.18109144,0,0.066399282,0.17458324,0,0.071841704,0.17726974,0){1958233.8,2061554.2,1799263.7,-3210995.9,-3111294.6,-2812994.5,95959.418,-477290.81,-214389.53,3149708.8,3354405.6,2933842.6,-2111256.9,-1230983.2,-1438939.3}; -ST(0.095453592,0.18738967,0,0.095837038,0.182565,0,0.1,0.18571429,0){307137.29,291932.87,0,-541566.85,-487211.17,0,106216.39,33971.767,0,460538.95,464480.32,0,-458087.35,-344762.9,0}; -ST(0.089858368,0.18421461,0,0.095837038,0.182565,0,0.095453592,0.18738967,0){692603.24,291932.87,307137.29,-1178349.1,-487211.17,-541566.85,133849.22,33971.767,106216.39,1084450.2,464480.32,460538.95,-894447.98,-344762.9,-458087.35}; -ST(0.054692531,0.17439284,0,0.048811039,0.17808485,0,0.048076401,0.17082416,0){2346407.8,2310715.6,2424680.5,-3532168.6,-3650410,-3473815.1,-561454.61,-194330.82,-921629.25,3816051.1,3763231.4,3872759.5,-1367177.6,-1987755.8,-754316.94}; -ST(0.030623168,0.1713445,0,0.034648589,0.17585937,0,0.027644767,0.17736901,0){1985985.4,2080615.7,1774040.3,-2866418.8,-3193762.3,-2777088.7,-715248.18,-371953.81,-203929.31,3183566.3,3392886,2892544.7,-696442.05,-1443588.4,-1431643.3}; -ST(0.027644767,0.17736901,0,0.034648589,0.17585937,0,0.03345202,0.18222482,0){1774040.3,2080615.7,1947746.5,-2777088.7,-3193762.3,-3237509.5,-203929.31,-371953.81,196057.01,2892544.7,3392886,3107788.7,-1431643.3,-1443588.4,-2254322.8}; -ST(0.0060491453,0.25298129,0,0.0043813653,0.24702694,0,0.0087429334,0.24792416,0){178654.23,145794.38,283453.34,-493529.07,-393661.32,-768118.62,691183.17,523477.05,1029935.2,-724662.05,-496310.62,-992967.39,585970.08,320224.07,667809.3}; -ST(0,0.25,0,0.0043813653,0.24702694,0,0.0060491453,0.25298129,0){0,145794.38,178654.23,0,-393661.32,-493529.07,0,523477.05,691183.17,0,-496310.62,-724662.05,0,320224.07,585970.08}; -ST(0.093823791,0.12410599,0,0.094962535,0.11849101,0,0.1,0.12142857,0){595735.92,497557.04,0,-276601.23,-175139.73,0,-743959.63,-611084.48,0,-121937.8,-220851.73,0,678759.2,467971.5,0}; -ST(0.076430303,0.18837043,0,0.07206248,0.1830344,0,0.077619244,0.18028791,0){1444535.6,1716055.3,1471797.4,-2574453.4,-2879815.5,-2389894.4,569102.25,236909.5,18944.546,2129625.3,2719220.1,2378251.6,-2235391.7,-2081132.3,-1502642.9}; -ST(0.027249449,0.18607819,0,0.021212478,0.18688263,0,0.021251228,0.18136297,0){1646413.8,1339179.6,1398279.8,-2861109.6,-2348119.2,-2300353.4,464444.42,429909.33,85724.805,2518610.9,2024227.8,2245163.6,-2323177.4,-1955356.8,-1534338.6}; -ST(0.072908259,0.24139656,0,0.066600159,0.24211306,0,0.070607657,0.23670872,0){881474.92,1004296.2,1007105.3,-2322734,-2655015,-2594870.8,2916335.3,3359675.2,3083897.2,-2445637.4,-2867211.3,-2267120.1,1082242,1352854.8,490193.02}; -ST(0.089230742,0.11966768,0,0.094962535,0.11849101,0,0.093823791,0.12410599,0){1043332.5,497557.04,595735.92,-391602.7,-175139.73,-276601.23,-1287980.7,-611084.48,-743959.63,-412950.99,-220851.73,-121937.8,1030099.2,467971.5,678759.2}; -ST(0.038435934,0.058364632,0,0.032659307,0.059686042,0,0.035422008,0.053603109,0){3459248.5,3158137.1,3344502.1,2206750.4,1964024.3,2318078.8,155241.86,27282.242,580213.58,-1952496,-1919818.3,-1335777.4,-3353689.4,-3141270.1,-2842327.2}; -ST(0.050960377,0.23252058,0,0.04727629,0.22823863,0,0.053624899,0.22742186,0){1342135.9,1418822.2,1430137,-3383651.2,-3492237.2,-3503302.1,3804738.6,3684627.2,3648370.9,-2403721.7,-1892328,-1785483,-148681.88,-919608.01,-1060301.4}; -ST(0.025641665,0.25311603,0,0.033025927,0.25326882,0,0.030217898,0.25971254,0){680173.91,809560.38,660621.26,-1879847.5,-2238649.8,-1866014.4,2635470.4,3142273.3,2744196,-2768550.2,-3308331.9,-3141188.1,2247361.6,2697705.3,2987009.7}; -ST(0.017207343,0.22323305,0,0.021374843,0.22646669,0,0.016939848,0.22904958,0){781289.63,906782.43,714788.59,-1865590.4,-2208721,-1767596.2,1807835.2,2264460.9,1888698.3,-643322.1,-1042528.4,-1014237.8,-915362.92,-767856.24,-395054.79}; -ST(0.027746664,0.13122119,0,0.023379755,0.12686903,0,0.030575169,0.1246812,0){2296333.1,2047772.9,2526238.7,-1399007.9,-1065433.1,-1202245.8,-2843055.5,-2558991,-3156412.2,288094.78,-162203.53,-451924.48,2955532.6,2481221.5,2919641.1}; -ST(0.0064812773,0.046734878,0,0.004777904,0.053197076,0,0,0.05,0){761350.4,557925.04,0,582610.88,389224.92,0,267082.8,102822.82,0,-111174.21,-214698.3,0,-463416.67,-467537.22,0}; -ST(0.0094132111,0.052421332,0,0.004777904,0.053197076,0,0.0064812773,0.046734878,0){1088603.4,557925.04,761350.4,768702.62,389224.92,582610.88,222919.17,102822.82,267082.8,-388347.22,-214698.3,-111174.21,-885762.83,-467537.22,-463416.67}; -ST(0.060567191,0.25172758,0,0.061408089,0.24582042,0,0.065478411,0.24860928,0){917440.34,1017142.7,912058.17,-2522838.3,-2732695.2,-2478342.9,3497206.6,3591948.1,3344041.2,-3596815.5,-3325647.6,-3264436.9,2796536,2017029.8,2261773.6}; -ST(0.077619244,0.18028791,0,0.07206248,0.1830344,0,0.071841704,0.17726974,0){1471797.4,1716055.3,1799263.7,-2389894.4,-2879815.5,-2812994.5,18944.546,236909.5,-214389.53,2378251.6,2719220.1,2933842.6,-1502642.9,-2081132.3,-1438939.3}; -ST(0.071841704,0.17726974,0,0.07206248,0.1830344,0,0.066710408,0.18109144,0){1799263.7,1716055.3,1958233.8,-2812994.5,-2879815.5,-3210995.9,-214389.53,236909.5,95959.418,2933842.6,2719220.1,3149708.8,-1438939.3,-2081132.3,-2111256.9}; -ST(0.060859952,0.17787963,0,0.066399282,0.17458324,0,0.066710408,0.18109144,0){2182203,2061554.2,1958233.8,-3438395.7,-3111294.6,-3210995.9,-202892.1,-477290.81,95959.418,3555311.4,3354405.6,3149708.8,-1844119.8,-1230983.2,-2111256.9}; -ST(0.0062494098,0.068021592,0,0.012193394,0.066188359,0,0.011197941,0.071439681,0){709501.16,1364188,1244724.5,364477.97,734639.92,579995.21,-157824.6,-233939.49,-394493.66,-603457.47,-1094586.7,-1158343.6,-756039.79,-1450385,-1303869.8}; -ST(0.016939848,0.22904958,0,0.021374843,0.22646669,0,0.022740693,0.23189018,0){714788.59,906782.43,887604.04,-1767596.2,-2208721,-2230116.3,1888698.3,2264460.9,2485475.6,-1014237.8,-1042528.4,-1529145.6,-395054.79,-767856.24,-172982.46}; -ST(0.019165757,0.095107709,0,0.013714026,0.097839388,0,0.013428016,0.091778472,0){1930971.9,1412613.2,1408980.1,168744.63,55008.627,204626.15,-1747493.7,-1355500.2,-1174648.8,-2069009.1,-1463354,-1549888.7,-502664.26,-165174.7,-600683.83}; -ST(0.053624899,0.22742186,0,0.04727629,0.22823863,0,0.049797208,0.2214244,0){1430137,1418822.2,1551864.2,-3503302.1,-3492237.2,-3662861.4,3648370.9,3684627.2,3430735.4,-1785483,-1892328,-1003918.8,-1060301.4,-919608.01,-2065424.5}; -ST(0.034648589,0.17585937,0,0.038433858,0.18005903,0,0.03345202,0.18222482,0){2080615.7,2131117.1,1947746.5,-3193762.3,-3450732.6,-3237509.5,-371953.81,5612.0128,196057.01,3392886,3447337.8,3107788.7,-1443588.4,-2140463.9,-2254322.8}; -ST(0.028699663,0.054481756,0,0.025565101,0.048609543,0,0.032229878,0.047894836,0){2920693,2702312,3188476.9,1995520.8,2017092.5,2403076.1,438210.61,820389.33,1025710.6,-1257984.1,-584372.75,-604377.64,-2556170.3,-1841258.2,-2086050.7}; -ST(0.03345202,0.18222482,0,0.038433858,0.18005903,0,0.038852293,0.18542603,0){1947746.5,2131117.1,2057873,-3237509.5,-3450732.6,-3549951.2,196057.01,5612.0128,516044.6,3107788.7,3447337.8,3175871.5,-2254322.8,-2140463.9,-2819104.7}; -ST(0.071841704,0.17726974,0,0.066399282,0.17458324,0,0.071059851,0.17209017,0){1799263.7,2061554.2,1900690.4,-2812994.5,-3111294.6,-2772233.4,-214389.53,-477290.81,-629520.98,2933842.6,3354405.6,3060958.1,-1438939.3,-1230983.2,-774142.34}; -ST(0.06137482,0.19024807,0,0.061291474,0.18447479,0,0.06771074,0.1881525,0){1976038.9,2069396,1821405.7,-3592882,-3531333.7,-3238423,963745.22,425331.11,698008.36,2804392.5,3230965.1,2695511.5,-3258719.1,-2708277.6,-2795478.4}; -ST(0.06771074,0.1881525,0,0.061291474,0.18447479,0,0.066710408,0.18109144,0){1821405.7,2069396,1958233.8,-3238423,-3531333.7,-3210995.9,698008.36,425331.11,95959.418,2695511.5,3230965.1,3149708.8,-2795478.4,-2708277.6,-2111256.9}; -ST(0.0081152275,0.10988635,0,0.01198914,0.11616091,0,0.0062042788,0.11791514,0){821145.89,1171325.2,612847.32,-151361.79,-358450.6,-208741.13,-944689.8,-1420119.3,-750565.55,-619246.83,-627101.02,-286207.66,439508.43,984768,561848.67}; -ST(0.0062042788,0.11791514,0,0.01198914,0.11616091,0,0.01093484,0.12117452,0){612847.32,1171325.2,1052666.9,-208741.13,-358450.6,-426753.37,-750565.55,-1420119.3,-1306415.4,-286207.66,-627101.02,-350052.21,561848.67,984768,1098212.1}; -ST(0.081922129,0.20489902,0,0.086709216,0.20730703,0,0.081656406,0.2108727,0){996952.98,734117.03,951384.03,-2081157.6,-1563285.8,-2083808.1,1266338.6,1031586.7,1528962.6,704044.3,398134,263916.4,-2032271.3,-1481512.9,-1843401}; -ST(0.060825265,0.17090728,0,0.066399282,0.17458324,0,0.060859952,0.17787963,0){2288734.2,2061554.2,2182203,-3282960.5,-3111294.6,-3438395.7,-862639.89,-477290.81,-202892.1,3657845.3,3354405.6,3555311.4,-726586.11,-1230983.2,-1844119.8}; -ST(0.084619556,0.23283838,0,0.084319616,0.22565969,0,0.09071018,0.22887426,0){621044.17,696453.76,406264.77,-1568398.7,-1688204.7,-1003622.2,1771426.2,1707540.6,1069446.3,-1133733.9,-743250.94,-568907.82,-42283.716,-649719.93,-233040.27}; -ST(0.078984823,0.22953004,0,0.084319616,0.22565969,0,0.084619556,0.23283838,0){858343.29,696453.76,621044.17,-2128428.8,-1688204.7,-1568398.7,2291087.1,1707540.6,1771426.2,-1261656.1,-743250.94,-1133733.9,-424553.92,-649719.93,-42283.716}; -ST(0.023309936,0.19197185,0,0.025476801,0.19755762,0,0.018704911,0.19716585,0){1390526.6,1423125.8,1103230.1,-2573914.4,-2782737.9,-2149261.2,799964.88,1235431.1,934589.13,1893175.4,1602470.1,1263201.6,-2411477.9,-2766638.2,-2132672.2}; -ST(0.029690249,0.19362013,0,0.025476801,0.19755762,0,0.023309936,0.19197185,0){1647856.1,1423125.8,1390526.6,-3101495.4,-2782737.9,-2573914.4,1088093.1,1235431.1,799964.88,2141745.7,1602470.1,1893175.4,-2977851,-2766638.2,-2411477.9}; -ST(0.038852293,0.18542603,0,0.034128539,0.18892309,0,0.03345202,0.18222482,0){2057873,1872288.6,1947746.5,-3549951.2,-3356683.8,-3237509.5,516044.6,788949.65,196057.01,3175871.5,2731311.2,3107788.7,-2819104.7,-2954777.5,-2254322.8}; -ST(0.039366597,0.19088868,0,0.034128539,0.18892309,0,0.038852293,0.18542603,0){1982365.2,1872288.6,2057873,-3628592.6,-3356683.8,-3549951.2,1030950.1,788949.65,516044.6,2772526.5,2731311.2,3175871.5,-3333638.5,-2954777.5,-2819104.7}; -ST(0.05,0,0,0.051745598,0.0053231545,0,0.046181733,0.0056701177,0){3880596.9,3873250.9,3851009.3,3880622.4,3861228.9,3837454.5,3880662.8,3837214.6,3810385,3880737.9,3801308.2,3769920.5,3880625.6,3753417.7,3715901.2}; -ST(0.045931579,0.29422002,0,0.051526128,0.29458598,0,0.05,0.3,0){116468.36,109871.78,0,-348980.73,-329256.34,0,580225.36,547568.39,0,-809364.6,-764098.34,0,1035478,977975.34,0}; -ST(0.017373248,0.19021363,0,0.021212478,0.18688263,0,0.023309936,0.19197185,0){1095255.9,1339179.6,1390526.6,-1990705.9,-2348119.2,-2573914.4,532263.7,429909.33,799964.88,1555631.8,2024227.8,1893175.4,-1804413.6,-1955356.8,-2411477.9}; -ST(0.08682376,0.20181233,0,0.086709216,0.20730703,0,0.081922129,0.20489902,0){767576.83,734117.03,996952.98,-1560255.4,-1563285.8,-2081157.6,843726.65,1031586.7,1266338.6,688912.23,398134,704044.3,-1555436.8,-1481512.9,-2032271.3}; -ST(0.08466046,0.11619385,0,0.082946441,0.12207685,0,0.077013163,0.11736903,0){1475783,1589878.9,2095773.2,-452604.25,-673263.29,-691227.47,-1789662.1,-1978038.1,-2559181.5,-788262.21,-467139.5,-1023961.4,1243195.1,1708498.9,1873161.8}; -ST(0.065117308,0.15657509,0,0.064971856,0.15110456,0,0.070477538,0.15360968,0){2354870.2,2431817,2153625.7,-2678881.2,-2488096.1,-2316413.6,-1986291.9,-2374265.3,-1978592.7,2952219.2,2543085,2466066.8,1580034,2315361.9,1792310.4}; -ST(0.036308441,0.24745658,0,0.033139613,0.24047735,0,0.040431855,0.24188745,0){958174.94,1026889.2,1110505,-2591684.5,-2694450.7,-2932804,3460190.4,3348643.4,3702149.5,-3307339.6,-2743423.6,-3142324.5,2177878.8,1106136.5,1453973.2}; -ST(0.035422008,0.053603109,0,0.032659307,0.059686042,0,0.028699663,0.054481756,0){3344502.1,3158137.1,2920693,2318078.8,1964024.3,1995520.8,580213.58,27282.242,438210.61,-1335777.4,-1919818.3,-1257984.1,-2842327.2,-3141270.1,-2556170.3}; -ST(0.083337094,0.16031526,0,0.088623123,0.15812222,0,0.088381846,0.16289419,0){1295652.6,918302.92,911153.68,-1575018.8,-1074338,-1156470.7,-956036.82,-735787.48,-599768.12,1781183.7,1199414.9,1317920.1,571788.58,531983.03,244888.24}; -ST(0.029124573,0.24658198,0,0.033139613,0.24047735,0,0.036308441,0.24745658,0){849052.23,1026889.2,958174.94,-2288340.2,-2694450.7,-2591684.5,3030093.5,3348643.4,3460190.4,-2848204.4,-2743423.6,-3307339.6,1797881.3,1106136.5,2177878.8}; -ST(0.058552205,0.15400025,0,0.064971856,0.15110456,0,0.065117308,0.15657509,0){2589572.8,2431817,2354870.2,-2806487.5,-2488096.1,-2678881.2,-2354581.2,-2374265.3,-1986291.9,3003966,2543085,2952219.2,2103059.1,2315361.9,1580034}; -ST(0.026971271,0.22659033,0,0.02301506,0.22157032,0,0.029518097,0.21985532,0){1090633.5,1025043.6,1264894.2,-2658504.1,-2421684.9,-2954793.2,2731189,2274566.1,2682751.8,-1267784.1,-677461.35,-629411.95,-909068.56,-1351813.7,-1842177.8}; -ST(0.029518097,0.21985532,0,0.02301506,0.22157032,0,0.02463475,0.21609565,0){1264894.2,1025043.6,1153636.1,-2954793.2,-2421684.9,-2626116.1,2682751.8,2274566.1,2198315,-629411.95,-677461.35,-179791.92,-1842177.8,-1351813.7,-1969098.8}; -ST(0.038852293,0.18542603,0,0.038433858,0.18005903,0,0.043573225,0.18196099,0){2057873,2131117.1,2202933.2,-3549951.2,-3450732.6,-3650165.7,516044.6,5612.0128,195066.32,3175871.5,3447337.8,3522129.2,-2819104.7,-2140463.9,-2509350}; -ST(0.095652827,0.22622146,0,0.095706332,0.23121352,0,0.09071018,0.22887426,0){199039.37,183910.78,406264.77,-484109.58,-460364.34,-1003622.2,494313.66,508106.39,1069446.3,-223837.82,-303408.65,-568907.82,-173819.74,-52245.513,-233040.27}; -ST(0.066710408,0.18109144,0,0.061291474,0.18447479,0,0.060859952,0.17787963,0){1958233.8,2069396,2182203,-3210995.9,-3531333.7,-3438395.7,95959.418,425331.11,-202892.1,3149708.8,3230965.1,3555311.4,-2111256.9,-2708277.6,-1844119.8}; -ST(0.09123018,0.070922096,0,0.086276325,0.073599227,0,0.085646934,0.067722415,0){983713.53,1502743.3,1585902.9,465586.72,653401.45,821166.94,-297764.17,-565297.67,-339583.13,-904277.98,-1464602.7,-1336670.3,-1034644.8,-1536324.4,-1689538.4}; -ST(0.085646934,0.067722415,0,0.086276325,0.073599227,0,0.080160084,0.071577727,0){1585902.9,1502743.3,2107851.9,821166.94,653401.45,977984.82,-339583.13,-565297.67,-676141.96,-1336670.3,-1464602.7,-1967920.1,-1689538.4,-1536324.4,-2205119.3}; -ST(0.09123018,0.070922096,0,0.095867013,0.068756454,0,0.095795895,0.073622969,0){983713.53,470210.65,473503.74,465586.72,236792.42,205720.2,-297764.17,-114175.46,-178405.32,-904277.98,-408471.99,-461642.03,-1034644.8,-500215.61,-483922.03}; -ST(0.02301506,0.22157032,0,0.021374843,0.22646669,0,0.017207343,0.22323305,0){1025043.6,906782.43,781289.63,-2421684.9,-2208721,-1865590.4,2274566.1,2264460.9,1807835.2,-677461.35,-1042528.4,-643322.1,-1351813.7,-767856.24,-915362.92}; -ST(0.041643161,0.17482395,0,0.038433858,0.18005903,0,0.034648589,0.17585937,0){2284160.6,2131117.1,2080615.7,-3458410.7,-3450732.6,-3193762.3,-506290.81,5612.0128,-371953.81,3718851.8,3447337.8,3392886,-1405815.9,-2140463.9,-1443588.4}; -ST(0.082709707,0.12855445,0,0.082946441,0.12207685,0,0.087905667,0.12517971,0){1568327.1,1589878.9,1140990.9,-869760.99,-673263.29,-554517.87,-1955764.1,-1978038.1,-1425990.8,-1353.9511,-467139.5,-178453.87,1955094.7,1708498.9,1334087.8}; -ST(0.095090425,0.2489538,0,0.095492809,0.25375881,0,0.090077759,0.25268961,0){157454.16,131307.15,291813.61,-428416.46,-363726.6,-805257.31,579817.55,512510.07,1125037.4,-569427.53,-543451.99,-1174248.1,400020.01,449348.78,940920.06}; -ST(0.08974924,0.047235181,0,0.095360834,0.0462161,0,0.094913401,0.051076335,0){1190814.4,547145.45,595503.05,905328.07,421466.87,429138.45,402804.56,198977.54,142901.48,-196265.4,-69217.008,-183223.65,-748421.11,-321602.09,-458373.75}; -ST(0.1,0.22857143,0,0.095706332,0.23121352,0,0.095652827,0.22622146,0){0,183910.78,199039.37,0,-460364.34,-484109.58,0,508106.39,494313.66,0,-303408.65,-223837.82,0,-52245.513,-173819.74}; -ST(0.049213686,0.13705186,0,0.044512931,0.13802764,0,0.045894811,0.13135905,0){2922689.8,2867370.6,2973475.7,-2132523.3,-2150242,-1819976.4,-3499251.9,-3405187.4,-3679581.9,1186505.2,1298632.3,392676.16,3819996.4,3729885,3832095.1}; -ST(0.047918899,0.14257657,0,0.044512931,0.13802764,0,0.049213686,0.13705186,0){2842478.3,2867370.6,2922689.8,-2400971.6,-2150242,-2132523.3,-3215455,-3405187.4,-3499251.9,1901551.7,1298632.3,1186505.2,3510918.5,3729885,3819996.4}; -ST(0.026971271,0.22659033,0,0.021374843,0.22646669,0,0.02301506,0.22157032,0){1090633.5,906782.43,1025043.6,-2658504.1,-2208721,-2421684.9,2731189,2264460.9,2274566.1,-1267784.1,-1042528.4,-677461.35,-909068.56,-767856.24,-1351813.7}; -ST(0.095795895,0.073622969,0,0.095867013,0.068756454,0,0.1,0.071428571,0){473503.74,470210.65,0,205720.2,236792.42,0,-178405.32,-114175.46,0,-461642.03,-408471.99,0,-483922.03,-500215.61,0}; -}; diff --git a/tutorial/view2.pos b/tutorial/view2.pos deleted file mode 100644 index 0cd798d2b422b223ef0f5dd2069970edfc6f3f5e..0000000000000000000000000000000000000000 --- a/tutorial/view2.pos +++ /dev/null @@ -1,362 +0,0 @@ -/********************************************************************* - * - * Gmsh tutorial 1 - appendix 2 - * - * Vector view - * - *********************************************************************/ - -View "a vector map" { -VP(1e-06,1e-06,0){0,0,122.26654,0,0,122.45426,0,0,122.82769,0,0,123.38417,0,0,124.20759}; -VP(1e-06,0.010000933,0){0,0,121.95116,0,0,120.60823,0,0,117.93735,0,0,113.96957,0,0,108.76298}; -VP(1e-06,0.020000867,0){0,0,121.76276,0,0,116.4134,0,0,105.95451,0,0,90.855892,0,0,71.867727}; -VP(1e-06,0.0300008,0){0,0,120.79673,0,0,108.95219,0,0,86.42978,0,0,55.448276,0,0,19.067191}; -VP(1e-06,0.040000733,0){0,0,119.6291,0,0,98.888056,0,0,61.048627,0,0,12.75009,0,0,-37.476665}; -VP(1e-06,0.050000667,0){0,0,118.01437,0,0,86.430423,0,0,31.638139,0,0,-31.806471,0,0,-86.912688}; -VP(1e-06,0.0600006,0){0,0,116.49231,0,0,71.947632,0,0,0.0082419918,0,0,-71.673337,0,0,-115.66034}; -VP(1e-06,0.070000533,0){0,0,114.18838,0,0,55.530819,0,0,-31.604761,0,0,-102.40655,0,0,-120.49233}; -VP(1e-06,0.080000467,0){0,0,111.73884,0,0,37.77248,0,0,-61.122995,0,0,-119.44024,0,0,-98.690267}; -VP(1e-06,0.0900004,0){0,0,109.02764,0,0,19.140014,0,0,-86.347807,0,0,-120.39736,0,0,-55.210037}; -VP(1e-06,0.10000033,0){0,0,105.89652,0,0,-0.0065380069,0,0,-106.09757,0,0,-106.26766,0,0,0.10907541}; -VP(1e-06,0.11000027,0){0,0,102.73901,0,0,-19.150688,0,0,-118.07603,0,0,-76.769682,0,0,55.222067}; -VP(1e-06,0.1200002,0){0,0,98.952931,0,0,-37.767065,0,0,-122.22482,0,0,-37.780096,0,0,98.736188}; -VP(1e-06,0.13000013,0){0,0,95.122755,0,0,-55.584271,0,0,-118.15756,0,0,6.4473841,0,0,120.69955}; -VP(1e-06,0.14000007,0){0,0,90.852382,0,0,-71.806307,0,0,-105.6782,0,0,49.526055,0,0,115.53689}; -VP(1e-06,0.15,0){0,0,86.563988,0,0,-86.610866,0,0,-86.776431,0,0,86.913071,0,0,87.233235}; -VP(1e-06,0.15999993,0){0,0,81.861739,0,0,-98.925044,0,0,-61.054707,0,0,111.37293,0,0,37.582303}; -VP(1e-06,0.16999987,0){0,0,76.880554,0,0,-108.83108,0,0,-31.635178,0,0,121.95453,0,0,-19.051124}; -VP(1e-06,0.1799998,0){0,0,71.93248,0,0,-116.3445,0,0,0.0051803424,0,0,116.09977,0,0,-71.614187}; -VP(1e-06,0.18999973,0){0,0,66.655881,0,0,-120.84615,0,0,31.684673,0,0,94.843218,0,0,-108.67685}; -VP(1e-06,0.19999967,0){0,0,61.126812,0,0,-122.30122,0,0,61.195533,0,0,61.281721,0,0,-122.75882}; -VP(1e-06,0.2099996,0){0,0,55.454746,0,0,-120.62189,0,0,86.3266,0,0,19.057229,0,0,-108.50779}; -VP(1e-06,0.21999953,0){0,0,49.765538,0,0,-116.57634,0,0,106.4713,0,0,-25.419128,0,0,-73.667176}; -VP(1e-06,0.22999947,0){0,0,43.853336,0,0,-109.05425,0,0,118.28173,0,0,-66.779805,0,0,-19.027558}; -VP(1e-06,0.2399994,0){0,0,37.808977,0,0,-98.930918,0,0,122.15279,0,0,-98.667764,0,0,37.647079}; -VP(1e-06,0.24999933,0){0,0,31.614973,0,0,-86.420956,0,0,118.17907,0,0,-118.35504,0,0,86.812866}; -VP(1e-06,0.25999927,0){0,0,25.446319,0,0,-71.890336,0,0,105.77788,0,0,-121.22558,0,0,115.63648}; -VP(1e-06,0.2699992,0){0,0,19.147235,0,0,-55.558139,0,0,86.505401,0,0,-108.94986,0,0,120.6783}; -VP(1e-06,0.27999913,0){0,0,12.792336,0,0,-37.809277,0,0,61.14898,0,0,-81.777482,0,0,98.845675}; -VP(1e-06,0.28999907,0){0,0,6.3850865,0,0,-19.083517,0,0,31.567694,0,0,-43.697424,0,0,55.414892}; -VP(1e-06,0.299999,0){0,0,0.0095385519,0,0,-0.03787688,0,0,0.093923584,0,0,-0.19582795,0,0,0.49155762}; - -VP(0.0100008,1e-06,0){0,0,1199420,0,0,1199413.7,0,0,1199397.9,0,0,1199378.4,0,0,1199403.4}; -VP(0.0100008,0.010000933,0){0,0,1197824.3,0,0,1184734.2,0,0,1158699.2,0,0,1120019.6,0,0,1069149}; -VP(0.0100008,0.020000867,0){0,0,1192912,0,0,1140722,0,0,1038620.8,0,0,891080.74,0,0,704676.89}; -VP(0.0100008,0.0300008,0){0,0,1184493.3,0,0,1068498.7,0,0,847865.42,0,0,544204.94,0,0,187350.11}; -VP(0.0100008,0.040000733,0){0,0,1173023.5,0,0,970311.11,0,0,599870.71,0,0,125642.73,0,0,-370468.19}; -VP(0.0100008,0.050000667,0){0,0,1158406,0,0,848028.9,0,0,310455.27,0,0,-310247.58,0,0,-847690.45}; -VP(0.0100008,0.0600006,0){0,0,1141160.6,0,0,705256.28,0,0,-99.915745,0,0,-705541.47,0,0,-1141600.4}; -VP(0.0100008,0.070000533,0){0,0,1119507.8,0,0,544453.75,0,0,-310310.46,0,0,-1005770.5,0,0,-1184662.4}; -VP(0.0100008,0.080000467,0){0,0,1095510.9,0,0,370556.44,0,0,-599794.43,0,0,-1173524.1,0,0,-970723.46}; -VP(0.0100008,0.0900004,0){0,0,1068561,0,0,187606.05,0,0,-848133.51,0,0,-1184824.1,0,0,-544820.04}; -VP(0.0100008,0.10000033,0){0,0,1038622.4,0,0,59.994402,0,0,-1038526.3,0,0,-1038609.6,0,0,-114.10057}; -VP(0.0100008,0.11000027,0){0,0,1006283.9,0,0,-187756.34,0,0,-1159127,0,0,-755186.39,0,0,544970.98}; -VP(0.0100008,0.1200002,0){0,0,970146.83,0,0,-370533.83,0,0,-1199206,0,0,-370700.66,0,0,970167.63}; -VP(0.0100008,0.13000013,0){0,0,932049.4,0,0,-544524.54,0,0,-1158572.3,0,0,62773.626,0,0,1184972.7}; -VP(0.0100008,0.14000007,0){0,0,891093.35,0,0,-704750.35,0,0,-1038220.5,0,0,487590.9,0,0,1139583.1}; -VP(0.0100008,0.15,0){0,0,848043.94,0,0,-848162.19,0,0,-847974.76,0,0,848328.9,0,0,847991.67}; -VP(0.0100008,0.15999993,0){0,0,802591.51,0,0,-970520.77,0,0,-600078.94,0,0,1096713.1,0,0,371678.95}; -VP(0.0100008,0.16999987,0){0,0,754801.61,0,0,-1068627.9,0,0,-310284.17,0,0,1197257.1,0,0,-187594.97}; -VP(0.0100008,0.1799998,0){0,0,704861.79,0,0,-1140475,0,0,-9.7592105,0,0,1140481.7,0,0,-704943.27}; -VP(0.0100008,0.18999973,0){0,0,653101.17,0,0,-1184459.4,0,0,310527.61,0,0,931931.51,0,0,-1068734.2}; -VP(0.0100008,0.19999967,0){0,0,599592.55,0,0,-1199104.4,0,0,599503.9,0,0,599267.34,0,0,-1198494.7}; -VP(0.0100008,0.2099996,0){0,0,544384.89,0,0,-1184212.9,0,0,847613.27,0,0,187425.67,0,0,-1067044.3}; -VP(0.0100008,0.21999953,0){0,0,487650.97,0,0,-1140248.2,0,0,1038317,0,0,-249363.16,0,0,-704669.35}; -VP(0.0100008,0.22999947,0){0,0,429775.49,0,0,-1068467.4,0,0,1158136.7,0,0,-652849.84,0,0,-187529.03}; -VP(0.0100008,0.2399994,0){0,0,370742.76,0,0,-970651.21,0,0,1199863,0,0,-970733.39,0,0,370606.77}; -VP(0.0100008,0.24999933,0){0,0,310389.76,0,0,-847996.97,0,0,1158383,0,0,-1158385.8,0,0,848238.2}; -VP(0.0100008,0.25999927,0){0,0,249381.35,0,0,-705070.58,0,0,1038980.9,0,0,-1193427.1,0,0,1141624.8}; -VP(0.0100008,0.2699992,0){0,0,187667.19,0,0,-544609.42,0,0,848186.21,0,0,-1068663.7,0,0,1184526.1}; -VP(0.0100008,0.27999913,0){0,0,125343.27,0,0,-370542.57,0,0,599521.08,0,0,-802247.4,0,0,969885.37}; -VP(0.0100008,0.28999907,0){0,0,62767.644,0,0,-187609.66,0,0,310381.87,0,0,-429732.38,0,0,544296.89}; -VP(0.0100008,0.299999,0){0,0,6.2613191,0,0,-18.79568,0,0,31.365281,0,0,-43.993284,0,0,56.787457}; - -VP(0.0200006,1e-06,0){0,0,2280709.8,0,0,2280750.8,0,0,2280828.8,0,0,2280959.2,0,0,2281129.6}; -VP(0.0200006,0.010000933,0){0,0,2278084.8,0,0,2253198.7,0,0,2203663.2,0,0,2129974,0,0,2032919.9}; -VP(0.0200006,0.020000867,0){0,0,2268407.5,0,0,2169311.8,0,0,1975439,0,0,1695261.3,0,0,1341077.3}; -VP(0.0200006,0.0300008,0){0,0,2252723.5,0,0,2032071.2,0,0,1612411.9,0,0,1034928.7,0,0,356247.55}; -VP(0.0200006,0.040000733,0){0,0,2231113.2,0,0,1845403.9,0,0,1140636.4,0,0,238607.96,0,0,-704725}; -VP(0.0200006,0.050000667,0){0,0,2203326.5,0,0,1612958.8,0,0,590304.13,0,0,-590735.99,0,0,-1613764.5}; -VP(0.0200006,0.0600006,0){0,0,2169459.4,0,0,1340689.5,0,0,-253.26048,0,0,-1341167.5,0,0,-2169964.1}; -VP(0.0200006,0.070000533,0){0,0,2129890.6,0,0,1035882.8,0,0,-590292.11,0,0,-1913508.9,0,0,-2254296.8}; -VP(0.0200006,0.080000467,0){0,0,2083910,0,0,704847.45,0,0,-1140765.6,0,0,-2231594.2,0,0,-1845800.6}; -VP(0.0200006,0.0900004,0){0,0,2032367.2,0,0,356748.59,0,0,-1612959.6,0,0,-2252643.6,0,0,-1034806.6}; -VP(0.0200006,0.10000033,0){0,0,1975611.2,0,0,57.943352,0,0,-1975420.4,0,0,-1975504.9,0,0,-426.45724}; -VP(0.0200006,0.11000027,0){0,0,1913315.4,0,0,-356703.47,0,0,-2203743.9,0,0,-1436328.1,0,0,1035508.3}; -VP(0.0200006,0.1200002,0){0,0,1845574.3,0,0,-704966.07,0,0,-2281489.6,0,0,-705279.75,0,0,1845900.6}; -VP(0.0200006,0.13000013,0){0,0,1772685.9,0,0,-1035509.4,0,0,-2203500.9,0,0,119407.19,0,0,2253641.5}; -VP(0.0200006,0.14000007,0){0,0,1695112.7,0,0,-1340923.1,0,0,-1975160.6,0,0,928234.38,0,0,2168753.8}; -VP(0.0200006,0.15,0){0,0,1612735.8,0,0,-1612718.7,0,0,-1612310.8,0,0,1612112.4,0,0,1611635.4}; -VP(0.0200006,0.15999993,0){0,0,1526063.3,0,0,-1845120.2,0,0,-1140155.4,0,0,2083304.9,0,0,704343.18}; -VP(0.0200006,0.16999987,0){0,0,1435361,0,0,-2032273.5,0,0,-590286.74,0,0,2277973.9,0,0,-357113.77}; -VP(0.0200006,0.1799998,0){0,0,1340603.7,0,0,-2169104.8,0,0,-187.59264,0,0,2169344.4,0,0,-1340174.3}; -VP(0.0200006,0.18999973,0){0,0,1242326.7,0,0,-2253004.8,0,0,590488.21,0,0,1772854.2,0,0,-2032869.4}; -VP(0.0200006,0.19999967,0){0,0,1140484.2,0,0,-2281080.6,0,0,1140863.6,0,0,1140070,0,0,-2281239}; -VP(0.0200006,0.2099996,0){0,0,1035459.2,0,0,-2252611.6,0,0,1612490.4,0,0,356944.25,0,0,-2031783}; -VP(0.0200006,0.21999953,0){0,0,927776.85,0,0,-2169354.9,0,0,1975370.5,0,0,-474298.34,0,0,-1340371.5}; -VP(0.0200006,0.22999947,0){0,0,817407.12,0,0,-2032357.3,0,0,2203356.6,0,0,-1242461.5,0,0,-356900.43}; -VP(0.0200006,0.2399994,0){0,0,704976.55,0,0,-1845571.3,0,0,2281095,0,0,-1845366.1,0,0,705164.78}; -VP(0.0200006,0.24999933,0){0,0,590364.42,0,0,-1612953.4,0,0,2203467,0,0,-2203634.2,0,0,1613249.1}; -VP(0.0200006,0.25999927,0){0,0,474194.23,0,0,-1340559.8,0,0,1975062.6,0,0,-2267979.5,0,0,2168670.2}; -VP(0.0200006,0.2699992,0){0,0,356872.34,0,0,-1035606,0,0,1612764.1,0,0,-2031781.9,0,0,2251747.9}; -VP(0.0200006,0.27999913,0){0,0,238392.68,0,0,-704748.96,0,0,1140275,0,0,-1525901.8,0,0,1844805.9}; -VP(0.0200006,0.28999907,0){0,0,119394.11,0,0,-356902.82,0,0,590587.11,0,0,-817934.15,0,0,1036489.1}; -VP(0.0200006,0.299999,0){0,0,11.932618,0,0,-35.829397,0,0,59.820438,0,0,-83.966334,0,0,108.36963}; - -VP(0.0300004,1e-06,0){0,0,3139675.3,0,0,3139674.2,0,0,3139668.3,0,0,3139681.7,0,0,3139723.8}; -VP(0.0300004,0.010000933,0){0,0,3135081.7,0,0,3100734,0,0,3032371.9,0,0,2930692.9,0,0,2796805.3}; -VP(0.0300004,0.020000867,0){0,0,3122126.6,0,0,2985595.8,0,0,2718520.5,0,0,2332639.4,0,0,1845013.2}; -VP(0.0300004,0.0300008,0){0,0,3101041.9,0,0,2797472.5,0,0,2220045.5,0,0,1425300.7,0,0,491065.86}; -VP(0.0300004,0.040000733,0){0,0,3070989.4,0,0,2539964.8,0,0,1569772.9,0,0,328239.6,0,0,-969845.82}; -VP(0.0300004,0.050000667,0){0,0,3032446.4,0,0,2219926.7,0,0,812540.71,0,0,-812639.58,0,0,-2220026.5}; -VP(0.0300004,0.0600006,0){0,0,2985693.7,0,0,1845152.9,0,0,-174.73805,0,0,-1845312.5,0,0,-2985526.4}; -VP(0.0300004,0.070000533,0){0,0,2930943,0,0,1425196.7,0,0,-812730.34,0,0,-2633146.4,0,0,-3100929.6}; -VP(0.0300004,0.080000467,0){0,0,2867944.7,0,0,970103.04,0,0,-1569472.5,0,0,-3070185.6,0,0,-2539414}; -VP(0.0300004,0.0900004,0){0,0,2797367.8,0,0,491226.4,0,0,-2219884.6,0,0,-3100886.7,0,0,-1425369.6}; -VP(0.0300004,0.10000033,0){0,0,2718698.5,0,0,12.448978,0,0,-2718622.2,0,0,-2718532.7,0,0,51.841297}; -VP(0.0300004,0.11000027,0){0,0,2633088.6,0,0,-490806.8,0,0,-3032414,0,0,-1976012.9,0,0,1425239.2}; -VP(0.0300004,0.1200002,0){0,0,2539832.3,0,0,-970162.37,0,0,-3139509.6,0,0,-970062.59,0,0,2540261.1}; -VP(0.0300004,0.13000013,0){0,0,2439829.8,0,0,-1425373.6,0,0,-3032567.4,0,0,164237.87,0,0,3100974.7}; -VP(0.0300004,0.14000007,0){0,0,2333010.1,0,0,-1845587,0,0,-2718525,0,0,1277556.1,0,0,2985337.9}; -VP(0.0300004,0.15,0){0,0,2219900.9,0,0,-2219866.5,0,0,-2219894.7,0,0,2219752.1,0,0,2219752}; -VP(0.0300004,0.15999993,0){0,0,2100853.7,0,0,-2539747.5,0,0,-1570223,0,0,2867706.4,0,0,971142.34}; -VP(0.0300004,0.16999987,0){0,0,1975706.3,0,0,-2797278.9,0,0,-812588.34,0,0,3135118.2,0,0,-490528.6}; -VP(0.0300004,0.1799998,0){0,0,1845354.4,0,0,-2985881,0,0,194.8881,0,0,2985631.7,0,0,-1845788.8}; -VP(0.0300004,0.18999973,0){0,0,1709967.7,0,0,-3100810.8,0,0,812260.37,0,0,2439906.4,0,0,-2796702.4}; -VP(0.0300004,0.19999967,0){0,0,1569708,0,0,-3139313,0,0,1569373.5,0,0,1570104.7,0,0,-3139262.4}; -VP(0.0300004,0.2099996,0){0,0,1425339.6,0,0,-3100757.9,0,0,2219408.5,0,0,492050.16,0,0,-2797743.3}; -VP(0.0300004,0.21999953,0){0,0,1276986.2,0,0,-2985936.9,0,0,2719040,0,0,-652907.22,0,0,-1845598.7}; -VP(0.0300004,0.22999947,0){0,0,1125215.1,0,0,-2797495.5,0,0,3032403.5,0,0,-1709234.6,0,0,-492137.13}; -VP(0.0300004,0.2399994,0){0,0,970144.1,0,0,-2539846.2,0,0,3139378.7,0,0,-2539753.5,0,0,970193.03}; -VP(0.0300004,0.24999933,0){0,0,812491.11,0,0,-2219797.3,0,0,3032408.6,0,0,-3032616.7,0,0,2220319.1}; -VP(0.0300004,0.25999927,0){0,0,652744.28,0,0,-1845353.3,0,0,2718873,0,0,-3122299.7,0,0,2985657.6}; -VP(0.0300004,0.2699992,0){0,0,491182.49,0,0,-1425463.8,0,0,2220200.9,0,0,-2797555.2,0,0,3100901.2}; -VP(0.0300004,0.27999913,0){0,0,328155.37,0,0,-970088.48,0,0,1569536.1,0,0,-2100275,0,0,2539087.9}; -VP(0.0300004,0.28999907,0){0,0,164322.66,0,0,-491193.3,0,0,812760.14,0,0,-1125540.5,0,0,1426162.8}; -VP(0.0300004,0.299999,0){0,0,16.41221,0,0,-49.283756,0,0,82.296358,0,0,-115.54157,0,0,149.15109}; - -VP(0.0400002,1e-06,0){0,0,3690601,0,0,3690618.3,0,0,3690645.2,0,0,3690704.6,0,0,3690664.7}; -VP(0.0400002,0.010000933,0){0,0,3685613.9,0,0,3645169.9,0,0,3564706,0,0,3445103.4,0,0,3287752.7}; -VP(0.0400002,0.020000867,0){0,0,3670390,0,0,3509941.7,0,0,3196044,0,0,2742426.5,0,0,2168876.8}; -VP(0.0400002,0.0300008,0){0,0,3645136.4,0,0,3288267.4,0,0,2609470.8,0,0,1675240.9,0,0,577177.72}; -VP(0.0400002,0.040000733,0){0,0,3610077.5,0,0,2985786.8,0,0,1845166.8,0,0,385493.72,0,0,-1140750.8}; -VP(0.0400002,0.050000667,0){0,0,3564912,0,0,2609684.4,0,0,955168.57,0,0,-955315.6,0,0,-2609786}; -VP(0.0400002,0.0600006,0){0,0,3510060.8,0,0,2169168.8,0,0,-365.39657,0,0,-2169708.4,0,0,-3510148.3}; -VP(0.0400002,0.070000533,0){0,0,3445393.7,0,0,1675298.9,0,0,-955611.95,0,0,-3095666.7,0,0,-3645126.2}; -VP(0.0400002,0.080000467,0){0,0,3371365.8,0,0,1140256.7,0,0,-1845633.7,0,0,-3610102,0,0,-2984730.7}; -VP(0.0400002,0.0900004,0){0,0,3288335.2,0,0,577001.33,0,0,-2610140.5,0,0,-3645082,0,0,-1674262.7}; -VP(0.0400002,0.10000033,0){0,0,3196271.4,0,0,254.08427,0,0,-3196008.5,0,0,-3196774.9,0,0,-1623.5529}; -VP(0.0400002,0.11000027,0){0,0,3095219.5,0,0,-577212.68,0,0,-3564731.5,0,0,-2322463.3,0,0,1675686.6}; -VP(0.0400002,0.1200002,0){0,0,2985782.7,0,0,-1140499.3,0,0,-3690667.2,0,0,-1140462.4,0,0,2985892.1}; -VP(0.0400002,0.13000013,0){0,0,2868207.9,0,0,-1675702.3,0,0,-3564761.1,0,0,193912.15,0,0,3645088.9}; -VP(0.0400002,0.14000007,0){0,0,2742715.8,0,0,-2169258.5,0,0,-3196241.2,0,0,1500944.4,0,0,3510035.4}; -VP(0.0400002,0.15,0){0,0,2609776.1,0,0,-2609718.6,0,0,-2609840.3,0,0,2609858.9,0,0,2609702.7}; -VP(0.0400002,0.15999993,0){0,0,2469571.8,0,0,-2985800.7,0,0,-1845535.8,0,0,3371611.7,0,0,1141234.7}; -VP(0.0400002,0.16999987,0){0,0,2322604.7,0,0,-3288363.7,0,0,-955261.93,0,0,3685749,0,0,-577636.64}; -VP(0.0400002,0.1799998,0){0,0,2169316.4,0,0,-3510075.5,0,0,26.796365,0,0,3510181.1,0,0,-2169230}; -VP(0.0400002,0.18999973,0){0,0,2010118.7,0,0,-3645239.4,0,0,955058.82,0,0,2868420.1,0,0,-3288332.2}; -VP(0.0400002,0.19999967,0){0,0,1845375.9,0,0,-3690719.5,0,0,1845270.8,0,0,1845577.9,0,0,-3691037.1}; -VP(0.0400002,0.2099996,0){0,0,1675632.4,0,0,-3645342.3,0,0,2609442.4,0,0,578081.72,0,0,-3289083.8}; -VP(0.0400002,0.21999953,0){0,0,1501170.4,0,0,-3510092.5,0,0,3196169.1,0,0,-767085.88,0,0,-2169730.2}; -VP(0.0400002,0.22999947,0){0,0,1322642.5,0,0,-3288389.9,0,0,3564726.5,0,0,-2009812.9,0,0,-577466.5}; -VP(0.0400002,0.2399994,0){0,0,1140541.4,0,0,-2985927.6,0,0,3690606.2,0,0,-2985167.7,0,0,1138794.3}; -VP(0.0400002,0.24999933,0){0,0,955283.2,0,0,-2609818.4,0,0,3564929,0,0,-3564727.2,0,0,2609440.2}; -VP(0.0400002,0.25999927,0){0,0,767387.9,0,0,-2169450.2,0,0,3196377.4,0,0,-3670707.8,0,0,3510598.4}; -VP(0.0400002,0.2699992,0){0,0,577445.52,0,0,-1675755.3,0,0,2609890,0,0,-3288365.9,0,0,3644890.1}; -VP(0.0400002,0.27999913,0){0,0,385709.6,0,0,-1140260.5,0,0,1844946.8,0,0,-2468928.8,0,0,2984936.9}; -VP(0.0400002,0.28999907,0){0,0,193250.5,0,0,-577630.78,0,0,955676.02,0,0,-1323236.2,0,0,1676345.5}; -VP(0.0400002,0.299999,0){0,0,19.269892,0,0,-57.855448,0,0,96.578279,0,0,-135.52806,0,0,174.821}; - -VP(0.05,1e-06,0){0,0,3880596.9,0,0,3880622.3,0,0,3880662.8,0,0,3880737.8,0,0,3880625.5}; -VP(0.05,0.010000933,0){0,0,3875257,0,0,3832814.6,0,0,3748396.3,0,0,3622968.9,0,0,3457852}; -VP(0.05,0.020000867,0){0,0,3859325.9,0,0,3690717.6,0,0,3360871,0,0,2884239.7,0,0,2281724.7}; -VP(0.05,0.0300008,0){0,0,3832795.1,0,0,3457585.2,0,0,2743849,0,0,1761412.2,0,0,606299.02}; -VP(0.05,0.040000733,0){0,0,3795748.5,0,0,3139286.7,0,0,1939875.1,0,0,404959.06,0,0,-1199883.6}; -VP(0.05,0.050000667,0){0,0,3748343.4,0,0,2744093.2,0,0,1004669.5,0,0,-1003856.9,0,0,-2743333.1}; -VP(0.05,0.0600006,0){0,0,3690625.2,0,0,2281073.8,0,0,326.84409,0,0,-2280514,0,0,-3690376.4}; -VP(0.05,0.070000533,0){0,0,3622800.6,0,0,1761625.1,0,0,-1004534.7,0,0,-3254609.6,0,0,-3832806.6}; -VP(0.05,0.080000467,0){0,0,3545045.4,0,0,1198951.3,0,0,-1940576.3,0,0,-3795861.1,0,0,-3139212.2}; -VP(0.05,0.0900004,0){0,0,3457595.9,0,0,606786.66,0,0,-2744419.3,0,0,-3832656.4,0,0,-1760172.9}; -VP(0.05,0.10000033,0){0,0,3360657,0,0,-97.27265,0,0,-3360730.3,0,0,-3360689.2,0,0,-290.22172}; -VP(0.05,0.11000027,0){0,0,3254514.6,0,0,-607227.37,0,0,-3748501,0,0,-2441826.2,0,0,1762467.9}; -VP(0.05,0.1200002,0){0,0,3139405.5,0,0,-1199386.9,0,0,-3880582.8,0,0,-1198369.5,0,0,3140304.6}; -VP(0.05,0.13000013,0){0,0,3015739.1,0,0,-1761864.9,0,0,-3748289.9,0,0,203145.44,0,0,3832787.8}; -VP(0.05,0.14000007,0){0,0,2883822,0,0,-2280986.9,0,0,-3360663.5,0,0,1578441.1,0,0,3690799.9}; -VP(0.05,0.15,0){0,0,2744031.4,0,0,-2743835.6,0,0,-2744150.4,0,0,2743895.2,0,0,2743942.5}; -VP(0.05,0.15999993,0){0,0,2596561.2,0,0,-3139538.8,0,0,-1940150.4,0,0,3545079.6,0,0,1199618.1}; -VP(0.05,0.16999987,0){0,0,2442166,0,0,-3457549.3,0,0,-1004623.5,0,0,3875273.7,0,0,-606466.48}; -VP(0.05,0.1799998,0){0,0,2280926.6,0,0,-3690675.6,0,0,228.51305,0,0,3690556.3,0,0,-2281736.6}; -VP(0.05,0.18999973,0){0,0,2113533.1,0,0,-3832797.1,0,0,1004136.5,0,0,3016195.2,0,0,-3457260.9}; -VP(0.05,0.19999967,0){0,0,1940296,0,0,-3880556.8,0,0,1940292.4,0,0,1940128.9,0,0,-3880527.5}; -VP(0.05,0.2099996,0){0,0,1761773.3,0,0,-3832816.6,0,0,2743897.2,0,0,607237.83,0,0,-3457747.5}; -VP(0.05,0.21999953,0){0,0,1578460.3,0,0,-3690740.5,0,0,3360363.1,0,0,-805756.13,0,0,-2282297.4}; -VP(0.05,0.22999947,0){0,0,1390737.8,0,0,-3457708.4,0,0,3748297.1,0,0,-2113265.5,0,0,-607333.08}; -VP(0.05,0.2399994,0){0,0,1199209.5,0,0,-3139523.8,0,0,3880564,0,0,-3139310.1,0,0,1198994.4}; -VP(0.05,0.24999933,0){0,0,1004412.5,0,0,-2744075,0,0,3748408.9,0,0,-3748301.5,0,0,2743740}; -VP(0.05,0.25999927,0){0,0,806928.23,0,0,-2281198.4,0,0,3360882.3,0,0,-3859250.9,0,0,3690299}; -VP(0.05,0.2699992,0){0,0,607108.49,0,0,-1761901.2,0,0,2744236.2,0,0,-3457909.7,0,0,3832928}; -VP(0.05,0.27999913,0){0,0,405592.69,0,0,-1199043.3,0,0,1940077.6,0,0,-2596308.7,0,0,3139108.2}; -VP(0.05,0.28999907,0){0,0,203104.02,0,0,-607063.77,0,0,1004310.4,0,0,-1390455.9,0,0,1761206}; -VP(0.05,0.299999,0){0,0,20.358382,0,0,-61.109432,0,0,101.96355,0,0,-142.98836,0,0,184.2584}; - -VP(0.0599998,1e-06,0){0,0,3690588.4,0,0,3690594.1,0,0,3690600.5,0,0,3690636.8,0,0,3690680.2}; -VP(0.0599998,0.010000933,0){0,0,3685584.9,0,0,3645126.5,0,0,3564649.5,0,0,3445067.6,0,0,3287702}; -VP(0.0599998,0.020000867,0){0,0,3670339.3,0,0,3509847.2,0,0,3195872,0,0,2742162.2,0,0,2168469.5}; -VP(0.0599998,0.0300008,0){0,0,3645265.4,0,0,3288523.2,0,0,2610025.4,0,0,1676315.4,0,0,578890.16}; -VP(0.0599998,0.040000733,0){0,0,3610072.7,0,0,2985916.8,0,0,1845500.4,0,0,385975.87,0,0,-1140557.6}; -VP(0.0599998,0.050000667,0){0,0,3564932.8,0,0,2609563.8,0,0,954567.28,0,0,-956764.73,0,0,-2612108.6}; -VP(0.0599998,0.0600006,0){0,0,3509883.5,0,0,2169100.8,0,0,-294.39187,0,0,-2169556.7,0,0,-3509772.8}; -VP(0.0599998,0.070000533,0){0,0,3445521.6,0,0,1675462,0,0,-955345.58,0,0,-3095407.5,0,0,-3645237}; -VP(0.0599998,0.080000467,0){0,0,3371542.1,0,0,1140096.9,0,0,-1845826.2,0,0,-3610004.7,0,0,-2985003.9}; -VP(0.0599998,0.0900004,0){0,0,3288201,0,0,577167.05,0,0,-2609684.2,0,0,-3644941.6,0,0,-1675304}; -VP(0.0599998,0.10000033,0){0,0,3196255,0,0,-266.67806,0,0,-3196667.6,0,0,-3195888.6,0,0,1895.9665}; -VP(0.0599998,0.11000027,0){0,0,3095213.4,0,0,-577563.51,0,0,-3564996.6,0,0,-2321862.4,0,0,1676966}; -VP(0.0599998,0.1200002,0){0,0,2985745.7,0,0,-1140533.3,0,0,-3690547,0,0,-1140417.7,0,0,2985531.4}; -VP(0.0599998,0.13000013,0){0,0,2868135,0,0,-1675511.4,0,0,-3564775.9,0,0,193668.06,0,0,3645303.7}; -VP(0.0599998,0.14000007,0){0,0,2742731.7,0,0,-2169340.9,0,0,-3196135,0,0,1501116.1,0,0,3509766.4}; -VP(0.0599998,0.15,0){0,0,2609657.8,0,0,-2609701.8,0,0,-2609700.4,0,0,2609527.5,0,0,2610132.1}; -VP(0.0599998,0.15999993,0){0,0,2469577.5,0,0,-2985824.1,0,0,-1845633.7,0,0,3371429.8,0,0,1142123}; -VP(0.0599998,0.16999987,0){0,0,2322691.7,0,0,-3288363,0,0,-955637.58,0,0,3685705.9,0,0,-576298.25}; -VP(0.0599998,0.1799998,0){0,0,2169321.2,0,0,-3510087.5,0,0,216.20285,0,0,3509911.2,0,0,-2169952.5}; -VP(0.0599998,0.18999973,0){0,0,2010122.2,0,0,-3645257.3,0,0,955123.64,0,0,2868380.8,0,0,-3288529.5}; -VP(0.0599998,0.19999967,0){0,0,1845424.5,0,0,-3690692.7,0,0,1844767.2,0,0,1846485.8,0,0,-3690994.8}; -VP(0.0599998,0.2099996,0){0,0,1675514.1,0,0,-3645174.5,0,0,2609662.4,0,0,577237.71,0,0,-3288394.8}; -VP(0.0599998,0.21999953,0){0,0,1501136.6,0,0,-3510009.9,0,0,3196091.5,0,0,-767114.35,0,0,-2169373.8}; -VP(0.0599998,0.22999947,0){0,0,1322529.6,0,0,-3288249.1,0,0,3564963.2,0,0,-2010624.3,0,0,-576282.31}; -VP(0.0599998,0.2399994,0){0,0,1140476.2,0,0,-2985787.6,0,0,3690602.4,0,0,-2985686.8,0,0,1140031.4}; -VP(0.0599998,0.24999933,0){0,0,955300.73,0,0,-2609900.4,0,0,3565088.7,0,0,-3564807.1,0,0,2609057.9}; -VP(0.0599998,0.25999927,0){0,0,767278.73,0,0,-2169195.9,0,0,3196149.1,0,0,-3670645.8,0,0,3510558.2}; -VP(0.0599998,0.2699992,0){0,0,577333.05,0,0,-1675470.1,0,0,2609593.5,0,0,-3288335.9,0,0,3645415}; -VP(0.0599998,0.27999913,0){0,0,385693.71,0,0,-1140199.5,0,0,1844814.4,0,0,-2468724.5,0,0,2984639.7}; -VP(0.0599998,0.28999907,0){0,0,193213.14,0,0,-577508.25,0,0,955436.41,0,0,-1322824.6,0,0,1675692.8}; -VP(0.0599998,0.299999,0){0,0,19.283606,0,0,-57.905204,0,0,96.689606,0,0,-135.74246,0,0,175.18876}; - -VP(0.0699996,1e-06,0){0,0,3139667.6,0,0,3139665.7,0,0,3139654,0,0,3139650.6,0,0,3139470.9}; -VP(0.0699996,0.010000933,0){0,0,3135125.8,0,0,3100793.8,0,0,3032495.7,0,0,2930991.9,0,0,2797379}; -VP(0.0699996,0.020000867,0){0,0,3122310.7,0,0,2985675.5,0,0,2718374.1,0,0,2332119.2,0,0,1843762.7}; -VP(0.0699996,0.0300008,0){0,0,3100693,0,0,2797093.6,0,0,2219652.4,0,0,1424992.4,0,0,490900.05}; -VP(0.0699996,0.040000733,0){0,0,3070823,0,0,2539797.2,0,0,1569564.7,0,0,327908.52,0,0,-970491.93}; -VP(0.0699996,0.050000667,0){0,0,3032468.4,0,0,2219799.1,0,0,812200.29,0,0,-813120.94,0,0,-2220596.8}; -VP(0.0699996,0.0600006,0){0,0,2985875.8,0,0,1845377.2,0,0,-26.355008,0,0,-1845513.3,0,0,-2986315.5}; -VP(0.0699996,0.070000533,0){0,0,2931046.3,0,0,1425283.6,0,0,-812900.53,0,0,-2633729.7,0,0,-3101410.7}; -VP(0.0699996,0.080000467,0){0,0,2868112.6,0,0,970159.55,0,0,-1569836.3,0,0,-3071130.7,0,0,-2540487.8}; -VP(0.0699996,0.0900004,0){0,0,2797210.7,0,0,490941.67,0,0,-2219930.9,0,0,-3100375.4,0,0,-1424891.3}; -VP(0.0699996,0.10000033,0){0,0,2718885.1,0,0,-182.57461,0,0,-2719058.7,0,0,-2718531.8,0,0,941.97383}; -VP(0.0699996,0.11000027,0){0,0,2632913.9,0,0,-491153,0,0,-3032434.9,0,0,-1975629.9,0,0,1425271.2}; -VP(0.0699996,0.1200002,0){0,0,2539899.6,0,0,-970217.44,0,0,-3139555.4,0,0,-970209.87,0,0,2540083.9}; -VP(0.0699996,0.13000013,0){0,0,2439510.8,0,0,-1425266,0,0,-3031770.5,0,0,164758.65,0,0,3099617.8}; -VP(0.0699996,0.14000007,0){0,0,2332905.6,0,0,-1845309.2,0,0,-2718594,0,0,1277417,0,0,2985507.9}; -VP(0.0699996,0.15,0){0,0,2219941.4,0,0,-2219958.1,0,0,-2219904.1,0,0,2219980.5,0,0,2219784.8}; -VP(0.0699996,0.15999993,0){0,0,2100779.8,0,0,-2539856.5,0,0,-1570056.5,0,0,2867818.8,0,0,971425.75}; -VP(0.0699996,0.16999987,0){0,0,1975781.8,0,0,-2797264.2,0,0,-812705.41,0,0,3135157.1,0,0,-490750.14}; -VP(0.0699996,0.1799998,0){0,0,1845356.9,0,0,-2985850.3,0,0,78.136475,0,0,2985657.3,0,0,-1845159.5}; -VP(0.0699996,0.18999973,0){0,0,1709803.1,0,0,-3100588.9,0,0,812407.05,0,0,2439581.7,0,0,-2797000.3}; -VP(0.0699996,0.19999967,0){0,0,1569746.1,0,0,-3139424.2,0,0,1569485.9,0,0,1570117.5,0,0,-3139429.6}; -VP(0.0699996,0.2099996,0){0,0,1425263.5,0,0,-3100589,0,0,2219581.7,0,0,490836.14,0,0,-2795721.5}; -VP(0.0699996,0.21999953,0){0,0,1277056.4,0,0,-2985909.1,0,0,2718460.4,0,0,-651766.98,0,0,-1846051.6}; -VP(0.0699996,0.22999947,0){0,0,1125152.1,0,0,-2797513.7,0,0,3032908.3,0,0,-1710337.8,0,0,-490994.33}; -VP(0.0699996,0.2399994,0){0,0,970112.98,0,0,-2539826.8,0,0,3139496.3,0,0,-2539996.3,0,0,970367.78}; -VP(0.0699996,0.24999933,0){0,0,812572.07,0,0,-2220016.4,0,0,3032735.9,0,0,-3033096.1,0,0,2221151.5}; -VP(0.0699996,0.25999927,0){0,0,652805.93,0,0,-1845499.8,0,0,2718972.8,0,0,-3122098.8,0,0,2985084.7}; -VP(0.0699996,0.2699992,0){0,0,491084.34,0,0,-1425170.4,0,0,2219732.5,0,0,-2796996.6,0,0,3100323.4}; -VP(0.0699996,0.27999913,0){0,0,328256.73,0,0,-970421.4,0,0,1570170.2,0,0,-2101272.7,0,0,2540471.6}; -VP(0.0699996,0.28999907,0){0,0,164340.78,0,0,-491233.16,0,0,812780.8,0,0,-1125482,0,0,1426000.8}; -VP(0.0699996,0.299999,0){0,0,16.421384,0,0,-49.30993,0,0,82.335561,0,0,-115.58739,0,0,149.15898}; - -VP(0.0799994,1e-06,0){0,0,2280727.8,0,0,2280773.4,0,0,2280859.1,0,0,2280998.1,0,0,2281181.3}; -VP(0.0799994,0.010000933,0){0,0,2278135,0,0,2253241,0,0,2203682.2,0,0,2129941.2,0,0,2032549}; -VP(0.0799994,0.020000867,0){0,0,2268484.2,0,0,2169326.1,0,0,1975330.1,0,0,1694973.6,0,0,1340374.1}; -VP(0.0799994,0.0300008,0){0,0,2252922.6,0,0,2032386.7,0,0,1612868.3,0,0,1035393.9,0,0,356377.56}; -VP(0.0799994,0.040000733,0){0,0,2231419.5,0,0,1845768.6,0,0,1141095.2,0,0,239142.92,0,0,-704394.97}; -VP(0.0799994,0.050000667,0){0,0,2203162.8,0,0,1612856.7,0,0,590370.34,0,0,-590352.65,0,0,-1612864.9}; -VP(0.0799994,0.0600006,0){0,0,2169276.5,0,0,1340623.4,0,0,-76.71712,0,0,-1340625.6,0,0,-2168934.4}; -VP(0.0799994,0.070000533,0){0,0,2129506.4,0,0,1035589.6,0,0,-590316.24,0,0,-1913067.2,0,0,-2253364}; -VP(0.0799994,0.080000467,0){0,0,2084053.6,0,0,704937.17,0,0,-1140774.2,0,0,-2231740.4,0,0,-1845983.4}; -VP(0.0799994,0.0900004,0){0,0,2032426.1,0,0,356710.38,0,0,-1613120.2,0,0,-2253001.3,0,0,-1035367.5}; -VP(0.0799994,0.10000033,0){0,0,1975085.9,0,0,113.85229,0,0,-1974864.7,0,0,-1975020.8,0,0,-380.74858}; -VP(0.0799994,0.11000027,0){0,0,1913349,0,0,-357029.9,0,0,-2203984,0,0,-1435642.7,0,0,1036881.6}; -VP(0.0799994,0.1200002,0){0,0,1845350.6,0,0,-704873.21,0,0,-2281043.5,0,0,-704842.32,0,0,1845655.7}; -VP(0.0799994,0.13000013,0){0,0,1772745.6,0,0,-1035674.6,0,0,-2203648.2,0,0,119514.15,0,0,2254052.1}; -VP(0.0799994,0.14000007,0){0,0,1695180.1,0,0,-1340871,0,0,-1975338.9,0,0,927997.64,0,0,2169093.9}; -VP(0.0799994,0.15,0){0,0,1612825.4,0,0,-1612841.3,0,0,-1612543.8,0,0,1612521.2,0,0,1612058.3}; -VP(0.0799994,0.15999993,0){0,0,1526244.9,0,0,-1845398.3,0,0,-1140637.4,0,0,2084384,0,0,705209.01}; -VP(0.0799994,0.16999987,0){0,0,1435410.5,0,0,-2032217.3,0,0,-590458.98,0,0,2277698.2,0,0,-356556.54}; -VP(0.0799994,0.1799998,0){0,0,1340670.5,0,0,-2169027.1,0,0,-223.59127,0,0,2168584.1,0,0,-1339615}; -VP(0.0799994,0.18999973,0){0,0,1242273.6,0,0,-2252837.9,0,0,590435.56,0,0,1772500.8,0,0,-2032749.8}; -VP(0.0799994,0.19999967,0){0,0,1140442.6,0,0,-2280848.8,0,0,1140564.8,0,0,1139836,0,0,-2280532.3}; -VP(0.0799994,0.2099996,0){0,0,1035699,0,0,-2253241.8,0,0,1613083.8,0,0,357223.09,0,0,-2033463.9}; -VP(0.0799994,0.21999953,0){0,0,927861.35,0,0,-2169623.2,0,0,1975708.5,0,0,-474255.42,0,0,-1341466.6}; -VP(0.0799994,0.22999947,0){0,0,817383.1,0,0,-2032235.4,0,0,2203103.3,0,0,-1242264.5,0,0,-356700.4}; -VP(0.0799994,0.2399994,0){0,0,704847.79,0,0,-1845370.9,0,0,2281143.2,0,0,-1845622.6,0,0,705007.92}; -VP(0.0799994,0.24999933,0){0,0,590342.97,0,0,-1612830.2,0,0,2203126.1,0,0,-2203043.7,0,0,1612498.1}; -VP(0.0799994,0.25999927,0){0,0,474296.31,0,0,-1340926,0,0,1975847.2,0,0,-2269363.4,0,0,2170870.5}; -VP(0.0799994,0.2699992,0){0,0,356851.6,0,0,-1035659.4,0,0,1613192.7,0,0,-2032947.5,0,0,2253814.8}; -VP(0.0799994,0.27999913,0){0,0,238450.24,0,0,-704928.49,0,0,1140598.6,0,0,-1526410.3,0,0,1845458.3}; -VP(0.0799994,0.28999907,0){0,0,119436.21,0,0,-357043.47,0,0,590866.78,0,0,-818411.64,0,0,1037160.2}; -VP(0.0799994,0.299999,0){0,0,11.922335,0,0,-35.808474,0,0,59.818323,0,0,-84.031,0,0,108.55653}; - -VP(0.0899992,1e-06,0){0,0,1199336.2,0,0,1199315.5,0,0,1199270.6,0,0,1199207.1,0,0,1199061.5}; -VP(0.0899992,0.010000933,0){0,0,1198153.6,0,0,1185145.9,0,0,1159246.6,0,0,1120701.4,0,0,1069776.6}; -VP(0.0899992,0.020000867,0){0,0,1192685.5,0,0,1140658.7,0,0,1038853.3,0,0,891683.02,0,0,705546.96}; -VP(0.0899992,0.0300008,0){0,0,1184754.2,0,0,1068843,0,0,848337.39,0,0,544778.53,0,0,187690.61}; -VP(0.0899992,0.040000733,0){0,0,1173715.6,0,0,970816.17,0,0,600039.89,0,0,125399.4,0,0,-371189.8}; -VP(0.0899992,0.050000667,0){0,0,1158276.9,0,0,847929.79,0,0,310324.29,0,0,-310562.7,0,0,-848307.62}; -VP(0.0899992,0.0600006,0){0,0,1140753.9,0,0,704922.14,0,0,-103.62936,0,0,-704829.95,0,0,-1139930.4}; -VP(0.0899992,0.070000533,0){0,0,1119714.7,0,0,544556.53,0,0,-310359.94,0,0,-1005943.5,0,0,-1184994.4}; -VP(0.0899992,0.080000467,0){0,0,1095985,0,0,370759.25,0,0,-600042.12,0,0,-1174023.1,0,0,-970761.2}; -VP(0.0899992,0.0900004,0){0,0,1068224.2,0,0,187464.52,0,0,-848034.87,0,0,-1184473.1,0,0,-543987.2}; -VP(0.0899992,0.10000033,0){0,0,1038500.2,0,0,-7.3678079,0,0,-1038769.7,0,0,-1039036.9,0,0,19.416784}; -VP(0.0899992,0.11000027,0){0,0,1006231.9,0,0,-187640.38,0,0,-1158657.2,0,0,-754841.71,0,0,544327.53}; -VP(0.0899992,0.1200002,0){0,0,970113.93,0,0,-370546.78,0,0,-1199019.8,0,0,-370452.42,0,0,969904.3}; -VP(0.0899992,0.13000013,0){0,0,932207.72,0,0,-544547.54,0,0,-1158917.9,0,0,62512.542,0,0,1185501.3}; -VP(0.0899992,0.14000007,0){0,0,891166.13,0,0,-704795.35,0,0,-1038385.7,0,0,487616.78,0,0,1140014.7}; -VP(0.0899992,0.15,0){0,0,848172.12,0,0,-848217.89,0,0,-847844.69,0,0,847957.13,0,0,847385.47}; -VP(0.0899992,0.15999993,0){0,0,802382.91,0,0,-970181.38,0,0,-599616,0,0,1095765.8,0,0,370693.9}; -VP(0.0899992,0.16999987,0){0,0,754932.06,0,0,-1069114.5,0,0,-310447.26,0,0,1199326.7,0,0,-188765.22}; -VP(0.0899992,0.1799998,0){0,0,704958.68,0,0,-1140556,0,0,-248.65236,0,0,1140833,0,0,-704695.97}; -VP(0.0899992,0.18999973,0){0,0,653304.28,0,0,-1184754,0,0,310423.05,0,0,932308.32,0,0,-1068648.6}; -VP(0.0899992,0.19999967,0){0,0,599602.09,0,0,-1199224.6,0,0,599650.17,0,0,599621.62,0,0,-1199377.5}; -VP(0.0899992,0.2099996,0){0,0,544463.23,0,0,-1184405,0,0,847712.47,0,0,187819.44,0,0,-1068128.6}; -VP(0.0899992,0.21999953,0){0,0,488042.66,0,0,-1141175.6,0,0,1039086.6,0,0,-249151.79,0,0,-706017.92}; -VP(0.0899992,0.22999947,0){0,0,429815.99,0,0,-1068649,0,0,1158547.7,0,0,-653406.34,0,0,-187225.04}; -VP(0.0899992,0.2399994,0){0,0,370690.77,0,0,-970386.82,0,0,1199251.8,0,0,-970007.4,0,0,370681.55}; -VP(0.0899992,0.24999933,0){0,0,310390.11,0,0,-848004.17,0,0,1158394,0,0,-1158345.1,0,0,847660.27}; -VP(0.0899992,0.25999927,0){0,0,249481.19,0,0,-705373.73,0,0,1039488.2,0,0,-1194110.6,0,0,1142537.4}; -VP(0.0899992,0.2699992,0){0,0,187639.98,0,0,-544577.4,0,0,848281.6,0,0,-1069054.9,0,0,1185439.9}; -VP(0.0899992,0.27999913,0){0,0,125326.47,0,0,-370529.74,0,0,599621.01,0,0,-802628.46,0,0,970771.43}; -VP(0.0899992,0.28999907,0){0,0,62802.689,0,0,-187757.37,0,0,310765.55,0,0,-430542.75,0,0,545801.11}; -VP(0.0899992,0.299999,0){0,0,6.2583854,0,0,-18.797492,0,0,31.403123,0,0,-44.11748,0,0,56.993715}; - -VP(0.099999,1e-06,0){0,0,122.2717,0,0,122.22832,0,0,122.14101,0,0,122.01002,0,0,121.86309}; -VP(0.099999,0.010000933,0){0,0,122.46834,0,0,121.03483,0,0,118.188,0,0,113.96935,0,0,108.45126}; -VP(0.099999,0.020000867,0){0,0,121.65209,0,0,116.30315,0,0,105.84466,0,0,90.745939,0,0,71.692521}; -VP(0.099999,0.0300008,0){0,0,120.92677,0,0,109.03403,0,0,86.442932,0,0,55.42058,0,0,19.030381}; -VP(0.099999,0.040000733,0){0,0,119.81359,0,0,99.026732,0,0,61.114881,0,0,12.749458,0,0,-37.607293}; -VP(0.099999,0.050000667,0){0,0,118.01358,0,0,86.395547,0,0,31.616736,0,0,-31.666664,0,0,-86.534566}; -VP(0.099999,0.0600006,0){0,0,116.54411,0,0,71.981358,0,0,-0.080387563,0,0,-72.054845,0,0,-116.34883}; -VP(0.099999,0.070000533,0){0,0,113.96494,0,0,55.410296,0,0,-31.568102,0,0,-102.23279,0,0,-120.27103}; -VP(0.099999,0.080000467,0){0,0,111.95143,0,0,37.861744,0,0,-61.14624,0,0,-119.46009,0,0,-98.614086}; -VP(0.099999,0.0900004,0){0,0,109.0775,0,0,19.117811,0,0,-86.499053,0,0,-120.62539,0,0,-55.236718}; -VP(0.099999,0.10000033,0){0,0,105.77638,0,0,0.00038661946,0,0,-105.70057,0,0,-105.62659,0,0,-0.051360586}; -VP(0.099999,0.11000027,0){0,0,102.7882,0,0,-19.209807,0,0,-118.33606,0,0,-76.968209,0,0,55.676392}; -VP(0.099999,0.1200002,0){0,0,98.846941,0,0,-37.738544,0,0,-122.08846,0,0,-37.705367,0,0,98.674581}; -VP(0.099999,0.13000013,0){0,0,95.300608,0,0,-55.682035,0,0,-118.32145,0,0,6.458813,0,0,120.72836}; -VP(0.099999,0.14000007,0){0,0,90.928246,0,0,-71.860492,0,0,-105.76253,0,0,49.552905,0,0,115.61076}; -VP(0.099999,0.15,0){0,0,86.649422,0,0,-86.706263,0,0,-86.885509,0,0,87.051255,0,0,87.455122}; -VP(0.099999,0.15999993,0){0,0,81.849309,0,0,-98.902526,0,0,-61.030293,0,0,111.30685,0,0,37.639146}; -VP(0.099999,0.16999987,0){0,0,77.088885,0,0,-109.08576,0,0,-31.684924,0,0,122.02127,0,0,-19.059934}; -VP(0.099999,0.1799998,0){0,0,71.759796,0,0,-116.12022,0,0,0.019236055,0,0,116.11968,0,0,-71.659577}; -VP(0.099999,0.18999973,0){0,0,66.548862,0,0,-120.64907,0,0,31.583707,0,0,94.841601,0,0,-108.58648}; -VP(0.099999,0.19999967,0){0,0,61.196684,0,0,-122.402,0,0,61.194661,0,0,61.284233,0,0,-122.59119}; -VP(0.099999,0.2099996,0){0,0,55.531956,0,0,-120.7904,0,0,86.420086,0,0,19.214407,0,0,-108.928}; -VP(0.099999,0.21999953,0){0,0,49.83612,0,0,-116.47011,0,0,105.95411,0,0,-25.423519,0,0,-71.555205}; -VP(0.099999,0.22999947,0){0,0,43.75017,0,0,-108.75091,0,0,117.84066,0,0,-66.39418,0,0,-19.092177}; -VP(0.099999,0.2399994,0){0,0,37.88541,0,0,-99.152242,0,0,122.47173,0,0,-98.953555,0,0,37.716317}; -VP(0.099999,0.24999933,0){0,0,31.620091,0,0,-86.395681,0,0,118.04104,0,0,-118.0743,0,0,86.383089}; -VP(0.099999,0.25999927,0){0,0,25.461477,0,0,-71.929935,0,0,105.82597,0,0,-121.26089,0,0,115.61847}; -VP(0.099999,0.2699992,0){0,0,19.15621,0,0,-55.565276,0,0,86.458221,0,0,-108.78237,0,0,120.35713}; -VP(0.099999,0.27999913,0){0,0,12.779823,0,0,-37.770607,0,0,61.080654,0,0,-81.673399,0,0,98.626637}; -VP(0.099999,0.28999907,0){0,0,6.4118062,0,0,-19.149794,0,0,31.63223,0,0,-43.692585,0,0,55.184315}; -VP(0.099999,0.299999,0){0,0,0.00063643529,0,0,-0.0019081723,0,0,0.0031765239,0,0,-0.0044392302,0,0,0.0056895141}; - -}; diff --git a/tutorial/view3.pos b/tutorial/view3.pos deleted file mode 100644 index e044f81e2df03f52badc57edc5908ed5387edc4d..0000000000000000000000000000000000000000 --- a/tutorial/view3.pos +++ /dev/null @@ -1,2506 +0,0 @@ -View "a 3D scalar map" { -SS(-1,-1,-0.25,-0.86742481,-0.86548068,-0.14483364,-1,-0.70523324,-0.21165758,-1,-0.77608598,0.00064487429){2.0422973,1.5085891,1.5222776,1.5844414}; -SS(0.13402468,0.11673163,-0.1460819,0,0,-0.25,0.29173763,0,-0.20843742,0.22032809,0,-9.1119885e-05){0.039337265,0.044304329,0.1134179,0.027339551}; -SS(0.88049681,0.87960137,0.13412341,1,1,0.25,1,0.70834898,0.20844998,1,0.77979347,0.00010253841){1.5518824,2.0447444,1.5291243,1.5887874}; -SS(0.68966181,1,0.19790566,0.88049681,0.87960137,0.13412341,0.78186447,1,3.3673518e-05,0.82853688,1,0.32125076){1.492557,1.5518824,1.5923176,1.7703132}; -SS(-0.8827276,-0.88146034,0.13123348,-1,-1,-6.9388939e-15,-1,-1,0.25,-1,-0.77608598,0.00064487429){1.5595365,1.9831286,2.0427074,1.5844414}; -SS(-0.8827276,-0.88146034,0.13123348,-1,-1,0.25,-1,-0.70710233,0.21356199,-1,-0.77608598,0.00064487429){1.5595365,2.0427074,1.5280688,1.5844414}; -SS(-1,-1,0.25,-0.8827276,-0.88146034,0.13123348,-0.70832062,-1,0.2082538,-0.77973152,-1,-0.0001062007){2.0427074,1.5595365,1.5291125,1.588155}; -SS(0.88354722,0.11667767,-0.13069643,1,0,-0.25,1,0,-6.9388939e-15,0.77985819,0,-0.00014691753){0.79839767,1.043399,0.9846322,0.58919206}; -SS(0.35689191,0.091376279,-0.36932783,0.25,0,-0.5,0.5,0,-0.5,0.50007058,0,-0.27987971){0.26145514,0.28810477,0.48471812,0.31006895}; -SS(-0.1159097,-0.14329028,0.19302206,0,0,0.25,0,-0.29157012,0.20836692,0,-0.22019801,5.0496855e-05){0.055235283,0.045060365,0.11172813,0.029059683}; -SS(0,-0.75,-0.5,-0.11754465,-0.65214472,-0.32749638,0,-0.70830496,-0.20826096,0,-0.49997234,-0.27965571){0.79460868,0.53347202,0.5287181,0.30906942}; -SS(-0.75,-1,-0.5,-0.6448883,-0.87343314,-0.36731947,-0.70823063,-1,-0.20843533,-0.49995867,-1,-0.27986665){1.7946951,1.296688,1.5240742,1.3082069}; -SS(0.87272604,0.35900693,0.37172569,1,0.25,0.5,1,0.29178008,0.20838772,1,0.50005385,0.27984222){1.0107603,1.2942978,1.1084285,1.3085441}; -SS(0.87272604,0.35900693,0.37172569,1,0.25,0.5,0.78912399,0.50423732,0.5,0.81143387,0.18901581,0.5){1.0107603,1.2942978,1.1096027,0.9265446}; -SS(0.62860594,0.86645525,0.049037492,0.4450496,1,-0.00012892076,0.68966181,1,0.19790566,0.78186447,1,3.3673518e-05){1.1303867,1.179155,1.492557,1.5923176}; -SS(0,-1,-0.25,-0.12233239,-0.87748906,-0.13583418,-0.29168215,-1,-0.20844865,-0.22019153,-1,-0.00010416607){1.0435946,0.78823805,1.1132023,1.0287732}; -SS(-0.12233239,-0.87748906,-0.13583418,0,-1,-0.25,0,-0.70830496,-0.20826096,0,-0.77970171,0.00010845427){0.78823805,1.0435946,0.5287181,0.58842154}; -SS(1,0.75,0.5,0.87881231,0.64063264,0.37220388,1,0.70834898,0.20844998,1,0.50005385,0.27984222){1.7930237,1.3069719,1.5291243,1.3085441}; -SS(-0.36340067,-0.87821042,-0.37678589,-0.25,-1,-0.5,-0.50377808,-0.78884267,-0.5,-0.18848435,-0.81110947,-0.5){1.0307746,1.2929607,1.1087956,0.92571371}; -SS(-0.36340067,-0.87821042,-0.37678589,-0.25,-1,-0.5,-0.29168215,-1,-0.20844865,-0.49995867,-1,-0.27986665){1.0307746,1.2929607,1.1132023,1.3082069}; -SS(1,0.25,-0.5,0.87867265,0.36391919,-0.37720578,0.78906409,0.5041626,-0.5,0.81149777,0.18885984,-0.5){1.2935113,1.03034,1.1105402,0.92750237}; -SS(1,0.25,-0.5,0.87867265,0.36391919,-0.37720578,1,0.2917639,-0.20827961,1,0.50010355,-0.27968748){1.2935113,1.03034,1.1127834,1.3071084}; -SS(-0.63815223,-0.88141187,0.37488811,-0.75,-1,0.5,-0.70832062,-1,0.2082538,-0.4999534,-1,0.27968311){1.3088768,1.7943537,1.5291125,1.3075402}; -SS(0.88049681,0.87960137,0.13412341,1,1,0.25,0.78186447,1,3.3673518e-05,0.82853688,1,0.32125076){1.5518824,2.0447444,1.5923176,1.7703132}; -SS(-1,-1,-6.9388939e-15,-0.8827276,-0.88146034,0.13123348,-1,-1,0.25,-0.77973152,-1,-0.0001062007){1.9831286,1.5595365,2.0427074,1.588155}; -SS(1,0,-0.25,0.88354722,0.11667767,-0.13069643,1,0,-6.9388939e-15,1,0.2203628,5.6826691e-05){1.043399,0.79839767,0.9846322,1.0268649}; -SS(0.88354722,0.11667767,-0.13069643,1,0,-0.25,1,0.2917639,-0.20827961,1,0.2203628,5.6826691e-05){0.79839767,1.043399,1.1127834,1.0268649}; -SS(1,0,-0.25,0.88354722,0.11667767,-0.13069643,0.70841775,0,-0.20847891,0.77985819,0,-0.00014691753){1.043399,0.79839767,0.52293439,0.58919206}; -SS(-1,-0.00021427218,0.00011802244,-0.88905946,-0.098697315,-0.13184676,-1,-0.25140376,-0.1934451,-1,-0.00018427889,-0.26378916){0.98080906,0.8023886,1.0790534,1.0508045}; -SS(-0.88905946,-0.098697315,-0.13184676,-1,-0.00021427218,0.00011802244,-1,-0.25140376,-0.1934451,-1,-0.20076836,0.00061221676){0.8023886,0.98080906,1.0790534,1.0172898}; -SS(0.50761134,0.34933779,0.39015973,0.37492492,0.49312259,0.5,0.37501462,0.2307626,0.5,0.5725222,0.50074158,0.5){0.51484928,0.61809871,0.42590445,0.8121357}; -SS(0.67112401,0.32933441,0.5,0.50761134,0.34933779,0.39015973,0.37501462,0.2307626,0.5,0.5725222,0.50074158,0.5){0.79210069,0.51484928,0.42590445,0.8121357}; -SS(-0.098950987,-0.13391411,-0.14594667,0,0,-0.25,0,0,-6.9388939e-15,0,-0.22019801,5.0496855e-05){0.03512721,0.044304329,-0.017891206,0.029059683}; -SS(0,0,-0.25,-0.098950987,-0.13391411,-0.14594667,0,-0.29164705,-0.20823955,0,-0.22019801,5.0496855e-05){0.044304329,0.03512721,0.11473247,0.029059683}; -SS(-0.49284988,-0.37485679,0.5,-0.34549718,-0.50098866,0.4105565,-0.23048975,-0.37484721,0.5,-0.50050976,-0.57246927,0.5){0.6163523,0.5260109,0.42714666,0.81219504}; -SS(-0.34549718,-0.50098866,0.4105565,-0.32897755,-0.67088709,0.5,-0.23048975,-0.37484721,0.5,-0.50050976,-0.57246927,0.5){0.5260109,0.79643001,0.42714666,0.81219504}; -SS(0.37492492,0.49312259,0.5,0.35567295,0.65317229,0.39545235,0.21512427,0.73211919,0.5,0.45042372,0.78359022,0.5){0.61809871,0.69293227,0.81521474,1.0496179}; -SS(0.25,0,-0.5,0.35689191,0.091376279,-0.36932783,0.29173763,0,-0.20843742,0.50007058,0,-0.27987971){0.28810477,0.26145514,0.1134179,0.31006895}; -SS(-1,0.49991607,0.0031934521,-0.89426176,0.41257007,-0.12932618,-1,0.25105097,-0.19350143,-1,0.47527469,-0.27513051){1.2302733,0.974079,1.0825888,1.2834809}; -SS(-0.89426176,0.41257007,-0.12932618,-1,0.49991607,0.0031934521,-1,0.25105097,-0.19350143,-1,0.29928494,0.0012550607){0.974079,1.2302733,1.0825888,1.0718665}; -SS(-1,1,-0.25,-0.89962374,0.8609561,-0.16698164,-1,1,-6.9388939e-15,-1,0.77631186,0.00053339564){2.0450698,1.5692753,1.9810426,1.5817554}; -SS(-0.89962374,0.8609561,-0.16698164,-1,1,-0.25,-1,0.70529035,-0.21162945,-1,0.77631186,0.00053339564){1.5692753,2.0450698,1.520296,1.5817554}; -SS(-1,1,-0.25,-0.89962374,0.8609561,-0.16698164,-1,0.70529035,-0.21162945,-1,0.83964442,-0.3309874){2.0450698,1.5692753,1.520296,1.7979585}; -SS(-1,-0.11111111,0.5,-0.89646962,-0.32955067,0.34017365,-1,-0.33333333,0.5,-1,-0.24887753,0.1953112){1.2390062,1.0133061,1.3443603,1.0768014}; -SS(-0.89646962,-0.32955067,0.34017365,-1,-0.33333333,0.5,-1,-0.24887753,0.1953112,-1,-0.47520831,0.27427507){1.0133061,1.3443603,1.0768014,1.2822693}; -SS(-0.89804207,0.11676539,-0.10792088,-1,-0.00021427218,0.00011802244,-1,0.25105097,-0.19350143,-1,-0.00018427889,-0.26378916){0.82300022,0.98080906,1.0825888,1.0508045}; -SS(-1,-0.00021427218,0.00011802244,-0.89804207,0.11676539,-0.10792088,-1,0.25105097,-0.19350143,-1,0.29928494,0.0012550607){0.98080906,0.82300022,1.0825888,1.0718665}; -SS(-1,0.33333333,0.5,-0.91004595,0.15296589,0.33139812,-1,0.11111111,0.5,-1,0.24865949,0.19540364){1.3403692,0.94743142,1.246301,1.0814407}; -SS(-0.91004595,0.15296589,0.33139812,-1,0.11111111,0.5,-1,0.24865949,0.19540364,-1,-0.00012222908,0.26646899){0.94743142,1.246301,1.0814407,1.0506696}; -SS(0.34720309,0.90097601,-0.12745168,0.4450496,1,-0.00012892076,0.43683247,1,-0.26068681,0.24937941,1,-0.00011138016){0.93504792,1.179155,1.2435523,1.0446566}; -SS(0.17426348,1,-0.18078905,0.34720309,0.90097601,-0.12745168,0.43683247,1,-0.26068681,0.24937941,1,-0.00011138016){1.045853,0.93504792,1.2435523,1.0446566}; -SS(0.27123349,0.36190713,0.41476339,0.37492492,0.49312259,0.5,0.11523872,0.30161582,0.5,0.37501462,0.2307626,0.5){0.36300231,0.61809871,0.33546792,0.42590445}; -SS(0.37492492,0.49312259,0.5,0.27123349,0.36190713,0.41476339,0.11523872,0.30161582,0.5,0.16321322,0.50838432,0.5){0.61809871,0.36300231,0.33546792,0.52238519}; -SS(-0.49284988,-0.37485679,0.5,-0.37661764,-0.26006406,0.40868766,-0.30122568,-0.11513872,0.5,-0.23048975,-0.37484721,0.5){0.6163523,0.36234206,0.33848202,0.42714666}; -SS(-0.37661764,-0.26006406,0.40868766,-0.49284988,-0.37485679,0.5,-0.30122568,-0.11513872,0.5,-0.50807239,-0.16307462,0.5){0.36234206,0.6163523,0.33848202,0.52416601}; -SS(-0.16643696,-0.21791406,0.42402077,0,-0.25,0.5,-0.30122568,-0.11513872,0.5,-0.23048975,-0.37484721,0.5){0.23818505,0.28720824,0.33848202,0.42714666}; -SS(0,-0.25,0.5,-0.16643696,-0.21791406,0.42402077,-0.30122568,-0.11513872,0.5,-0.17669296,0.011023676,0.5){0.28720824,0.23818505,0.33848202,0.26322593}; -SS(0.37549445,0.49317282,-0.5,0.27170325,0.36204749,-0.4201745,0.11583535,0.30145324,-0.5,0.37532516,0.23078833,-0.5){0.61648995,0.36885377,0.33954703,0.42551454}; -SS(0.27170325,0.36204749,-0.4201745,0.37549445,0.49317282,-0.5,0.11583535,0.30145324,-0.5,0.16368264,0.50834729,-0.5){0.36885377,0.61648995,0.33954703,0.52115901}; -SS(0,0,-6.9388939e-15,0.13913358,0.10014326,0.18199659,0,0,0.25,0.22032809,0,-9.1119885e-05){-0.017891206,0.045990896,0.045060365,0.027339551}; -SS(0,0,0.25,0.13913358,0.10014326,0.18199659,0.29175541,0,0.20824909,0.22032809,0,-9.1119885e-05){0.045060365,0.045990896,0.1093371,0.027339551}; -SS(-0.92571354,0.17249619,-0.34283108,-1,0.33333333,-0.5,-1,0.11111111,-0.5,-1,0.25105097,-0.19350143){0.99158484,1.3393331,1.2464205,1.0825888}; -SS(-1,0.11111111,-0.5,-0.92571354,0.17249619,-0.34283108,-1,0.25105097,-0.19350143,-1,-0.00018427889,-0.26378916){1.2464205,0.99158484,1.0825888,1.0508045}; -SS(-1,-0.55555556,0.5,-0.89663862,-0.69397302,0.37275403,-1,-0.77777778,0.5,-1,-0.70710233,0.21356199){1.5359657,1.4119512,1.8434331,1.5280688}; -SS(-1,-0.55555556,0.5,-0.89663862,-0.69397302,0.37275403,-0.67513028,-0.66529728,0.5,-0.80635543,-0.81164184,0.5){1.5359657,1.4119512,1.1284607,1.5410993}; -SS(-0.91414606,-0.68082467,-0.37109558,-1,-0.55555556,-0.5,-1,-0.77777778,-0.5,-1,-0.70523324,-0.21165758){1.4249306,1.5366945,1.8436809,1.5222776}; -SS(-0.91414606,-0.68082467,-0.37109558,-1,-0.55555556,-0.5,-0.67495489,-0.6652659,-0.5,-0.80632325,-0.81147186,-0.5){1.4249306,1.5366945,1.1276355,1.5409894}; -SS(-0.91414606,-0.68082467,-0.37109558,-1,-0.55555556,-0.5,-1,-0.70523324,-0.21165758,-1,-0.47540235,-0.27521785){1.4249306,1.5366945,1.5222776,1.2841965}; -SS(-1,-0.77777778,-0.5,-0.91414606,-0.68082467,-0.37109558,-1,-0.70523324,-0.21165758,-1,-0.83959635,-0.33115777){1.8436809,1.4249306,1.5222776,1.7998257}; -SS(-1,1,-6.9388939e-15,-0.93582873,0.86427167,0.14668289,-1,1,0.25,-1,0.77631186,0.00053339564){1.9810426,1.6320629,2.0473025,1.5817554}; -SS(-1,1,0.25,-0.93582873,0.86427167,0.14668289,-1,0.70725984,0.21334539,-1,0.77631186,0.00053339564){2.0473025,1.6320629,1.5286486,1.5817554}; -SS(-0.93582873,0.86427167,0.14668289,-1,1,0.25,-1,0.70725984,0.21334539,-1,0.84108515,0.33242406){1.6320629,2.0473025,1.5286486,1.8031397}; -SS(-0.073421274,-0.375,-0.38984354,0,-0.5,-0.5,0,-0.25,-0.5,0,-0.49997234,-0.27965571){0.28201081,0.4845449,0.29677328,0.30906942}; -SS(-0.073421274,-0.375,-0.38984354,0,-0.25,-0.5,0,-0.29164705,-0.20823955,0,-0.49997234,-0.27965571){0.28201081,0.29677328,0.11473247,0.30906942}; -SS(0,-0.25,-0.5,-0.073421274,-0.375,-0.38984354,0,-0.29164705,-0.20823955,0,-0.16143077,-0.33843101){0.29677328,0.28201081,0.11473247,0.12966739}; -SS(-0.41648151,0.41684878,0.5,-0.29261734,0.53193925,0.43339885,-0.3132159,0.69976014,0.5,-0.18136176,0.40461939,0.5){0.58097186,0.53993003,0.82050522,0.42386795}; -SS(-0.29261734,0.53193925,0.43339885,-0.41648151,0.41684878,0.5,-0.3132159,0.69976014,0.5,-0.48141868,0.60085372,0.5){0.53993003,0.58097186,0.82050522,0.82306978}; -SS(-0.29261734,0.53193925,0.43339885,-0.033588837,0.5879061,0.5,-0.3132159,0.69976014,0.5,-0.18136176,0.40461939,0.5){0.53993003,0.57806214,0.82050522,0.42386795}; -SS(-0.58754442,0.033885734,-0.5,-0.41767704,0.010770256,-0.44072823,-0.30131805,-0.11512588,-0.5,-0.40408872,0.18166381,-0.5){0.58180393,0.35514259,0.3368451,0.42526168}; -SS(-0.41767704,0.010770256,-0.44072823,-0.58754442,0.033885734,-0.5,-0.30131805,-0.11512588,-0.5,-0.50815189,-0.16301678,-0.5){0.35514259,0.58180393,0.3368451,0.52110597}; -SS(-0.41767704,0.010770256,-0.44072823,-0.30131805,-0.11512588,-0.5,-0.40408872,0.18166381,-0.5,-0.19007896,0.04567822,-0.5){0.35514259,0.3368451,0.42526168,0.27736807}; -SS(-1,-0.00021427218,0.00011802244,-0.91347537,0.15552497,0.067511395,-1,0.24865949,0.19540364,-1,-0.00012222908,0.26646899){0.98080906,0.85045394,1.0814407,1.0506696}; -SS(-0.91347537,0.15552497,0.067511395,-1,-0.00021427218,0.00011802244,-1,0.24865949,0.19540364,-1,0.29928494,0.0012550607){0.85045394,0.98080906,1.0814407,1.0718665}; -SS(0.0011150345,0.93517443,-0.37389303,0.11111111,1,-0.5,-0.11111111,1,-0.5,-0.088882135,1,-0.23281641){1.0026385,1.2422682,1.2528065,1.0431215}; -SS(0.0011150345,0.93517443,-0.37389303,0.11111111,1,-0.5,-0.088882135,1,-0.23281641,0.2222976,1,-0.35617554){1.0026385,1.2422682,1.0431215,1.1585843}; -SS(0.17426348,1,-0.18078905,0.0011150345,0.93517443,-0.37389303,-0.088882135,1,-0.23281641,0.2222976,1,-0.35617554){1.045853,1.0026385,1.0431215,1.1585843}; -SS(0.37549445,0.49317282,-0.5,0.50136923,0.34587735,-0.44862257,0.37532516,0.23078833,-0.5,0.57309542,0.50075776,-0.5){0.61648995,0.56260896,0.42551454,0.81773274}; -SS(0.50136923,0.34587735,-0.44862257,0.671223,0.32907594,-0.5,0.37532516,0.23078833,-0.5,0.57309542,0.50075776,-0.5){0.56260896,0.79435762,0.42551454,0.81773274}; -SS(0.671223,0.32907594,-0.5,0.50136923,0.34587735,-0.44862257,0.37532516,0.23078833,-0.5,0.6251418,0.1440922,-0.5){0.79435762,0.56260896,0.42551454,0.63751638}; -SS(0.64232771,0.84838332,0.46476191,0.77777778,1,0.5,0.55555556,1,0.5,0.81191124,0.80644944,0.5){1.3339184,1.8450917,1.5357742,1.5425973}; -SS(0.55555556,1,0.5,0.64232771,0.84838332,0.46476191,0.66554141,0.67524133,0.5,0.45042372,0.78359022,0.5){1.5357742,1.3339184,1.1271263,1.0496179}; -SS(0.64232771,0.84838332,0.46476191,0.55555556,1,0.5,0.66554141,0.67524133,0.5,0.81191124,0.80644944,0.5){1.3339184,1.5357742,1.1271263,1.5425973}; -SS(0.25,0,0.5,0.26083053,0.15082484,0.37728795,0.1615172,0,0.33845519,0.12517622,0.12515553,0.5){0.29281005,0.21918499,0.13068911,0.27156885}; -SS(-1,0.70529035,-0.21162945,-0.83248216,0.76782327,-0.31292259,-1,0.83964442,-0.3309874,-0.89962374,0.8609561,-0.16698164){1.520296,1.366757,1.7979585,1.5692753}; -SS(0.51674933,0.64481281,-0.39755292,0.49866453,0.63973666,-0.21510859,0.34412919,0.6158316,-0.3427703,0.48047723,0.47791267,-0.33071402){0.82858869,0.68344633,0.59958408,0.55795418}; -SS(0.37549445,0.49317282,-0.5,0.50136923,0.34587735,-0.44862257,0.57309542,0.50075776,-0.5,0.48047723,0.47791267,-0.33071402){0.61648995,0.56260896,0.81773274,0.55795418}; -SS(0.098704003,0.67249079,0.1943501,0.11458044,0.70010244,0.010073529,0.24404834,0.79519787,0.082231238,0.26064395,0.61953306,0.12890567){0.47957633,0.49378055,0.68472542,0.45328252}; -SS(-0.65355936,0.25468043,-0.1897796,-0.49391083,0.27907498,-0.27264436,-0.62938155,0.17932964,-0.37445272,-0.63048479,0.37587985,-0.34368186){0.51379882,0.37398026,0.55109073,0.64388066}; -SS(-0.32897755,-0.67088709,0.5,-0.40125956,-0.65699374,0.33213173,-0.50050976,-0.57246927,0.5,-0.34549718,-0.50098866,0.4105565){0.79643001,0.69449311,0.81219504,0.5260109}; -SS(0,0,-0.25,-0.16707278,-0.087678023,-0.31121894,0,-0.16143077,-0.33843101,-0.098950987,-0.13391411,-0.14594667){0.044304329,0.11599041,0.12966739,0.03512721}; -SS(0,-1,0.25,-0.12988976,-0.86995226,0.20452896,-0.16134158,-1,0.33850563,0,-0.83845667,0.33864852){1.0438639,0.79894991,1.129042,0.80178572}; -SS(-0.52470763,0.46530444,0.33754711,-0.41648151,0.41684878,0.5,-0.48141868,0.60085372,0.5,-0.61509744,0.47589965,0.5){0.59371518,0.58097186,0.82306978,0.84259202}; -SS(0.27170325,0.36204749,-0.4201745,0.11583535,0.30145324,-0.5,0.20129651,0.21389912,-0.31902192,0.09693172,0.3918681,-0.3370861){0.36885377,0.33954703,0.16839385,0.26256104}; -SS(0.8781758,0.86708556,-0.1989731,1,1,-0.25,1,0.83864447,-0.33847614,0.82865019,1,-0.3214153){1.5462283,2.0438315,1.8065101,1.7714679}; -SS(0.11583535,0.30145324,-0.5,0.27170325,0.36204749,-0.4201745,0.16368264,0.50834729,-0.5,0.09693172,0.3918681,-0.3370861){0.33954703,0.36885377,0.52115901,0.26256104}; -SS(-0.65956212,-0.52273243,-0.19262862,-0.7055892,-0.50616462,-0.017961589,-0.52487586,-0.5117405,-0.017639258,-0.61549046,-0.35581383,-0.12962263){0.7287475,0.74484897,0.51812974,0.50877487}; -SS(-0.36145429,0.13293621,0.35430528,-0.24000819,0.17660305,0.5,-0.4543958,0.20406131,0.5,-0.40752783,0.030201366,0.5){0.26360063,0.3210912,0.48353653,0.40526498}; -SS(-0.7055892,-0.50616462,-0.017961589,-0.65631386,-0.59724887,0.13822882,-0.52487586,-0.5117405,-0.017639258,-0.59094649,-0.40495207,0.12834587){0.74484897,0.7890621,0.51812974,0.51475101}; -SS(-0.32064519,0.49448821,1.4739833e-06,-0.24163432,0.33561251,-0.055881164,-0.096302334,0.43534175,-0.056072844,-0.19461387,0.3919517,0.10437587){0.32892635,0.16437697,0.18078295,0.19075448}; -SS(0.51674933,0.64481281,-0.39755292,0.37549445,0.49317282,-0.5,0.57309542,0.50075776,-0.5,0.48047723,0.47791267,-0.33071402){0.82858869,0.61648995,0.81773274,0.55795418}; -SS(-0.16015893,0.67694077,0.39025863,-0.3132159,0.69976014,0.5,-0.1827732,0.83017807,0.5,-0.30949447,0.8262402,0.33528492){0.6265216,0.82050522,0.95598938,0.87388961}; -SS(0.11458044,0.70010244,0.010073529,0.098704003,0.67249079,0.1943501,0.086744979,0.52712982,0.027891324,0.26064395,0.61953306,0.12890567){0.49378055,0.47957633,0.26660844,0.45328252}; -SS(-0.4581749,-0.5263483,-0.32801665,-0.49292178,-0.37477565,-0.5,-0.50036547,-0.57239096,-0.5,-0.62341011,-0.46880832,-0.38153973){0.57811658,0.6115465,0.81333009,0.73807879}; -SS(0.37549445,0.49317282,-0.5,0.51674933,0.64481281,-0.39755292,0.34412919,0.6158316,-0.3427703,0.48047723,0.47791267,-0.33071402){0.61648995,0.82858869,0.59958408,0.55795418}; -SS(-0.10743676,0.85847111,-0.11136175,-0.012406168,1,-0.034358602,-0.035654771,0.78507762,0.045007896,0.094968532,0.84539386,-0.087484586){0.7462212,0.99121748,0.60161266,0.71839764}; -SS(-0.58934795,0.84141567,-0.18062024,-0.74249217,0.75399014,-0.15399718,-0.65756371,0.81308934,-0.3429452,-0.6293812,0.63993291,-0.28812602){1.0736489,1.1267767,1.1958888,0.87296464}; -SS(-0.30122568,-0.11513872,0.5,-0.37661764,-0.26006406,0.40868766,-0.50807239,-0.16307462,0.5,-0.40506391,-0.079541407,0.3303193){0.33848202,0.36234206,0.52416601,0.26156128}; -SS(-0.39806707,0.15776443,0.15870839,-0.26986228,0.26051837,0.22418657,-0.41843781,0.30742585,0.3397996,-0.36145429,0.13293621,0.35430528){0.19317292,0.1749353,0.37011438,0.26360063}; -SS(-0.52470763,0.46530444,0.33754711,-0.54640726,0.34339216,0.19847863,-0.41843781,0.30742585,0.3397996,-0.61674646,0.25215289,0.3447871){0.59371518,0.43575493,0.37011438,0.54607287}; -SS(-0.10037172,0.18891947,0.20844359,0,0,0.25,-0.20045203,0.067929244,0.29301468,-0.15128303,0.02253305,0.11422928){0.074828316,0.045060365,0.10955402,0.025420414}; -SS(0.57309542,0.50075776,-0.5,0.50136923,0.34587735,-0.44862257,0.67125235,0.44297685,-0.31879306,0.48047723,0.47791267,-0.33071402){0.81773274,0.56260896,0.72773009,0.55795418}; -SS(-0.35582611,-0.64426575,-0.070000747,-0.3533559,-0.49437708,0.037576204,-0.52487586,-0.5117405,-0.017639258,-0.50537844,-0.68762812,0.023695348){0.52757348,0.35575629,0.51812974,0.71483247}; -SS(0.0011150345,0.93517443,-0.37389303,-0.11111111,1,-0.5,0.00024312215,0.80750011,-0.5,-0.18268367,0.83021756,-0.5){1.0026385,1.2528065,0.88610119,0.9573479}; -SS(-0.7055892,-0.50616462,-0.017961589,-0.65956212,-0.52273243,-0.19262862,-0.82285362,-0.63420593,-0.0683896,-0.85520613,-0.46088631,-0.14784569){0.74484897,0.7287475,1.0691297,0.95161001}; -SS(-0.0073778212,0.36022468,0.15230712,-0.10037172,0.18891947,0.20844359,0.050277172,0.20853018,0.30186362,-0.11614487,0.30919383,0.33918095){0.13675819,0.074828316,0.12181545,0.20820823}; -SS(-0.58258855,0.14037208,-0.067351147,-0.65355936,0.25468043,-0.1897796,-0.78848723,0.26584533,-0.068869999,-0.63246299,0.29145388,0.035195127){0.34532741,0.51379882,0.68151298,0.47226275}; -SS(-0.32064519,0.49448821,1.4739833e-06,-0.4433427,0.53576375,-0.12560501,-0.54631436,0.45612147,-0.00074796238,-0.45563594,0.60375179,0.095527884){0.32892635,0.48429505,0.48593017,0.56263538}; -SS(0.11583535,0.30145324,-0.5,0.09693172,0.3918681,-0.3370861,0.16368264,0.50834729,-0.5,-0.029932551,0.40748663,-0.5){0.33954703,0.26256104,0.52115901,0.4038008}; -SS(-0.7489605,0.18190923,0.13647301,-0.91347537,0.15552497,0.067511395,-0.76752638,0.004448061,-0.013214377,-0.84289574,0.018333867,0.1608607){0.59564173,0.85045394,0.5734925,0.72430843}; -SS(0.27123349,0.36190713,0.41476339,0.11523872,0.30161582,0.5,0.16321322,0.50838432,0.5,0.085954007,0.41736025,0.32943097){0.36300231,0.33546792,0.52238519,0.27115576}; -SS(-0.79227163,-0.79754897,0.0021844777,-1,-0.77608598,0.00064487429,-0.8827276,-0.88146034,0.13123348,-0.83996275,-0.66999882,0.11765553){1.2530106,1.5844414,1.5595365,1.1553131}; -SS(0.25248643,0.73785598,-0.13082591,0.11458044,0.70010244,0.010073529,0.24404834,0.79519787,0.082231238,0.094968532,0.84539386,-0.087484586){0.60350215,0.49378055,0.68472542,0.71839764}; -SS(-0.48255002,0.69900846,-0.19155417,-0.39032311,0.63241857,-0.34621958,-0.50782983,0.50249565,-0.29902586,-0.6293812,0.63993291,-0.28812602){0.74365966,0.65630059,0.58612549,0.87296464}; -SS(-0.48255002,0.69900846,-0.19155417,-0.4433427,0.53576375,-0.12560501,-0.50782983,0.50249565,-0.29902586,-0.39032311,0.63241857,-0.34621958){0.74365966,0.48429505,0.58612549,0.65630059}; -SS(-0.74249217,0.75399014,-0.15399718,-0.83248216,0.76782327,-0.31292259,-0.65756371,0.81308934,-0.3429452,-0.6293812,0.63993291,-0.28812602){1.1267767,1.366757,1.1958888,0.87296464}; -SS(0.59416595,0.14141347,0.32656529,0.50011436,0,0.27961788,0.42621669,0.19017509,0.30505062,0.46476684,0.14382827,0.12247557){0.46498444,0.30940041,0.29714896,0.23450402}; -SS(0.13913358,0.10014326,0.18199659,0,0,0.25,0.1615172,0,0.33845519,0.050277172,0.20853018,0.30186362){0.045990896,0.045060365,0.13068911,0.12181545}; -SS(0.61535375,0.70719289,-0.095218388,0.45788353,0.76094781,-0.0096633567,0.62860594,0.86645525,0.049037492,0.54700908,0.85955032,-0.16345766){0.87858083,0.76853994,1.1303867,1.0528061}; -SS(-0.30122568,-0.11513872,0.5,-0.40506391,-0.079541407,0.3303193,-0.50807239,-0.16307462,0.5,-0.40752783,0.030201366,0.5){0.33848202,0.26156128,0.52416601,0.40526498}; -SS(0.50136923,0.34587735,-0.44862257,0.671223,0.32907594,-0.5,0.57309542,0.50075776,-0.5,0.67125235,0.44297685,-0.31879306){0.56260896,0.79435762,0.81773274,0.72773009}; -SS(-1,-0.00021427218,0.00011802244,-0.89804207,0.11676539,-0.10792088,-0.76752638,0.004448061,-0.013214377,-0.88905946,-0.098697315,-0.13184676){0.98080906,0.82300022,0.5734925,0.8023886}; -SS(-0.16707278,-0.087678023,-0.31121894,-0.29237157,-0.11865629,-0.17606411,-0.1971424,-0.26981885,-0.30750196,-0.098950987,-0.13391411,-0.14594667){0.11599041,0.11404163,0.19280289,0.03512721}; -SS(-0.14850787,-0.69358405,-0.087583548,0,-0.70830496,-0.20826096,0,-0.77970171,0.00010845427,-0.12233239,-0.87748906,-0.13583418){0.49763432,0.5287181,0.58842154,0.78823805}; -SS(-0.83248216,0.76782327,-0.31292259,-0.74249217,0.75399014,-0.15399718,-0.80558396,0.5878127,-0.29244037,-0.6293812,0.63993291,-0.28812602){1.366757,1.1267767,1.0616703,0.87296464}; -SS(-0.34310942,-0.010167032,0.1509038,-0.15128303,0.02253305,0.11422928,-0.20656092,-0.13938028,0.029547229,-0.28278924,0.041190137,-0.04219563){0.12661586,0.025420414,0.048278496,0.063480395}; -SS(0.29175541,0,0.20824909,0.13913358,0.10014326,0.18199659,0.1615172,0,0.33845519,0.26083053,0.15082484,0.37728795){0.1093371,0.045990896,0.13068911,0.21918499}; -SS(-1,-0.00021427218,0.00011802244,-0.91347537,0.15552497,0.067511395,-0.76752638,0.004448061,-0.013214377,-0.89804207,0.11676539,-0.10792088){0.98080906,0.85045394,0.5734925,0.82300022}; -SS(-0.62450053,-0.31310845,0.38575928,-0.73174745,-0.21491043,0.5,-0.50807239,-0.16307462,0.5,-0.64009684,-0.10188458,0.37412975){0.62379151,0.81377033,0.52416601,0.54631619}; -SS(-0.48255002,0.69900846,-0.19155417,-0.58934795,0.84141567,-0.18062024,-0.48952189,0.78345034,0.019065462,-0.38143574,0.84373572,-0.12387887){0.74365966,1.0736489,0.83409809,0.85864479}; -SS(0.35689191,0.091376279,-0.36932783,0.29173763,0,-0.20843742,0.50007058,0,-0.27987971,0.37137652,0.1767682,-0.19801193){0.26145514,0.1134179,0.31006895,0.19205628}; -SS(-0.15923414,-0.34171533,-0.15079999,0,-0.29164705,-0.20823955,-0.1971424,-0.26981885,-0.30750196,-0.098950987,-0.13391411,-0.14594667){0.14783141,0.11473247,0.19280289,0.03512721}; -SS(-0.91347537,0.15552497,0.067511395,-1,0.29928494,0.0012550607,-0.78848723,0.26584533,-0.068869999,-0.89804207,0.11676539,-0.10792088){0.85045394,1.0718665,0.68151298,0.82300022}; -SS(-0.68637718,0.43295764,-0.18031685,-0.65355936,0.25468043,-0.1897796,-0.83127473,0.33505962,-0.32026923,-0.63048479,0.37587985,-0.34368186){0.67437813,0.51379882,0.89071695,0.64388066}; -SS(-0.82285362,-0.63420593,-0.0683896,-0.7055892,-0.50616462,-0.017961589,-0.82595855,-0.48031431,0.11444494,-0.83996275,-0.66999882,0.11765553){1.0691297,0.74484897,0.90887195,1.1553131}; -SS(0.11458044,0.70010244,0.010073529,-0.0089783977,0.64320989,-0.13441642,-0.035654771,0.78507762,0.045007896,0.094968532,0.84539386,-0.087484586){0.49378055,0.41358858,0.60161266,0.71839764}; -SS(-0.52427834,0.10778268,0.27208728,-0.39806707,0.15776443,0.15870839,-0.41843781,0.30742585,0.3397996,-0.36145429,0.13293621,0.35430528){0.34448415,0.19317292,0.37011438,0.26360063}; -SS(-0.7055892,-0.50616462,-0.017961589,-0.65631386,-0.59724887,0.13822882,-0.82595855,-0.48031431,0.11444494,-0.83996275,-0.66999882,0.11765553){0.74484897,0.7890621,0.90887195,1.1553131}; -SS(-1,-0.77608598,0.00064487429,-0.79227163,-0.79754897,0.0021844777,-0.82285362,-0.63420593,-0.0683896,-0.83996275,-0.66999882,0.11765553){1.5844414,1.2530106,1.0691297,1.1553131}; -SS(0.050277172,0.20853018,0.30186362,0.11523872,0.30161582,0.5,-0.045146113,0.19012269,0.5,0.12517622,0.12515553,0.5){0.12181545,0.33546792,0.27176836,0.27156885}; -SS(-0.11111111,1,-0.5,-0.33333333,1,-0.5,-0.18268367,0.83021756,-0.5,-0.23070339,1,-0.34855306){1.2528065,1.3407278,0.9573479,1.1599423}; -SS(0.11111111,1,-0.5,0.0011150345,0.93517443,-0.37389303,-0.11111111,1,-0.5,0.00024312215,0.80750011,-0.5){1.2422682,1.0026385,1.2528065,0.88610119}; -SS(-0.65631386,-0.59724887,0.13822882,-0.83996275,-0.66999882,0.11765553,-0.79575191,-0.55547687,0.30538166,-0.82595855,-0.48031431,0.11444494){0.7890621,1.1553131,1.0192798,0.90887195}; -SS(-0.16707278,-0.087678023,-0.31121894,-0.30131805,-0.11512588,-0.5,-0.19007896,0.04567822,-0.5,-0.12484866,-0.12486094,-0.5){0.11599041,0.3368451,0.27736807,0.26766045}; -SS(-0.30131805,-0.11512588,-0.5,-0.41767704,0.010770256,-0.44072823,-0.50815189,-0.16301678,-0.5,-0.38492375,-0.20017574,-0.33650716){0.3368451,0.35514259,0.52110597,0.28705324}; -SS(-0.31289368,0.69974287,-0.5,-0.39032311,0.63241857,-0.34621958,-0.50014045,0.79673357,-0.5,-0.4813337,0.60105459,-0.5){0.82323564,0.65630059,1.1145783,0.83133251}; -SS(-0.48255002,0.69900846,-0.19155417,-0.6293812,0.63993291,-0.28812602,-0.50782983,0.50249565,-0.29902586,-0.62332411,0.59900263,-0.10904345){0.74365966,0.87296464,0.58612549,0.74800561}; -SS(-0.29237157,-0.11865629,-0.17606411,-0.16707278,-0.087678023,-0.31121894,-0.1971424,-0.26981885,-0.30750196,-0.38492375,-0.20017574,-0.33650716){0.11404163,0.11599041,0.19280289,0.28705324}; -SS(-0.4433427,0.53576375,-0.12560501,-0.48255002,0.69900846,-0.19155417,-0.50782983,0.50249565,-0.29902586,-0.62332411,0.59900263,-0.10904345){0.48429505,0.74365966,0.58612549,0.74800561}; -SS(0.50761134,0.34933779,0.39015973,0.37492492,0.49312259,0.5,0.5725222,0.50074158,0.5,0.47723835,0.52605258,0.30619083){0.51484928,0.61809871,0.8121357,0.58228229}; -SS(-0.91347537,0.15552497,0.067511395,-1,-0.00021427218,0.00011802244,-0.76752638,0.004448061,-0.013214377,-0.84289574,0.018333867,0.1608607){0.85045394,0.98080906,0.5734925,0.72430843}; -SS(-0.80727304,0.00024662976,0.5,-0.91004595,0.15296589,0.33139812,-0.83006559,0.18329805,0.5,-0.72768327,0.10310141,0.33233484){0.88515177,0.94743142,0.96159482,0.63492881}; -SS(-0.48255002,0.69900846,-0.19155417,-0.58934795,0.84141567,-0.18062024,-0.65756371,0.81308934,-0.3429452,-0.6293812,0.63993291,-0.28812602){0.74365966,1.0736489,1.1958888,0.87296464}; -SS(0,-0.70830496,-0.20826096,-0.11754465,-0.65214472,-0.32749638,-0.2399131,-0.76005145,-0.25989531,-0.14850787,-0.69358405,-0.087583548){0.5287181,0.53347202,0.6848256,0.49763432}; -SS(0.39612945,0.70614162,0.21524614,0.36841015,0.87909734,0.37310922,0.22886345,0.79287946,0.30210005,0.35567295,0.65317229,0.39545235){0.68453461,1.0362544,0.75332396,0.69293227}; -SS(0.61535375,0.70719289,-0.095218388,0.65062064,0.64268786,0.069510863,0.77861211,0.77861193,-0.067175459,0.62860594,0.86645525,0.049037492){0.87858083,0.82620698,1.1981052,1.1303867}; -SS(-0.17603462,0.24070348,-0.5,-0.1182182,0.15955837,-0.3159857,-0.19007896,0.04567822,-0.5,-0.010543702,0.17712261,-0.5){0.32537509,0.11990198,0.27736807,0.25750364}; -SS(-0.65956212,-0.52273243,-0.19262862,-0.85520613,-0.46088631,-0.14784569,-0.7907607,-0.33838097,-0.28342271,-0.81387526,-0.53653555,-0.3209601){0.7287475,0.95161001,0.80149819,1.0406635}; -SS(-0.073421274,-0.375,-0.38984354,0,-0.29164705,-0.20823955,0,-0.16143077,-0.33843101,-0.1971424,-0.26981885,-0.30750196){0.28201081,0.11473247,0.12966739,0.19280289}; -SS(-1,0.33333333,-0.5,-0.92571354,0.17249619,-0.34283108,-1,0.11111111,-0.5,-0.82994199,0.18319278,-0.5){1.3393331,0.99158484,1.2464205,0.95993957}; -SS(-0.89663862,-0.69397302,0.37275403,-1,-0.77777778,0.5,-1,-0.84092895,0.33252059,-0.80635543,-0.81164184,0.5){1.4119512,1.8434331,1.8030746,1.5410993}; -SS(0,-0.29164705,-0.20823955,-0.15923414,-0.34171533,-0.15079999,-0.1971424,-0.26981885,-0.30750196,-0.073421274,-0.375,-0.38984354){0.11473247,0.14783141,0.19280289,0.28201081}; -SS(-0.85520613,-0.46088631,-0.14784569,-1,-0.47540235,-0.27521785,-0.7907607,-0.33838097,-0.28342271,-0.81387526,-0.53653555,-0.3209601){0.95161001,1.2841965,0.80149819,1.0406635}; -SS(0,0,0.25,-0.1159097,-0.14329028,0.19302206,-0.20045203,0.067929244,0.29301468,-0.15128303,0.02253305,0.11422928){0.045060365,0.055235283,0.10955402,0.025420414}; -SS(-0.65631386,-0.59724887,0.13822882,-0.7055892,-0.50616462,-0.017961589,-0.82595855,-0.48031431,0.11444494,-0.59094649,-0.40495207,0.12834587){0.7890621,0.74484897,0.90887195,0.51475101}; -SS(0.35689191,0.091376279,-0.36932783,0.50007058,0,-0.27987971,0.51910919,0.22553632,-0.31417891,0.37137652,0.1767682,-0.19801193){0.26145514,0.31006895,0.40112301,0.19205628}; -SS(-0.19461387,0.3919517,0.10437587,-0.0073778212,0.36022468,0.15230712,-0.096302334,0.43534175,-0.056072844,-0.098708274,0.55956225,0.10505678){0.19075448,0.13675819,0.18078295,0.31633913}; -SS(-0.39806707,0.15776443,0.15870839,-0.34310942,-0.010167032,0.1509038,-0.52427834,0.10778268,0.27208728,-0.5555987,0.045150158,0.095162244){0.19317292,0.12661586,0.34448415,0.29993682}; -SS(-0.41767704,0.010770256,-0.44072823,-0.30131805,-0.11512588,-0.5,-0.19007896,0.04567822,-0.5,-0.29413589,0.046284299,-0.31274881){0.35514259,0.3368451,0.27736807,0.1681493}; -SS(-0.52470763,0.46530444,0.33754711,-0.54640726,0.34339216,0.19847863,-0.35521568,0.4957142,0.26668635,-0.41843781,0.30742585,0.3397996){0.59371518,0.43575493,0.42001946,0.37011438}; -SS(-0.26986228,0.26051837,0.22418657,-0.10037172,0.18891947,0.20844359,-0.13709741,0.19518884,0.034033465,-0.19461387,0.3919517,0.10437587){0.1749353,0.074828316,0.040184006,0.19075448}; -SS(0.60662231,0.34516964,-0.13972301,0.74440038,0.22095066,-0.087839409,0.77491511,0.22516452,-0.26425516,0.82562789,0.37565656,-0.12707714){0.48782847,0.59875958,0.70313431,0.82387041}; -SS(0.25126435,0.28098512,0.24657435,0.18202227,0.38279251,0.10350409,0.26138985,0.51848551,0.281015,0.36016656,0.41044152,0.1594367){0.18575023,0.17617817,0.40200156,0.3073722}; -SS(0.00029730467,0.80760978,0.5,-0.16015893,0.67694077,0.39025863,-0.1827732,0.83017807,0.5,-0.043441254,0.79173928,0.29440137){0.88423684,0.6265216,0.95598938,0.69563564}; -SS(-0.32897755,-0.67088709,0.5,-0.40125956,-0.65699374,0.33213173,-0.50400314,-0.78879927,0.5,-0.50050976,-0.57246927,0.5){0.79643001,0.69449311,1.1086821,0.81219504}; -SS(0,-0.25,-0.5,0,0,-0.5,-0.12484866,-0.12486094,-0.5,0,-0.16143077,-0.33843101){0.29677328,0.23465449,0.26766045,0.12966739}; -SS(0,0,0.5,0.25,0,0.5,0.1615172,0,0.33845519,0.12517622,0.12515553,0.5){0.23153294,0.29281005,0.13068911,0.27156885}; -SS(-0.26986228,0.26051837,0.22418657,-0.39806707,0.15776443,0.15870839,-0.20045203,0.067929244,0.29301468,-0.36145429,0.13293621,0.35430528){0.1749353,0.19317292,0.10955402,0.26360063}; -SS(-0.91004595,0.15296589,0.33139812,-1,0.11111111,0.5,-0.80727304,0.00024662976,0.5,-0.83006559,0.18329805,0.5){0.94743142,1.246301,0.88515177,0.96159482}; -SS(0.1615172,0,0.33845519,0.13913358,0.10014326,0.18199659,0.050277172,0.20853018,0.30186362,0.26083053,0.15082484,0.37728795){0.13068911,0.045990896,0.12181545,0.21918499}; -SS(0.098704003,0.67249079,0.1943501,0.26064395,0.61953306,0.12890567,0.24404834,0.79519787,0.082231238,0.22886345,0.79287946,0.30210005){0.47957633,0.45328252,0.68472542,0.75332396}; -SS(0.26064395,0.61953306,0.12890567,0.39612945,0.70614162,0.21524614,0.24404834,0.79519787,0.082231238,0.22886345,0.79287946,0.30210005){0.45328252,0.68453461,0.68472542,0.75332396}; -SS(-0.41648151,0.41684878,0.5,-0.52470763,0.46530444,0.33754711,-0.35521568,0.4957142,0.26668635,-0.41843781,0.30742585,0.3397996){0.58097186,0.59371518,0.42001946,0.37011438}; -SS(0,-0.16143077,-0.33843101,-0.16707278,-0.087678023,-0.31121894,-0.1971424,-0.26981885,-0.30750196,-0.098950987,-0.13391411,-0.14594667){0.12966739,0.11599041,0.19280289,0.03512721}; -SS(0.49866453,0.63973666,-0.21510859,0.42864323,0.48543211,-0.13804456,0.34412919,0.6158316,-0.3427703,0.48047723,0.47791267,-0.33071402){0.68344633,0.42022283,0.59958408,0.55795418}; -SS(0.671223,0.32907594,-0.5,0.67125235,0.44297685,-0.31879306,0.78906409,0.5041626,-0.5,0.57309542,0.50075776,-0.5){0.79435762,0.72773009,1.1105402,0.81773274}; -SS(0.65062064,0.64268786,0.069510863,0.61535375,0.70719289,-0.095218388,0.45788353,0.76094781,-0.0096633567,0.62860594,0.86645525,0.049037492){0.82620698,0.87858083,0.76853994,1.1303867}; -SS(-0.50807239,-0.16307462,0.5,-0.37661764,-0.26006406,0.40868766,-0.50874333,-0.23900991,0.2620444,-0.40506391,-0.079541407,0.3303193){0.52416601,0.36234206,0.36443271,0.26156128}; -SS(0,0,0.25,-0.10037172,0.18891947,0.20844359,0.050277172,0.20853018,0.30186362,0.13913358,0.10014326,0.18199659){0.045060365,0.074828316,0.12181545,0.045990896}; -SS(-0.6293812,0.63993291,-0.28812602,-0.68637718,0.43295764,-0.18031685,-0.50782983,0.50249565,-0.29902586,-0.62332411,0.59900263,-0.10904345){0.87296464,0.67437813,0.58612549,0.74800561}; -SS(-0.41648151,0.41684878,0.5,-0.29261734,0.53193925,0.43339885,-0.35521568,0.4957142,0.26668635,-0.52470763,0.46530444,0.33754711){0.58097186,0.53993003,0.42001946,0.59371518}; -SS(0.25126435,0.28098512,0.24657435,0.26083053,0.15082484,0.37728795,0.42621669,0.19017509,0.30505062,0.27123349,0.36190713,0.41476339){0.18575023,0.21918499,0.29714896,0.36300231}; -SS(-0.91414606,-0.68082467,-0.37109558,-1,-0.77777778,-0.5,-0.80632325,-0.81147186,-0.5,-1,-0.83959635,-0.33115777){1.4249306,1.8436809,1.5409894,1.7998257}; -SS(0.27123349,0.36190713,0.41476339,0.16321322,0.50838432,0.5,0.26138985,0.51848551,0.281015,0.085954007,0.41736025,0.32943097){0.36300231,0.52238519,0.40200156,0.27115576}; -SS(0.26083053,0.15082484,0.37728795,0.37501462,0.2307626,0.5,0.42621669,0.19017509,0.30505062,0.27123349,0.36190713,0.41476339){0.21918499,0.42590445,0.29714896,0.36300231}; -SS(0.30434906,0.49798107,-4.0114635e-05,0.26064395,0.61953306,0.12890567,0.086744979,0.52712982,0.027891324,0.18202227,0.38279251,0.10350409){0.32377482,0.45328252,0.26660844,0.17617817}; -SS(-0.11754465,-0.65214472,-0.32749638,0,-0.75,-0.5,-0.18848435,-0.81110947,-0.5,-0.14376826,-0.62489354,-0.5){0.53347202,0.79460868,0.92571371,0.6489606}; -SS(-0.63048479,0.37587985,-0.34368186,-0.69937066,0.31351533,-0.5,-0.79644003,0.50064951,-0.5,-0.61503712,0.4760032,-0.5){0.64388066,0.81965428,1.115532,0.83978547}; -SS(-1,1,0.25,-0.93582873,0.86427167,0.14668289,-0.84394966,1,0.33504415,-1,0.84108515,0.33242406){2.0473025,1.6320629,1.8084725,1.8031397}; -SS(0.61535375,0.70719289,-0.095218388,0.49866453,0.63973666,-0.21510859,0.45788353,0.76094781,-0.0096633567,0.54700908,0.85955032,-0.16345766){0.87858083,0.68344633,0.76853994,1.0528061}; -SS(-1,0.77777778,-0.5,-0.83248216,0.76782327,-0.31292259,-0.80479144,0.80504612,-0.5,-1,0.83964442,-0.3309874){1.8398372,1.366757,1.5255891,1.7979585}; -SS(0.49866453,0.63973666,-0.21510859,0.61535375,0.70719289,-0.095218388,0.68900489,0.77311276,-0.28043733,0.54700908,0.85955032,-0.16345766){0.68344633,0.87858083,1.1326816,1.0528061}; -SS(-0.41767704,0.010770256,-0.44072823,-0.58754442,0.033885734,-0.5,-0.50815189,-0.16301678,-0.5,-0.64012388,-0.10177177,-0.37237302){0.35514259,0.58180393,0.52110597,0.54269073}; -SS(-0.49284988,-0.37485679,0.5,-0.62450053,-0.31310845,0.38575928,-0.50807239,-0.16307462,0.5,-0.37661764,-0.26006406,0.40868766){0.6163523,0.62379151,0.52416601,0.36234206}; -SS(0.59416595,0.14141347,0.32656529,0.52843461,0.32737897,0.19102935,0.42621669,0.19017509,0.30505062,0.50761134,0.34933779,0.39015973){0.46498444,0.40790135,0.29714896,0.51484928}; -SS(-0.84289574,0.018333867,0.1608607,-0.67616985,-0.069078192,0.18801024,-0.84084014,-0.14895162,0.31636914,-0.82279039,-0.18997945,0.10657137){0.72430843,0.47948004,0.81273381,0.70945047}; -SS(-0.40125956,-0.65699374,0.33213173,-0.42889738,-0.75253072,0.17523232,-0.22656331,-0.68065623,0.28194433,-0.349759,-0.84853211,0.35590634){0.69449311,0.75958282,0.57683818,0.94981364}; -SS(0.50136923,0.34587735,-0.44862257,0.37549445,0.49317282,-0.5,0.37532516,0.23078833,-0.5,0.27170325,0.36204749,-0.4201745){0.56260896,0.61648995,0.42551454,0.36885377}; -SS(0.13913358,0.10014326,0.18199659,0.25126435,0.28098512,0.24657435,0.050277172,0.20853018,0.30186362,0.26083053,0.15082484,0.37728795){0.045990896,0.18575023,0.12181545,0.21918499}; -SS(0.36841015,0.87909734,0.37310922,0.21512427,0.73211919,0.5,0.22886345,0.79287946,0.30210005,0.35567295,0.65317229,0.39545235){1.0362544,0.81521474,0.75332396,0.69293227}; -SS(0.39612945,0.70614162,0.21524614,0.35567295,0.65317229,0.39545235,0.26138985,0.51848551,0.281015,0.47723835,0.52605258,0.30619083){0.68453461,0.69293227,0.40200156,0.58228229}; -SS(0,-0.29164705,-0.20823955,-0.15923414,-0.34171533,-0.15079999,0,-0.22019801,5.0496855e-05,-0.098950987,-0.13391411,-0.14594667){0.11473247,0.14783141,0.029059683,0.03512721}; -SS(-1,0.25105097,-0.19350143,-0.92571354,0.17249619,-0.34283108,-0.77267892,0.13105707,-0.24874664,-0.89804207,0.11676539,-0.10792088){1.0825888,0.99158484,0.65386325,0.82300022}; -SS(-0.83996275,-0.66999882,0.11765553,-1,-0.70710233,0.21356199,-1,-0.77608598,0.00064487429,-0.8827276,-0.88146034,0.13123348){1.1553131,1.5280688,1.5844414,1.5595365}; -SS(-1,-0.70710233,0.21356199,-0.89663862,-0.69397302,0.37275403,-0.77091496,-0.77159441,0.2629049,-0.83996275,-0.66999882,0.11765553){1.5280688,1.4119512,1.2433034,1.1553131}; -SS(-0.40125956,-0.65699374,0.33213173,-0.32897755,-0.67088709,0.5,-0.50400314,-0.78879927,0.5,-0.349759,-0.84853211,0.35590634){0.69449311,0.79643001,1.1086821,0.94981364}; -SS(-1,-0.70710233,0.21356199,-0.83996275,-0.66999882,0.11765553,-0.77091496,-0.77159441,0.2629049,-0.8827276,-0.88146034,0.13123348){1.5280688,1.1553131,1.2433034,1.5595365}; -SS(-0.77091496,-0.77159441,0.2629049,-0.79227163,-0.79754897,0.0021844777,-0.8827276,-0.88146034,0.13123348,-0.83996275,-0.66999882,0.11765553){1.2433034,1.2530106,1.5595365,1.1553131}; -SS(-0.67616985,-0.069078192,0.18801024,-0.84289574,0.018333867,0.1608607,-0.76752638,0.004448061,-0.013214377,-0.82279039,-0.18997945,0.10657137){0.47948004,0.72430843,0.5734925,0.70945047}; -SS(-0.31289368,0.69974287,-0.5,-0.17097214,0.64900986,-0.39927747,-0.35455825,0.80859576,-0.32177549,-0.39032311,0.63241857,-0.34621958){0.82323564,0.59741335,0.86460259,0.65630059}; -SS(-1,0.25105097,-0.19350143,-0.89426176,0.41257007,-0.12932618,-1,0.29928494,0.0012550607,-0.78848723,0.26584533,-0.068869999){1.0825888,0.974079,1.0718665,0.68151298}; -SS(-0.10037172,0.18891947,0.20844359,-0.0073778212,0.36022468,0.15230712,-0.13709741,0.19518884,0.034033465,-0.19461387,0.3919517,0.10437587){0.074828316,0.13675819,0.040184006,0.19075448}; -SS(0.37137652,0.1767682,-0.19801193,0.50007058,0,-0.27987971,0.51910919,0.22553632,-0.31417891,0.57129187,0.13526053,-0.13726946){0.19205628,0.31006895,0.40112301,0.35115136}; -SS(0.26064395,0.61953306,0.12890567,0.30434906,0.49798107,-4.0114635e-05,0.36016656,0.41044152,0.1594367,0.18202227,0.38279251,0.10350409){0.45328252,0.32377482,0.3073722,0.17617817}; -SS(-0.45843014,-0.20445062,-0.15988901,-0.36174,-0.40052234,-0.23665811,-0.56113743,-0.28920115,-0.29204918,-0.38492375,-0.20017574,-0.33650716){0.26094507,0.32480953,0.46850822,0.28705324}; -SS(-0.65355936,0.25468043,-0.1897796,-0.68637718,0.43295764,-0.18031685,-0.49391083,0.27907498,-0.27264436,-0.63048479,0.37587985,-0.34368186){0.51379882,0.67437813,0.37398026,0.64388066}; -SS(0.37549445,0.49317282,-0.5,0.50136923,0.34587735,-0.44862257,0.48047723,0.47791267,-0.33071402,0.27170325,0.36204749,-0.4201745){0.61648995,0.56260896,0.55795418,0.36885377}; -SS(-0.55555556,1,0.5,-0.60421932,0.82298164,0.34468578,-0.66659408,1,0.32529585,-0.44431425,1,0.36245944){1.5418081,1.1449713,1.5364848,1.3152029}; -SS(-0.0073778212,0.36022468,0.15230712,-0.11614487,0.30919383,0.33918095,0.050277172,0.20853018,0.30186362,0.085954007,0.41736025,0.32943097){0.13675819,0.20820823,0.12181545,0.27115576}; -SS(0.60662231,0.34516964,-0.13972301,0.74440038,0.22095066,-0.087839409,0.63998586,0.17856447,0.051345521,0.57129187,0.13526053,-0.13726946){0.48782847,0.59875958,0.42570365,0.35115136}; -SS(0,-0.29157012,0.20836692,-0.10133362,-0.40777162,0.1162396,0,-0.49989758,0.27983937,-0.1853821,-0.42358473,0.30866054){0.11172813,0.17697987,0.30650831,0.29143101}; -SS(-1,-0.70710233,0.21356199,-0.89663862,-0.69397302,0.37275403,-1,-0.84092895,0.33252059,-0.77091496,-0.77159441,0.2629049){1.5280688,1.4119512,1.8030746,1.2433034}; -SS(-0.45843014,-0.20445062,-0.15988901,-0.50159539,-0.29258506,7.2987381e-06,-0.4720473,-0.063494476,-0.036829327,-0.65367362,-0.16081953,0.0014934597){0.26094507,0.32068114,0.21285629,0.4344691}; -SS(-0.58934795,0.84141567,-0.18062024,-0.48255002,0.69900846,-0.19155417,-0.62332411,0.59900263,-0.10904345,-0.6293812,0.63993291,-0.28812602){1.0736489,0.74365966,0.74800561,0.87296464}; -SS(-0.39806707,0.15776443,0.15870839,-0.34310942,-0.010167032,0.1509038,-0.20045203,0.067929244,0.29301468,-0.36145429,0.13293621,0.35430528){0.19317292,0.12661586,0.10955402,0.26360063}; -SS(-0.54640726,0.34339216,0.19847863,-0.61674646,0.25215289,0.3447871,-0.52427834,0.10778268,0.27208728,-0.41843781,0.30742585,0.3397996){0.43575493,0.54607287,0.34448415,0.37011438}; -SS(0.29173763,0,-0.20843742,0.35689191,0.091376279,-0.36932783,0.20129651,0.21389912,-0.31902192,0.37137652,0.1767682,-0.19801193){0.1134179,0.26145514,0.16839385,0.19205628}; -SS(-0.39032311,0.63241857,-0.34621958,-0.31289368,0.69974287,-0.5,-0.50014045,0.79673357,-0.5,-0.35455825,0.80859576,-0.32177549){0.65630059,0.82323564,1.1145783,0.86460259}; -SS(-0.37661764,-0.26006406,0.40868766,-0.25897908,-0.24013326,0.26450313,-0.50874333,-0.23900991,0.2620444,-0.40506391,-0.079541407,0.3303193){0.36234206,0.17775565,0.36443271,0.26156128}; -SS(-0.74249217,0.75399014,-0.15399718,-0.58934795,0.84141567,-0.18062024,-0.62332411,0.59900263,-0.10904345,-0.6293812,0.63993291,-0.28812602){1.1267767,1.0736489,0.74800561,0.87296464}; -SS(-0.41651431,0.41690828,-0.5,-0.50782983,0.50249565,-0.29902586,-0.4813337,0.60105459,-0.5,-0.61503712,0.4760032,-0.5){0.57523437,0.58612549,0.83133251,0.83978547}; -SS(0,-0.29164705,-0.20823955,-0.098950987,-0.13391411,-0.14594667,0,-0.16143077,-0.33843101,-0.1971424,-0.26981885,-0.30750196){0.11473247,0.03512721,0.12966739,0.19280289}; -SS(-0.65367362,-0.16081953,0.0014934597,-0.67616985,-0.069078192,0.18801024,-0.76752638,0.004448061,-0.013214377,-0.82279039,-0.18997945,0.10657137){0.4344691,0.47948004,0.5734925,0.70945047}; -SS(-0.62450053,-0.31310845,0.38575928,-0.50807239,-0.16307462,0.5,-0.50874333,-0.23900991,0.2620444,-0.64009684,-0.10188458,0.37412975){0.62379151,0.52416601,0.36443271,0.54631619}; -SS(-0.24163432,0.33561251,-0.055881164,-0.13709741,0.19518884,0.034033465,-0.096302334,0.43534175,-0.056072844,-0.19461387,0.3919517,0.10437587){0.16437697,0.040184006,0.18078295,0.19075448}; -SS(0.25126435,0.28098512,0.24657435,0.27123349,0.36190713,0.41476339,0.26138985,0.51848551,0.281015,0.085954007,0.41736025,0.32943097){0.18575023,0.36300231,0.40200156,0.27115576}; -SS(-0.0073778212,0.36022468,0.15230712,-0.19461387,0.3919517,0.10437587,-0.11618574,0.50328545,0.29980467,-0.098708274,0.55956225,0.10505678){0.13675819,0.19075448,0.33969293,0.31633913}; -SS(-0.89804207,0.11676539,-0.10792088,-1,0.25105097,-0.19350143,-1,0.29928494,0.0012550607,-0.78848723,0.26584533,-0.068869999){0.82300022,1.0825888,1.0718665,0.68151298}; -SS(0.26083053,0.15082484,0.37728795,0.1615172,0,0.33845519,0.12517622,0.12515553,0.5,0.050277172,0.20853018,0.30186362){0.21918499,0.13068911,0.27156885,0.12181545}; -SS(-0.66659408,1,0.32529585,-0.60421932,0.82298164,0.34468578,-0.76389013,0.77728265,0.25513738,-0.61311838,0.85766427,0.15491279){1.5364848,1.1449713,1.2358334,1.1216468}; -SS(0.21512427,0.73211919,0.5,0.10211023,0.6404511,0.38011645,0.22886345,0.79287946,0.30210005,0.35567295,0.65317229,0.39545235){0.81521474,0.55160362,0.75332396,0.69293227}; -SS(0,-0.70830496,-0.20826096,-0.14850787,-0.69358405,-0.087583548,-0.2399131,-0.76005145,-0.25989531,-0.12233239,-0.87748906,-0.13583418){0.5287181,0.49763432,0.6848256,0.78823805}; -SS(0.10162062,0.65400865,-0.37913628,0.17777709,0.54047543,-0.2567554,-0.01813809,0.53618118,-0.30537166,0.09693172,0.3918681,-0.3370861){0.5665506,0.36840304,0.36567785,0.26256104}; -SS(0.29173763,0,-0.20843742,0.35689191,0.091376279,-0.36932783,0.16149165,0,-0.33864688,0.20129651,0.21389912,-0.31902192){0.1134179,0.26145514,0.12746835,0.16839385}; -SS(0.52843461,0.32737897,0.19102935,0.59416595,0.14141347,0.32656529,0.42621669,0.19017509,0.30505062,0.46476684,0.14382827,0.12247557){0.40790135,0.46498444,0.29714896,0.23450402}; -SS(-0.58754442,0.033885734,-0.5,-0.41767704,0.010770256,-0.44072823,-0.49808619,0.0026201378,-0.26387206,-0.64012388,-0.10177177,-0.37237302){0.58180393,0.35514259,0.29810596,0.54269073}; -SS(-1,0.11111111,-0.5,-0.92571354,0.17249619,-0.34283108,-0.80728146,0.00010990719,-0.5,-0.82994199,0.18319278,-0.5){1.2464205,0.99158484,0.88195685,0.95993957}; -SS(0.16321322,0.50838432,0.5,0.10211023,0.6404511,0.38011645,0.26138985,0.51848551,0.281015,0.085954007,0.41736025,0.32943097){0.52238519,0.55160362,0.40200156,0.27115576}; -SS(0.21512427,0.73211919,0.5,0.36841015,0.87909734,0.37310922,0.45042372,0.78359022,0.5,0.35567295,0.65317229,0.39545235){0.81521474,1.0362544,1.0496179,0.69293227}; -SS(-0.16707278,-0.087678023,-0.31121894,-0.12484866,-0.12486094,-0.5,0,-0.16143077,-0.33843101,-0.1971424,-0.26981885,-0.30750196){0.11599041,0.26766045,0.12966739,0.19280289}; -SS(-0.32897755,-0.67088709,0.5,-0.40125956,-0.65699374,0.33213173,-0.22656331,-0.68065623,0.28194433,-0.349759,-0.84853211,0.35590634){0.79643001,0.69449311,0.57683818,0.94981364}; -SS(0.39612945,0.70614162,0.21524614,0.40637652,0.87094343,0.13060843,0.24404834,0.79519787,0.082231238,0.22886345,0.79287946,0.30210005){0.68453461,0.92399337,0.68472542,0.75332396}; -SS(0.35567295,0.65317229,0.39545235,0.37492492,0.49312259,0.5,0.26138985,0.51848551,0.281015,0.47723835,0.52605258,0.30619083){0.69293227,0.61809871,0.40200156,0.58228229}; -SS(-0.57994589,-0.69256437,0.31204703,-0.67513028,-0.66529728,0.5,-0.50400314,-0.78879927,0.5,-0.50050976,-0.57246927,0.5){0.89957508,1.1284607,1.1086821,0.81219504}; -SS(-0.76760867,-0.33664988,-0.028298027,-0.7055892,-0.50616462,-0.017961589,-0.85520613,-0.46088631,-0.14784569,-0.61549046,-0.35581383,-0.12962263){0.68479998,0.74484897,0.95161001,0.50877487}; -SS(-0.0089783977,0.64320989,-0.13441642,-0.10743676,0.85847111,-0.11136175,-0.035654771,0.78507762,0.045007896,0.094968532,0.84539386,-0.087484586){0.41358858,0.7462212,0.60161266,0.71839764}; -SS(0.34720309,0.90097601,-0.12745168,0.4450496,1,-0.00012892076,0.45788353,0.76094781,-0.0096633567,0.54700908,0.85955032,-0.16345766){0.93504792,1.179155,0.76853994,1.0528061}; -SS(-0.3548152,-0.48825703,0.21848985,-0.40125956,-0.65699374,0.33213173,-0.22656331,-0.68065623,0.28194433,-0.34549718,-0.50098866,0.4105565){0.38862106,0.69449311,0.57683818,0.5260109}; -SS(0.4450496,1,-0.00012892076,0.40637652,0.87094343,0.13060843,0.45788353,0.76094781,-0.0096633567,0.62860594,0.86645525,0.049037492){1.179155,0.92399337,0.76853994,1.1303867}; -SS(-0.62341011,-0.46880832,-0.38153973,-0.65956212,-0.52273243,-0.19262862,-0.7907607,-0.33838097,-0.28342271,-0.81387526,-0.53653555,-0.3209601){0.73807879,0.7287475,0.80149819,1.0406635}; -SS(-0.78315651,-0.45008839,-0.5,-0.62341011,-0.46880832,-0.38153973,-0.7907607,-0.33838097,-0.28342271,-0.81387526,-0.53653555,-0.3209601){1.0467962,0.73807879,0.80149819,1.0406635}; -SS(-0.50159539,-0.29258506,7.2987381e-06,-0.61549046,-0.35581383,-0.12962263,-0.52487586,-0.5117405,-0.017639258,-0.59094649,-0.40495207,0.12834587){0.32068114,0.50877487,0.51812974,0.51475101}; -SS(-0.10037172,0.18891947,0.20844359,-0.26986228,0.26051837,0.22418657,-0.20045203,0.067929244,0.29301468,-0.11614487,0.30919383,0.33918095){0.074828316,0.1749353,0.10955402,0.20820823}; -SS(-0.77091496,-0.77159441,0.2629049,-0.89663862,-0.69397302,0.37275403,-0.79575191,-0.55547687,0.30538166,-0.83996275,-0.66999882,0.11765553){1.2433034,1.4119512,1.0192798,1.1553131}; -SS(-0.50807239,-0.16307462,0.5,-0.62450053,-0.31310845,0.38575928,-0.50874333,-0.23900991,0.2620444,-0.37661764,-0.26006406,0.40868766){0.52416601,0.62379151,0.36443271,0.36234206}; -SS(-0.68637718,0.43295764,-0.18031685,-0.6293812,0.63993291,-0.28812602,-0.80558396,0.5878127,-0.29244037,-0.62332411,0.59900263,-0.10904345){0.67437813,0.87296464,1.0616703,0.74800561}; -SS(-0.76760867,-0.33664988,-0.028298027,-0.7055892,-0.50616462,-0.017961589,-0.82595855,-0.48031431,0.11444494,-0.85520613,-0.46088631,-0.14784569){0.68479998,0.74484897,0.90887195,0.95161001}; -SS(-0.36145429,0.13293621,0.35430528,-0.24000819,0.17660305,0.5,-0.17669296,0.011023676,0.5,-0.20045203,0.067929244,0.29301468){0.26360063,0.3210912,0.26322593,0.10955402}; -SS(-0.7055892,-0.50616462,-0.017961589,-0.65956212,-0.52273243,-0.19262862,-0.85520613,-0.46088631,-0.14784569,-0.61549046,-0.35581383,-0.12962263){0.74484897,0.7287475,0.95161001,0.50877487}; -SS(0,0,-0.25,-0.056808231,0.14323286,-0.13367928,0,0,-6.9388939e-15,0.13402468,0.11673163,-0.1460819){0.044304329,0.022140076,-0.017891206,0.039337265}; -SS(-0.14850787,-0.69358405,-0.087583548,0,-0.77970171,0.00010845427,-0.22302806,-0.77703925,0.068353305,-0.12233239,-0.87748906,-0.13583418){0.49763432,0.58842154,0.64063544,0.78823805}; -SS(-0.61115597,1,-0.10200355,-0.58934795,0.84141567,-0.18062024,-0.76988954,1,-0.26944904,-0.56041637,1,-0.29784853){1.3611038,1.0736489,1.6463902,1.3856141}; -SS(0.36841015,0.87909734,0.37310922,0.43654676,1,0.2604635,0.55555177,0.82262944,0.31125158,0.40637652,0.87094343,0.13060843){1.0362544,1.2403655,1.0671623,0.92399337}; -SS(0.51674933,0.64481281,-0.39755292,0.57309542,0.50075776,-0.5,0.67125235,0.44297685,-0.31879306,0.48047723,0.47791267,-0.33071402){0.82858869,0.81773274,0.72773009,0.55795418}; -SS(-0.34310942,-0.010167032,0.1509038,-0.39806707,0.15776443,0.15870839,-0.52427834,0.10778268,0.27208728,-0.36145429,0.13293621,0.35430528){0.12661586,0.19317292,0.34448415,0.26360063}; -SS(-0.74954172,1,0.13574231,-0.61311838,0.85766427,0.15491279,-0.76389013,0.77728265,0.25513738,-0.79370724,0.81084643,0.045877226){1.562759,1.1216468,1.2358334,1.270911}; -SS(0.26138985,0.51848551,0.281015,0.26064395,0.61953306,0.12890567,0.36016656,0.41044152,0.1594367,0.18202227,0.38279251,0.10350409){0.40200156,0.45328252,0.3073722,0.17617817}; -SS(-0.40125956,-0.65699374,0.33213173,-0.32897755,-0.67088709,0.5,-0.22656331,-0.68065623,0.28194433,-0.34549718,-0.50098866,0.4105565){0.69449311,0.79643001,0.57683818,0.5260109}; -SS(-0.86742481,-0.86548068,-0.14483364,-1,-1,-0.25,-1,-0.83959635,-0.33115777,-0.83846289,-1,-0.33858677){1.5085891,2.0422973,1.7998257,1.8019179}; -SS(-0.65631386,-0.59724887,0.13822882,-0.83996275,-0.66999882,0.11765553,-0.77091496,-0.77159441,0.2629049,-0.79575191,-0.55547687,0.30538166){0.7890621,1.1553131,1.2433034,1.0192798}; -SS(-0.11614487,0.30919383,0.33918095,-0.0073778212,0.36022468,0.15230712,-0.11618574,0.50328545,0.29980467,0.085954007,0.41736025,0.32943097){0.20820823,0.13675819,0.33969293,0.27115576}; -SS(-0.91004595,0.15296589,0.33139812,-0.7489605,0.18190923,0.13647301,-0.72768327,0.10310141,0.33233484,-0.84289574,0.018333867,0.1608607){0.94743142,0.59564173,0.63492881,0.72430843}; -SS(0.50136923,0.34587735,-0.44862257,0.34662081,0.36199915,-0.25068724,0.51910919,0.22553632,-0.31417891,0.48047723,0.47791267,-0.33071402){0.56260896,0.29696992,0.40112301,0.55795418}; -SS(-0.65631386,-0.59724887,0.13822882,-0.7055892,-0.50616462,-0.017961589,-0.82285362,-0.63420593,-0.0683896,-0.83996275,-0.66999882,0.11765553){0.7890621,0.74484897,1.0691297,1.1553131}; -SS(-0.62332411,0.59900263,-0.10904345,-0.65776896,0.64141588,0.074371921,-0.54631436,0.45612147,-0.00074796238,-0.45563594,0.60375179,0.095527884){0.74800561,0.83514199,0.48593017,0.56263538}; -SS(-0.84394966,1,0.33504415,-1,1,0.5,-1,1,0.25,-1,0.84108515,0.33242406){1.8084725,2.2338249,2.0473025,1.8031397}; -SS(-0.6293812,0.63993291,-0.28812602,-0.74249217,0.75399014,-0.15399718,-0.80558396,0.5878127,-0.29244037,-0.62332411,0.59900263,-0.10904345){0.87296464,1.1267767,1.0616703,0.74800561}; -SS(0.39612945,0.70614162,0.21524614,0.40637652,0.87094343,0.13060843,0.45788353,0.76094781,-0.0096633567,0.24404834,0.79519787,0.082231238){0.68453461,0.92399337,0.76853994,0.68472542}; -SS(-0.89426176,0.41257007,-0.12932618,-1,0.25105097,-0.19350143,-1,0.47527469,-0.27513051,-0.83127473,0.33505962,-0.32026923){0.974079,1.0825888,1.2834809,0.89071695}; -SS(0.50136923,0.34587735,-0.44862257,0.34662081,0.36199915,-0.25068724,0.48047723,0.47791267,-0.33071402,0.27170325,0.36204749,-0.4201745){0.56260896,0.29696992,0.55795418,0.36885377}; -SS(0.40637652,0.87094343,0.13060843,0.4450496,1,-0.00012892076,0.45788353,0.76094781,-0.0096633567,0.34720309,0.90097601,-0.12745168){0.92399337,1.179155,0.76853994,0.93504792}; -SS(-0.83248216,0.76782327,-0.31292259,-1,0.70529035,-0.21162945,-0.74249217,0.75399014,-0.15399718,-0.89962374,0.8609561,-0.16698164){1.366757,1.520296,1.1267767,1.5692753}; -SS(-0.58934795,0.84141567,-0.18062024,-0.76988954,1,-0.26944904,-0.56041637,1,-0.29784853,-0.65756371,0.81308934,-0.3429452){1.0736489,1.6463902,1.3856141,1.1958888}; -SS(0.09693172,0.3918681,-0.3370861,-0.029932551,0.40748663,-0.5,-0.12449617,0.36606215,-0.28273955,-0.01813809,0.53618118,-0.30537166){0.26256104,0.4038008,0.21185338,0.36567785}; -SS(-0.83006559,0.18329805,0.5,-0.91004595,0.15296589,0.33139812,-0.83851866,0.33014205,0.32623765,-0.72768327,0.10310141,0.33233484){0.96159482,0.94743142,0.89937894,0.63492881}; -SS(-0.30131805,-0.11512588,-0.5,-0.16707278,-0.087678023,-0.31121894,-0.19007896,0.04567822,-0.5,-0.29413589,0.046284299,-0.31274881){0.3368451,0.11599041,0.27736807,0.1681493}; -SS(-0.73174678,-0.21478859,-0.5,-0.64012388,-0.10177177,-0.37237302,-0.80728146,0.00010990719,-0.5,-0.85707128,-0.1416783,-0.34083416){0.81151292,0.54269073,0.88195685,0.85441326}; -SS(-0.40125956,-0.65699374,0.33213173,-0.50400314,-0.78879927,0.5,-0.50050976,-0.57246927,0.5,-0.57994589,-0.69256437,0.31204703){0.69449311,1.1086821,0.81219504,0.89957508}; -SS(0.671223,0.32907594,-0.5,0.50136923,0.34587735,-0.44862257,0.6251418,0.1440922,-0.5,0.51910919,0.22553632,-0.31417891){0.79435762,0.56260896,0.63751638,0.40112301}; -SS(-0.24163432,0.33561251,-0.055881164,-0.32064519,0.49448821,1.4739833e-06,-0.39654734,0.26661646,0.019312696,-0.19461387,0.3919517,0.10437587){0.16437697,0.32892635,0.20710489,0.19075448}; -SS(-0.29261734,0.53193925,0.43339885,-0.41648151,0.41684878,0.5,-0.48141868,0.60085372,0.5,-0.52470763,0.46530444,0.33754711){0.53993003,0.58097186,0.82306978,0.59371518}; -SS(0.68985253,1,-0.19792707,0.54326203,0.87223293,-0.356993,0.68900489,0.77311276,-0.28043733,0.54700908,0.85955032,-0.16345766){1.495304,1.1662147,1.1326816,1.0528061}; -SS(-0.58755791,0.033814853,0.5,-0.64009684,-0.10188458,0.37412975,-0.80727304,0.00024662976,0.5,-0.72768327,0.10310141,0.33233484){0.57778723,0.54631619,0.88515177,0.63492881}; -SS(0.13402468,0.11673163,-0.1460819,0.29173763,0,-0.20843742,0.16149165,0,-0.33864688,0.20129651,0.21389912,-0.31902192){0.039337265,0.1134179,0.12746835,0.16839385}; -SS(-0.69937066,0.31351533,-0.5,-0.63048479,0.37587985,-0.34368186,-0.83127473,0.33505962,-0.32026923,-0.62938155,0.17932964,-0.37445272){0.81965428,0.64388066,0.89071695,0.55109073}; -SS(-0.92571354,0.17249619,-0.34283108,-1,0.25105097,-0.19350143,-1,-0.00018427889,-0.26378916,-0.89804207,0.11676539,-0.10792088){0.99158484,1.0825888,1.0508045,0.82300022}; -SS(0.10162062,0.65400865,-0.37913628,0.16368264,0.50834729,-0.5,0.17777709,0.54047543,-0.2567554,0.09693172,0.3918681,-0.3370861){0.5665506,0.52115901,0.36840304,0.26256104}; -SS(-0.4543958,0.20406131,0.5,-0.36145429,0.13293621,0.35430528,-0.52427834,0.10778268,0.27208728,-0.41843781,0.30742585,0.3397996){0.48353653,0.26360063,0.34448415,0.37011438}; -SS(-0.89804207,0.11676539,-0.10792088,-1,-0.00021427218,0.00011802244,-1,-0.00018427889,-0.26378916,-0.88905946,-0.098697315,-0.13184676){0.82300022,0.98080906,1.0508045,0.8023886}; -SS(0.74440038,0.22095066,-0.087839409,0.70841775,0,-0.20847891,0.77491511,0.22516452,-0.26425516,0.88354722,0.11667767,-0.13069643){0.59875958,0.52293439,0.70313431,0.79839767}; -SS(-0.30122568,-0.11513872,0.5,-0.16643696,-0.21791406,0.42402077,-0.23048975,-0.37484721,0.5,-0.37661764,-0.26006406,0.40868766){0.33848202,0.23818505,0.42714666,0.36234206}; -SS(-0.49284988,-0.37485679,0.5,-0.37661764,-0.26006406,0.40868766,-0.23048975,-0.37484721,0.5,-0.34549718,-0.50098866,0.4105565){0.6163523,0.36234206,0.42714666,0.5260109}; -SS(0.45062041,0.7833899,-0.5,0.51674933,0.64481281,-0.39755292,0.33386283,0.81592026,-0.31808704,0.34412919,0.6158316,-0.3427703){1.0506853,0.82858869,0.86115027,0.59958408}; -SS(-0.63815223,-0.88141187,0.37488811,-0.67513028,-0.66529728,0.5,-0.50400314,-0.78879927,0.5,-0.57994589,-0.69256437,0.31204703){1.3088768,1.1284607,1.1086821,0.89957508}; -SS(-0.49284988,-0.37485679,0.5,-0.34549718,-0.50098866,0.4105565,-0.50050976,-0.57246927,0.5,-0.56348952,-0.47594309,0.3052276){0.6163523,0.5260109,0.81219504,0.61776713}; -SS(-1,-1,0.5,-0.8385203,-1,0.33846229,-1,-1,0.25,-1,-0.84092895,0.33252059){2.2322143,1.8024192,2.0427074,1.8030746}; -SS(-0.92571354,0.17249619,-0.34283108,-1,-0.00018427889,-0.26378916,-0.77267892,0.13105707,-0.24874664,-0.89804207,0.11676539,-0.10792088){0.99158484,1.0508045,0.65386325,0.82300022}; -SS(0.36841015,0.87909734,0.37310922,0.33333333,1,0.5,0.43654676,1,0.2604635,0.23106485,1,0.31398279){1.0362544,1.3466764,1.2403655,1.1340577}; -SS(0,-1,0.5,0,-0.83845667,0.33864852,0,-1,0.25,-0.16134158,-1,0.33850563){1.232491,0.80178572,1.0438639,1.129042}; -SS(1,0.16156328,-0.33847781,1,0,-0.5,1,0,-0.25,0.83867599,0,-0.33865964){1.1261583,1.2327879,1.043399,0.80182539}; -SS(0,-0.83851883,-0.33849865,0,-1,-0.5,0,-1,-0.25,-0.16144976,-1,-0.33863959){0.80235204,1.2333742,1.0435946,1.1250711}; -SS(1,0,0.5,1,0.16158711,0.33859063,1,0,0.25,0.83866368,0,0.33843958){1.2336156,1.1259698,1.0436257,0.80106313}; -SS(-0.34310942,-0.010167032,0.1509038,-0.1159097,-0.14329028,0.19302206,-0.20656092,-0.13938028,0.029547229,-0.15128303,0.02253305,0.11422928){0.12661586,0.055235283,0.048278496,0.025420414}; -SS(-0.55555556,1,0.5,-0.60421932,0.82298164,0.34468578,-0.44431425,1,0.36245944,-0.50037,0.79662088,0.5){1.5418081,1.1449713,1.3152029,1.1183194}; -SS(-0.29237157,-0.11865629,-0.17606411,-0.15923414,-0.34171533,-0.15079999,-0.1971424,-0.26981885,-0.30750196,-0.098950987,-0.13391411,-0.14594667){0.11404163,0.14783141,0.19280289,0.03512721}; -SS(-0.40125956,-0.65699374,0.33213173,-0.3548152,-0.48825703,0.21848985,-0.56348952,-0.47594309,0.3052276,-0.34549718,-0.50098866,0.4105565){0.69449311,0.38862106,0.61776713,0.5260109}; -SS(-0.52487586,-0.5117405,-0.017639258,-0.7055892,-0.50616462,-0.017961589,-0.59094649,-0.40495207,0.12834587,-0.61549046,-0.35581383,-0.12962263){0.51812974,0.74484897,0.51475101,0.50877487}; -SS(-0.36145429,0.13293621,0.35430528,-0.24000819,0.17660305,0.5,-0.40752783,0.030201366,0.5,-0.17669296,0.011023676,0.5){0.26360063,0.3210912,0.40526498,0.26322593}; -SS(0.86971177,0.13024645,0.1427188,1,0,0.25,1,0.16158711,0.33859063,0.83866368,0,0.33843958){0.77797836,1.0436257,1.1259698,0.80106313}; -SS(-0.65355936,0.25468043,-0.1897796,-0.68637718,0.43295764,-0.18031685,-0.78848723,0.26584533,-0.068869999,-0.63246299,0.29145388,0.035195127){0.51379882,0.67437813,0.68151298,0.47226275}; -SS(-1,0.70725984,0.21334539,-0.8480722,0.62150313,0.12164012,-0.76389013,0.77728265,0.25513738,-0.87046532,0.63071146,0.35630423){1.5286486,1.1084494,1.2358334,1.2666006}; -SS(-0.65776896,0.64141588,0.074371921,-0.8480722,0.62150313,0.12164012,-0.76389013,0.77728265,0.25513738,-0.79370724,0.81084643,0.045877226){0.83514199,1.1084494,1.2358334,1.270911}; -SS(-0.64009684,-0.10188458,0.37412975,-0.50807239,-0.16307462,0.5,-0.50874333,-0.23900991,0.2620444,-0.40506391,-0.079541407,0.3303193){0.54631619,0.52416601,0.36443271,0.26156128}; -SS(0.11523872,0.30161582,0.5,0.26083053,0.15082484,0.37728795,0.12517622,0.12515553,0.5,0.050277172,0.20853018,0.30186362){0.33546792,0.21918499,0.27156885,0.12181545}; -SS(-0.16643696,-0.21791406,0.42402077,-0.30122568,-0.11513872,0.5,-0.25897908,-0.24013326,0.26450313,-0.37661764,-0.26006406,0.40868766){0.23818505,0.33848202,0.17775565,0.36234206}; -SS(-0.83846289,-1,-0.33858677,-1,-1,-0.5,-1,-1,-0.25,-1,-0.83959635,-0.33115777){1.8019179,2.2321573,2.0422973,1.7998257}; -SS(-0.32064519,0.49448821,1.4739833e-06,-0.19461387,0.3919517,0.10437587,-0.096302334,0.43534175,-0.056072844,-0.098708274,0.55956225,0.10505678){0.32892635,0.19075448,0.18078295,0.31633913}; -SS(-0.79227163,-0.79754897,0.0021844777,-1,-0.77608598,0.00064487429,-0.82285362,-0.63420593,-0.0683896,-0.86742481,-0.86548068,-0.14483364){1.2530106,1.5844414,1.0691297,1.5085891}; -SS(-0.50050976,-0.57246927,0.5,-0.40125956,-0.65699374,0.33213173,-0.56348952,-0.47594309,0.3052276,-0.34549718,-0.50098866,0.4105565){0.81219504,0.69449311,0.61776713,0.5260109}; -SS(0.27123349,0.36190713,0.41476339,0.37501462,0.2307626,0.5,0.42621669,0.19017509,0.30505062,0.50761134,0.34933779,0.39015973){0.36300231,0.42590445,0.29714896,0.51484928}; -SS(0,0,-0.5,-0.16707278,-0.087678023,-0.31121894,-0.12484866,-0.12486094,-0.5,0,-0.16143077,-0.33843101){0.23465449,0.11599041,0.26766045,0.12966739}; -SS(0.36021608,0.23247759,-0.012351094,0.24635331,0.35131343,-0.096025322,0.13261259,0.21336316,0.036566127,0.18202227,0.38279251,0.10350409){0.16110593,0.18045455,0.046199082,0.17617817}; -SS(0.17426348,1,-0.18078905,0.34720309,0.90097601,-0.12745168,0.24937941,1,-0.00011138016,0.094968532,0.84539386,-0.087484586){1.045853,0.93504792,1.0446566,0.71839764}; -SS(-0.67801153,0.56076489,0.29217382,-0.66546973,0.66566005,0.5,-0.79641575,0.50054117,0.5,-0.61509744,0.47589965,0.5){0.83617727,1.1224691,1.1180299,0.84259202}; -SS(0.24635331,0.35131343,-0.096025322,0.30434906,0.49798107,-4.0114635e-05,0.086744979,0.52712982,0.027891324,0.18202227,0.38279251,0.10350409){0.18045455,0.32377482,0.26660844,0.17617817}; -SS(0.10162062,0.65400865,-0.37913628,-0.033284914,0.58770906,-0.5,0.16368264,0.50834729,-0.5,-0.01813809,0.53618118,-0.30537166){0.5665506,0.58301644,0.52115901,0.36567785}; -SS(-1,1,-0.25,-0.89962374,0.8609561,-0.16698164,-0.76988954,1,-0.26944904,-0.81095336,1,-0.07156149){2.0450698,1.5692753,1.6463902,1.6471359}; -SS(-0.098708274,0.55956225,0.10505678,-0.0073778212,0.36022468,0.15230712,-0.096302334,0.43534175,-0.056072844,0.086744979,0.52712982,0.027891324){0.31633913,0.13675819,0.18078295,0.26660844}; -SS(1,1,0.25,0.88049681,0.87960137,0.13412341,1,0.83856906,0.33864755,0.82853688,1,0.32125076){2.0447444,1.5518824,1.8033242,1.7703132}; -SS(-0.75,-1,-0.5,-0.6448883,-0.87343314,-0.36731947,-0.80632325,-0.81147186,-0.5,-0.83846289,-1,-0.33858677){1.7946951,1.296688,1.5409894,1.8019179}; -SS(0.37492492,0.49312259,0.5,0.27123349,0.36190713,0.41476339,0.16321322,0.50838432,0.5,0.26138985,0.51848551,0.281015){0.61809871,0.36300231,0.52238519,0.40200156}; -SS(-0.4433427,0.53576375,-0.12560501,-0.54631436,0.45612147,-0.00074796238,-0.45563594,0.60375179,0.095527884,-0.62332411,0.59900263,-0.10904345){0.48429505,0.48593017,0.56263538,0.74800561}; -SS(-0.10037172,0.18891947,0.20844359,-0.26986228,0.26051837,0.22418657,-0.11614487,0.30919383,0.33918095,-0.19461387,0.3919517,0.10437587){0.074828316,0.1749353,0.20820823,0.19075448}; -SS(-0.91004595,0.15296589,0.33139812,-1,0.33333333,0.5,-1,0.11111111,0.5,-0.83006559,0.18329805,0.5){0.94743142,1.3403692,1.246301,0.96159482}; -SS(-0.40125956,-0.65699374,0.33213173,-0.50050976,-0.57246927,0.5,-0.56348952,-0.47594309,0.3052276,-0.57994589,-0.69256437,0.31204703){0.69449311,0.81219504,0.61776713,0.89957508}; -SS(-0.83248216,0.76782327,-0.31292259,-0.66548665,0.66585508,-0.5,-0.80479144,0.80504612,-0.5,-0.65756371,0.81308934,-0.3429452){1.366757,1.1221664,1.5255891,1.1958888}; -SS(0.74440038,0.22095066,-0.087839409,0.77491511,0.22516452,-0.26425516,0.82562789,0.37565656,-0.12707714,0.88354722,0.11667767,-0.13069643){0.59875958,0.70313431,0.82387041,0.79839767}; -SS(-1,-1,0.25,-0.8827276,-0.88146034,0.13123348,-1,-0.84092895,0.33252059,-0.8385203,-1,0.33846229){2.0427074,1.5595365,1.8030746,1.8024192}; -SS(0.16368264,0.50834729,-0.5,0.10162062,0.65400865,-0.37913628,-0.01813809,0.53618118,-0.30537166,0.09693172,0.3918681,-0.3370861){0.52115901,0.5665506,0.36567785,0.26256104}; -SS(0.87881231,0.64063264,0.37220388,1,0.75,0.5,1,0.83856906,0.33864755,0.81191124,0.80644944,0.5){1.3069719,1.7930237,1.8033242,1.5425973}; -SS(-0.36145429,0.13293621,0.35430528,-0.34310942,-0.010167032,0.1509038,-0.20045203,0.067929244,0.29301468,-0.40506391,-0.079541407,0.3303193){0.26360063,0.12661586,0.10955402,0.26156128}; -SS(-0.41651431,0.41690828,-0.5,-0.39032311,0.63241857,-0.34621958,-0.4813337,0.60105459,-0.5,-0.50782983,0.50249565,-0.29902586){0.57523437,0.65630059,0.83133251,0.58612549}; -SS(-0.4433427,0.53576375,-0.12560501,-0.68637718,0.43295764,-0.18031685,-0.54631436,0.45612147,-0.00074796238,-0.62332411,0.59900263,-0.10904345){0.48429505,0.67437813,0.48593017,0.74800561}; -SS(0.34662081,0.36199915,-0.25068724,0.27170325,0.36204749,-0.4201745,0.20129651,0.21389912,-0.31902192,0.09693172,0.3918681,-0.3370861){0.29696992,0.36885377,0.16839385,0.26256104}; -SS(-0.5555987,0.045150158,0.095162244,-0.67616985,-0.069078192,0.18801024,-0.76752638,0.004448061,-0.013214377,-0.65367362,-0.16081953,0.0014934597){0.29993682,0.47948004,0.5734925,0.4344691}; -SS(-0.7055892,-0.50616462,-0.017961589,-0.76760867,-0.33664988,-0.028298027,-0.82595855,-0.48031431,0.11444494,-0.59094649,-0.40495207,0.12834587){0.74484897,0.68479998,0.90887195,0.51475101}; -SS(-0.61674646,0.25215289,0.3447871,-0.4543958,0.20406131,0.5,-0.52427834,0.10778268,0.27208728,-0.41843781,0.30742585,0.3397996){0.54607287,0.48353653,0.34448415,0.37011438}; -SS(0.24635331,0.35131343,-0.096025322,0.34662081,0.36199915,-0.25068724,0.36021608,0.23247759,-0.012351094,0.37137652,0.1767682,-0.19801193){0.18045455,0.29696992,0.16110593,0.19205628}; -SS(-0.32064519,0.49448821,1.4739833e-06,-0.24163432,0.33561251,-0.055881164,-0.39654734,0.26661646,0.019312696,-0.34372617,0.39779568,-0.18541051){0.32892635,0.16437697,0.20710489,0.29650146}; -SS(0.671223,0.32907594,-0.5,0.87867265,0.36391919,-0.37720578,0.78906409,0.5041626,-0.5,0.67125235,0.44297685,-0.31879306){0.79435762,1.03034,1.1105402,0.72773009}; -SS(-0.23583358,-0.36008743,0.0071767184,-0.3533559,-0.49437708,0.037576204,-0.18618058,-0.5161726,-0.15035515,-0.19247216,-0.56000521,0.088357129){0.16465457,0.35575629,0.30914003,0.34206231}; -SS(-0.12233239,-0.87748906,-0.13583418,0,-1,-0.25,-0.16144976,-1,-0.33863959,0,-0.83851883,-0.33849865){0.78823805,1.0435946,1.1250711,0.80235204}; -SS(-0.39032311,0.63241857,-0.34621958,-0.4813337,0.60105459,-0.5,-0.50782983,0.50249565,-0.29902586,-0.6293812,0.63993291,-0.28812602){0.65630059,0.83133251,0.58612549,0.87296464}; -SS(-1,0.70725984,0.21334539,-0.93582873,0.86427167,0.14668289,-1,0.84108515,0.33242406,-0.76389013,0.77728265,0.25513738){1.5286486,1.6320629,1.8031397,1.2358334}; -SS(0.29173763,0,-0.20843742,0.37137652,0.1767682,-0.19801193,0.20129651,0.21389912,-0.31902192,0.13402468,0.11673163,-0.1460819){0.1134179,0.19205628,0.16839385,0.039337265}; -SS(-0.93582873,0.86427167,0.14668289,-1,0.70725984,0.21334539,-1,0.77631186,0.00053339564,-0.8480722,0.62150313,0.12164012){1.6320629,1.5286486,1.5817554,1.1084494}; -SS(0.27123349,0.36190713,0.41476339,0.37492492,0.49312259,0.5,0.37501462,0.2307626,0.5,0.50761134,0.34933779,0.39015973){0.36300231,0.61809871,0.42590445,0.51484928}; -SS(-0.75,-1,0.5,-0.63815223,-0.88141187,0.37488811,-0.8385203,-1,0.33846229,-0.80635543,-0.81164184,0.5){1.7943537,1.3088768,1.8024192,1.5410993}; -SS(0.36841015,0.87909734,0.37310922,0.39612945,0.70614162,0.21524614,0.22886345,0.79287946,0.30210005,0.40637652,0.87094343,0.13060843){1.0362544,0.68453461,0.75332396,0.92399337}; -SS(-0.68637718,0.43295764,-0.18031685,-0.62332411,0.59900263,-0.10904345,-0.80558396,0.5878127,-0.29244037,-0.8068077,0.56885008,-0.063754108){0.67437813,0.74800561,1.0616703,0.96112076}; -SS(0.87881231,0.64063264,0.37220388,1,0.70834898,0.20844998,1,0.50005385,0.27984222,0.84582719,0.572243,0.1361951){1.3069719,1.5291243,1.3085441,1.0417018}; -SS(0,0,-6.9388939e-15,-0.098950987,-0.13391411,-0.14594667,0,-0.22019801,5.0496855e-05,-0.20656092,-0.13938028,0.029547229){-0.017891206,0.03512721,0.029059683,0.048278496}; -SS(0.61535375,0.70719289,-0.095218388,0.75922048,0.56990614,-0.17060419,0.68900489,0.77311276,-0.28043733,0.77861211,0.77861193,-0.067175459){0.87858083,0.91133836,1.1326816,1.1981052}; -SS(-0.38143574,0.84373572,-0.12387887,-0.42762906,1,-0.0094860889,-0.48952189,0.78345034,0.019065462,-0.32294154,0.86180803,0.13108841){0.85864479,1.169501,0.83409809,0.84829643}; -SS(-0.25897908,-0.24013326,0.26450313,-0.3727858,-0.19869367,0.11195566,-0.50874333,-0.23900991,0.2620444,-0.40506391,-0.079541407,0.3303193){0.17775565,0.16948569,0.36443271,0.26156128}; -SS(-0.47972312,1,0.18932995,-0.60421932,0.82298164,0.34468578,-0.66659408,1,0.32529585,-0.61311838,0.85766427,0.15491279){1.2473472,1.1449713,1.5364848,1.1216468}; -SS(-0.83127473,0.33505962,-0.32026923,-0.65355936,0.25468043,-0.1897796,-0.62938155,0.17932964,-0.37445272,-0.63048479,0.37587985,-0.34368186){0.89071695,0.51379882,0.55109073,0.64388066}; -SS(-0.63815223,-0.88141187,0.37488811,-0.77091496,-0.77159441,0.2629049,-0.57994589,-0.69256437,0.31204703,-0.61978497,-0.82706917,0.12738472){1.3088768,1.2433034,0.89957508,1.0681409}; -SS(-1,-0.5000565,0.0033661208,-0.83996275,-0.66999882,0.11765553,-0.82285362,-0.63420593,-0.0683896,-0.82595855,-0.48031431,0.11444494){1.2263361,1.1553131,1.0691297,0.90887195}; -SS(-0.68637718,0.43295764,-0.18031685,-0.4433427,0.53576375,-0.12560501,-0.50782983,0.50249565,-0.29902586,-0.62332411,0.59900263,-0.10904345){0.67437813,0.48429505,0.58612549,0.74800561}; -SS(-0.23048975,-0.37484721,0.5,-0.16643696,-0.21791406,0.42402077,-0.25897908,-0.24013326,0.26450313,-0.37661764,-0.26006406,0.40868766){0.42714666,0.23818505,0.17775565,0.36234206}; -SS(-0.93582873,0.86427167,0.14668289,-1,0.77631186,0.00053339564,-0.79370724,0.81084643,0.045877226,-0.8480722,0.62150313,0.12164012){1.6320629,1.5817554,1.270911,1.1084494}; -SS(1,0.25,0.5,0.87272604,0.35900693,0.37172569,1,0.16158711,0.33859063,0.81143387,0.18901581,0.5){1.2942978,1.0107603,1.1259698,0.9265446}; -SS(-0.50159539,-0.29258506,7.2987381e-06,-0.61549046,-0.35581383,-0.12962263,-0.76760867,-0.33664988,-0.028298027,-0.65367362,-0.16081953,0.0014934597){0.32068114,0.50877487,0.68479998,0.4344691}; -SS(-0.24163432,0.33561251,-0.055881164,-0.26297351,0.20404986,-0.17122089,-0.39654734,0.26661646,0.019312696,-0.34372617,0.39779568,-0.18541051){0.16437697,0.12773981,0.20710489,0.29650146}; -SS(-0.14850787,-0.69358405,-0.087583548,-0.35582611,-0.64426575,-0.070000747,-0.22302806,-0.77703925,0.068353305,-0.19247216,-0.56000521,0.088357129){0.49763432,0.52757348,0.64063544,0.34206231}; -SS(0.39612945,0.70614162,0.21524614,0.36841015,0.87909734,0.37310922,0.55555177,0.82262944,0.31125158,0.40637652,0.87094343,0.13060843){0.68453461,1.0362544,1.0671623,0.92399337}; -SS(-0.64009684,-0.10188458,0.37412975,-0.73174745,-0.21491043,0.5,-0.80727304,0.00024662976,0.5,-0.84084014,-0.14895162,0.31636914){0.54631619,0.81377033,0.88515177,0.81273381}; -SS(-0.39806707,0.15776443,0.15870839,-0.54640726,0.34339216,0.19847863,-0.52427834,0.10778268,0.27208728,-0.41843781,0.30742585,0.3397996){0.19317292,0.43575493,0.34448415,0.37011438}; -SS(-0.76389013,0.77728265,0.25513738,-0.93582873,0.86427167,0.14668289,-0.79370724,0.81084643,0.045877226,-0.8480722,0.62150313,0.12164012){1.2358334,1.6320629,1.270911,1.1084494}; -SS(0.85153485,0.65148612,-0.35468846,1,0.75,-0.5,0.81205362,0.80656044,-0.5,1,0.83864447,-0.33847614){1.2568282,1.7924126,1.5391707,1.8065101}; -SS(-0.16643696,-0.21791406,0.42402077,-0.23048975,-0.37484721,0.5,-0.25897908,-0.24013326,0.26450313,-0.1853821,-0.42358473,0.30866054){0.23818505,0.42714666,0.17775565,0.29143101}; -SS(-0.033284914,0.58770906,-0.5,-0.17097214,0.64900986,-0.39927747,-0.01813809,0.53618118,-0.30537166,0.10162062,0.65400865,-0.37913628){0.58301644,0.59741335,0.36567785,0.5665506}; -SS(0.4450496,1,-0.00012892076,0.34720309,0.90097601,-0.12745168,0.43683247,1,-0.26068681,0.54700908,0.85955032,-0.16345766){1.179155,0.93504792,1.2435523,1.0528061}; -SS(-0.222315,1,-0.00011890035,-0.10743676,0.85847111,-0.11136175,-0.088882135,1,-0.23281641,-0.012406168,1,-0.034358602){1.0307381,0.7462212,1.0431215,0.99121748}; -SS(0.08017426,0.31429474,-0.16745504,0.24635331,0.35131343,-0.096025322,0.13261259,0.21336316,0.036566127,0.13402468,0.11673163,-0.1460819){0.11103103,0.18045455,0.046199082,0.039337265}; -SS(-0.0073778212,0.36022468,0.15230712,-0.10037172,0.18891947,0.20844359,-0.11614487,0.30919383,0.33918095,-0.19461387,0.3919517,0.10437587){0.13675819,0.074828316,0.20820823,0.19075448}; -SS(0.43683247,1,-0.26068681,0.34720309,0.90097601,-0.12745168,0.33386283,0.81592026,-0.31808704,0.54700908,0.85955032,-0.16345766){1.2435523,0.93504792,0.86115027,1.0528061}; -SS(-0.29261734,0.53193925,0.43339885,-0.41648151,0.41684878,0.5,-0.35521568,0.4957142,0.26668635,-0.41843781,0.30742585,0.3397996){0.53993003,0.58097186,0.42001946,0.37011438}; -SS(0.68900489,0.77311276,-0.28043733,0.61535375,0.70719289,-0.095218388,0.77861211,0.77861193,-0.067175459,0.54700908,0.85955032,-0.16345766){1.1326816,0.87858083,1.1981052,1.0528061}; -SS(-0.61549046,-0.35581383,-0.12962263,-0.76760867,-0.33664988,-0.028298027,-0.7907607,-0.33838097,-0.28342271,-0.85520613,-0.46088631,-0.14784569){0.50877487,0.68479998,0.80149819,0.95161001}; -SS(0.54326203,0.87223293,-0.356993,0.43683247,1,-0.26068681,0.33386283,0.81592026,-0.31808704,0.54700908,0.85955032,-0.16345766){1.1662147,1.2435523,0.86115027,1.0528061}; -SS(-0.61311838,0.85766427,0.15491279,-0.65776896,0.64141588,0.074371921,-0.76389013,0.77728265,0.25513738,-0.79370724,0.81084643,0.045877226){1.1216468,0.83514199,1.2358334,1.270911}; -SS(-0.62332411,0.59900263,-0.10904345,-0.74249217,0.75399014,-0.15399718,-0.80558396,0.5878127,-0.29244037,-0.8068077,0.56885008,-0.063754108){0.74800561,1.1267767,1.0616703,0.96112076}; -SS(-0.65355936,0.25468043,-0.1897796,-0.77267892,0.13105707,-0.24874664,-0.83127473,0.33505962,-0.32026923,-0.62938155,0.17932964,-0.37445272){0.51379882,0.65386325,0.89071695,0.55109073}; -SS(0.77861211,0.77861193,-0.067175459,0.61535375,0.70719289,-0.095218388,0.62860594,0.86645525,0.049037492,0.54700908,0.85955032,-0.16345766){1.1981052,0.87858083,1.1303867,1.0528061}; -SS(-0.63815223,-0.88141187,0.37488811,-0.70832062,-1,0.2082538,-0.77091496,-0.77159441,0.2629049,-0.61978497,-0.82706917,0.12738472){1.3088768,1.5291125,1.2433034,1.0681409}; -SS(0.46476684,0.14382827,0.12247557,0.29175541,0,0.20824909,0.50011436,0,0.27961788,0.42621669,0.19017509,0.30505062){0.23450402,0.1093371,0.30940041,0.29714896}; -SS(-0.31377045,0.30492781,-0.36427962,-0.26297351,0.20404986,-0.17122089,-0.12449617,0.36606215,-0.28273955,-0.34372617,0.39779568,-0.18541051){0.30770932,0.12773981,0.21185338,0.29650146}; -SS(-0.89663862,-0.69397302,0.37275403,-1,-0.70710233,0.21356199,-0.79575191,-0.55547687,0.30538166,-0.83996275,-0.66999882,0.11765553){1.4119512,1.5280688,1.0192798,1.1553131}; -SS(-0.26297351,0.20404986,-0.17122089,-0.24163432,0.33561251,-0.055881164,-0.12449617,0.36606215,-0.28273955,-0.34372617,0.39779568,-0.18541051){0.12773981,0.16437697,0.21185338,0.29650146}; -SS(-0.7055892,-0.50616462,-0.017961589,-0.82285362,-0.63420593,-0.0683896,-0.82595855,-0.48031431,0.11444494,-0.85520613,-0.46088631,-0.14784569){0.74484897,1.0691297,0.90887195,0.95161001}; -SS(-0.34310942,-0.010167032,0.1509038,-0.36145429,0.13293621,0.35430528,-0.52427834,0.10778268,0.27208728,-0.40506391,-0.079541407,0.3303193){0.12661586,0.26360063,0.34448415,0.26156128}; -SS(-0.65956212,-0.52273243,-0.19262862,-0.61549046,-0.35581383,-0.12962263,-0.7907607,-0.33838097,-0.28342271,-0.85520613,-0.46088631,-0.14784569){0.7287475,0.50877487,0.80149819,0.95161001}; -SS(-0.26297351,0.20404986,-0.17122089,-0.31377045,0.30492781,-0.36427962,-0.49391083,0.27907498,-0.27264436,-0.34372617,0.39779568,-0.18541051){0.12773981,0.30770932,0.37398026,0.29650146}; -SS(-0.11111111,1,-0.5,0.0011150345,0.93517443,-0.37389303,-0.088882135,1,-0.23281641,-0.23070339,1,-0.34855306){1.2528065,1.0026385,1.0431215,1.1599423}; -SS(-0.93582873,0.86427167,0.14668289,-0.74954172,1,0.13574231,-0.76389013,0.77728265,0.25513738,-0.79370724,0.81084643,0.045877226){1.6320629,1.562759,1.2358334,1.270911}; -SS(1,0,-0.25,0.88354722,0.11667767,-0.13069643,1,0.16156328,-0.33847781,0.83867599,0,-0.33865964){1.043399,0.79839767,1.1261583,0.80182539}; -SS(-0.32879066,-0.67072359,-0.5,-0.11754465,-0.65214472,-0.32749638,-0.14376826,-0.62489354,-0.5,-0.26056819,-0.54975154,-0.34323516){0.79007105,0.53347202,0.6489606,0.46884495}; -SS(-0.63048479,0.37587985,-0.34368186,-0.41651431,0.41690828,-0.5,-0.61503712,0.4760032,-0.5,-0.50782983,0.50249565,-0.29902586){0.64388066,0.57523437,0.83978547,0.58612549}; -SS(0.27123349,0.36190713,0.41476339,0.25126435,0.28098512,0.24657435,0.26138985,0.51848551,0.281015,0.36016656,0.41044152,0.1594367){0.36300231,0.18575023,0.40200156,0.3073722}; -SS(-0.61978497,-0.82706917,0.12738472,-0.65631386,-0.59724887,0.13822882,-0.77091496,-0.77159441,0.2629049,-0.57994589,-0.69256437,0.31204703){1.0681409,0.7890621,1.2433034,0.89957508}; -SS(0,0,-0.5,-0.16707278,-0.087678023,-0.31121894,-0.19007896,0.04567822,-0.5,-0.12484866,-0.12486094,-0.5){0.23465449,0.11599041,0.27736807,0.26766045}; -SS(-0.24000819,0.17660305,0.5,-0.11614487,0.30919383,0.33918095,-0.18136176,0.40461939,0.5,-0.045146113,0.19012269,0.5){0.3210912,0.20820823,0.42386795,0.27176836}; -SS(1,0.2917639,-0.20827961,0.87867265,0.36391919,-0.37720578,1,0.16156328,-0.33847781,0.77491511,0.22516452,-0.26425516){1.1127834,1.03034,1.1261583,0.70313431}; -SS(-0.31377045,0.30492781,-0.36427962,-0.17603462,0.24070348,-0.5,-0.12449617,0.36606215,-0.28273955,-0.1182182,0.15955837,-0.3159857){0.30770932,0.32537509,0.21185338,0.11990198}; -SS(1,0.25,-0.5,0.87867265,0.36391919,-0.37720578,0.81149777,0.18885984,-0.5,1,0.16156328,-0.33847781){1.2935113,1.03034,0.92750237,1.1261583}; -SS(-0.36340067,-0.87821042,-0.37678589,-0.25,-1,-0.5,-0.18848435,-0.81110947,-0.5,-0.16144976,-1,-0.33863959){1.0307746,1.2929607,0.92571371,1.1250711}; -SS(0.16368264,0.50834729,-0.5,0.27170325,0.36204749,-0.4201745,0.17777709,0.54047543,-0.2567554,0.09693172,0.3918681,-0.3370861){0.52115901,0.36885377,0.36840304,0.26256104}; -SS(-0.91414606,-0.68082467,-0.37109558,-1,-0.55555556,-0.5,-1,-0.47540235,-0.27521785,-0.81387526,-0.53653555,-0.3209601){1.4249306,1.5366945,1.2841965,1.0406635}; -SS(-0.79227163,-0.79754897,0.0021844777,-0.77091496,-0.77159441,0.2629049,-0.61978497,-0.82706917,0.12738472,-0.83996275,-0.66999882,0.11765553){1.2530106,1.2433034,1.0681409,1.1553131}; -SS(-1,0.33333333,-0.5,-0.92571354,0.17249619,-0.34283108,-0.82994199,0.18319278,-0.5,-0.83127473,0.33505962,-0.32026923){1.3393331,0.99158484,0.95993957,0.89071695}; -SS(-0.63815223,-0.88141187,0.37488811,-0.70832062,-1,0.2082538,-0.8385203,-1,0.33846229,-0.77091496,-0.77159441,0.2629049){1.3088768,1.5291125,1.8024192,1.2433034}; -SS(-0.7055892,-0.50616462,-0.017961589,-0.76760867,-0.33664988,-0.028298027,-0.59094649,-0.40495207,0.12834587,-0.61549046,-0.35581383,-0.12962263){0.74484897,0.68479998,0.51475101,0.50877487}; -SS(-0.8480722,0.62150313,0.12164012,-0.65776896,0.64141588,0.074371921,-0.79172217,0.43302343,0.13373134,-0.8068077,0.56885008,-0.063754108){1.1084494,0.83514199,0.80968993,0.96112076}; -SS(-0.24000819,0.17660305,0.5,-0.36145429,0.13293621,0.35430528,-0.4543958,0.20406131,0.5,-0.41843781,0.30742585,0.3397996){0.3210912,0.26360063,0.48353653,0.37011438}; -SS(-0.62332411,0.59900263,-0.10904345,-0.65776896,0.64141588,0.074371921,-0.74249217,0.75399014,-0.15399718,-0.8068077,0.56885008,-0.063754108){0.74800561,0.83514199,1.1267767,0.96112076}; -SS(-0.89426176,0.41257007,-0.12932618,-0.68637718,0.43295764,-0.18031685,-0.80558396,0.5878127,-0.29244037,-0.8068077,0.56885008,-0.063754108){0.974079,0.67437813,1.0616703,0.96112076}; -SS(-0.36145429,0.13293621,0.35430528,-0.40752783,0.030201366,0.5,-0.52427834,0.10778268,0.27208728,-0.40506391,-0.079541407,0.3303193){0.26360063,0.40526498,0.34448415,0.26156128}; -SS(-0.16707278,-0.087678023,-0.31121894,-0.29237157,-0.11865629,-0.17606411,-0.29413589,0.046284299,-0.31274881,-0.38492375,-0.20017574,-0.33650716){0.11599041,0.11404163,0.1681493,0.28705324}; -SS(-0.61674646,0.25215289,0.3447871,-0.69937107,0.31347586,0.5,-0.83006559,0.18329805,0.5,-0.72768327,0.10310141,0.33233484){0.54607287,0.8165723,0.96159482,0.63492881}; -SS(-0.26297351,0.20404986,-0.17122089,-0.31377045,0.30492781,-0.36427962,-0.12449617,0.36606215,-0.28273955,-0.1182182,0.15955837,-0.3159857){0.12773981,0.30770932,0.21185338,0.11990198}; -SS(-1,0.70725984,0.21334539,-0.93582873,0.86427167,0.14668289,-0.76389013,0.77728265,0.25513738,-0.8480722,0.62150313,0.12164012){1.5286486,1.6320629,1.2358334,1.1084494}; -SS(0.4450496,1,-0.00012892076,0.40637652,0.87094343,0.13060843,0.24937941,1,-0.00011138016,0.34720309,0.90097601,-0.12745168){1.179155,0.92399337,1.0446566,0.93504792}; -SS(-0.26297351,0.20404986,-0.17122089,-0.4182056,0.11248126,-0.14182463,-0.29413589,0.046284299,-0.31274881,-0.28278924,0.041190137,-0.04219563){0.12773981,0.19428145,0.1681493,0.063480395}; -SS(-0.15923414,-0.34171533,-0.15079999,0,-0.29164705,-0.20823955,0,-0.49997234,-0.27965571,-0.073421274,-0.375,-0.38984354){0.14783141,0.11473247,0.30906942,0.28201081}; -SS(-0.8480722,0.62150313,0.12164012,-0.65776896,0.64141588,0.074371921,-0.8068077,0.56885008,-0.063754108,-0.79370724,0.81084643,0.045877226){1.1084494,0.83514199,0.96112076,1.270911}; -SS(1,0.2917639,-0.20827961,0.87867265,0.36391919,-0.37720578,0.77491511,0.22516452,-0.26425516,0.82562789,0.37565656,-0.12707714){1.1127834,1.03034,0.70313431,0.82387041}; -SS(-0.20984637,0.69532212,0.20809493,-0.16015893,0.67694077,0.39025863,-0.043441254,0.79173928,0.29440137,-0.30949447,0.8262402,0.33528492){0.55022745,0.6265216,0.69563564,0.87388961}; -SS(-0.8827276,-0.88146034,0.13123348,-1,-0.70710233,0.21356199,-1,-0.84092895,0.33252059,-0.77091496,-0.77159441,0.2629049){1.5595365,1.5280688,1.8030746,1.2433034}; -SS(0.88354722,0.11667767,-0.13069643,1,0.2917639,-0.20827961,1,0.16156328,-0.33847781,0.77491511,0.22516452,-0.26425516){0.79839767,1.1127834,1.1261583,0.70313431}; -SS(-0.16707278,-0.087678023,-0.31121894,-0.19007896,0.04567822,-0.5,-0.29413589,0.046284299,-0.31274881,-0.1182182,0.15955837,-0.3159857){0.11599041,0.27736807,0.1681493,0.11990198}; -SS(-0.033588837,0.5879061,0.5,0.10211023,0.6404511,0.38011645,0.16321322,0.50838432,0.5,0.085954007,0.41736025,0.32943097){0.57806214,0.55160362,0.52238519,0.27115576}; -SS(-0.29237157,-0.11865629,-0.17606411,-0.45843014,-0.20445062,-0.15988901,-0.49808619,0.0026201378,-0.26387206,-0.38492375,-0.20017574,-0.33650716){0.11404163,0.26094507,0.29810596,0.28705324}; -SS(-0.63048479,0.37587985,-0.34368186,-0.68637718,0.43295764,-0.18031685,-0.50782983,0.50249565,-0.29902586,-0.6293812,0.63993291,-0.28812602){0.64388066,0.67437813,0.58612549,0.87296464}; -SS(0.70841775,0,-0.20847891,0.88354722,0.11667767,-0.13069643,0.83867599,0,-0.33865964,0.77491511,0.22516452,-0.26425516){0.52293439,0.79839767,0.80182539,0.70313431}; -SS(-0.65631386,-0.59724887,0.13822882,-0.7055892,-0.50616462,-0.017961589,-0.52487586,-0.5117405,-0.017639258,-0.50537844,-0.68762812,0.023695348){0.7890621,0.74484897,0.51812974,0.71483247}; -SS(0.74440038,0.22095066,-0.087839409,0.60662231,0.34516964,-0.13972301,0.77491511,0.22516452,-0.26425516,0.57129187,0.13526053,-0.13726946){0.59875958,0.48782847,0.70313431,0.35115136}; -SS(-0.91414606,-0.68082467,-0.37109558,-1,-0.70523324,-0.21165758,-1,-0.83959635,-0.33115777,-0.76546557,-0.72634686,-0.27513208){1.4249306,1.5222776,1.7998257,1.1696133}; -SS(1,0.70844226,-0.20827687,0.8781758,0.86708556,-0.1989731,1,0.83864447,-0.33847614,0.85153485,0.65148612,-0.35468846){1.5310675,1.5462283,1.8065101,1.2568282}; -SS(1,0.77979347,0.00010253841,0.8988736,0.63809662,-0.070284173,0.77861211,0.77861193,-0.067175459,0.8781758,0.86708556,-0.1989731){1.5887874,1.2046527,1.1981052,1.5462283}; -SS(0.36841015,0.87909734,0.37310922,0.55555556,1,0.5,0.33333333,1,0.5,0.45042372,0.78359022,0.5){1.0362544,1.5357742,1.3466764,1.0496179}; -SS(-0.349759,-0.84853211,0.35590634,-0.25,-1,0.5,-0.16134158,-1,0.33850563,-0.18863677,-0.81113033,0.5){0.94981364,1.2918821,1.129042,0.92459822}; -SS(-0.1182182,0.15955837,-0.3159857,0,0,-0.5,-0.19007896,0.04567822,-0.5,-0.010543702,0.17712261,-0.5){0.11990198,0.23465449,0.27736807,0.25750364}; -SS(0.67112401,0.32933441,0.5,0.59416595,0.14141347,0.32656529,0.62515059,0.14422159,0.5,0.50761134,0.34933779,0.39015973){0.79210069,0.46498444,0.64726001,0.51484928}; -SS(-0.11754465,-0.65214472,-0.32749638,0,-0.70830496,-0.20826096,-0.18618058,-0.5161726,-0.15035515,-0.14850787,-0.69358405,-0.087583548){0.53347202,0.5287181,0.30914003,0.49763432}; -SS(1,0.70844226,-0.20827687,0.8988736,0.63809662,-0.070284173,1,0.77979347,0.00010253841,0.8781758,0.86708556,-0.1989731){1.5310675,1.2046527,1.5887874,1.5462283}; -SS(-0.73479965,-0.34302295,0.24038072,-0.62450053,-0.31310845,0.38575928,-0.56348952,-0.47594309,0.3052276,-0.59094649,-0.40495207,0.12834587){0.69668046,0.62379151,0.61776713,0.51475101}; -SS(0,-0.70830496,-0.20826096,-0.11754465,-0.65214472,-0.32749638,0,-0.83851883,-0.33849865,-0.2399131,-0.76005145,-0.25989531){0.5287181,0.53347202,0.80235204,0.6848256}; -SS(-0.4182056,0.11248126,-0.14182463,-0.26297351,0.20404986,-0.17122089,-0.39654734,0.26661646,0.019312696,-0.28278924,0.041190137,-0.04219563){0.19428145,0.12773981,0.20710489,0.063480395}; -SS(-0.31289368,0.69974287,-0.5,-0.17097214,0.64900986,-0.39927747,-0.18268367,0.83021756,-0.5,-0.35455825,0.80859576,-0.32177549){0.82323564,0.59741335,0.9573479,0.86460259}; -SS(-0.88905946,-0.098697315,-0.13184676,-1,-0.25140376,-0.1934451,-1,-0.00018427889,-0.26378916,-0.85707128,-0.1416783,-0.34083416){0.8023886,1.0790534,1.0508045,0.85441326}; -SS(0.54326203,0.87223293,-0.356993,0.68985253,1,-0.19792707,0.43683247,1,-0.26068681,0.54700908,0.85955032,-0.16345766){1.1662147,1.495304,1.2435523,1.0528061}; -SS(-0.37661764,-0.26006406,0.40868766,-0.30122568,-0.11513872,0.5,-0.25897908,-0.24013326,0.26450313,-0.40506391,-0.079541407,0.3303193){0.36234206,0.33848202,0.17775565,0.26156128}; -SS(-0.33333333,1,0.5,-0.55555556,1,0.5,-0.44431425,1,0.36245944,-0.50037,0.79662088,0.5){1.3433112,1.5418081,1.3152029,1.1183194}; -SS(-0.60421932,0.82298164,0.34468578,-0.47972312,1,0.18932995,-0.66659408,1,0.32529585,-0.44431425,1,0.36245944){1.1449713,1.2473472,1.5364848,1.3152029}; -SS(0.26083053,0.15082484,0.37728795,0.11523872,0.30161582,0.5,0.37501462,0.2307626,0.5,0.27123349,0.36190713,0.41476339){0.21918499,0.33546792,0.42590445,0.36300231}; -SS(-0.22656331,-0.68065623,0.28194433,-0.32897755,-0.67088709,0.5,-0.18863677,-0.81113033,0.5,-0.14394692,-0.62481063,0.5){0.57683818,0.79643001,0.92459822,0.63866347}; -SS(0.70841775,0,-0.20847891,0.74440038,0.22095066,-0.087839409,0.77491511,0.22516452,-0.26425516,0.57129187,0.13526053,-0.13726946){0.52293439,0.59875958,0.70313431,0.35115136}; -SS(-0.0089783977,0.64320989,-0.13441642,0.10162062,0.65400865,-0.37913628,0.17777709,0.54047543,-0.2567554,-0.01813809,0.53618118,-0.30537166){0.41358858,0.5665506,0.36840304,0.36567785}; -SS(-0.77091496,-0.77159441,0.2629049,-0.79227163,-0.79754897,0.0021844777,-0.61978497,-0.82706917,0.12738472,-0.8827276,-0.88146034,0.13123348){1.2433034,1.2530106,1.0681409,1.5595365}; -SS(-0.2399131,-0.76005145,-0.25989531,-0.11754465,-0.65214472,-0.32749638,-0.18618058,-0.5161726,-0.15035515,-0.14850787,-0.69358405,-0.087583548){0.6848256,0.53347202,0.30914003,0.49763432}; -SS(0.70841775,0,-0.20847891,0.74440038,0.22095066,-0.087839409,0.77985819,0,-0.00014691753,0.88354722,0.11667767,-0.13069643){0.52293439,0.59875958,0.58919206,0.79839767}; -SS(-0.16707278,-0.087678023,-0.31121894,-0.30131805,-0.11512588,-0.5,-0.1971424,-0.26981885,-0.30750196,-0.38492375,-0.20017574,-0.33650716){0.11599041,0.3368451,0.19280289,0.28705324}; -SS(-0.50159539,-0.29258506,7.2987381e-06,-0.61549046,-0.35581383,-0.12962263,-0.65367362,-0.16081953,0.0014934597,-0.45843014,-0.20445062,-0.15988901){0.32068114,0.50877487,0.4344691,0.26094507}; -SS(-0.84289574,0.018333867,0.1608607,-0.67616985,-0.069078192,0.18801024,-0.7489605,0.18190923,0.13647301,-0.72768327,0.10310141,0.33233484){0.72430843,0.47948004,0.59564173,0.63492881}; -SS(0.18202227,0.38279251,0.10350409,0.25126435,0.28098512,0.24657435,0.26138985,0.51848551,0.281015,0.085954007,0.41736025,0.32943097){0.17617817,0.18575023,0.40200156,0.27115576}; -SS(-0.23048975,-0.37484721,0.5,-0.37661764,-0.26006406,0.40868766,-0.25897908,-0.24013326,0.26450313,-0.1853821,-0.42358473,0.30866054){0.42714666,0.36234206,0.17775565,0.29143101}; -SS(-0.3533559,-0.49437708,0.037576204,-0.35582611,-0.64426575,-0.070000747,-0.18618058,-0.5161726,-0.15035515,-0.19247216,-0.56000521,0.088357129){0.35575629,0.52757348,0.30914003,0.34206231}; -SS(0.54700908,0.85955032,-0.16345766,0.4450496,1,-0.00012892076,0.45788353,0.76094781,-0.0096633567,0.62860594,0.86645525,0.049037492){1.0528061,1.179155,0.76853994,1.1303867}; -SS(0,-0.75,-0.5,-0.11754465,-0.65214472,-0.32749638,-0.18848435,-0.81110947,-0.5,0,-0.83851883,-0.33849865){0.79460868,0.53347202,0.92571371,0.80235204}; -SS(-0.62450053,-0.31310845,0.38575928,-0.73479965,-0.34302295,0.24038072,-0.50874333,-0.23900991,0.2620444,-0.59094649,-0.40495207,0.12834587){0.62379151,0.69668046,0.36443271,0.51475101}; -SS(-1,0.49991607,0.0031934521,-0.8480722,0.62150313,0.12164012,-0.79172217,0.43302343,0.13373134,-0.8068077,0.56885008,-0.063754108){1.2302733,1.1084494,0.80968993,0.96112076}; -SS(-0.81095336,1,-0.07156149,-0.89962374,0.8609561,-0.16698164,-0.74249217,0.75399014,-0.15399718,-0.79370724,0.81084643,0.045877226){1.6471359,1.5692753,1.1267767,1.270911}; -SS(-0.098950987,-0.13391411,-0.14594667,-0.29237157,-0.11865629,-0.17606411,-0.20656092,-0.13938028,0.029547229,-0.28278924,0.041190137,-0.04219563){0.03512721,0.11404163,0.048278496,0.063480395}; -SS(0.30434906,0.49798107,-4.0114635e-05,0.11458044,0.70010244,0.010073529,0.086744979,0.52712982,0.027891324,0.26064395,0.61953306,0.12890567){0.32377482,0.49378055,0.26660844,0.45328252}; -SS(-0.62450053,-0.31310845,0.38575928,-0.50874333,-0.23900991,0.2620444,-0.56348952,-0.47594309,0.3052276,-0.59094649,-0.40495207,0.12834587){0.62379151,0.36443271,0.61776713,0.51475101}; -SS(-0.91004595,0.15296589,0.33139812,-1,0.33333333,0.5,-0.83006559,0.18329805,0.5,-0.83851866,0.33014205,0.32623765){0.94743142,1.3403692,0.96159482,0.89937894}; -SS(-0.7489605,0.18190923,0.13647301,-0.91347537,0.15552497,0.067511395,-0.84289574,0.018333867,0.1608607,-0.91004595,0.15296589,0.33139812){0.59564173,0.85045394,0.72430843,0.94743142}; -SS(0.094968532,0.84539386,-0.087484586,0.17426348,1,-0.18078905,-0.012406168,1,-0.034358602,0.24937941,1,-0.00011138016){0.71839764,1.045853,0.99121748,1.0446566}; -SS(1,1,-0.25,1,1,-0.5,1,0.83864447,-0.33847614,0.82865019,1,-0.3214153){2.0438315,2.2331531,1.8065101,1.7714679}; -SS(-0.70832062,-1,0.2082538,-0.8827276,-0.88146034,0.13123348,-0.8385203,-1,0.33846229,-0.77091496,-0.77159441,0.2629049){1.5291125,1.5595365,1.8024192,1.2433034}; -SS(1,1,0.5,1,1,0.25,1,0.83856906,0.33864755,0.82853688,1,0.32125076){2.2317116,2.0447444,1.8033242,1.7703132}; -SS(-0.26297351,0.20404986,-0.17122089,-0.24163432,0.33561251,-0.055881164,-0.13709741,0.19518884,0.034033465,-0.056808231,0.14323286,-0.13367928){0.12773981,0.16437697,0.040184006,0.022140076}; -SS(-0.34310942,-0.010167032,0.1509038,-0.3727858,-0.19869367,0.11195566,-0.25897908,-0.24013326,0.26450313,-0.40506391,-0.079541407,0.3303193){0.12661586,0.16948569,0.17775565,0.26156128}; -SS(-0.29237157,-0.11865629,-0.17606411,-0.4182056,0.11248126,-0.14182463,-0.4720473,-0.063494476,-0.036829327,-0.28278924,0.041190137,-0.04219563){0.11404163,0.19428145,0.21285629,0.063480395}; -SS(-0.88905946,-0.098697315,-0.13184676,-0.70236545,-0.13062851,-0.19140485,-0.76752638,0.004448061,-0.013214377,-0.65367362,-0.16081953,0.0014934597){0.8023886,0.5265969,0.5734925,0.4344691}; -SS(0.34720309,0.90097601,-0.12745168,0.17426348,1,-0.18078905,0.25248643,0.73785598,-0.13082591,0.094968532,0.84539386,-0.087484586){0.93504792,1.045853,0.60350215,0.71839764}; -SS(-0.76752638,0.004448061,-0.013214377,-0.91347537,0.15552497,0.067511395,-0.78848723,0.26584533,-0.068869999,-0.89804207,0.11676539,-0.10792088){0.5734925,0.85045394,0.68151298,0.82300022}; -SS(-0.35582611,-0.64426575,-0.070000747,-0.14850787,-0.69358405,-0.087583548,-0.18618058,-0.5161726,-0.15035515,-0.19247216,-0.56000521,0.088357129){0.52757348,0.49763432,0.30914003,0.34206231}; -SS(0.51674933,0.64481281,-0.39755292,0.45062041,0.7833899,-0.5,0.33386283,0.81592026,-0.31808704,0.54326203,0.87223293,-0.356993){0.82858869,1.0506853,0.86115027,1.1662147}; -SS(-0.19461387,0.3919517,0.10437587,-0.0073778212,0.36022468,0.15230712,-0.11618574,0.50328545,0.29980467,-0.11614487,0.30919383,0.33918095){0.19075448,0.13675819,0.33969293,0.20820823}; -SS(-0.58934795,0.84141567,-0.18062024,-0.48255002,0.69900846,-0.19155417,-0.35455825,0.80859576,-0.32177549,-0.38143574,0.84373572,-0.12387887){1.0736489,0.74365966,0.86460259,0.85864479}; -SS(-0.40506391,-0.079541407,0.3303193,-0.58755791,0.033814853,0.5,-0.50807239,-0.16307462,0.5,-0.40752783,0.030201366,0.5){0.26156128,0.57778723,0.52416601,0.40526498}; -SS(-0.16707278,-0.087678023,-0.31121894,-0.30131805,-0.11512588,-0.5,-0.12484866,-0.12486094,-0.5,-0.1971424,-0.26981885,-0.30750196){0.11599041,0.3368451,0.26766045,0.19280289}; -SS(-0.85520613,-0.46088631,-0.14784569,-0.65956212,-0.52273243,-0.19262862,-0.82285362,-0.63420593,-0.0683896,-0.81387526,-0.53653555,-0.3209601){0.95161001,0.7287475,1.0691297,1.0406635}; -SS(-0.26297351,0.20404986,-0.17122089,-0.056808231,0.14323286,-0.13367928,-0.13709741,0.19518884,0.034033465,-0.28278924,0.041190137,-0.04219563){0.12773981,0.022140076,0.040184006,0.063480395}; -SS(-0.30949447,0.8262402,0.33528492,-0.20984637,0.69532212,0.20809493,-0.47185361,0.73769401,0.24072705,-0.32294154,0.86180803,0.13108841){0.87388961,0.55022745,0.80384956,0.84829643}; -SS(-0.65956212,-0.52273243,-0.19262862,-0.61549046,-0.35581383,-0.12962263,-0.56113743,-0.28920115,-0.29204918,-0.62341011,-0.46880832,-0.38153973){0.7287475,0.50877487,0.46850822,0.73807879}; -SS(-0.68637718,0.43295764,-0.18031685,-0.65355936,0.25468043,-0.1897796,-0.78848723,0.26584533,-0.068869999,-0.83127473,0.33505962,-0.32026923){0.67437813,0.51379882,0.68151298,0.89071695}; -SS(-0.65355936,0.25468043,-0.1897796,-0.77267892,0.13105707,-0.24874664,-0.78848723,0.26584533,-0.068869999,-0.83127473,0.33505962,-0.32026923){0.51379882,0.65386325,0.68151298,0.89071695}; -SS(0.10211023,0.6404511,0.38011645,0.21512427,0.73211919,0.5,0.16321322,0.50838432,0.5,0.35567295,0.65317229,0.39545235){0.55160362,0.81521474,0.52238519,0.69293227}; -SS(-0.12988976,-0.86995226,0.20452896,-0.29157863,-1,0.20827581,-0.16134158,-1,0.33850563,-0.349759,-0.84853211,0.35590634){0.79894991,1.1139248,1.129042,0.94981364}; -SS(-0.29168215,-1,-0.20844865,-0.36340067,-0.87821042,-0.37678589,-0.49995867,-1,-0.27986665,-0.42066299,-0.84356131,-0.12906413){1.1132023,1.0307746,1.3082069,0.88525127}; -SS(-0.63246299,0.29145388,0.035195127,-0.54640726,0.34339216,0.19847863,-0.39654734,0.26661646,0.019312696,-0.54631436,0.45612147,-0.00074796238){0.47226275,0.43575493,0.20710489,0.48593017}; -SS(0.17426348,1,-0.18078905,0.0011150345,0.93517443,-0.37389303,0.2222976,1,-0.35617554,0.081865095,0.80626877,-0.27867109){1.045853,1.0026385,1.1585843,0.71703623}; -SS(-0.58258855,0.14037208,-0.067351147,-0.63246299,0.29145388,0.035195127,-0.7489605,0.18190923,0.13647301,-0.5555987,0.045150158,0.095162244){0.34532741,0.47226275,0.59564173,0.29993682}; -SS(-0.4433427,0.53576375,-0.12560501,-0.48255002,0.69900846,-0.19155417,-0.24654336,0.57133462,-0.25396354,-0.39032311,0.63241857,-0.34621958){0.48429505,0.74365966,0.42991415,0.65630059}; -SS(-0.69937066,0.31351533,-0.5,-0.63048479,0.37587985,-0.34368186,-0.79644003,0.50064951,-0.5,-0.83127473,0.33505962,-0.32026923){0.81965428,0.64388066,1.115532,0.89071695}; -SS(0.69383766,0.49492178,-0.021800115,0.60662231,0.34516964,-0.13972301,0.75922048,0.56990614,-0.17060419,0.82562789,0.37565656,-0.12707714){0.71284258,0.48782847,0.91133836,0.82387041}; -SS(0.0011150345,0.93517443,-0.37389303,-0.088882135,1,-0.23281641,-0.23070339,1,-0.34855306,-0.14847812,0.78021305,-0.27623142){1.0026385,1.0431215,1.1599423,0.68882385}; -SS(0.60662231,0.34516964,-0.13972301,0.69383766,0.49492178,-0.021800115,0.77315808,0.36766952,0.075951375,0.82562789,0.37565656,-0.12707714){0.48782847,0.71284258,0.71793497,0.82387041}; -SS(0.27170325,0.36204749,-0.4201745,0.34662081,0.36199915,-0.25068724,0.17777709,0.54047543,-0.2567554,0.09693172,0.3918681,-0.3370861){0.36885377,0.29696992,0.36840304,0.26256104}; -SS(-0.74954172,1,0.13574231,-0.61311838,0.85766427,0.15491279,-0.66659408,1,0.32529585,-0.76389013,0.77728265,0.25513738){1.562759,1.1216468,1.5364848,1.2358334}; -SS(-0.89962374,0.8609561,-0.16698164,-1,1,-0.25,-1,1,-6.9388939e-15,-0.81095336,1,-0.07156149){1.5692753,2.0450698,1.9810426,1.6471359}; -SS(-0.89426176,0.41257007,-0.12932618,-0.68637718,0.43295764,-0.18031685,-0.78848723,0.26584533,-0.068869999,-0.83127473,0.33505962,-0.32026923){0.974079,0.67437813,0.68151298,0.89071695}; -SS(0.13402468,0.11673163,-0.1460819,0,0,-6.9388939e-15,0.22032809,0,-9.1119885e-05,0.13261259,0.21336316,0.036566127){0.039337265,-0.017891206,0.027339551,0.046199082}; -SS(0.69383766,0.49492178,-0.021800115,0.65062064,0.64268786,0.069510863,0.75922048,0.56990614,-0.17060419,0.61535375,0.70719289,-0.095218388){0.71284258,0.82620698,0.91133836,0.87858083}; -SS(-0.18268367,0.83021756,-0.5,-0.17097214,0.64900986,-0.39927747,-0.14847812,0.78021305,-0.27623142,-0.35455825,0.80859576,-0.32177549){0.9573479,0.59741335,0.68882385,0.86460259}; -SS(0.34662081,0.36199915,-0.25068724,0.24635331,0.35131343,-0.096025322,0.20129651,0.21389912,-0.31902192,0.37137652,0.1767682,-0.19801193){0.29696992,0.18045455,0.16839385,0.19205628}; -SS(0.88354722,0.11667767,-0.13069643,1,0.2917639,-0.20827961,0.77491511,0.22516452,-0.26425516,0.82562789,0.37565656,-0.12707714){0.79839767,1.1127834,0.70313431,0.82387041}; -SS(-0.4433427,0.53576375,-0.12560501,-0.24654336,0.57133462,-0.25396354,-0.50782983,0.50249565,-0.29902586,-0.39032311,0.63241857,-0.34621958){0.48429505,0.42991415,0.58612549,0.65630059}; -SS(-0.1159097,-0.14329028,0.19302206,0,0,-6.9388939e-15,-0.20656092,-0.13938028,0.029547229,-0.15128303,0.02253305,0.11422928){0.055235283,-0.017891206,0.048278496,0.025420414}; -SS(-0.41767704,0.010770256,-0.44072823,-0.30131805,-0.11512588,-0.5,-0.29413589,0.046284299,-0.31274881,-0.38492375,-0.20017574,-0.33650716){0.35514259,0.3368451,0.1681493,0.28705324}; -SS(0.68966181,1,0.19790566,0.88049681,0.87960137,0.13412341,0.82853688,1,0.32125076,0.76099919,0.76690574,0.25750996){1.492557,1.5518824,1.7703132,1.2143065}; -SS(0.74440038,0.22095066,-0.087839409,0.60662231,0.34516964,-0.13972301,0.77315808,0.36766952,0.075951375,0.82562789,0.37565656,-0.12707714){0.59875958,0.48782847,0.71793497,0.82387041}; -SS(-0.76988954,1,-0.26944904,-0.83248216,0.76782327,-0.31292259,-0.74249217,0.75399014,-0.15399718,-0.89962374,0.8609561,-0.16698164){1.6463902,1.366757,1.1267767,1.5692753}; -SS(-0.92571354,0.17249619,-0.34283108,-1,0.25105097,-0.19350143,-0.77267892,0.13105707,-0.24874664,-0.83127473,0.33505962,-0.32026923){0.99158484,1.0825888,0.65386325,0.89071695}; -SS(-0.85520613,-0.46088631,-0.14784569,-1,-0.5000565,0.0033661208,-0.82285362,-0.63420593,-0.0683896,-0.82595855,-0.48031431,0.11444494){0.95161001,1.2263361,1.0691297,0.90887195}; -SS(0.098704003,0.67249079,0.1943501,0.11458044,0.70010244,0.010073529,0.086744979,0.52712982,0.027891324,-0.098708274,0.55956225,0.10505678){0.47957633,0.49378055,0.26660844,0.31633913}; -SS(0.34720309,0.90097601,-0.12745168,0.25248643,0.73785598,-0.13082591,0.45788353,0.76094781,-0.0096633567,0.24404834,0.79519787,0.082231238){0.93504792,0.60350215,0.76853994,0.68472542}; -SS(0.0011150345,0.93517443,-0.37389303,-0.11111111,1,-0.5,-0.18268367,0.83021756,-0.5,-0.23070339,1,-0.34855306){1.0026385,1.2528065,0.9573479,1.1599423}; -SS(0,0,-6.9388939e-15,-0.1159097,-0.14329028,0.19302206,0,0,0.25,-0.15128303,0.02253305,0.11422928){-0.017891206,0.055235283,0.045060365,0.025420414}; -SS(-1,1,0.25,-0.93582873,0.86427167,0.14668289,-0.74954172,1,0.13574231,-0.84394966,1,0.33504415){2.0473025,1.6320629,1.562759,1.8084725}; -SS(0,-0.49997234,-0.27965571,-0.11754465,-0.65214472,-0.32749638,-0.18618058,-0.5161726,-0.15035515,-0.26056819,-0.54975154,-0.34323516){0.30906942,0.53347202,0.30914003,0.46884495}; -SS(0,-0.25,-0.5,-0.073421274,-0.375,-0.38984354,0,-0.16143077,-0.33843101,-0.1971424,-0.26981885,-0.30750196){0.29677328,0.28201081,0.12966739,0.19280289}; -SS(0.88049681,0.87960137,0.13412341,0.68966181,1,0.19790566,0.78186447,1,3.3673518e-05,0.62860594,0.86645525,0.049037492){1.5518824,1.492557,1.5923176,1.1303867}; -SS(-0.056808231,0.14323286,-0.13367928,0.08017426,0.31429474,-0.16745504,0.13261259,0.21336316,0.036566127,0.13402468,0.11673163,-0.1460819){0.022140076,0.11103103,0.046199082,0.039337265}; -SS(-0.11754465,-0.65214472,-0.32749638,-0.2399131,-0.76005145,-0.25989531,-0.18618058,-0.5161726,-0.15035515,-0.26056819,-0.54975154,-0.34323516){0.53347202,0.6848256,0.30914003,0.46884495}; -SS(0.6657623,0.67544754,-0.5,0.85153485,0.65148612,-0.35468846,0.81205362,0.80656044,-0.5,0.68900489,0.77311276,-0.28043733){1.1304562,1.2568282,1.5391707,1.1326816}; -SS(-0.32064519,0.49448821,1.4739833e-06,-0.4433427,0.53576375,-0.12560501,-0.24654336,0.57133462,-0.25396354,-0.34372617,0.39779568,-0.18541051){0.32892635,0.48429505,0.42991415,0.29650146}; -SS(-0.83996275,-0.66999882,0.11765553,-0.65631386,-0.59724887,0.13822882,-0.77091496,-0.77159441,0.2629049,-0.61978497,-0.82706917,0.12738472){1.1553131,0.7890621,1.2433034,1.0681409}; -SS(0.51674933,0.64481281,-0.39755292,0.6657623,0.67544754,-0.5,0.45062041,0.7833899,-0.5,0.54326203,0.87223293,-0.356993){0.82858869,1.1304562,1.0506853,1.1662147}; -SS(-0.32294154,0.86180803,0.13108841,-0.222315,1,-0.00011890035,-0.22223836,1,0.2622369,-0.084253952,1,0.13733396){0.84829643,1.0307381,1.0984067,1.0073117}; -SS(-0.57994589,-0.69256437,0.31204703,-0.65631386,-0.59724887,0.13822882,-0.77091496,-0.77159441,0.2629049,-0.79575191,-0.55547687,0.30538166){0.89957508,0.7890621,1.2433034,1.0192798}; -SS(-0.87046532,0.63071146,0.35630423,-0.66546973,0.66566005,0.5,-0.79641575,0.50054117,0.5,-0.67801153,0.56076489,0.29217382){1.2666006,1.1224691,1.1180299,0.83617727}; -SS(0.51674933,0.64481281,-0.39755292,0.49866453,0.63973666,-0.21510859,0.33386283,0.81592026,-0.31808704,0.34412919,0.6158316,-0.3427703){0.82858869,0.68344633,0.86115027,0.59958408}; -SS(-0.2401666,0.74114092,-0.051302261,-0.38143574,0.84373572,-0.12387887,-0.48952189,0.78345034,0.019065462,-0.32294154,0.86180803,0.13108841){0.58653028,0.85864479,0.83409809,0.84829643}; -SS(-0.50815189,-0.16301678,-0.5,-0.64012388,-0.10177177,-0.37237302,-0.56113743,-0.28920115,-0.29204918,-0.38492375,-0.20017574,-0.33650716){0.52110597,0.54269073,0.46850822,0.28705324}; -SS(0.35567295,0.65317229,0.39545235,0.37492492,0.49312259,0.5,0.16321322,0.50838432,0.5,0.26138985,0.51848551,0.281015){0.69293227,0.61809871,0.52238519,0.40200156}; -SS(-0.87046532,0.63071146,0.35630423,-1,0.70725984,0.21334539,-1,0.84108515,0.33242406,-0.76389013,0.77728265,0.25513738){1.2666006,1.5286486,1.8031397,1.2358334}; -SS(-0.76389013,0.77728265,0.25513738,-0.8480722,0.62150313,0.12164012,-0.67801153,0.56076489,0.29217382,-0.87046532,0.63071146,0.35630423){1.2358334,1.1084494,0.83617727,1.2666006}; -SS(0.8781758,0.86708556,-0.1989731,0.68985253,1,-0.19792707,0.82865019,1,-0.3214153,0.68900489,0.77311276,-0.28043733){1.5462283,1.495304,1.7714679,1.1326816}; -SS(0.45042372,0.78359022,0.5,0.36841015,0.87909734,0.37310922,0.55555177,0.82262944,0.31125158,0.35567295,0.65317229,0.39545235){1.0496179,1.0362544,1.0671623,0.69293227}; -SS(-0.17097214,0.64900986,-0.39927747,-0.24654336,0.57133462,-0.25396354,-0.35455825,0.80859576,-0.32177549,-0.39032311,0.63241857,-0.34621958){0.59741335,0.42991415,0.86460259,0.65630059}; -SS(0.09693172,0.3918681,-0.3370861,0.16368264,0.50834729,-0.5,-0.029932551,0.40748663,-0.5,-0.01813809,0.53618118,-0.30537166){0.26256104,0.52115901,0.4038008,0.36567785}; -SS(-0.01813809,0.53618118,-0.30537166,-0.033284914,0.58770906,-0.5,0.16368264,0.50834729,-0.5,-0.029932551,0.40748663,-0.5){0.36567785,0.58301644,0.52115901,0.4038008}; -SS(-0.40408872,0.18166381,-0.5,-0.41767704,0.010770256,-0.44072823,-0.19007896,0.04567822,-0.5,-0.29413589,0.046284299,-0.31274881){0.42526168,0.35514259,0.27736807,0.1681493}; -SS(-0.4182056,0.11248126,-0.14182463,-0.58258855,0.14037208,-0.067351147,-0.49808619,0.0026201378,-0.26387206,-0.4720473,-0.063494476,-0.036829327){0.19428145,0.34532741,0.29810596,0.21285629}; -SS(0.50010751,0,-0.00013054911,0.46476684,0.14382827,0.12247557,0.63998586,0.17856447,0.051345521,0.57129187,0.13526053,-0.13726946){0.22823279,0.23450402,0.42570365,0.35115136}; -SS(0.10211023,0.6404511,0.38011645,0.098704003,0.67249079,0.1943501,-0.043441254,0.79173928,0.29440137,0.22886345,0.79287946,0.30210005){0.55160362,0.47957633,0.69563564,0.75332396}; -SS(0.55555556,1,0.5,0.64232771,0.84838332,0.46476191,0.45042372,0.78359022,0.5,0.55555177,0.82262944,0.31125158){1.5357742,1.3339184,1.0496179,1.0671623}; -SS(-0.61549046,-0.35581383,-0.12962263,-0.50159539,-0.29258506,7.2987381e-06,-0.76760867,-0.33664988,-0.028298027,-0.59094649,-0.40495207,0.12834587){0.50877487,0.32068114,0.68479998,0.51475101}; -SS(-0.45843014,-0.20445062,-0.15988901,-0.29237157,-0.11865629,-0.17606411,-0.49808619,0.0026201378,-0.26387206,-0.4720473,-0.063494476,-0.036829327){0.26094507,0.11404163,0.29810596,0.21285629}; -SS(-0.30949447,0.8262402,0.33528492,-0.33333333,1,0.5,-0.22223836,1,0.2622369,-0.44431425,1,0.36245944){0.87388961,1.3433112,1.0984067,1.3152029}; -SS(-0.45563594,0.60375179,0.095527884,-0.65776896,0.64141588,0.074371921,-0.47185361,0.73769401,0.24072705,-0.48952189,0.78345034,0.019065462){0.56263538,0.83514199,0.80384956,0.83409809}; -SS(-0.16707278,-0.087678023,-0.31121894,0,0,-0.5,0,0,-0.25,0,-0.16143077,-0.33843101){0.11599041,0.23465449,0.044304329,0.12966739}; -SS(-0.70832062,-1,0.2082538,-0.8827276,-0.88146034,0.13123348,-0.77091496,-0.77159441,0.2629049,-0.61978497,-0.82706917,0.12738472){1.5291125,1.5595365,1.2433034,1.0681409}; -SS(-1,0.24865949,0.19540364,-0.91347537,0.15552497,0.067511395,-0.7489605,0.18190923,0.13647301,-0.91004595,0.15296589,0.33139812){1.0814407,0.85045394,0.59564173,0.94743142}; -SS(0.50136923,0.34587735,-0.44862257,0.51910919,0.22553632,-0.31417891,0.67125235,0.44297685,-0.31879306,0.48047723,0.47791267,-0.33071402){0.56260896,0.40112301,0.72773009,0.55795418}; -SS(-0.58755791,0.033814853,0.5,-0.61674646,0.25215289,0.3447871,-0.52427834,0.10778268,0.27208728,-0.72768327,0.10310141,0.33233484){0.57778723,0.54607287,0.34448415,0.63492881}; -SS(-0.17097214,0.64900986,-0.39927747,0.00024312215,0.80750011,-0.5,-0.18268367,0.83021756,-0.5,-0.14847812,0.78021305,-0.27623142){0.59741335,0.88610119,0.9573479,0.68882385}; -SS(-0.67495489,-0.6652659,-0.5,-0.62341011,-0.46880832,-0.38153973,-0.78315651,-0.45008839,-0.5,-0.81387526,-0.53653555,-0.3209601){1.1276355,0.73807879,1.0467962,1.0406635}; -SS(-0.088882135,1,-0.23281641,0.0011150345,0.93517443,-0.37389303,0.081865095,0.80626877,-0.27867109,-0.14847812,0.78021305,-0.27623142){1.0431215,1.0026385,0.71703623,0.68882385}; -SS(0.59416595,0.14141347,0.32656529,0.67112401,0.32933441,0.5,0.62515059,0.14422159,0.5,0.73568363,0.23203612,0.2735765){0.46498444,0.79210069,0.64726001,0.6509231}; -SS(-0.349759,-0.84853211,0.35590634,-0.32897755,-0.67088709,0.5,-0.18863677,-0.81113033,0.5,-0.22656331,-0.68065623,0.28194433){0.94981364,0.79643001,0.92459822,0.57683818}; -SS(-0.10743676,0.85847111,-0.11136175,-0.088882135,1,-0.23281641,-0.012406168,1,-0.034358602,0.094968532,0.84539386,-0.087484586){0.7462212,1.0431215,0.99121748,0.71839764}; -SS(1,0.70834898,0.20844998,0.87881231,0.64063264,0.37220388,1,0.83856906,0.33864755,0.76099919,0.76690574,0.25750996){1.5291243,1.3069719,1.8033242,1.2143065}; -SS(0.00024312215,0.80750011,-0.5,0.0011150345,0.93517443,-0.37389303,-0.18268367,0.83021756,-0.5,-0.14847812,0.78021305,-0.27623142){0.88610119,1.0026385,0.9573479,0.68882385}; -SS(-0.63048479,0.37587985,-0.34368186,-0.68637718,0.43295764,-0.18031685,-0.49391083,0.27907498,-0.27264436,-0.50782983,0.50249565,-0.29902586){0.64388066,0.67437813,0.37398026,0.58612549}; -SS(-0.4182056,0.11248126,-0.14182463,-0.29237157,-0.11865629,-0.17606411,-0.29413589,0.046284299,-0.31274881,-0.28278924,0.041190137,-0.04219563){0.19428145,0.11404163,0.1681493,0.063480395}; -SS(0.86971177,0.13024645,0.1427188,0.70845584,0,0.20819814,0.83866368,0,0.33843958,0.73568363,0.23203612,0.2735765){0.77797836,0.52761363,0.80106313,0.6509231}; -SS(-0.49292178,-0.37477565,-0.5,-0.4581749,-0.5263483,-0.32801665,-0.56113743,-0.28920115,-0.29204918,-0.62341011,-0.46880832,-0.38153973){0.6115465,0.57811658,0.46850822,0.73807879}; -SS(0.16368264,0.50834729,-0.5,0.10162062,0.65400865,-0.37913628,0.17777709,0.54047543,-0.2567554,0.34412919,0.6158316,-0.3427703){0.52115901,0.5665506,0.36840304,0.59958408}; -SS(-0.49292178,-0.37477565,-0.5,-0.38492375,-0.20017574,-0.33650716,-0.50815189,-0.16301678,-0.5,-0.56113743,-0.28920115,-0.29204918){0.6115465,0.28705324,0.52110597,0.46850822}; -SS(-0.6448883,-0.87343314,-0.36731947,-0.67495489,-0.6652659,-0.5,-0.80632325,-0.81147186,-0.5,-0.76546557,-0.72634686,-0.27513208){1.296688,1.1276355,1.5409894,1.1696133}; -SS(-0.24654336,0.57133462,-0.25396354,-0.4433427,0.53576375,-0.12560501,-0.50782983,0.50249565,-0.29902586,-0.34372617,0.39779568,-0.18541051){0.42991415,0.48429505,0.58612549,0.29650146}; -SS(-0.70236545,-0.13062851,-0.19140485,-0.61549046,-0.35581383,-0.12962263,-0.56113743,-0.28920115,-0.29204918,-0.45843014,-0.20445062,-0.15988901){0.5265969,0.50877487,0.46850822,0.26094507}; -SS(-0.65776896,0.64141588,0.074371921,-0.8480722,0.62150313,0.12164012,-0.79172217,0.43302343,0.13373134,-0.67801153,0.56076489,0.29217382){0.83514199,1.1084494,0.80968993,0.83617727}; -SS(0,0,-6.9388939e-15,0.13913358,0.10014326,0.18199659,0.22032809,0,-9.1119885e-05,0.13261259,0.21336316,0.036566127){-0.017891206,0.045990896,0.027339551,0.046199082}; -SS(0.67112401,0.32933441,0.5,0.87272604,0.35900693,0.37172569,0.81143387,0.18901581,0.5,0.73568363,0.23203612,0.2735765){0.79210069,1.0107603,0.9265446,0.6509231}; -SS(-0.25897908,-0.24013326,0.26450313,-0.1159097,-0.14329028,0.19302206,-0.20656092,-0.13938028,0.029547229,-0.3727858,-0.19869367,0.11195566){0.17775565,0.055235283,0.048278496,0.16948569}; -SS(-1,-0.70523324,-0.21165758,-0.91414606,-0.68082467,-0.37109558,-1,-0.47540235,-0.27521785,-0.81387526,-0.53653555,-0.3209601){1.5222776,1.4249306,1.2841965,1.0406635}; -SS(-0.49808619,0.0026201378,-0.26387206,-0.41767704,0.010770256,-0.44072823,-0.29413589,0.046284299,-0.31274881,-0.38492375,-0.20017574,-0.33650716){0.29810596,0.35514259,0.1681493,0.28705324}; -SS(-0.8480722,0.62150313,0.12164012,-1,0.70725984,0.21334539,-1,0.4752276,0.27420758,-0.87046532,0.63071146,0.35630423){1.1084494,1.5286486,1.2803563,1.2666006}; -SS(-0.61311838,0.85766427,0.15491279,-0.47972312,1,0.18932995,-0.74954172,1,0.13574231,-0.66659408,1,0.32529585){1.1216468,1.2473472,1.562759,1.5364848}; -SS(-0.0089783977,0.64320989,-0.13441642,0.11458044,0.70010244,0.010073529,0.25248643,0.73785598,-0.13082591,0.094968532,0.84539386,-0.087484586){0.41358858,0.49378055,0.60350215,0.71839764}; -SS(-0.23048975,-0.37484721,0.5,-0.37661764,-0.26006406,0.40868766,-0.1853821,-0.42358473,0.30866054,-0.34549718,-0.50098866,0.4105565){0.42714666,0.36234206,0.29143101,0.5260109}; -SS(-0.64009684,-0.10188458,0.37412975,-0.58755791,0.033814853,0.5,-0.50807239,-0.16307462,0.5,-0.40506391,-0.079541407,0.3303193){0.54631619,0.57778723,0.52416601,0.26156128}; -SS(0.36016656,0.41044152,0.1594367,0.52843461,0.32737897,0.19102935,0.47723835,0.52605258,0.30619083,0.50761134,0.34933779,0.39015973){0.3073722,0.40790135,0.58228229,0.51484928}; -SS(-0.89646962,-0.32955067,0.34017365,-1,-0.24887753,0.1953112,-0.84084014,-0.14895162,0.31636914,-0.82279039,-0.18997945,0.10657137){1.0133061,1.0768014,0.81273381,0.70945047}; -SS(-0.3533559,-0.49437708,0.037576204,-0.50159539,-0.29258506,7.2987381e-06,-0.52487586,-0.5117405,-0.017639258,-0.59094649,-0.40495207,0.12834587){0.35575629,0.32068114,0.51812974,0.51475101}; -SS(-1,-0.70523324,-0.21165758,-0.86742481,-0.86548068,-0.14483364,-1,-0.83959635,-0.33115777,-0.76546557,-0.72634686,-0.27513208){1.5222776,1.5085891,1.7998257,1.1696133}; -SS(-0.0089783977,0.64320989,-0.13441642,-0.10743676,0.85847111,-0.11136175,-0.2401666,0.74114092,-0.051302261,-0.035654771,0.78507762,0.045007896){0.41358858,0.7462212,0.58653028,0.60161266}; -SS(0.40637652,0.87094343,0.13060843,0.45788353,0.76094781,-0.0096633567,0.24404834,0.79519787,0.082231238,0.34720309,0.90097601,-0.12745168){0.92399337,0.76853994,0.68472542,0.93504792}; -SS(-0.61549046,-0.35581383,-0.12962263,-0.70236545,-0.13062851,-0.19140485,-0.76760867,-0.33664988,-0.028298027,-0.65367362,-0.16081953,0.0014934597){0.50877487,0.5265969,0.68479998,0.4344691}; -SS(-0.4182056,0.11248126,-0.14182463,-0.29237157,-0.11865629,-0.17606411,-0.49808619,0.0026201378,-0.26387206,-0.29413589,0.046284299,-0.31274881){0.19428145,0.11404163,0.29810596,0.1681493}; -SS(0.42864323,0.48543211,-0.13804456,0.34662081,0.36199915,-0.25068724,0.34412919,0.6158316,-0.3427703,0.48047723,0.47791267,-0.33071402){0.42022283,0.29696992,0.59958408,0.55795418}; -SS(-0.64009684,-0.10188458,0.37412975,-0.58755791,0.033814853,0.5,-0.52427834,0.10778268,0.27208728,-0.72768327,0.10310141,0.33233484){0.54631619,0.57778723,0.34448415,0.63492881}; -SS(0.10211023,0.6404511,0.38011645,-0.033588837,0.5879061,0.5,0.00029730467,0.80760978,0.5,-0.16015893,0.67694077,0.39025863){0.55160362,0.57806214,0.88423684,0.6265216}; -SS(0.36841015,0.87909734,0.37310922,0.39612945,0.70614162,0.21524614,0.55555177,0.82262944,0.31125158,0.35567295,0.65317229,0.39545235){1.0362544,0.68453461,1.0671623,0.69293227}; -SS(-0.4543958,0.20406131,0.5,-0.36145429,0.13293621,0.35430528,-0.40752783,0.030201366,0.5,-0.52427834,0.10778268,0.27208728){0.48353653,0.26360063,0.40526498,0.34448415}; -SS(-0.67616985,-0.069078192,0.18801024,-0.64009684,-0.10188458,0.37412975,-0.52427834,0.10778268,0.27208728,-0.72768327,0.10310141,0.33233484){0.47948004,0.54631619,0.34448415,0.63492881}; -SS(-0.0089783977,0.64320989,-0.13441642,-0.098708274,0.55956225,0.10505678,-0.096302334,0.43534175,-0.056072844,0.086744979,0.52712982,0.027891324){0.41358858,0.31633913,0.18078295,0.26660844}; -SS(0.50136923,0.34587735,-0.44862257,0.37532516,0.23078833,-0.5,0.6251418,0.1440922,-0.5,0.51910919,0.22553632,-0.31417891){0.56260896,0.42551454,0.63751638,0.40112301}; -SS(-0.6293812,0.63993291,-0.28812602,-0.66548665,0.66585508,-0.5,-0.4813337,0.60105459,-0.5,-0.61503712,0.4760032,-0.5){0.87296464,1.1221664,0.83133251,0.83978547}; -SS(0.65062064,0.64268786,0.069510863,0.69383766,0.49492178,-0.021800115,0.52218723,0.46943947,0.022097553,0.61535375,0.70719289,-0.095218388){0.82620698,0.71284258,0.46892029,0.87858083}; -SS(-0.82994199,0.18319278,-0.5,-0.92571354,0.17249619,-0.34283108,-0.77267892,0.13105707,-0.24874664,-0.83127473,0.33505962,-0.32026923){0.95993957,0.99158484,0.65386325,0.89071695}; -SS(0.88049681,0.87960137,0.13412341,1,0.70834898,0.20844998,1,0.83856906,0.33864755,0.76099919,0.76690574,0.25750996){1.5518824,1.5291243,1.8033242,1.2143065}; -SS(-0.033284914,0.58770906,-0.5,-0.01813809,0.53618118,-0.30537166,-0.20381263,0.45499536,-0.5,-0.029932551,0.40748663,-0.5){0.58301644,0.36567785,0.478983,0.4038008}; -SS(-0.73479965,-0.34302295,0.24038072,-0.89646962,-0.32955067,0.34017365,-0.84084014,-0.14895162,0.31636914,-0.82279039,-0.18997945,0.10657137){0.69668046,1.0133061,0.81273381,0.70945047}; -SS(-0.31377045,0.30492781,-0.36427962,-0.17603462,0.24070348,-0.5,-0.20381263,0.45499536,-0.5,-0.12449617,0.36606215,-0.28273955){0.30770932,0.32537509,0.478983,0.21185338}; -SS(-0.17097214,0.64900986,-0.39927747,-0.24654336,0.57133462,-0.25396354,-0.14847812,0.78021305,-0.27623142,-0.35455825,0.80859576,-0.32177549){0.59741335,0.42991415,0.68882385,0.86460259}; -SS(-0.67495489,-0.6652659,-0.5,-0.91414606,-0.68082467,-0.37109558,-0.80632325,-0.81147186,-0.5,-0.76546557,-0.72634686,-0.27513208){1.1276355,1.4249306,1.5409894,1.1696133}; -SS(-0.73174745,-0.21491043,0.5,-0.62450053,-0.31310845,0.38575928,-0.84084014,-0.14895162,0.31636914,-0.64009684,-0.10188458,0.37412975){0.81377033,0.62379151,0.81273381,0.54631619}; -SS(0.59365279,0.65503723,0.24444947,0.39612945,0.70614162,0.21524614,0.47723835,0.52605258,0.30619083,0.35567295,0.65317229,0.39545235){0.82252715,0.68453461,0.58228229,0.69293227}; -SS(-0.056808231,0.14323286,-0.13367928,0,0,-0.25,0,0,-6.9388939e-15,-0.098950987,-0.13391411,-0.14594667){0.022140076,0.044304329,-0.017891206,0.03512721}; -SS(-0.62938155,0.17932964,-0.37445272,-0.69937066,0.31351533,-0.5,-0.82994199,0.18319278,-0.5,-0.83127473,0.33505962,-0.32026923){0.55109073,0.81965428,0.95993957,0.89071695}; -SS(0,0,-6.9388939e-15,-0.056808231,0.14323286,-0.13367928,0.13261259,0.21336316,0.036566127,0.13402468,0.11673163,-0.1460819){-0.017891206,0.022140076,0.046199082,0.039337265}; -SS(-0.11754465,-0.65214472,-0.32749638,0,-0.70830496,-0.20826096,0,-0.49997234,-0.27965571,-0.18618058,-0.5161726,-0.15035515){0.53347202,0.5287181,0.30906942,0.30914003}; -SS(-0.1971424,-0.26981885,-0.30750196,0,-0.25,-0.5,-0.12484866,-0.12486094,-0.5,0,-0.16143077,-0.33843101){0.19280289,0.29677328,0.26766045,0.12966739}; -SS(-0.91004595,0.15296589,0.33139812,-0.7489605,0.18190923,0.13647301,-0.83851866,0.33014205,0.32623765,-0.72768327,0.10310141,0.33233484){0.94743142,0.59564173,0.89937894,0.63492881}; -SS(-0.50537844,-0.68762812,0.023695348,-0.65631386,-0.59724887,0.13822882,-0.63348211,-0.7706683,-0.074889286,-0.61978497,-0.82706917,0.12738472){0.71483247,0.7890621,0.97907785,1.0681409}; -SS(-0.36340067,-0.87821042,-0.37678589,-0.29168215,-1,-0.20844865,-0.16144976,-1,-0.33863959,-0.2399131,-0.76005145,-0.25989531){1.0307746,1.1132023,1.1250711,0.6848256}; -SS(0.34720309,0.90097601,-0.12745168,0.17426348,1,-0.18078905,0.43683247,1,-0.26068681,0.2222976,1,-0.35617554){0.93504792,1.045853,1.2435523,1.1585843}; -SS(0.24937941,1,-0.00011138016,0.40637652,0.87094343,0.13060843,0.24404834,0.79519787,0.082231238,0.34720309,0.90097601,-0.12745168){1.0446566,0.92399337,0.68472542,0.93504792}; -SS(-0.86742481,-0.86548068,-0.14483364,-1,-0.70523324,-0.21165758,-1,-0.77608598,0.00064487429,-0.82285362,-0.63420593,-0.0683896){1.5085891,1.5222776,1.5844414,1.0691297}; -SS(0.6657623,0.67544754,-0.5,0.51674933,0.64481281,-0.39755292,0.68900489,0.77311276,-0.28043733,0.54326203,0.87223293,-0.356993){1.1304562,0.82858869,1.1326816,1.1662147}; -SS(-0.14850787,-0.69358405,-0.087583548,0,-0.49997946,0.00010199173,-0.18618058,-0.5161726,-0.15035515,-0.19247216,-0.56000521,0.088357129){0.49763432,0.22811872,0.30914003,0.34206231}; -SS(-0.70832062,-1,0.2082538,-0.63815223,-0.88141187,0.37488811,-0.4999534,-1,0.27968311,-0.61978497,-0.82706917,0.12738472){1.5291125,1.3088768,1.3075402,1.0681409}; -SS(-0.4813337,0.60105459,-0.5,-0.6293812,0.63993291,-0.28812602,-0.61503712,0.4760032,-0.5,-0.50782983,0.50249565,-0.29902586){0.83133251,0.87296464,0.83978547,0.58612549}; -SS(0.10211023,0.6404511,0.38011645,0.00029730467,0.80760978,0.5,-0.043441254,0.79173928,0.29440137,-0.16015893,0.67694077,0.39025863){0.55160362,0.88423684,0.69563564,0.6265216}; -SS(-0.10743676,0.85847111,-0.11136175,-0.0089783977,0.64320989,-0.13441642,0.081865095,0.80626877,-0.27867109,0.094968532,0.84539386,-0.087484586){0.7462212,0.41358858,0.71703623,0.71839764}; -SS(-0.83248216,0.76782327,-0.31292259,-0.76988954,1,-0.26944904,-0.74249217,0.75399014,-0.15399718,-0.65756371,0.81308934,-0.3429452){1.366757,1.6463902,1.1267767,1.1958888}; -SS(0.10211023,0.6404511,0.38011645,0.16321322,0.50838432,0.5,0.26138985,0.51848551,0.281015,0.35567295,0.65317229,0.39545235){0.55160362,0.52238519,0.40200156,0.69293227}; -SS(-0.12233239,-0.87748906,-0.13583418,0,-0.70830496,-0.20826096,0,-0.83851883,-0.33849865,-0.2399131,-0.76005145,-0.25989531){0.78823805,0.5287181,0.80235204,0.6848256}; -SS(-0.3548152,-0.48825703,0.21848985,-0.34549718,-0.50098866,0.4105565,-0.22656331,-0.68065623,0.28194433,-0.1853821,-0.42358473,0.30866054){0.38862106,0.5260109,0.57683818,0.29143101}; -SS(1,0,-6.9388939e-15,0.88354722,0.11667767,-0.13069643,0.77985819,0,-0.00014691753,0.86971177,0.13024645,0.1427188){0.9846322,0.79839767,0.58919206,0.77797836}; -SS(0.88354722,0.11667767,-0.13069643,1,0,-6.9388939e-15,1,0.2203628,5.6826691e-05,0.86971177,0.13024645,0.1427188){0.79839767,0.9846322,1.0268649,0.77797836}; -SS(-0.29168215,-1,-0.20844865,-0.12233239,-0.87748906,-0.13583418,-0.16144976,-1,-0.33863959,-0.2399131,-0.76005145,-0.25989531){1.1132023,0.78823805,1.1250711,0.6848256}; -SS(-0.61674646,0.25215289,0.3447871,-0.7489605,0.18190923,0.13647301,-0.52427834,0.10778268,0.27208728,-0.72768327,0.10310141,0.33233484){0.54607287,0.59564173,0.34448415,0.63492881}; -SS(1,0.70834898,0.20844998,0.87881231,0.64063264,0.37220388,0.76099919,0.76690574,0.25750996,0.84582719,0.572243,0.1361951){1.5291243,1.3069719,1.2143065,1.0417018}; -SS(0.54326203,0.87223293,-0.356993,0.49866453,0.63973666,-0.21510859,0.68900489,0.77311276,-0.28043733,0.54700908,0.85955032,-0.16345766){1.1662147,0.68344633,1.1326816,1.0528061}; -SS(0.52843461,0.32737897,0.19102935,0.50761134,0.34933779,0.39015973,0.6902006,0.50015172,0.27072419,0.47723835,0.52605258,0.30619083){0.40790135,0.51484928,0.77938072,0.58228229}; -SS(-0.65631386,-0.59724887,0.13822882,-0.57994589,-0.69256437,0.31204703,-0.56348952,-0.47594309,0.3052276,-0.79575191,-0.55547687,0.30538166){0.7890621,0.89957508,0.61776713,1.0192798}; -SS(-0.65776896,0.64141588,0.074371921,-0.61311838,0.85766427,0.15491279,-0.47185361,0.73769401,0.24072705,-0.48952189,0.78345034,0.019065462){0.83514199,1.1216468,0.80384956,0.83409809}; -SS(0.64232771,0.84838332,0.46476191,0.66554141,0.67524133,0.5,0.45042372,0.78359022,0.5,0.55555177,0.82262944,0.31125158){1.3339184,1.1271263,1.0496179,1.0671623}; -SS(0.88049681,0.87960137,0.13412341,0.78186447,1,3.3673518e-05,0.77861211,0.77861193,-0.067175459,0.62860594,0.86645525,0.049037492){1.5518824,1.5923176,1.1981052,1.1303867}; -SS(-0.91347537,0.15552497,0.067511395,-0.7489605,0.18190923,0.13647301,-0.76752638,0.004448061,-0.013214377,-0.78848723,0.26584533,-0.068869999){0.85045394,0.59564173,0.5734925,0.68151298}; -SS(-0.79227163,-0.79754897,0.0021844777,-1,-0.77608598,0.00064487429,-0.86742481,-0.86548068,-0.14483364,-0.8827276,-0.88146034,0.13123348){1.2530106,1.5844414,1.5085891,1.5595365}; -SS(0.50761134,0.34933779,0.39015973,0.5725222,0.50074158,0.5,0.6902006,0.50015172,0.27072419,0.47723835,0.52605258,0.30619083){0.51484928,0.8121357,0.77938072,0.58228229}; -SS(-0.91347537,0.15552497,0.067511395,-1,-0.00012222908,0.26646899,-0.84289574,0.018333867,0.1608607,-0.91004595,0.15296589,0.33139812){0.85045394,1.0506696,0.72430843,0.94743142}; -SS(-0.65776896,0.64141588,0.074371921,-0.62332411,0.59900263,-0.10904345,-0.48952189,0.78345034,0.019065462,-0.45563594,0.60375179,0.095527884){0.83514199,0.74800561,0.83409809,0.56263538}; -SS(-0.073421274,-0.375,-0.38984354,0,-0.25,-0.5,-0.12484866,-0.12486094,-0.5,-0.1971424,-0.26981885,-0.30750196){0.28201081,0.29677328,0.26766045,0.19280289}; -SS(-0.12449617,0.36606215,-0.28273955,-0.17603462,0.24070348,-0.5,-0.20381263,0.45499536,-0.5,-0.029932551,0.40748663,-0.5){0.21185338,0.32537509,0.478983,0.4038008}; -SS(0.67112401,0.32933441,0.5,0.73568363,0.23203612,0.2735765,0.81143387,0.18901581,0.5,0.62515059,0.14422159,0.5){0.79210069,0.6509231,0.9265446,0.64726001}; -SS(0.35689191,0.091376279,-0.36932783,0.25,0,-0.5,0.16149165,0,-0.33864688,0.20129651,0.21389912,-0.31902192){0.26145514,0.28810477,0.12746835,0.16839385}; -SS(0.11458044,0.70010244,0.010073529,0.098704003,0.67249079,0.1943501,-0.035654771,0.78507762,0.045007896,-0.098708274,0.55956225,0.10505678){0.49378055,0.47957633,0.60161266,0.31633913}; -SS(0.34720309,0.90097601,-0.12745168,0.17426348,1,-0.18078905,0.2222976,1,-0.35617554,0.33386283,0.81592026,-0.31808704){0.93504792,1.045853,1.1585843,0.86115027}; -SS(0.43683247,1,-0.26068681,0.34720309,0.90097601,-0.12745168,0.2222976,1,-0.35617554,0.33386283,0.81592026,-0.31808704){1.2435523,0.93504792,1.1585843,0.86115027}; -SS(0.11136938,1,0.13859714,0.094968532,0.84539386,-0.087484586,-0.012406168,1,-0.034358602,0.24937941,1,-0.00011138016){1.0072058,0.71839764,0.99121748,1.0446566}; -SS(-0.83248216,0.76782327,-0.31292259,-0.66548665,0.66585508,-0.5,-0.65756371,0.81308934,-0.3429452,-0.6293812,0.63993291,-0.28812602){1.366757,1.1221664,1.1958888,0.87296464}; -SS(-0.11614487,0.30919383,0.33918095,0.11523872,0.30161582,0.5,-0.045146113,0.19012269,0.5,0.050277172,0.20853018,0.30186362){0.20820823,0.33546792,0.27176836,0.12181545}; -SS(0.21543771,0.73213875,-0.5,0.10162062,0.65400865,-0.37913628,0.16368264,0.50834729,-0.5,0.34412919,0.6158316,-0.3427703){0.81134051,0.5665506,0.52115901,0.59958408}; -SS(0.26064395,0.61953306,0.12890567,0.39612945,0.70614162,0.21524614,0.45788353,0.76094781,-0.0096633567,0.24404834,0.79519787,0.082231238){0.45328252,0.68453461,0.76853994,0.68472542}; -SS(-0.77973152,-1,-0.0001062007,-0.79227163,-0.79754897,0.0021844777,-0.86742481,-0.86548068,-0.14483364,-0.8827276,-0.88146034,0.13123348){1.588155,1.2530106,1.5085891,1.5595365}; -SS(-0.89426176,0.41257007,-0.12932618,-1,0.47527469,-0.27513051,-0.80558396,0.5878127,-0.29244037,-0.83127473,0.33505962,-0.32026923){0.974079,1.2834809,1.0616703,0.89071695}; -SS(-0.32294154,0.86180803,0.13108841,-0.47972312,1,0.18932995,-0.42762906,1,-0.0094860889,-0.48952189,0.78345034,0.019065462){0.84829643,1.2473472,1.169501,0.83409809}; -SS(0.70845584,0,0.20819814,0.86971177,0.13024645,0.1427188,0.77985819,0,-0.00014691753,0.63998586,0.17856447,0.051345521){0.52761363,0.77797836,0.58919206,0.42570365}; -SS(-0.65631386,-0.59724887,0.13822882,-0.50537844,-0.68762812,0.023695348,-0.42889738,-0.75253072,0.17523232,-0.61978497,-0.82706917,0.12738472){0.7890621,0.71483247,0.75958282,1.0681409}; -SS(-0.30131805,-0.11512588,-0.5,-0.16707278,-0.087678023,-0.31121894,-0.29413589,0.046284299,-0.31274881,-0.38492375,-0.20017574,-0.33650716){0.3368451,0.11599041,0.1681493,0.28705324}; -SS(0.21543771,0.73213875,-0.5,0.34412919,0.6158316,-0.3427703,0.45062041,0.7833899,-0.5,0.33386283,0.81592026,-0.31808704){0.81134051,0.59958408,1.0506853,0.86115027}; -SS(-0.59094649,-0.40495207,0.12834587,-0.73479965,-0.34302295,0.24038072,-0.76760867,-0.33664988,-0.028298027,-0.82595855,-0.48031431,0.11444494){0.51475101,0.69668046,0.68479998,0.90887195}; -SS(-0.033284914,0.58770906,-0.5,-0.17097214,0.64900986,-0.39927747,-0.20381263,0.45499536,-0.5,-0.01813809,0.53618118,-0.30537166){0.58301644,0.59741335,0.478983,0.36567785}; -SS(-0.8480722,0.62150313,0.12164012,-0.65776896,0.64141588,0.074371921,-0.76389013,0.77728265,0.25513738,-0.67801153,0.56076489,0.29217382){1.1084494,0.83514199,1.2358334,0.83617727}; -SS(-0.74954172,1,0.13574231,-0.76389013,0.77728265,0.25513738,-0.66659408,1,0.32529585,-0.84394966,1,0.33504415){1.562759,1.2358334,1.5364848,1.8084725}; -SS(-0.36340067,-0.87821042,-0.37678589,-0.29168215,-1,-0.20844865,-0.2399131,-0.76005145,-0.25989531,-0.42066299,-0.84356131,-0.12906413){1.0307746,1.1132023,0.6848256,0.88525127}; -SS(-0.31377045,0.30492781,-0.36427962,-0.26297351,0.20404986,-0.17122089,-0.29413589,0.046284299,-0.31274881,-0.1182182,0.15955837,-0.3159857){0.30770932,0.12773981,0.1681493,0.11990198}; -SS(-0.76988954,1,-0.26944904,-0.58934795,0.84141567,-0.18062024,-0.74249217,0.75399014,-0.15399718,-0.65756371,0.81308934,-0.3429452){1.6463902,1.0736489,1.1267767,1.1958888}; -SS(-0.29261734,0.53193925,0.43339885,-0.033588837,0.5879061,0.5,-0.11618574,0.50328545,0.29980467,-0.16015893,0.67694077,0.39025863){0.53993003,0.57806214,0.33969293,0.6265216}; -SS(0.51674933,0.64481281,-0.39755292,0.49866453,0.63973666,-0.21510859,0.68900489,0.77311276,-0.28043733,0.54326203,0.87223293,-0.356993){0.82858869,0.68344633,1.1326816,1.1662147}; -SS(-0.36608751,-0.8951802,0.074405883,-0.22019153,-1,-0.00010416607,-0.22302806,-0.77703925,0.068353305,-0.12988976,-0.86995226,0.20452896){0.92652515,1.0287732,0.64063544,0.79894991}; -SS(-0.36608751,-0.8951802,0.074405883,-0.29157863,-1,0.20827581,-0.22019153,-1,-0.00010416607,-0.12988976,-0.86995226,0.20452896){0.92652515,1.1139248,1.0287732,0.79894991}; -SS(0.60662231,0.34516964,-0.13972301,0.82562789,0.37565656,-0.12707714,0.77491511,0.22516452,-0.26425516,0.67125235,0.44297685,-0.31879306){0.48782847,0.82387041,0.70313431,0.72773009}; -SS(0.5,0,0.5,0.59416595,0.14141347,0.32656529,0.50011436,0,0.27961788,0.42621669,0.19017509,0.30505062){0.47735984,0.46498444,0.30940041,0.29714896}; -SS(-0.19461387,0.3919517,0.10437587,-0.0073778212,0.36022468,0.15230712,-0.13709741,0.19518884,0.034033465,-0.096302334,0.43534175,-0.056072844){0.19075448,0.13675819,0.040184006,0.18078295}; -SS(-0.10743676,0.85847111,-0.11136175,-0.088882135,1,-0.23281641,0.081865095,0.80626877,-0.27867109,-0.14847812,0.78021305,-0.27623142){0.7462212,1.0431215,0.71703623,0.68882385}; -SS(0,-0.7082575,0.2084616,-0.12988976,-0.86995226,0.20452896,0,-0.83845667,0.33864852,-0.22656331,-0.68065623,0.28194433){0.52387062,0.79894991,0.80178572,0.57683818}; -SS(-0.38143574,0.84373572,-0.12387887,-0.222315,1,-0.00011890035,-0.36992714,1,-0.22970445,-0.42762906,1,-0.0094860889){0.85864479,1.0307381,1.1684568,1.169501}; -SS(-0.91347537,0.15552497,0.067511395,-1,0.24865949,0.19540364,-1,-0.00012222908,0.26646899,-0.91004595,0.15296589,0.33139812){0.85045394,1.0814407,1.0506696,0.94743142}; -SS(-0.38143574,0.84373572,-0.12387887,-0.222315,1,-0.00011890035,-0.42762906,1,-0.0094860889,-0.32294154,0.86180803,0.13108841){0.85864479,1.0307381,1.169501,0.84829643}; -SS(-0.10133362,-0.40777162,0.1162396,-0.3548152,-0.48825703,0.21848985,-0.19247216,-0.56000521,0.088357129,-0.1853821,-0.42358473,0.30866054){0.17697987,0.38862106,0.34206231,0.29143101}; -SS(0.36841015,0.87909734,0.37310922,0.55555556,1,0.5,0.45042372,0.78359022,0.5,0.55555177,0.82262944,0.31125158){1.0362544,1.5357742,1.0496179,1.0671623}; -SS(-0.70236545,-0.13062851,-0.19140485,-0.61549046,-0.35581383,-0.12962263,-0.7907607,-0.33838097,-0.28342271,-0.56113743,-0.28920115,-0.29204918){0.5265969,0.50877487,0.80149819,0.46850822}; -SS(-0.59094649,-0.40495207,0.12834587,-0.65631386,-0.59724887,0.13822882,-0.73479965,-0.34302295,0.24038072,-0.82595855,-0.48031431,0.11444494){0.51475101,0.7890621,0.69668046,0.90887195}; -SS(-1,0.25105097,-0.19350143,-0.89426176,0.41257007,-0.12932618,-0.78848723,0.26584533,-0.068869999,-0.83127473,0.33505962,-0.32026923){1.0825888,0.974079,0.68151298,0.89071695}; -SS(-0.60421932,0.82298164,0.34468578,-0.47972312,1,0.18932995,-0.47185361,0.73769401,0.24072705,-0.61311838,0.85766427,0.15491279){1.1449713,1.2473472,0.80384956,1.1216468}; -SS(0.35567295,0.65317229,0.39545235,0.39612945,0.70614162,0.21524614,0.26138985,0.51848551,0.281015,0.22886345,0.79287946,0.30210005){0.69293227,0.68453461,0.40200156,0.75332396}; -SS(0.10211023,0.6404511,0.38011645,0.26138985,0.51848551,0.281015,0.22886345,0.79287946,0.30210005,0.35567295,0.65317229,0.39545235){0.55160362,0.40200156,0.75332396,0.69293227}; -SS(-0.41767704,0.010770256,-0.44072823,-0.58754442,0.033885734,-0.5,-0.49808619,0.0026201378,-0.26387206,-0.62938155,0.17932964,-0.37445272){0.35514259,0.58180393,0.29810596,0.55109073}; -SS(0.11458044,0.70010244,0.010073529,0.25248643,0.73785598,-0.13082591,0.24404834,0.79519787,0.082231238,0.26064395,0.61953306,0.12890567){0.49378055,0.60350215,0.68472542,0.45328252}; -SS(-0.033284914,0.58770906,-0.5,-0.17097214,0.64900986,-0.39927747,0.00024312215,0.80750011,-0.5,-0.18268367,0.83021756,-0.5){0.58301644,0.59741335,0.88610119,0.9573479}; -SS(-0.89663862,-0.69397302,0.37275403,-1,-0.70710233,0.21356199,-1,-0.47520831,0.27427507,-0.79575191,-0.55547687,0.30538166){1.4119512,1.5280688,1.2822693,1.0192798}; -SS(-1,-0.00021427218,0.00011802244,-0.91347537,0.15552497,0.067511395,-1,-0.00012222908,0.26646899,-0.84289574,0.018333867,0.1608607){0.98080906,0.85045394,1.0506696,0.72430843}; -SS(-0.67616985,-0.069078192,0.18801024,-0.84289574,0.018333867,0.1608607,-0.7489605,0.18190923,0.13647301,-0.76752638,0.004448061,-0.013214377){0.47948004,0.72430843,0.59564173,0.5734925}; -SS(0.82562789,0.37565656,-0.12707714,0.60662231,0.34516964,-0.13972301,0.75922048,0.56990614,-0.17060419,0.67125235,0.44297685,-0.31879306){0.82387041,0.48782847,0.91133836,0.72773009}; -SS(-0.1159097,-0.14329028,0.19302206,-0.34310942,-0.010167032,0.1509038,-0.20045203,0.067929244,0.29301468,-0.15128303,0.02253305,0.11422928){0.055235283,0.12661586,0.10955402,0.025420414}; -SS(-0.4182056,0.11248126,-0.14182463,-0.58258855,0.14037208,-0.067351147,-0.4720473,-0.063494476,-0.036829327,-0.5555987,0.045150158,0.095162244){0.19428145,0.34532741,0.21285629,0.29993682}; -SS(-0.58755791,0.033814853,0.5,-0.52427834,0.10778268,0.27208728,-0.4543958,0.20406131,0.5,-0.40752783,0.030201366,0.5){0.57778723,0.34448415,0.48353653,0.40526498}; -SS(-0.16015893,0.67694077,0.39025863,-0.1827732,0.83017807,0.5,-0.043441254,0.79173928,0.29440137,-0.30949447,0.8262402,0.33528492){0.6265216,0.95598938,0.69563564,0.87388961}; -SS(0.26083053,0.15082484,0.37728795,0.25,0,0.5,0.37501462,0.2307626,0.5,0.12517622,0.12515553,0.5){0.21918499,0.29281005,0.42590445,0.27156885}; -SS(-0.035654771,0.78507762,0.045007896,0.11136938,1,0.13859714,-0.012406168,1,-0.034358602,-0.084253952,1,0.13733396){0.60161266,1.0072058,0.99121748,1.0073117}; -SS(0.10162062,0.65400865,-0.37913628,0.21543771,0.73213875,-0.5,0.00024312215,0.80750011,-0.5,0.081865095,0.80626877,-0.27867109){0.5665506,0.81134051,0.88610119,0.71703623}; -SS(0.37492492,0.49312259,0.5,0.35567295,0.65317229,0.39545235,0.5725222,0.50074158,0.5,0.47723835,0.52605258,0.30619083){0.61809871,0.69293227,0.8121357,0.58228229}; -SS(0.11111111,1,0.5,-0.11111111,1,0.5,-0.014815866,1,0.31001515,0.00029730467,0.80760978,0.5){1.2368521,1.2487078,1.0772324,0.88423684}; -SS(0.87867265,0.36391919,-0.37720578,1,0.2917639,-0.20827961,1,0.50010355,-0.27968748,0.82562789,0.37565656,-0.12707714){1.03034,1.1127834,1.3071084,0.82387041}; -SS(0.11523872,0.30161582,0.5,0.26083053,0.15082484,0.37728795,0.37501462,0.2307626,0.5,0.12517622,0.12515553,0.5){0.33546792,0.21918499,0.42590445,0.27156885}; -SS(-0.12988976,-0.86995226,0.20452896,0,-0.7082575,0.2084616,0,-0.77970171,0.00010845427,-0.22302806,-0.77703925,0.068353305){0.79894991,0.52387062,0.58842154,0.64063544}; -SS(-0.58934795,0.84141567,-0.18062024,-0.61115597,1,-0.10200355,-0.42762906,1,-0.0094860889,-0.38143574,0.84373572,-0.12387887){1.0736489,1.3611038,1.169501,0.85864479}; -SS(-1,-0.25140376,-0.1934451,-0.85520613,-0.46088631,-0.14784569,-1,-0.47540235,-0.27521785,-0.7907607,-0.33838097,-0.28342271){1.0790534,0.95161001,1.2841965,0.80149819}; -SS(-0.29261734,0.53193925,0.43339885,-0.48141868,0.60085372,0.5,-0.35521568,0.4957142,0.26668635,-0.52470763,0.46530444,0.33754711){0.53993003,0.82306978,0.42001946,0.59371518}; -SS(-0.65956212,-0.52273243,-0.19262862,-0.81387526,-0.53653555,-0.3209601,-0.76546557,-0.72634686,-0.27513208,-0.82285362,-0.63420593,-0.0683896){0.7287475,1.0406635,1.1696133,1.0691297}; -SS(-1,-0.70523324,-0.21165758,-0.86742481,-0.86548068,-0.14483364,-0.76546557,-0.72634686,-0.27513208,-0.82285362,-0.63420593,-0.0683896){1.5222776,1.5085891,1.1696133,1.0691297}; -SS(-0.65631386,-0.59724887,0.13822882,-0.79227163,-0.79754897,0.0021844777,-0.61978497,-0.82706917,0.12738472,-0.83996275,-0.66999882,0.11765553){0.7890621,1.2530106,1.0681409,1.1553131}; -SS(-0.62450053,-0.31310845,0.38575928,-0.49284988,-0.37485679,0.5,-0.50874333,-0.23900991,0.2620444,-0.37661764,-0.26006406,0.40868766){0.62379151,0.6163523,0.36443271,0.36234206}; -SS(0.26064395,0.61953306,0.12890567,0.098704003,0.67249079,0.1943501,0.26138985,0.51848551,0.281015,0.22886345,0.79287946,0.30210005){0.45328252,0.47957633,0.40200156,0.75332396}; -SS(0.39612945,0.70614162,0.21524614,0.26064395,0.61953306,0.12890567,0.26138985,0.51848551,0.281015,0.22886345,0.79287946,0.30210005){0.68453461,0.45328252,0.40200156,0.75332396}; -SS(0.0011150345,0.93517443,-0.37389303,0.00024312215,0.80750011,-0.5,0.081865095,0.80626877,-0.27867109,-0.14847812,0.78021305,-0.27623142){1.0026385,0.88610119,0.71703623,0.68882385}; -SS(0.08017426,0.31429474,-0.16745504,0.09693172,0.3918681,-0.3370861,-0.12449617,0.36606215,-0.28273955,-0.01813809,0.53618118,-0.30537166){0.11103103,0.26256104,0.21185338,0.36567785}; -SS(-0.40125956,-0.65699374,0.33213173,-0.42889738,-0.75253072,0.17523232,-0.349759,-0.84853211,0.35590634,-0.57994589,-0.69256437,0.31204703){0.69449311,0.75958282,0.94981364,0.89957508}; -SS(-0.35455825,0.80859576,-0.32177549,-0.18268367,0.83021756,-0.5,-0.23070339,1,-0.34855306,-0.14847812,0.78021305,-0.27623142){0.86460259,0.9573479,1.1599423,0.68882385}; -SS(-0.58754442,0.033885734,-0.5,-0.41767704,0.010770256,-0.44072823,-0.40408872,0.18166381,-0.5,-0.62938155,0.17932964,-0.37445272){0.58180393,0.35514259,0.42526168,0.55109073}; -SS(-0.29237157,-0.11865629,-0.17606411,-0.38492375,-0.20017574,-0.33650716,-0.49808619,0.0026201378,-0.26387206,-0.29413589,0.046284299,-0.31274881){0.11404163,0.28705324,0.29810596,0.1681493}; -SS(-0.63246299,0.29145388,0.035195127,-0.58258855,0.14037208,-0.067351147,-0.7489605,0.18190923,0.13647301,-0.78848723,0.26584533,-0.068869999){0.47226275,0.34532741,0.59564173,0.68151298}; -SS(-0.50537844,-0.68762812,0.023695348,-0.42889738,-0.75253072,0.17523232,-0.61978497,-0.82706917,0.12738472,-0.36608751,-0.8951802,0.074405883){0.71483247,0.75958282,1.0681409,0.92652515}; -SS(0.65062064,0.64268786,0.069510863,0.59365279,0.65503723,0.24444947,0.6902006,0.50015172,0.27072419,0.84582719,0.572243,0.1361951){0.82620698,0.82252715,0.77938072,1.0417018}; -SS(-1,0.25105097,-0.19350143,-0.89804207,0.11676539,-0.10792088,-0.77267892,0.13105707,-0.24874664,-0.78848723,0.26584533,-0.068869999){1.0825888,0.82300022,0.65386325,0.68151298}; -SS(-0.32879066,-0.67072359,-0.5,-0.11754465,-0.65214472,-0.32749638,-0.18848435,-0.81110947,-0.5,-0.14376826,-0.62489354,-0.5){0.79007105,0.53347202,0.92571371,0.6489606}; -SS(-1,0.70529035,-0.21162945,-0.83248216,0.76782327,-0.31292259,-0.74249217,0.75399014,-0.15399718,-0.80558396,0.5878127,-0.29244037){1.520296,1.366757,1.1267767,1.0616703}; -SS(-0.50159539,-0.29258506,7.2987381e-06,-0.45843014,-0.20445062,-0.15988901,-0.4720473,-0.063494476,-0.036829327,-0.3727858,-0.19869367,0.11195566){0.32068114,0.26094507,0.21285629,0.16948569}; -SS(-0.16015893,0.67694077,0.39025863,-0.033588837,0.5879061,0.5,0.00029730467,0.80760978,0.5,-0.1827732,0.83017807,0.5){0.6265216,0.57806214,0.88423684,0.95598938}; -SS(-1,0.77777778,0.5,-0.87046532,0.63071146,0.35630423,-1,0.84108515,0.33242406,-0.80481649,0.80494069,0.5){1.8402752,1.2666006,1.8031397,1.5232843}; -SS(0.27170325,0.36204749,-0.4201745,0.37549445,0.49317282,-0.5,0.34412919,0.6158316,-0.3427703,0.48047723,0.47791267,-0.33071402){0.36885377,0.61648995,0.59958408,0.55795418}; -SS(0.13913358,0.10014326,0.18199659,0.29175541,0,0.20824909,0.25126435,0.28098512,0.24657435,0.26083053,0.15082484,0.37728795){0.045990896,0.1093371,0.18575023,0.21918499}; -SS(-0.32897755,-0.67088709,0.5,-0.34549718,-0.50098866,0.4105565,-0.14394692,-0.62481063,0.5,-0.22656331,-0.68065623,0.28194433){0.79643001,0.5260109,0.63866347,0.57683818}; -SS(0.37492492,0.49312259,0.5,0.27123349,0.36190713,0.41476339,0.26138985,0.51848551,0.281015,0.47723835,0.52605258,0.30619083){0.61809871,0.36300231,0.40200156,0.58228229}; -SS(-1,-0.24887753,0.1953112,-0.89646962,-0.32955067,0.34017365,-0.73479965,-0.34302295,0.24038072,-0.82279039,-0.18997945,0.10657137){1.0768014,1.0133061,0.69668046,0.70945047}; -SS(-1,-0.5000565,0.0033661208,-0.85520613,-0.46088631,-0.14784569,-0.76760867,-0.33664988,-0.028298027,-0.82595855,-0.48031431,0.11444494){1.2263361,0.95161001,0.68479998,0.90887195}; -SS(0.098704003,0.67249079,0.1943501,0.10211023,0.6404511,0.38011645,0.26138985,0.51848551,0.281015,0.22886345,0.79287946,0.30210005){0.47957633,0.55160362,0.40200156,0.75332396}; -SS(-0.65776896,0.64141588,0.074371921,-0.79370724,0.81084643,0.045877226,-0.74249217,0.75399014,-0.15399718,-0.8068077,0.56885008,-0.063754108){0.83514199,1.270911,1.1267767,0.96112076}; -SS(-0.68637718,0.43295764,-0.18031685,-0.89426176,0.41257007,-0.12932618,-0.80558396,0.5878127,-0.29244037,-0.83127473,0.33505962,-0.32026923){0.67437813,0.974079,1.0616703,0.89071695}; -SS(-1,-1,-6.9388939e-15,-0.8827276,-0.88146034,0.13123348,-0.77973152,-1,-0.0001062007,-0.86742481,-0.86548068,-0.14483364){1.9831286,1.5595365,1.588155,1.5085891}; -SS(0.33333333,1,-0.5,0.33386283,0.81592026,-0.31808704,0.43683247,1,-0.26068681,0.2222976,1,-0.35617554){1.342474,0.86115027,1.2435523,1.1585843}; -SS(-0.36174,-0.40052234,-0.23665811,-0.15923414,-0.34171533,-0.15079999,-0.23583358,-0.36008743,0.0071767184,-0.18618058,-0.5161726,-0.15035515){0.32480953,0.14783141,0.16465457,0.30914003}; -SS(-0.50400314,-0.78879927,0.5,-0.40125956,-0.65699374,0.33213173,-0.349759,-0.84853211,0.35590634,-0.57994589,-0.69256437,0.31204703){1.1086821,0.69449311,0.94981364,0.89957508}; -SS(-0.65631386,-0.59724887,0.13822882,-0.61978497,-0.82706917,0.12738472,-0.42889738,-0.75253072,0.17523232,-0.57994589,-0.69256437,0.31204703){0.7890621,1.0681409,0.75958282,0.89957508}; -SS(-0.0089783977,0.64320989,-0.13441642,-0.10743676,0.85847111,-0.11136175,0.081865095,0.80626877,-0.27867109,-0.14847812,0.78021305,-0.27623142){0.41358858,0.7462212,0.71703623,0.68882385}; -SS(-0.89962374,0.8609561,-0.16698164,-1,1,-0.25,-0.76988954,1,-0.26944904,-1,0.83964442,-0.3309874){1.5692753,2.0450698,1.6463902,1.7979585}; -SS(-0.29261734,0.53193925,0.43339885,-0.033588837,0.5879061,0.5,-0.18136176,0.40461939,0.5,-0.11618574,0.50328545,0.29980467){0.53993003,0.57806214,0.42386795,0.33969293}; -SS(-0.8827276,-0.88146034,0.13123348,-1,-1,-6.9388939e-15,-1,-0.77608598,0.00064487429,-0.86742481,-0.86548068,-0.14483364){1.5595365,1.9831286,1.5844414,1.5085891}; -SS(-0.61503712,0.4760032,-0.5,-0.63048479,0.37587985,-0.34368186,-0.50782983,0.50249565,-0.29902586,-0.6293812,0.63993291,-0.28812602){0.83978547,0.64388066,0.58612549,0.87296464}; -SS(-0.61549046,-0.35581383,-0.12962263,-0.36174,-0.40052234,-0.23665811,-0.56113743,-0.28920115,-0.29204918,-0.45843014,-0.20445062,-0.15988901){0.50877487,0.32480953,0.46850822,0.26094507}; -SS(-0.1159097,-0.14329028,0.19302206,0,0,-6.9388939e-15,0,-0.22019801,5.0496855e-05,-0.20656092,-0.13938028,0.029547229){0.055235283,-0.017891206,0.029059683,0.048278496}; -SS(-0.93582873,0.86427167,0.14668289,-1,1,-6.9388939e-15,-0.81095336,1,-0.07156149,-0.79370724,0.81084643,0.045877226){1.6320629,1.9810426,1.6471359,1.270911}; -SS(0.66554141,0.67524133,0.5,0.64232771,0.84838332,0.46476191,0.81191124,0.80644944,0.5,0.76099919,0.76690574,0.25750996){1.1271263,1.3339184,1.5425973,1.2143065}; -SS(-0.66548665,0.66585508,-0.5,-0.83248216,0.76782327,-0.31292259,-0.80558396,0.5878127,-0.29244037,-0.6293812,0.63993291,-0.28812602){1.1221664,1.366757,1.0616703,0.87296464}; -SS(-0.89663862,-0.69397302,0.37275403,-0.67513028,-0.66529728,0.5,-0.80635543,-0.81164184,0.5,-0.77091496,-0.77159441,0.2629049){1.4119512,1.1284607,1.5410993,1.2433034}; -SS(-0.69937107,0.31347586,0.5,-0.61674646,0.25215289,0.3447871,-0.83006559,0.18329805,0.5,-0.83851866,0.33014205,0.32623765){0.8165723,0.54607287,0.96159482,0.89937894}; -SS(-0.11614487,0.30919383,0.33918095,0.11523872,0.30161582,0.5,0.050277172,0.20853018,0.30186362,0.085954007,0.41736025,0.32943097){0.20820823,0.33546792,0.12181545,0.27115576}; -SS(-0.3548152,-0.48825703,0.21848985,-0.3533559,-0.49437708,0.037576204,-0.23583358,-0.36008743,0.0071767184,-0.19247216,-0.56000521,0.088357129){0.38862106,0.35575629,0.16465457,0.34206231}; -SS(-0.056808231,0.14323286,-0.13367928,-0.26297351,0.20404986,-0.17122089,-0.12449617,0.36606215,-0.28273955,-0.1182182,0.15955837,-0.3159857){0.022140076,0.12773981,0.21185338,0.11990198}; -SS(-0.63246299,0.29145388,0.035195127,-0.7489605,0.18190923,0.13647301,-0.79172217,0.43302343,0.13373134,-0.78848723,0.26584533,-0.068869999){0.47226275,0.59564173,0.80968993,0.68151298}; -SS(-0.11754465,-0.65214472,-0.32749638,-0.32879066,-0.67072359,-0.5,-0.2399131,-0.76005145,-0.25989531,-0.26056819,-0.54975154,-0.34323516){0.53347202,0.79007105,0.6848256,0.46884495}; -SS(-0.67495489,-0.6652659,-0.5,-0.91414606,-0.68082467,-0.37109558,-0.76546557,-0.72634686,-0.27513208,-0.81387526,-0.53653555,-0.3209601){1.1276355,1.4249306,1.1696133,1.0406635}; -SS(0.24635331,0.35131343,-0.096025322,0.08017426,0.31429474,-0.16745504,0.34662081,0.36199915,-0.25068724,0.20129651,0.21389912,-0.31902192){0.18045455,0.11103103,0.29696992,0.16839385}; -SS(-0.33333333,1,-0.5,-0.35455825,0.80859576,-0.32177549,-0.18268367,0.83021756,-0.5,-0.23070339,1,-0.34855306){1.3407278,0.86460259,0.9573479,1.1599423}; -SS(-0.29237157,-0.11865629,-0.17606411,-0.4182056,0.11248126,-0.14182463,-0.49808619,0.0026201378,-0.26387206,-0.4720473,-0.063494476,-0.036829327){0.11404163,0.19428145,0.29810596,0.21285629}; -SS(-0.76546557,-0.72634686,-0.27513208,-0.79227163,-0.79754897,0.0021844777,-0.82285362,-0.63420593,-0.0683896,-0.86742481,-0.86548068,-0.14483364){1.1696133,1.2530106,1.0691297,1.5085891}; -SS(0.68985253,1,-0.19792707,0.8781758,0.86708556,-0.1989731,0.78186447,1,3.3673518e-05,0.77861211,0.77861193,-0.067175459){1.495304,1.5462283,1.5923176,1.1981052}; -SS(-0.61674646,0.25215289,0.3447871,-0.83006559,0.18329805,0.5,-0.83851866,0.33014205,0.32623765,-0.72768327,0.10310141,0.33233484){0.54607287,0.96159482,0.89937894,0.63492881}; -SS(0.88354722,0.11667767,-0.13069643,1,0.16156328,-0.33847781,0.83867599,0,-0.33865964,0.77491511,0.22516452,-0.26425516){0.79839767,1.1261583,0.80182539,0.70313431}; -SS(-0.043441254,0.79173928,0.29440137,-0.22223836,1,0.2622369,-0.014815866,1,0.31001515,-0.084253952,1,0.13733396){0.69563564,1.0984067,1.0772324,1.0073117}; -SS(-0.64009684,-0.10188458,0.37412975,-0.67616985,-0.069078192,0.18801024,-0.84084014,-0.14895162,0.31636914,-0.72768327,0.10310141,0.33233484){0.54631619,0.47948004,0.81273381,0.63492881}; -SS(-0.49391083,0.27907498,-0.27264436,-0.31377045,0.30492781,-0.36427962,-0.50782983,0.50249565,-0.29902586,-0.34372617,0.39779568,-0.18541051){0.37398026,0.30770932,0.58612549,0.29650146}; -SS(-0.93582873,0.86427167,0.14668289,-0.84394966,1,0.33504415,-1,0.84108515,0.33242406,-0.76389013,0.77728265,0.25513738){1.6320629,1.8084725,1.8031397,1.2358334}; -SS(0.81143387,0.18901581,0.5,0.59416595,0.14141347,0.32656529,0.62515059,0.14422159,0.5,0.73568363,0.23203612,0.2735765){0.9265446,0.46498444,0.64726001,0.6509231}; -SS(-1,1,-6.9388939e-15,-0.93582873,0.86427167,0.14668289,-1,0.77631186,0.00053339564,-0.79370724,0.81084643,0.045877226){1.9810426,1.6320629,1.5817554,1.270911}; -SS(-0.47972312,1,0.18932995,-0.61311838,0.85766427,0.15491279,-0.42762906,1,-0.0094860889,-0.48952189,0.78345034,0.019065462){1.2473472,1.1216468,1.169501,0.83409809}; -SS(0.37492492,0.49312259,0.5,0.27123349,0.36190713,0.41476339,0.47723835,0.52605258,0.30619083,0.50761134,0.34933779,0.39015973){0.61809871,0.36300231,0.58228229,0.51484928}; -SS(-0.033588837,0.5879061,0.5,0.10211023,0.6404511,0.38011645,-0.11618574,0.50328545,0.29980467,-0.16015893,0.67694077,0.39025863){0.57806214,0.55160362,0.33969293,0.6265216}; -SS(1,0.2203628,5.6826691e-05,0.74440038,0.22095066,-0.087839409,0.82562789,0.37565656,-0.12707714,0.88354722,0.11667767,-0.13069643){1.0268649,0.59875958,0.82387041,0.79839767}; -SS(0.30434906,0.49798107,-4.0114635e-05,0.24635331,0.35131343,-0.096025322,0.36021608,0.23247759,-0.012351094,0.18202227,0.38279251,0.10350409){0.32377482,0.18045455,0.16110593,0.17617817}; -SS(0.52843461,0.32737897,0.19102935,0.59416595,0.14141347,0.32656529,0.73568363,0.23203612,0.2735765,0.50761134,0.34933779,0.39015973){0.40790135,0.46498444,0.6509231,0.51484928}; -SS(0.24635331,0.35131343,-0.096025322,0.08017426,0.31429474,-0.16745504,0.20129651,0.21389912,-0.31902192,0.13402468,0.11673163,-0.1460819){0.18045455,0.11103103,0.16839385,0.039337265}; -SS(0.671223,0.32907594,-0.5,0.50136923,0.34587735,-0.44862257,0.51910919,0.22553632,-0.31417891,0.67125235,0.44297685,-0.31879306){0.79435762,0.56260896,0.40112301,0.72773009}; -SS(-0.58258855,0.14037208,-0.067351147,-0.65355936,0.25468043,-0.1897796,-0.77267892,0.13105707,-0.24874664,-0.78848723,0.26584533,-0.068869999){0.34532741,0.51379882,0.65386325,0.68151298}; -SS(-0.58934795,0.84141567,-0.18062024,-0.48255002,0.69900846,-0.19155417,-0.48952189,0.78345034,0.019065462,-0.62332411,0.59900263,-0.10904345){1.0736489,0.74365966,0.83409809,0.74800561}; -SS(0,-0.49997946,0.00010199173,-0.10133362,-0.40777162,0.1162396,-0.23583358,-0.36008743,0.0071767184,-0.19247216,-0.56000521,0.088357129){0.22811872,0.17697987,0.16465457,0.34206231}; -SS(0.30434906,0.49798107,-4.0114635e-05,0.18202227,0.38279251,0.10350409,0.36021608,0.23247759,-0.012351094,0.36016656,0.41044152,0.1594367){0.32377482,0.17617817,0.16110593,0.3073722}; -SS(-0.8827276,-0.88146034,0.13123348,-1,-0.84092895,0.33252059,-0.8385203,-1,0.33846229,-0.77091496,-0.77159441,0.2629049){1.5595365,1.8030746,1.8024192,1.2433034}; -SS(-0.58755791,0.033814853,0.5,-0.72768327,0.10310141,0.33233484,-0.80727304,0.00024662976,0.5,-0.83006559,0.18329805,0.5){0.57778723,0.63492881,0.88515177,0.96159482}; -SS(-0.63348211,-0.7706683,-0.074889286,-0.79227163,-0.79754897,0.0021844777,-0.76546557,-0.72634686,-0.27513208,-0.86742481,-0.86548068,-0.14483364){0.97907785,1.2530106,1.1696133,1.5085891}; -SS(0.61535375,0.70719289,-0.095218388,0.65062064,0.64268786,0.069510863,0.75922048,0.56990614,-0.17060419,0.77861211,0.77861193,-0.067175459){0.87858083,0.82620698,0.91133836,1.1981052}; -SS(-0.91414606,-0.68082467,-0.37109558,-1,-0.70523324,-0.21165758,-0.76546557,-0.72634686,-0.27513208,-0.81387526,-0.53653555,-0.3209601){1.4249306,1.5222776,1.1696133,1.0406635}; -SS(-0.16643696,-0.21791406,0.42402077,0,0,0.5,0,-0.25,0.5,0,-0.16137283,0.3386068){0.23818505,0.23153294,0.28720824,0.12565914}; -SS(-0.83248216,0.76782327,-0.31292259,-0.76988954,1,-0.26944904,-1,0.83964442,-0.3309874,-0.89962374,0.8609561,-0.16698164){1.366757,1.6463902,1.7979585,1.5692753}; -SS(0.50136923,0.34587735,-0.44862257,0.37532516,0.23078833,-0.5,0.34662081,0.36199915,-0.25068724,0.27170325,0.36204749,-0.4201745){0.56260896,0.42551454,0.29696992,0.36885377}; -SS(-0.67513028,-0.66529728,0.5,-0.63815223,-0.88141187,0.37488811,-0.77091496,-0.77159441,0.2629049,-0.57994589,-0.69256437,0.31204703){1.1284607,1.3088768,1.2433034,0.89957508}; -SS(-0.32879066,-0.67072359,-0.5,-0.36340067,-0.87821042,-0.37678589,-0.18848435,-0.81110947,-0.5,-0.2399131,-0.76005145,-0.25989531){0.79007105,1.0307746,0.92571371,0.6848256}; -SS(-0.48141868,0.60085372,0.5,-0.52470763,0.46530444,0.33754711,-0.61509744,0.47589965,0.5,-0.67801153,0.56076489,0.29217382){0.82306978,0.59371518,0.84259202,0.83617727}; -SS(0.87867265,0.36391919,-0.37720578,0.81149777,0.18885984,-0.5,1,0.16156328,-0.33847781,0.77491511,0.22516452,-0.26425516){1.03034,0.92750237,1.1261583,0.70313431}; -SS(0,-0.7082575,0.2084616,-0.12988976,-0.86995226,0.20452896,-0.22656331,-0.68065623,0.28194433,-0.22302806,-0.77703925,0.068353305){0.52387062,0.79894991,0.57683818,0.64063544}; -SS(0.70845584,0,0.20819814,0.59416595,0.14141347,0.32656529,0.83866368,0,0.33843958,0.73568363,0.23203612,0.2735765){0.52761363,0.46498444,0.80106313,0.6509231}; -SS(-0.67616985,-0.069078192,0.18801024,-0.84289574,0.018333867,0.1608607,-0.84084014,-0.14895162,0.31636914,-0.72768327,0.10310141,0.33233484){0.47948004,0.72430843,0.81273381,0.63492881}; -SS(0.34720309,0.90097601,-0.12745168,0.25248643,0.73785598,-0.13082591,0.24404834,0.79519787,0.082231238,0.094968532,0.84539386,-0.087484586){0.93504792,0.60350215,0.68472542,0.71839764}; -SS(-0.61549046,-0.35581383,-0.12962263,-0.65956212,-0.52273243,-0.19262862,-0.7907607,-0.33838097,-0.28342271,-0.62341011,-0.46880832,-0.38153973){0.50877487,0.7287475,0.80149819,0.73807879}; -SS(1,0.2917639,-0.20827961,0.88354722,0.11667767,-0.13069643,1,0.2203628,5.6826691e-05,0.82562789,0.37565656,-0.12707714){1.1127834,0.79839767,1.0268649,0.82387041}; -SS(-0.61549046,-0.35581383,-0.12962263,-0.7907607,-0.33838097,-0.28342271,-0.56113743,-0.28920115,-0.29204918,-0.62341011,-0.46880832,-0.38153973){0.50877487,0.80149819,0.46850822,0.73807879}; -SS(-0.5555987,0.045150158,0.095162244,-0.67616985,-0.069078192,0.18801024,-0.7489605,0.18190923,0.13647301,-0.76752638,0.004448061,-0.013214377){0.29993682,0.47948004,0.59564173,0.5734925}; -SS(0.74440038,0.22095066,-0.087839409,0.77985819,0,-0.00014691753,0.63998586,0.17856447,0.051345521,0.57129187,0.13526053,-0.13726946){0.59875958,0.58919206,0.42570365,0.35115136}; -SS(0,-0.75,-0.5,-0.11754465,-0.65214472,-0.32749638,0,-0.5,-0.5,-0.14376826,-0.62489354,-0.5){0.79460868,0.53347202,0.4845449,0.6489606}; -SS(0,-1,-0.5,0,-0.75,-0.5,-0.18848435,-0.81110947,-0.5,0,-0.83851883,-0.33849865){1.2333742,0.79460868,0.92571371,0.80235204}; -SS(-0.79227163,-0.79754897,0.0021844777,-0.63348211,-0.7706683,-0.074889286,-0.76546557,-0.72634686,-0.27513208,-0.82285362,-0.63420593,-0.0683896){1.2530106,0.97907785,1.1696133,1.0691297}; -SS(1,0,-0.5,1,0.25,-0.5,0.81149777,0.18885984,-0.5,1,0.16156328,-0.33847781){1.2327879,1.2935113,0.92750237,1.1261583}; -SS(0.75,0,-0.5,1,0,-0.5,0.81149777,0.18885984,-0.5,0.83867599,0,-0.33865964){0.79494611,1.2327879,0.92750237,0.80182539}; -SS(0.87881231,0.64063264,0.37220388,1,0.5,0.5,0.78912399,0.50423732,0.5,0.87272604,0.35900693,0.37172569){1.3069719,1.484684,1.1096027,1.0107603}; -SS(0,-1,0.5,0,-0.75,0.5,0,-0.83845667,0.33864852,-0.18863677,-0.81113033,0.5){1.232491,0.79557901,0.80178572,0.92459822}; -SS(0.77777778,1,0.5,0.64232771,0.84838332,0.46476191,0.82853688,1,0.32125076,0.81191124,0.80644944,0.5){1.8450917,1.3339184,1.7703132,1.5425973}; -SS(-0.5,-1,-0.5,-0.36340067,-0.87821042,-0.37678589,-0.50377808,-0.78884267,-0.5,-0.6448883,-0.87343314,-0.36731947){1.4844013,1.0307746,1.1087956,1.296688}; -SS(-0.25,-1,-0.5,0,-1,-0.5,-0.18848435,-0.81110947,-0.5,-0.16144976,-1,-0.33863959){1.2929607,1.2333742,0.92571371,1.1250711}; -SS(1,0,0.5,1,0.25,0.5,1,0.16158711,0.33859063,0.81143387,0.18901581,0.5){1.2336156,1.2942978,1.1259698,0.9265446}; -SS(-0.58755791,0.033814853,0.5,-0.61674646,0.25215289,0.3447871,-0.4543958,0.20406131,0.5,-0.52427834,0.10778268,0.27208728){0.57778723,0.54607287,0.48353653,0.34448415}; -SS(-0.58754442,0.033885734,-0.5,-0.64012388,-0.10177177,-0.37237302,-0.49808619,0.0026201378,-0.26387206,-0.62938155,0.17932964,-0.37445272){0.58180393,0.54269073,0.29810596,0.55109073}; -SS(0.18202227,0.38279251,0.10350409,-0.0073778212,0.36022468,0.15230712,0.25126435,0.28098512,0.24657435,0.085954007,0.41736025,0.32943097){0.17617817,0.13675819,0.18575023,0.27115576}; -SS(-0.25,-1,0.5,0,-1,0.5,-0.16134158,-1,0.33850563,-0.18863677,-0.81113033,0.5){1.2918821,1.232491,1.129042,0.92459822}; -SS(-0.58934795,0.84141567,-0.18062024,-0.61115597,1,-0.10200355,-0.36992714,1,-0.22970445,-0.56041637,1,-0.29784853){1.0736489,1.3611038,1.1684568,1.3856141}; -SS(0.27170325,0.36204749,-0.4201745,0.37549445,0.49317282,-0.5,0.16368264,0.50834729,-0.5,0.34412919,0.6158316,-0.3427703){0.36885377,0.61648995,0.52115901,0.59958408}; -SS(0.75,0,0.5,1,0,0.5,0.83866368,0,0.33843958,0.81143387,0.18901581,0.5){0.79262349,1.2336156,0.80106313,0.9265446}; -SS(-0.01813809,0.53618118,-0.30537166,-0.20381263,0.45499536,-0.5,-0.029932551,0.40748663,-0.5,-0.12449617,0.36606215,-0.28273955){0.36567785,0.478983,0.4038008,0.21185338}; -SS(1,0.5,0.5,0.87881231,0.64063264,0.37220388,1,0.50005385,0.27984222,0.87272604,0.35900693,0.37172569){1.484684,1.3069719,1.3085441,1.0107603}; -SS(-0.36340067,-0.87821042,-0.37678589,-0.5,-1,-0.5,-0.49995867,-1,-0.27986665,-0.6448883,-0.87343314,-0.36731947){1.0307746,1.4844013,1.3082069,1.296688}; -SS(-0.63815223,-0.88141187,0.37488811,-0.8385203,-1,0.33846229,-0.80635543,-0.81164184,0.5,-0.77091496,-0.77159441,0.2629049){1.3088768,1.8024192,1.5410993,1.2433034}; -SS(0.55555556,1,-0.5,0.54326203,0.87223293,-0.356993,0.33333333,1,-0.5,0.45062041,0.7833899,-0.5){1.5352494,1.1662147,1.342474,1.0506853}; -SS(0.43654676,1,0.2604635,0.36841015,0.87909734,0.37310922,0.23106485,1,0.31398279,0.40637652,0.87094343,0.13060843){1.2403655,1.0362544,1.1340577,0.92399337}; -SS(-0.24000819,0.17660305,0.5,-0.20045203,0.067929244,0.29301468,-0.045146113,0.19012269,0.5,-0.17669296,0.011023676,0.5){0.3210912,0.10955402,0.27176836,0.26322593}; -SS(-0.10743676,0.85847111,-0.11136175,-0.0089783977,0.64320989,-0.13441642,-0.2401666,0.74114092,-0.051302261,-0.14847812,0.78021305,-0.27623142){0.7462212,0.41358858,0.58653028,0.68882385}; -SS(0.77491511,0.22516452,-0.26425516,0.87867265,0.36391919,-0.37720578,0.67125235,0.44297685,-0.31879306,0.82562789,0.37565656,-0.12707714){0.70313431,1.03034,0.72773009,0.82387041}; -SS(-0.26986228,0.26051837,0.22418657,-0.10037172,0.18891947,0.20844359,-0.20045203,0.067929244,0.29301468,-0.15128303,0.02253305,0.11422928){0.1749353,0.074828316,0.10955402,0.025420414}; -SS(-0.89646962,-0.32955067,0.34017365,-0.73479965,-0.34302295,0.24038072,-0.79575191,-0.55547687,0.30538166,-0.82595855,-0.48031431,0.11444494){1.0133061,0.69668046,1.0192798,0.90887195}; -SS(0.87867265,0.36391919,-0.37720578,0.671223,0.32907594,-0.5,0.81149777,0.18885984,-0.5,0.77491511,0.22516452,-0.26425516){1.03034,0.79435762,0.92750237,0.70313431}; -SS(-0.79227163,-0.79754897,0.0021844777,-0.77973152,-1,-0.0001062007,-0.61978497,-0.82706917,0.12738472,-0.8827276,-0.88146034,0.13123348){1.2530106,1.588155,1.0681409,1.5595365}; -SS(0,-0.29157012,0.20836692,-0.16643696,-0.21791406,0.42402077,0,-0.16137283,0.3386068,-0.1159097,-0.14329028,0.19302206){0.11172813,0.23818505,0.12565914,0.055235283}; -SS(-0.58258855,0.14037208,-0.067351147,-0.5555987,0.045150158,0.095162244,-0.7489605,0.18190923,0.13647301,-0.76752638,0.004448061,-0.013214377){0.34532741,0.29993682,0.59564173,0.5734925}; -SS(0.8781758,0.86708556,-0.1989731,0.68985253,1,-0.19792707,0.68900489,0.77311276,-0.28043733,0.77861211,0.77861193,-0.067175459){1.5462283,1.495304,1.1326816,1.1981052}; -SS(-0.66546973,0.66566005,0.5,-0.67801153,0.56076489,0.29217382,-0.48141868,0.60085372,0.5,-0.61509744,0.47589965,0.5){1.1224691,0.83617727,0.82306978,0.84259202}; -SS(-0.41767704,0.010770256,-0.44072823,-0.50815189,-0.16301678,-0.5,-0.49808619,0.0026201378,-0.26387206,-0.64012388,-0.10177177,-0.37237302){0.35514259,0.52110597,0.29810596,0.54269073}; -SS(-0.80727304,0.00024662976,0.5,-0.64009684,-0.10188458,0.37412975,-0.84084014,-0.14895162,0.31636914,-0.72768327,0.10310141,0.33233484){0.88515177,0.54631619,0.81273381,0.63492881}; -SS(0.10211023,0.6404511,0.38011645,-0.033588837,0.5879061,0.5,-0.11618574,0.50328545,0.29980467,0.085954007,0.41736025,0.32943097){0.55160362,0.57806214,0.33969293,0.27115576}; -SS(0.24937941,1,-0.00011138016,0.34720309,0.90097601,-0.12745168,0.24404834,0.79519787,0.082231238,0.094968532,0.84539386,-0.087484586){1.0446566,0.93504792,0.68472542,0.71839764}; -SS(-0.222315,1,-0.00011890035,-0.10743676,0.85847111,-0.11136175,-0.2401666,0.74114092,-0.051302261,-0.38143574,0.84373572,-0.12387887){1.0307381,0.7462212,0.58653028,0.85864479}; -SS(-0.74954172,1,0.13574231,-0.93582873,0.86427167,0.14668289,-0.81095336,1,-0.07156149,-0.79370724,0.81084643,0.045877226){1.562759,1.6320629,1.6471359,1.270911}; -SS(-0.10133362,-0.40777162,0.1162396,0,-0.29157012,0.20836692,-0.25897908,-0.24013326,0.26450313,-0.1853821,-0.42358473,0.30866054){0.17697987,0.11172813,0.17775565,0.29143101}; -SS(0.77985819,0,-0.00014691753,0.74440038,0.22095066,-0.087839409,0.63998586,0.17856447,0.051345521,0.86971177,0.13024645,0.1427188){0.58919206,0.59875958,0.42570365,0.77797836}; -SS(0.57129187,0.13526053,-0.13726946,0.60662231,0.34516964,-0.13972301,0.77491511,0.22516452,-0.26425516,0.51910919,0.22553632,-0.31417891){0.35115136,0.48782847,0.70313431,0.40112301}; -SS(1,0.75,-0.5,1,1,-0.5,0.81205362,0.80656044,-0.5,1,0.83864447,-0.33847614){1.7924126,2.2331531,1.5391707,1.8065101}; -SS(-0.1159097,-0.14329028,0.19302206,-0.34310942,-0.010167032,0.1509038,-0.20656092,-0.13938028,0.029547229,-0.3727858,-0.19869367,0.11195566){0.055235283,0.12661586,0.048278496,0.16948569}; -SS(1,0.75,0.5,1,1,0.5,1,0.83856906,0.33864755,0.81191124,0.80644944,0.5){1.7930237,2.2317116,1.8033242,1.5425973}; -SS(0.35567295,0.65317229,0.39545235,0.37492492,0.49312259,0.5,0.21512427,0.73211919,0.5,0.16321322,0.50838432,0.5){0.69293227,0.61809871,0.81521474,0.52238519}; -SS(-0.82595855,-0.48031431,0.11444494,-0.65631386,-0.59724887,0.13822882,-0.73479965,-0.34302295,0.24038072,-0.79575191,-0.55547687,0.30538166){0.90887195,0.7890621,0.69668046,1.0192798}; -SS(0.55555556,1,0.5,0.36841015,0.87909734,0.37310922,0.33333333,1,0.5,0.43654676,1,0.2604635){1.5357742,1.0362544,1.3466764,1.2403655}; -SS(0.34662081,0.36199915,-0.25068724,0.27170325,0.36204749,-0.4201745,0.34412919,0.6158316,-0.3427703,0.48047723,0.47791267,-0.33071402){0.29696992,0.36885377,0.59958408,0.55795418}; -SS(-0.62938155,0.17932964,-0.37445272,-0.58754442,0.033885734,-0.5,-0.80728146,0.00010990719,-0.5,-0.82994199,0.18319278,-0.5){0.55109073,0.58180393,0.88195685,0.95993957}; -SS(-1,-1,0.5,-0.75,-1,0.5,-0.8385203,-1,0.33846229,-0.80635543,-0.81164184,0.5){2.2322143,1.7943537,1.8024192,1.5410993}; -SS(-0.62938155,0.17932964,-0.37445272,-0.82994199,0.18319278,-0.5,-0.77267892,0.13105707,-0.24874664,-0.83127473,0.33505962,-0.32026923){0.55109073,0.95993957,0.65386325,0.89071695}; -SS(-1,-1,-0.5,-0.75,-1,-0.5,-0.80632325,-0.81147186,-0.5,-0.83846289,-1,-0.33858677){2.2321573,1.7946951,1.5409894,1.8019179}; -SS(-0.47972312,1,0.18932995,-0.61311838,0.85766427,0.15491279,-0.48952189,0.78345034,0.019065462,-0.32294154,0.86180803,0.13108841){1.2473472,1.1216468,0.83409809,0.84829643}; -SS(0.11458044,0.70010244,0.010073529,-0.0089783977,0.64320989,-0.13441642,0.086744979,0.52712982,0.027891324,-0.098708274,0.55956225,0.10505678){0.49378055,0.41358858,0.26660844,0.31633913}; -SS(-0.67513028,-0.66529728,0.5,-0.63815223,-0.88141187,0.37488811,-0.80635543,-0.81164184,0.5,-0.77091496,-0.77159441,0.2629049){1.1284607,1.3088768,1.5410993,1.2433034}; -SS(-1,-0.47520831,0.27427507,-0.89646962,-0.32955067,0.34017365,-0.79575191,-0.55547687,0.30538166,-0.82595855,-0.48031431,0.11444494){1.2822693,1.0133061,1.0192798,0.90887195}; -SS(-0.35582611,-0.64426575,-0.070000747,-0.14850787,-0.69358405,-0.087583548,-0.2399131,-0.76005145,-0.25989531,-0.18618058,-0.5161726,-0.15035515){0.52757348,0.49763432,0.6848256,0.30914003}; -SS(0,-0.49989758,0.27983937,-0.10133362,-0.40777162,0.1162396,-0.19247216,-0.56000521,0.088357129,-0.1853821,-0.42358473,0.30866054){0.30650831,0.17697987,0.34206231,0.29143101}; -SS(-1,0.24865949,0.19540364,-0.91004595,0.15296589,0.33139812,-0.7489605,0.18190923,0.13647301,-0.83851866,0.33014205,0.32623765){1.0814407,0.94743142,0.59564173,0.89937894}; -SS(-0.7489605,0.18190923,0.13647301,-0.61674646,0.25215289,0.3447871,-0.83851866,0.33014205,0.32623765,-0.72768327,0.10310141,0.33233484){0.59564173,0.54607287,0.89937894,0.63492881}; -SS(-0.63048479,0.37587985,-0.34368186,-0.68637718,0.43295764,-0.18031685,-0.80558396,0.5878127,-0.29244037,-0.83127473,0.33505962,-0.32026923){0.64388066,0.67437813,1.0616703,0.89071695}; -SS(0,-0.22019801,5.0496855e-05,-0.15923414,-0.34171533,-0.15079999,-0.20656092,-0.13938028,0.029547229,-0.098950987,-0.13391411,-0.14594667){0.029059683,0.14783141,0.048278496,0.03512721}; -SS(-0.93582873,0.86427167,0.14668289,-0.74954172,1,0.13574231,-0.84394966,1,0.33504415,-0.76389013,0.77728265,0.25513738){1.6320629,1.562759,1.8084725,1.2358334}; -SS(0.74440038,0.22095066,-0.087839409,0.70841775,0,-0.20847891,0.77985819,0,-0.00014691753,0.57129187,0.13526053,-0.13726946){0.59875958,0.52293439,0.58919206,0.35115136}; -SS(-0.58934795,0.84141567,-0.18062024,-0.42762906,1,-0.0094860889,-0.48952189,0.78345034,0.019065462,-0.38143574,0.84373572,-0.12387887){1.0736489,1.169501,0.83409809,0.85864479}; -SS(-0.54640726,0.34339216,0.19847863,-0.39806707,0.15776443,0.15870839,-0.26986228,0.26051837,0.22418657,-0.41843781,0.30742585,0.3397996){0.43575493,0.19317292,0.1749353,0.37011438}; -SS(-0.34310942,-0.010167032,0.1509038,-0.3727858,-0.19869367,0.11195566,-0.4720473,-0.063494476,-0.036829327,-0.20656092,-0.13938028,0.029547229){0.12661586,0.16948569,0.21285629,0.048278496}; -SS(-0.15923414,-0.34171533,-0.15079999,0,-0.49997946,0.00010199173,-0.23583358,-0.36008743,0.0071767184,-0.18618058,-0.5161726,-0.15035515){0.14783141,0.22811872,0.16465457,0.30914003}; -SS(-0.8827276,-0.88146034,0.13123348,-0.70832062,-1,0.2082538,-0.77973152,-1,-0.0001062007,-0.61978497,-0.82706917,0.12738472){1.5595365,1.5291125,1.588155,1.0681409}; -SS(0.27170325,0.36204749,-0.4201745,0.11583535,0.30145324,-0.5,0.37532516,0.23078833,-0.5,0.20129651,0.21389912,-0.31902192){0.36885377,0.33954703,0.42551454,0.16839385}; -SS(-0.34310942,-0.010167032,0.1509038,-0.1159097,-0.14329028,0.19302206,-0.25897908,-0.24013326,0.26450313,-0.3727858,-0.19869367,0.11195566){0.12661586,0.055235283,0.17775565,0.16948569}; -SS(-0.61311838,0.85766427,0.15491279,-0.47185361,0.73769401,0.24072705,-0.48952189,0.78345034,0.019065462,-0.32294154,0.86180803,0.13108841){1.1216468,0.80384956,0.83409809,0.84829643}; -SS(-0.61549046,-0.35581383,-0.12962263,-0.70236545,-0.13062851,-0.19140485,-0.65367362,-0.16081953,0.0014934597,-0.45843014,-0.20445062,-0.15988901){0.50877487,0.5265969,0.4344691,0.26094507}; -SS(0.86971177,0.13024645,0.1427188,0.70845584,0,0.20819814,0.73568363,0.23203612,0.2735765,0.63998586,0.17856447,0.051345521){0.77797836,0.52761363,0.6509231,0.42570365}; -SS(-0.65956212,-0.52273243,-0.19262862,-0.4581749,-0.5263483,-0.32801665,-0.49676106,-0.69523221,-0.26913048,-0.62341011,-0.46880832,-0.38153973){0.7287475,0.57811658,0.78043195,0.73807879}; -SS(0.59365279,0.65503723,0.24444947,0.65062064,0.64268786,0.069510863,0.76099919,0.76690574,0.25750996,0.84582719,0.572243,0.1361951){0.82252715,0.82620698,1.2143065,1.0417018}; -SS(0,-0.49997234,-0.27965571,-0.11754465,-0.65214472,-0.32749638,-0.26056819,-0.54975154,-0.34323516,-0.073421274,-0.375,-0.38984354){0.30906942,0.53347202,0.46884495,0.28201081}; -SS(-0.88905946,-0.098697315,-0.13184676,-0.76752638,0.004448061,-0.013214377,-0.82279039,-0.18997945,0.10657137,-0.65367362,-0.16081953,0.0014934597){0.8023886,0.5734925,0.70945047,0.4344691}; -SS(-0.89426176,0.41257007,-0.12932618,-1,0.49991607,0.0031934521,-0.79172217,0.43302343,0.13373134,-0.8068077,0.56885008,-0.063754108){0.974079,1.2302733,0.80968993,0.96112076}; -SS(0.085954007,0.41736025,0.32943097,-0.0073778212,0.36022468,0.15230712,0.25126435,0.28098512,0.24657435,0.050277172,0.20853018,0.30186362){0.27115576,0.13675819,0.18575023,0.12181545}; -SS(0,0,0.5,0.050277172,0.20853018,0.30186362,-0.045146113,0.19012269,0.5,0.12517622,0.12515553,0.5){0.23153294,0.12181545,0.27176836,0.27156885}; -SS(0.27123349,0.36190713,0.41476339,0.25126435,0.28098512,0.24657435,0.050277172,0.20853018,0.30186362,0.085954007,0.41736025,0.32943097){0.36300231,0.18575023,0.12181545,0.27115576}; -SS(-0.68637718,0.43295764,-0.18031685,-0.63048479,0.37587985,-0.34368186,-0.80558396,0.5878127,-0.29244037,-0.6293812,0.63993291,-0.28812602){0.67437813,0.64388066,1.0616703,0.87296464}; -SS(-0.0089783977,0.64320989,-0.13441642,0.094968532,0.84539386,-0.087484586,0.25248643,0.73785598,-0.13082591,0.081865095,0.80626877,-0.27867109){0.41358858,0.71839764,0.60350215,0.71703623}; -SS(-0.28278924,0.041190137,-0.04219563,-0.34310942,-0.010167032,0.1509038,-0.4720473,-0.063494476,-0.036829327,-0.20656092,-0.13938028,0.029547229){0.063480395,0.12661586,0.21285629,0.048278496}; -SS(-0.29237157,-0.11865629,-0.17606411,-0.28278924,0.041190137,-0.04219563,-0.4720473,-0.063494476,-0.036829327,-0.20656092,-0.13938028,0.029547229){0.11404163,0.063480395,0.21285629,0.048278496}; -SS(-0.61115597,1,-0.10200355,-0.58934795,0.84141567,-0.18062024,-0.42762906,1,-0.0094860889,-0.48952189,0.78345034,0.019065462){1.3611038,1.0736489,1.169501,0.83409809}; -SS(0.11523872,0.30161582,0.5,0.27123349,0.36190713,0.41476339,0.050277172,0.20853018,0.30186362,0.085954007,0.41736025,0.32943097){0.33546792,0.36300231,0.12181545,0.27115576}; -SS(0,-0.49997946,0.00010199173,-0.15923414,-0.34171533,-0.15079999,-0.23583358,-0.36008743,0.0071767184,-0.10133362,-0.40777162,0.1162396){0.22811872,0.14783141,0.16465457,0.17697987}; -SS(-0.222315,1,-0.00011890035,-0.10743676,0.85847111,-0.11136175,-0.012406168,1,-0.034358602,-0.084253952,1,0.13733396){1.0307381,0.7462212,0.99121748,1.0073117}; -SS(-0.10743676,0.85847111,-0.11136175,-0.012406168,1,-0.034358602,-0.084253952,1,0.13733396,-0.035654771,0.78507762,0.045007896){0.7462212,0.99121748,1.0073117,0.60161266}; -SS(0.87881231,0.64063264,0.37220388,0.66554141,0.67524133,0.5,0.81191124,0.80644944,0.5,0.76099919,0.76690574,0.25750996){1.3069719,1.1271263,1.5425973,1.2143065}; -SS(-0.59094649,-0.40495207,0.12834587,-0.50159539,-0.29258506,7.2987381e-06,-0.76760867,-0.33664988,-0.028298027,-0.65367362,-0.16081953,0.0014934597){0.51475101,0.32068114,0.68479998,0.4344691}; -SS(-0.24163432,0.33561251,-0.055881164,-0.39654734,0.26661646,0.019312696,-0.13709741,0.19518884,0.034033465,-0.19461387,0.3919517,0.10437587){0.16437697,0.20710489,0.040184006,0.19075448}; -SS(-0.088882135,1,-0.23281641,-0.10743676,0.85847111,-0.11136175,0.081865095,0.80626877,-0.27867109,0.094968532,0.84539386,-0.087484586){1.0431215,0.7462212,0.71703623,0.71839764}; -SS(-0.17097214,0.64900986,-0.39927747,-0.033284914,0.58770906,-0.5,0.00024312215,0.80750011,-0.5,0.10162062,0.65400865,-0.37913628){0.59741335,0.58301644,0.88610119,0.5665506}; -SS(-0.222315,1,-0.00011890035,-0.10743676,0.85847111,-0.11136175,-0.084253952,1,0.13733396,-0.035654771,0.78507762,0.045007896){1.0307381,0.7462212,1.0073117,0.60161266}; -SS(-0.40506391,-0.079541407,0.3303193,-0.58755791,0.033814853,0.5,-0.40752783,0.030201366,0.5,-0.52427834,0.10778268,0.27208728){0.26156128,0.57778723,0.40526498,0.34448415}; -SS(-0.222315,1,-0.00011890035,-0.38143574,0.84373572,-0.12387887,-0.2401666,0.74114092,-0.051302261,-0.32294154,0.86180803,0.13108841){1.0307381,0.85864479,0.58653028,0.84829643}; -SS(-0.65631386,-0.59724887,0.13822882,-0.59094649,-0.40495207,0.12834587,-0.73479965,-0.34302295,0.24038072,-0.56348952,-0.47594309,0.3052276){0.7890621,0.51475101,0.69668046,0.61776713}; -SS(-0.47185361,0.73769401,0.24072705,-0.45563594,0.60375179,0.095527884,-0.48952189,0.78345034,0.019065462,-0.32294154,0.86180803,0.13108841){0.80384956,0.56263538,0.83409809,0.84829643}; -SS(0.55555556,1,0.5,0.36841015,0.87909734,0.37310922,0.43654676,1,0.2604635,0.55555177,0.82262944,0.31125158){1.5357742,1.0362544,1.2403655,1.0671623}; -SS(-0.41651431,0.41690828,-0.5,-0.63048479,0.37587985,-0.34368186,-0.49391083,0.27907498,-0.27264436,-0.50782983,0.50249565,-0.29902586){0.57523437,0.64388066,0.37398026,0.58612549}; -SS(-0.61311838,0.85766427,0.15491279,-0.47972312,1,0.18932995,-0.47185361,0.73769401,0.24072705,-0.32294154,0.86180803,0.13108841){1.1216468,1.2473472,0.80384956,0.84829643}; -SS(0,-0.29157012,0.20836692,-0.10133362,-0.40777162,0.1162396,-0.25897908,-0.24013326,0.26450313,-0.1159097,-0.14329028,0.19302206){0.11172813,0.17697987,0.17775565,0.055235283}; -SS(-1,-0.55555556,0.5,-0.89663862,-0.69397302,0.37275403,-1,-0.47520831,0.27427507,-0.79575191,-0.55547687,0.30538166){1.5359657,1.4119512,1.2822693,1.0192798}; -SS(-0.78327322,-0.45013966,0.5,-0.62450053,-0.31310845,0.38575928,-0.73479965,-0.34302295,0.24038072,-0.89646962,-0.32955067,0.34017365){1.0435491,0.62379151,0.69668046,1.0133061}; -SS(-0.73479965,-0.34302295,0.24038072,-0.82279039,-0.18997945,0.10657137,-0.76760867,-0.33664988,-0.028298027,-0.82595855,-0.48031431,0.11444494){0.69668046,0.70945047,0.68479998,0.90887195}; -SS(-0.70236545,-0.13062851,-0.19140485,-0.45843014,-0.20445062,-0.15988901,-0.4720473,-0.063494476,-0.036829327,-0.65367362,-0.16081953,0.0014934597){0.5265969,0.26094507,0.21285629,0.4344691}; -SS(0,-0.5,-0.5,-0.073421274,-0.375,-0.38984354,-0.23055166,-0.37480907,-0.5,-0.14376826,-0.62489354,-0.5){0.4845449,0.28201081,0.41992239,0.6489606}; -SS(-0.89962374,0.8609561,-0.16698164,-0.76988954,1,-0.26944904,-0.81095336,1,-0.07156149,-0.74249217,0.75399014,-0.15399718){1.5692753,1.6463902,1.6471359,1.1267767}; -SS(0.69383766,0.49492178,-0.021800115,0.65062064,0.64268786,0.069510863,0.84582719,0.572243,0.1361951,0.8988736,0.63809662,-0.070284173){0.71284258,0.82620698,1.0417018,1.2046527}; -SS(0.52843461,0.32737897,0.19102935,0.36016656,0.41044152,0.1594367,0.36021608,0.23247759,-0.012351094,0.46476684,0.14382827,0.12247557){0.40790135,0.3073722,0.16110593,0.23450402}; -SS(-0.79227163,-0.79754897,0.0021844777,-0.65631386,-0.59724887,0.13822882,-0.82285362,-0.63420593,-0.0683896,-0.83996275,-0.66999882,0.11765553){1.2530106,0.7890621,1.0691297,1.1553131}; -SS(-0.18268367,0.83021756,-0.5,0.0011150345,0.93517443,-0.37389303,-0.23070339,1,-0.34855306,-0.14847812,0.78021305,-0.27623142){0.9573479,1.0026385,1.1599423,0.68882385}; -SS(-0.3548152,-0.48825703,0.21848985,-0.1853821,-0.42358473,0.30866054,-0.22656331,-0.68065623,0.28194433,-0.19247216,-0.56000521,0.088357129){0.38862106,0.29143101,0.57683818,0.34206231}; -SS(0.37532516,0.23078833,-0.5,0.50136923,0.34587735,-0.44862257,0.34662081,0.36199915,-0.25068724,0.51910919,0.22553632,-0.31417891){0.42551454,0.56260896,0.29696992,0.40112301}; -SS(-0.84289574,0.018333867,0.1608607,-1,-0.00021427218,0.00011802244,-0.76752638,0.004448061,-0.013214377,-0.82279039,-0.18997945,0.10657137){0.72430843,0.98080906,0.5734925,0.70945047}; -SS(-0.67616985,-0.069078192,0.18801024,-0.82279039,-0.18997945,0.10657137,-0.73479965,-0.34302295,0.24038072,-0.84084014,-0.14895162,0.31636914){0.47948004,0.70945047,0.69668046,0.81273381}; -SS(-0.78327322,-0.45013966,0.5,-0.89646962,-0.32955067,0.34017365,-0.73479965,-0.34302295,0.24038072,-0.79575191,-0.55547687,0.30538166){1.0435491,1.0133061,0.69668046,1.0192798}; -SS(-0.64012388,-0.10177177,-0.37237302,-0.58754442,0.033885734,-0.5,-0.73174678,-0.21478859,-0.5,-0.80728146,0.00010990719,-0.5){0.54269073,0.58180393,0.81151292,0.88195685}; -SS(0.11523872,0.30161582,0.5,0.27123349,0.36190713,0.41476339,0.25126435,0.28098512,0.24657435,0.050277172,0.20853018,0.30186362){0.33546792,0.36300231,0.18575023,0.12181545}; -SS(0.75922048,0.56990614,-0.17060419,0.69383766,0.49492178,-0.021800115,0.82562789,0.37565656,-0.12707714,0.8988736,0.63809662,-0.070284173){0.91133836,0.71284258,0.82387041,1.2046527}; -SS(-0.88905946,-0.098697315,-0.13184676,-1,-0.00021427218,0.00011802244,-1,-0.20076836,0.00061221676,-0.82279039,-0.18997945,0.10657137){0.8023886,0.98080906,1.0172898,0.70945047}; -SS(0.24635331,0.35131343,-0.096025322,0.08017426,0.31429474,-0.16745504,0.17777709,0.54047543,-0.2567554,0.09693172,0.3918681,-0.3370861){0.18045455,0.11103103,0.36840304,0.26256104}; -SS(0.59416595,0.14141347,0.32656529,0.67112401,0.32933441,0.5,0.73568363,0.23203612,0.2735765,0.50761134,0.34933779,0.39015973){0.46498444,0.79210069,0.6509231,0.51484928}; -SS(-0.58754442,0.033885734,-0.5,-0.64012388,-0.10177177,-0.37237302,-0.73174678,-0.21478859,-0.5,-0.50815189,-0.16301678,-0.5){0.58180393,0.54269073,0.81151292,0.52110597}; -SS(0.49866453,0.63973666,-0.21510859,0.61535375,0.70719289,-0.095218388,0.75922048,0.56990614,-0.17060419,0.68900489,0.77311276,-0.28043733){0.68344633,0.87858083,0.91133836,1.1326816}; -SS(-0.58755791,0.033814853,0.5,-0.64009684,-0.10188458,0.37412975,-0.73174745,-0.21491043,0.5,-0.80727304,0.00024662976,0.5){0.57778723,0.54631619,0.81377033,0.88515177}; -SS(-0.35455825,0.80859576,-0.32177549,-0.33333333,1,-0.5,-0.36992714,1,-0.22970445,-0.23070339,1,-0.34855306){0.86460259,1.3407278,1.1684568,1.1599423}; -SS(-1,-0.11111111,-0.5,-0.85707128,-0.1416783,-0.34083416,-0.73174678,-0.21478859,-0.5,-0.80728146,0.00010990719,-0.5){1.2438655,0.85441326,0.81151292,0.88195685}; -SS(-0.073421274,-0.375,-0.38984354,0,-0.25,-0.5,-0.23055166,-0.37480907,-0.5,-0.12484866,-0.12486094,-0.5){0.28201081,0.29677328,0.41992239,0.26766045}; -SS(0.88049681,0.87960137,0.13412341,1,0.83856906,0.33864755,0.82853688,1,0.32125076,0.76099919,0.76690574,0.25750996){1.5518824,1.8033242,1.7703132,1.2143065}; -SS(-0.60421932,0.82298164,0.34468578,-0.66546973,0.66566005,0.5,-0.80481649,0.80494069,0.5,-0.76389013,0.77728265,0.25513738){1.1449713,1.1224691,1.5232843,1.2358334}; -SS(0,-0.49997946,0.00010199173,-0.19247216,-0.56000521,0.088357129,-0.23583358,-0.36008743,0.0071767184,-0.18618058,-0.5161726,-0.15035515){0.22811872,0.34206231,0.16465457,0.30914003}; -SS(-0.16643696,-0.21791406,0.42402077,0,-0.29157012,0.20836692,-0.25897908,-0.24013326,0.26450313,-0.1159097,-0.14329028,0.19302206){0.23818505,0.11172813,0.17775565,0.055235283}; -SS(-0.24654336,0.57133462,-0.25396354,-0.17097214,0.64900986,-0.39927747,-0.14847812,0.78021305,-0.27623142,-0.01813809,0.53618118,-0.30537166){0.42991415,0.59741335,0.68882385,0.36567785}; -SS(0.094968532,0.84539386,-0.087484586,0.17426348,1,-0.18078905,0.25248643,0.73785598,-0.13082591,0.081865095,0.80626877,-0.27867109){0.71839764,1.045853,0.60350215,0.71703623}; -SS(0.10211023,0.6404511,0.38011645,0.098704003,0.67249079,0.1943501,0.26138985,0.51848551,0.281015,0.085954007,0.41736025,0.32943097){0.55160362,0.47957633,0.40200156,0.27115576}; -SS(0.77985819,0,-0.00014691753,0.74440038,0.22095066,-0.087839409,0.86971177,0.13024645,0.1427188,0.88354722,0.11667767,-0.13069643){0.58919206,0.59875958,0.77797836,0.79839767}; -SS(-0.61115597,1,-0.10200355,-0.38143574,0.84373572,-0.12387887,-0.36992714,1,-0.22970445,-0.42762906,1,-0.0094860889){1.3611038,0.85864479,1.1684568,1.169501}; -SS(-1,-0.84092895,0.33252059,-0.89663862,-0.69397302,0.37275403,-0.80635543,-0.81164184,0.5,-0.77091496,-0.77159441,0.2629049){1.8030746,1.4119512,1.5410993,1.2433034}; -SS(0.18202227,0.38279251,0.10350409,0.25126435,0.28098512,0.24657435,0.36021608,0.23247759,-0.012351094,0.36016656,0.41044152,0.1594367){0.17617817,0.18575023,0.16110593,0.3073722}; -SS(0.42864323,0.48543211,-0.13804456,0.60662231,0.34516964,-0.13972301,0.34662081,0.36199915,-0.25068724,0.48047723,0.47791267,-0.33071402){0.42022283,0.48782847,0.29696992,0.55795418}; -SS(0.08017426,0.31429474,-0.16745504,0.09693172,0.3918681,-0.3370861,0.34662081,0.36199915,-0.25068724,0.20129651,0.21389912,-0.31902192){0.11103103,0.26256104,0.29696992,0.16839385}; -SS(0.49866453,0.63973666,-0.21510859,0.51674933,0.64481281,-0.39755292,0.67125235,0.44297685,-0.31879306,0.48047723,0.47791267,-0.33071402){0.68344633,0.82858869,0.72773009,0.55795418}; -SS(-0.50815189,-0.16301678,-0.5,-0.41767704,0.010770256,-0.44072823,-0.49808619,0.0026201378,-0.26387206,-0.38492375,-0.20017574,-0.33650716){0.52110597,0.35514259,0.29810596,0.28705324}; -SS(-0.0089783977,0.64320989,-0.13441642,0.11458044,0.70010244,0.010073529,-0.035654771,0.78507762,0.045007896,-0.098708274,0.55956225,0.10505678){0.41358858,0.49378055,0.60161266,0.31633913}; -SS(0.59365279,0.65503723,0.24444947,0.76099919,0.76690574,0.25750996,0.6902006,0.50015172,0.27072419,0.84582719,0.572243,0.1361951){0.82252715,1.2143065,0.77938072,1.0417018}; -SS(-0.11754465,-0.65214472,-0.32749638,-0.32879066,-0.67072359,-0.5,-0.18848435,-0.81110947,-0.5,-0.2399131,-0.76005145,-0.25989531){0.53347202,0.79007105,0.92571371,0.6848256}; -SS(-0.89804207,0.11676539,-0.10792088,-1,-0.00018427889,-0.26378916,-0.77267892,0.13105707,-0.24874664,-0.88905946,-0.098697315,-0.13184676){0.82300022,1.0508045,0.65386325,0.8023886}; -SS(-0.64009684,-0.10188458,0.37412975,-0.58755791,0.033814853,0.5,-0.73174745,-0.21491043,0.5,-0.50807239,-0.16307462,0.5){0.54631619,0.57778723,0.81377033,0.52416601}; -SS(-0.92571354,0.17249619,-0.34283108,-0.80728146,0.00010990719,-0.5,-0.82994199,0.18319278,-0.5,-0.77267892,0.13105707,-0.24874664){0.99158484,0.88195685,0.95993957,0.65386325}; -SS(0.11523872,0.30161582,0.5,0.26083053,0.15082484,0.37728795,0.25126435,0.28098512,0.24657435,0.27123349,0.36190713,0.41476339){0.33546792,0.21918499,0.18575023,0.36300231}; -SS(-0.66548665,0.66585508,-0.5,-0.6293812,0.63993291,-0.28812602,-0.50014045,0.79673357,-0.5,-0.65756371,0.81308934,-0.3429452){1.1221664,0.87296464,1.1145783,1.1958888}; -SS(-0.89663862,-0.69397302,0.37275403,-0.67513028,-0.66529728,0.5,-0.77091496,-0.77159441,0.2629049,-0.79575191,-0.55547687,0.30538166){1.4119512,1.1284607,1.2433034,1.0192798}; -SS(0.87867265,0.36391919,-0.37720578,0.671223,0.32907594,-0.5,0.77491511,0.22516452,-0.26425516,0.67125235,0.44297685,-0.31879306){1.03034,0.79435762,0.70313431,0.72773009}; -SS(-0.36340067,-0.87821042,-0.37678589,-0.2399131,-0.76005145,-0.25989531,-0.49676106,-0.69523221,-0.26913048,-0.42066299,-0.84356131,-0.12906413){1.0307746,0.6848256,0.78043195,0.88525127}; -SS(0.48047723,0.47791267,-0.33071402,0.60662231,0.34516964,-0.13972301,0.51910919,0.22553632,-0.31417891,0.67125235,0.44297685,-0.31879306){0.55795418,0.48782847,0.40112301,0.72773009}; -SS(-0.10037172,0.18891947,0.20844359,-0.26986228,0.26051837,0.22418657,-0.13709741,0.19518884,0.034033465,-0.15128303,0.02253305,0.11422928){0.074828316,0.1749353,0.040184006,0.025420414}; -SS(0.11136938,1,0.13859714,0.094968532,0.84539386,-0.087484586,0.24937941,1,-0.00011138016,0.24404834,0.79519787,0.082231238){1.0072058,0.71839764,1.0446566,0.68472542}; -SS(0,-0.5,-0.5,-0.11754465,-0.65214472,-0.32749638,0,-0.49997234,-0.27965571,-0.073421274,-0.375,-0.38984354){0.4845449,0.53347202,0.30906942,0.28201081}; -SS(0.26083053,0.15082484,0.37728795,0.29175541,0,0.20824909,0.25126435,0.28098512,0.24657435,0.42621669,0.19017509,0.30505062){0.21918499,0.1093371,0.18575023,0.29714896}; -SS(0.26083053,0.15082484,0.37728795,0.11523872,0.30161582,0.5,0.25126435,0.28098512,0.24657435,0.050277172,0.20853018,0.30186362){0.21918499,0.33546792,0.18575023,0.12181545}; -SS(-0.30949447,0.8262402,0.33528492,-0.33333333,1,0.5,-0.44431425,1,0.36245944,-0.50037,0.79662088,0.5){0.87388961,1.3433112,1.3152029,1.1183194}; -SS(-0.80635543,-0.81164184,0.5,-1,-1,0.5,-1,-0.77777778,0.5,-1,-0.84092895,0.33252059){1.5410993,2.2322143,1.8434331,1.8030746}; -SS(0.08017426,0.31429474,-0.16745504,0.24635331,0.35131343,-0.096025322,0.34662081,0.36199915,-0.25068724,0.09693172,0.3918681,-0.3370861){0.11103103,0.18045455,0.29696992,0.26256104}; -SS(0.46476684,0.14382827,0.12247557,0.50010751,0,-0.00013054911,0.36021608,0.23247759,-0.012351094,0.57129187,0.13526053,-0.13726946){0.23450402,0.22823279,0.16110593,0.35115136}; -SS(-0.34310942,-0.010167032,0.1509038,-0.39806707,0.15776443,0.15870839,-0.20045203,0.067929244,0.29301468,-0.15128303,0.02253305,0.11422928){0.12661586,0.19317292,0.10955402,0.025420414}; -SS(-0.1182182,0.15955837,-0.3159857,-0.17603462,0.24070348,-0.5,-0.19007896,0.04567822,-0.5,-0.29413589,0.046284299,-0.31274881){0.11990198,0.32537509,0.27736807,0.1681493}; -SS(-0.4433427,0.53576375,-0.12560501,-0.32064519,0.49448821,1.4739833e-06,-0.54631436,0.45612147,-0.00074796238,-0.34372617,0.39779568,-0.18541051){0.48429505,0.32892635,0.48593017,0.29650146}; -SS(-0.57994589,-0.69256437,0.31204703,-0.67513028,-0.66529728,0.5,-0.50050976,-0.57246927,0.5,-0.56348952,-0.47594309,0.3052276){0.89957508,1.1284607,0.81219504,0.61776713}; -SS(-0.4581749,-0.5263483,-0.32801665,-0.32879066,-0.67072359,-0.5,-0.50036547,-0.57239096,-0.5,-0.26056819,-0.54975154,-0.34323516){0.57811658,0.79007105,0.81333009,0.46884495}; -SS(0.59416595,0.14141347,0.32656529,0.52843461,0.32737897,0.19102935,0.63998586,0.17856447,0.051345521,0.46476684,0.14382827,0.12247557){0.46498444,0.40790135,0.42570365,0.23450402}; -SS(0.10162062,0.65400865,-0.37913628,0.21543771,0.73213875,-0.5,0.33386283,0.81592026,-0.31808704,0.34412919,0.6158316,-0.3427703){0.5665506,0.81134051,0.86115027,0.59958408}; -SS(0.10211023,0.6404511,0.38011645,-0.033588837,0.5879061,0.5,0.21512427,0.73211919,0.5,0.00029730467,0.80760978,0.5){0.55160362,0.57806214,0.81521474,0.88423684}; -SS(-0.35582611,-0.64426575,-0.070000747,-0.50537844,-0.68762812,0.023695348,-0.42066299,-0.84356131,-0.12906413,-0.36608751,-0.8951802,0.074405883){0.52757348,0.71483247,0.88525127,0.92652515}; -SS(-0.65631386,-0.59724887,0.13822882,-0.79227163,-0.79754897,0.0021844777,-0.63348211,-0.7706683,-0.074889286,-0.61978497,-0.82706917,0.12738472){0.7890621,1.2530106,0.97907785,1.0681409}; -SS(-0.64012388,-0.10177177,-0.37237302,-0.50815189,-0.16301678,-0.5,-0.49808619,0.0026201378,-0.26387206,-0.38492375,-0.20017574,-0.33650716){0.54269073,0.52110597,0.29810596,0.28705324}; -SS(0.094968532,0.84539386,-0.087484586,0.17426348,1,-0.18078905,-0.088882135,1,-0.23281641,-0.012406168,1,-0.034358602){0.71839764,1.045853,1.0431215,0.99121748}; -SS(-0.19461387,0.3919517,0.10437587,-0.26986228,0.26051837,0.22418657,-0.39654734,0.26661646,0.019312696,-0.13709741,0.19518884,0.034033465){0.19075448,0.1749353,0.20710489,0.040184006}; -SS(-0.55555556,1,-0.5,-0.65756371,0.81308934,-0.3429452,-0.50014045,0.79673357,-0.5,-0.56041637,1,-0.29784853){1.5379273,1.1958888,1.1145783,1.3856141}; -SS(-0.64012388,-0.10177177,-0.37237302,-0.73174678,-0.21478859,-0.5,-0.50815189,-0.16301678,-0.5,-0.56113743,-0.28920115,-0.29204918){0.54269073,0.81151292,0.52110597,0.46850822}; -SS(0.094968532,0.84539386,-0.087484586,0.11136938,1,0.13859714,-0.012406168,1,-0.034358602,-0.035654771,0.78507762,0.045007896){0.71839764,1.0072058,0.99121748,0.60161266}; -SS(0.13913358,0.10014326,0.18199659,0.25126435,0.28098512,0.24657435,0.13261259,0.21336316,0.036566127,0.050277172,0.20853018,0.30186362){0.045990896,0.18575023,0.046199082,0.12181545}; -SS(-0.93582873,0.86427167,0.14668289,-1,1,-6.9388939e-15,-0.74954172,1,0.13574231,-0.81095336,1,-0.07156149){1.6320629,1.9810426,1.562759,1.6471359}; -SS(-0.11754465,-0.65214472,-0.32749638,-0.18848435,-0.81110947,-0.5,0,-0.83851883,-0.33849865,-0.2399131,-0.76005145,-0.25989531){0.53347202,0.92571371,0.80235204,0.6848256}; -SS(0.68985253,1,-0.19792707,0.54700908,0.85955032,-0.16345766,0.68900489,0.77311276,-0.28043733,0.77861211,0.77861193,-0.067175459){1.495304,1.0528061,1.1326816,1.1981052}; -SS(0,-0.22019801,5.0496855e-05,-0.15923414,-0.34171533,-0.15079999,-0.23583358,-0.36008743,0.0071767184,-0.20656092,-0.13938028,0.029547229){0.029059683,0.14783141,0.16465457,0.048278496}; -SS(-0.62450053,-0.31310845,0.38575928,-0.73479965,-0.34302295,0.24038072,-0.84084014,-0.14895162,0.31636914,-0.64009684,-0.10188458,0.37412975){0.62379151,0.69668046,0.81273381,0.54631619}; -SS(-0.15923414,-0.34171533,-0.15079999,-0.29237157,-0.11865629,-0.17606411,-0.20656092,-0.13938028,0.029547229,-0.098950987,-0.13391411,-0.14594667){0.14783141,0.11404163,0.048278496,0.03512721}; -SS(0.68966181,1,0.19790566,0.88049681,0.87960137,0.13412341,0.76099919,0.76690574,0.25750996,0.62860594,0.86645525,0.049037492){1.492557,1.5518824,1.2143065,1.1303867}; -SS(0.60662231,0.34516964,-0.13972301,0.37137652,0.1767682,-0.19801193,0.51910919,0.22553632,-0.31417891,0.57129187,0.13526053,-0.13726946){0.48782847,0.19205628,0.40112301,0.35115136}; -SS(-1,-1,-0.5,-0.80632325,-0.81147186,-0.5,-1,-0.77777778,-0.5,-1,-0.83959635,-0.33115777){2.2321573,1.5409894,1.8436809,1.7998257}; -SS(-0.31377045,0.30492781,-0.36427962,-0.41651431,0.41690828,-0.5,-0.49391083,0.27907498,-0.27264436,-0.50782983,0.50249565,-0.29902586){0.30770932,0.57523437,0.37398026,0.58612549}; -SS(-0.10133362,-0.40777162,0.1162396,-0.3548152,-0.48825703,0.21848985,-0.23583358,-0.36008743,0.0071767184,-0.19247216,-0.56000521,0.088357129){0.17697987,0.38862106,0.16465457,0.34206231}; -SS(0.70845584,0,0.20819814,0.59416595,0.14141347,0.32656529,0.73568363,0.23203612,0.2735765,0.63998586,0.17856447,0.051345521){0.52761363,0.46498444,0.6509231,0.42570365}; -SS(0.39612945,0.70614162,0.21524614,0.59365279,0.65503723,0.24444947,0.55555177,0.82262944,0.31125158,0.35567295,0.65317229,0.39545235){0.68453461,0.82252715,1.0671623,0.69293227}; -SS(-0.7055892,-0.50616462,-0.017961589,-0.65956212,-0.52273243,-0.19262862,-0.63348211,-0.7706683,-0.074889286,-0.82285362,-0.63420593,-0.0683896){0.74484897,0.7287475,0.97907785,1.0691297}; -SS(0.10162062,0.65400865,-0.37913628,-0.033284914,0.58770906,-0.5,0.21543771,0.73213875,-0.5,0.16368264,0.50834729,-0.5){0.5665506,0.58301644,0.81134051,0.52115901}; -SS(0.37549445,0.49317282,-0.5,0.34412919,0.6158316,-0.3427703,0.21543771,0.73213875,-0.5,0.16368264,0.50834729,-0.5){0.61648995,0.59958408,0.81134051,0.52115901}; -SS(-0.61115597,1,-0.10200355,-0.58934795,0.84141567,-0.18062024,-0.36992714,1,-0.22970445,-0.38143574,0.84373572,-0.12387887){1.3611038,1.0736489,1.1684568,0.85864479}; -SS(1,0.83856906,0.33864755,0.87881231,0.64063264,0.37220388,0.81191124,0.80644944,0.5,0.76099919,0.76690574,0.25750996){1.8033242,1.3069719,1.5425973,1.2143065}; -SS(-0.49284988,-0.37485679,0.5,-0.62450053,-0.31310845,0.38575928,-0.73174745,-0.21491043,0.5,-0.50807239,-0.16307462,0.5){0.6163523,0.62379151,0.81377033,0.52416601}; -SS(0.67125235,0.44297685,-0.31879306,0.6657623,0.67544754,-0.5,0.78906409,0.5041626,-0.5,0.57309542,0.50075776,-0.5){0.72773009,1.1304562,1.1105402,0.81773274}; -SS(-0.73174745,-0.21491043,0.5,-0.62450053,-0.31310845,0.38575928,-0.78327322,-0.45013966,0.5,-0.89646962,-0.32955067,0.34017365){0.81377033,0.62379151,1.0435491,1.0133061}; -SS(0.23106485,1,0.31398279,0.36841015,0.87909734,0.37310922,0.22886345,0.79287946,0.30210005,0.40637652,0.87094343,0.13060843){1.1340577,1.0362544,0.75332396,0.92399337}; -SS(-0.32879066,-0.67072359,-0.5,-0.4581749,-0.5263483,-0.32801665,-0.50036547,-0.57239096,-0.5,-0.49676106,-0.69523221,-0.26913048){0.79007105,0.57811658,0.81333009,0.78043195}; -SS(-0.033284914,0.58770906,-0.5,0.10162062,0.65400865,-0.37913628,0.21543771,0.73213875,-0.5,0.00024312215,0.80750011,-0.5){0.58301644,0.5665506,0.81134051,0.88610119}; -SS(0.66554141,0.67524133,0.5,0.64232771,0.84838332,0.46476191,0.76099919,0.76690574,0.25750996,0.55555177,0.82262944,0.31125158){1.1271263,1.3339184,1.2143065,1.0671623}; -SS(0.24635331,0.35131343,-0.096025322,0.36021608,0.23247759,-0.012351094,0.13261259,0.21336316,0.036566127,0.13402468,0.11673163,-0.1460819){0.18045455,0.16110593,0.046199082,0.039337265}; -SS(-0.36608751,-0.8951802,0.074405883,-0.35582611,-0.64426575,-0.070000747,-0.22302806,-0.77703925,0.068353305,-0.42066299,-0.84356131,-0.12906413){0.92652515,0.52757348,0.64063544,0.88525127}; -SS(0.0011150345,0.93517443,-0.37389303,0.17426348,1,-0.18078905,-0.088882135,1,-0.23281641,0.081865095,0.80626877,-0.27867109){1.0026385,1.045853,1.0431215,0.71703623}; -SS(0.59416595,0.14141347,0.32656529,0.52843461,0.32737897,0.19102935,0.73568363,0.23203612,0.2735765,0.63998586,0.17856447,0.051345521){0.46498444,0.40790135,0.6509231,0.42570365}; -SS(0.5,0,-0.5,0.35689191,0.091376279,-0.36932783,0.50007058,0,-0.27987971,0.51910919,0.22553632,-0.31417891){0.48471812,0.26145514,0.31006895,0.40112301}; -SS(-1,-0.33333333,0.5,-0.89646962,-0.32955067,0.34017365,-1,-0.55555556,0.5,-1,-0.47520831,0.27427507){1.3443603,1.0133061,1.5359657,1.2822693}; -SS(0.60662231,0.34516964,-0.13972301,0.74440038,0.22095066,-0.087839409,0.77315808,0.36766952,0.075951375,0.63998586,0.17856447,0.051345521){0.48782847,0.59875958,0.71793497,0.42570365}; -SS(-0.68637718,0.43295764,-0.18031685,-0.65355936,0.25468043,-0.1897796,-0.54631436,0.45612147,-0.00074796238,-0.63246299,0.29145388,0.035195127){0.67437813,0.51379882,0.48593017,0.47226275}; -SS(-0.033588837,0.5879061,0.5,0.10211023,0.6404511,0.38011645,0.21512427,0.73211919,0.5,0.16321322,0.50838432,0.5){0.57806214,0.55160362,0.81521474,0.52238519}; -SS(0.65062064,0.64268786,0.069510863,0.69383766,0.49492178,-0.021800115,0.75922048,0.56990614,-0.17060419,0.8988736,0.63809662,-0.070284173){0.82620698,0.71284258,0.91133836,1.2046527}; -SS(-0.67513028,-0.66529728,0.5,-0.57994589,-0.69256437,0.31204703,-0.77091496,-0.77159441,0.2629049,-0.79575191,-0.55547687,0.30538166){1.1284607,0.89957508,1.2433034,1.0192798}; -SS(0.54326203,0.87223293,-0.356993,0.55555556,1,-0.5,0.33333333,1,-0.5,0.43683247,1,-0.26068681){1.1662147,1.5352494,1.342474,1.2435523}; -SS(-0.16643696,-0.21791406,0.42402077,0,0,0.5,0,-0.16137283,0.3386068,-0.17669296,0.011023676,0.5){0.23818505,0.23153294,0.12565914,0.26322593}; -SS(0.10162062,0.65400865,-0.37913628,0.21543771,0.73213875,-0.5,0.081865095,0.80626877,-0.27867109,0.33386283,0.81592026,-0.31808704){0.5665506,0.81134051,0.71703623,0.86115027}; -SS(-0.45843014,-0.20445062,-0.15988901,-0.29237157,-0.11865629,-0.17606411,-0.36174,-0.40052234,-0.23665811,-0.38492375,-0.20017574,-0.33650716){0.26094507,0.11404163,0.32480953,0.28705324}; -SS(-0.77777778,1,0.5,-1,1,0.5,-0.84394966,1,0.33504415,-0.80481649,0.80494069,0.5){1.8407438,2.2338249,1.8084725,1.5232843}; -SS(-0.10133362,-0.40777162,0.1162396,0,-0.29157012,0.20836692,0,-0.22019801,5.0496855e-05,-0.1159097,-0.14329028,0.19302206){0.17697987,0.11172813,0.029059683,0.055235283}; -SS(-0.89804207,0.11676539,-0.10792088,-0.77267892,0.13105707,-0.24874664,-0.76752638,0.004448061,-0.013214377,-0.88905946,-0.098697315,-0.13184676){0.82300022,0.65386325,0.5734925,0.8023886}; -SS(-0.23055166,-0.37480907,-0.5,-0.073421274,-0.375,-0.38984354,-0.12484866,-0.12486094,-0.5,-0.1971424,-0.26981885,-0.30750196){0.41992239,0.28201081,0.26766045,0.19280289}; -SS(-0.83127473,0.33505962,-0.32026923,-1,0.25105097,-0.19350143,-0.77267892,0.13105707,-0.24874664,-0.78848723,0.26584533,-0.068869999){0.89071695,1.0825888,0.65386325,0.68151298}; -SS(-0.26297351,0.20404986,-0.17122089,-0.24163432,0.33561251,-0.055881164,-0.39654734,0.26661646,0.019312696,-0.13709741,0.19518884,0.034033465){0.12773981,0.16437697,0.20710489,0.040184006}; -SS(0.69383766,0.49492178,-0.021800115,0.65062064,0.64268786,0.069510863,0.6902006,0.50015172,0.27072419,0.84582719,0.572243,0.1361951){0.71284258,0.82620698,0.77938072,1.0417018}; -SS(-0.70236545,-0.13062851,-0.19140485,-0.64012388,-0.10177177,-0.37237302,-0.7907607,-0.33838097,-0.28342271,-0.85707128,-0.1416783,-0.34083416){0.5265969,0.54269073,0.80149819,0.85441326}; -SS(-0.24000819,0.17660305,0.5,-0.36145429,0.13293621,0.35430528,-0.26986228,0.26051837,0.22418657,-0.20045203,0.067929244,0.29301468){0.3210912,0.26360063,0.1749353,0.10955402}; -SS(-0.79575191,-0.55547687,0.30538166,-0.65631386,-0.59724887,0.13822882,-0.73479965,-0.34302295,0.24038072,-0.56348952,-0.47594309,0.3052276){1.0192798,0.7890621,0.69668046,0.61776713}; -SS(-0.73479965,-0.34302295,0.24038072,-0.62450053,-0.31310845,0.38575928,-0.84084014,-0.14895162,0.31636914,-0.89646962,-0.32955067,0.34017365){0.69668046,0.62379151,0.81273381,1.0133061}; -SS(-0.62450053,-0.31310845,0.38575928,-0.73174745,-0.21491043,0.5,-0.84084014,-0.14895162,0.31636914,-0.89646962,-0.32955067,0.34017365){0.62379151,0.81377033,0.81273381,1.0133061}; -SS(-1,-0.00021427218,0.00011802244,-0.88905946,-0.098697315,-0.13184676,-0.76752638,0.004448061,-0.013214377,-0.82279039,-0.18997945,0.10657137){0.98080906,0.8023886,0.5734925,0.70945047}; -SS(0.77315808,0.36766952,0.075951375,0.69383766,0.49492178,-0.021800115,0.6902006,0.50015172,0.27072419,0.84582719,0.572243,0.1361951){0.71793497,0.71284258,0.77938072,1.0417018}; -SS(-0.23055166,-0.37480907,-0.5,-0.073421274,-0.375,-0.38984354,-0.1971424,-0.26981885,-0.30750196,-0.26056819,-0.54975154,-0.34323516){0.41992239,0.28201081,0.19280289,0.46884495}; -SS(-0.0073778212,0.36022468,0.15230712,0.18202227,0.38279251,0.10350409,0.25126435,0.28098512,0.24657435,0.050277172,0.20853018,0.30186362){0.13675819,0.17617817,0.18575023,0.12181545}; -SS(-0.34549718,-0.50098866,0.4105565,-0.23048975,-0.37484721,0.5,-0.14394692,-0.62481063,0.5,-0.1853821,-0.42358473,0.30866054){0.5260109,0.42714666,0.63866347,0.29143101}; -SS(0.65062064,0.64268786,0.069510863,0.8988736,0.63809662,-0.070284173,0.75922048,0.56990614,-0.17060419,0.77861211,0.77861193,-0.067175459){0.82620698,1.2046527,0.91133836,1.1981052}; -SS(-0.48255002,0.69900846,-0.19155417,-0.4433427,0.53576375,-0.12560501,-0.48952189,0.78345034,0.019065462,-0.62332411,0.59900263,-0.10904345){0.74365966,0.48429505,0.83409809,0.74800561}; -SS(-0.7055892,-0.50616462,-0.017961589,-0.65631386,-0.59724887,0.13822882,-0.63348211,-0.7706683,-0.074889286,-0.50537844,-0.68762812,0.023695348){0.74484897,0.7890621,0.97907785,0.71483247}; -SS(-0.18848435,-0.81110947,-0.5,-0.36340067,-0.87821042,-0.37678589,-0.16144976,-1,-0.33863959,-0.2399131,-0.76005145,-0.25989531){0.92571371,1.0307746,1.1250711,0.6848256}; -SS(-0.58755791,0.033814853,0.5,-0.64009684,-0.10188458,0.37412975,-0.52427834,0.10778268,0.27208728,-0.40506391,-0.079541407,0.3303193){0.57778723,0.54631619,0.34448415,0.26156128}; -SS(-0.3548152,-0.48825703,0.21848985,-0.40125956,-0.65699374,0.33213173,-0.42889738,-0.75253072,0.17523232,-0.22656331,-0.68065623,0.28194433){0.38862106,0.69449311,0.75958282,0.57683818}; -SS(-0.39806707,0.15776443,0.15870839,-0.54640726,0.34339216,0.19847863,-0.39654734,0.26661646,0.019312696,-0.63246299,0.29145388,0.035195127){0.19317292,0.43575493,0.20710489,0.47226275}; -SS(-0.2401666,0.74114092,-0.051302261,-0.10743676,0.85847111,-0.11136175,-0.14847812,0.78021305,-0.27623142,-0.38143574,0.84373572,-0.12387887){0.58653028,0.7462212,0.68882385,0.85864479}; -SS(-0.62332411,0.59900263,-0.10904345,-0.68637718,0.43295764,-0.18031685,-0.54631436,0.45612147,-0.00074796238,-0.8068077,0.56885008,-0.063754108){0.74800561,0.67437813,0.48593017,0.96112076}; -SS(-0.65776896,0.64141588,0.074371921,-0.62332411,0.59900263,-0.10904345,-0.54631436,0.45612147,-0.00074796238,-0.8068077,0.56885008,-0.063754108){0.83514199,0.74800561,0.48593017,0.96112076}; -SS(-0.35582611,-0.64426575,-0.070000747,-0.50537844,-0.68762812,0.023695348,-0.49676106,-0.69523221,-0.26913048,-0.42066299,-0.84356131,-0.12906413){0.52757348,0.71483247,0.78043195,0.88525127}; -SS(-0.60421932,0.82298164,0.34468578,-0.50037,0.79662088,0.5,-0.47185361,0.73769401,0.24072705,-0.30949447,0.8262402,0.33528492){1.1449713,1.1183194,0.80384956,0.87388961}; -SS(0.34662081,0.36199915,-0.25068724,0.27170325,0.36204749,-0.4201745,0.17777709,0.54047543,-0.2567554,0.34412919,0.6158316,-0.3427703){0.29696992,0.36885377,0.36840304,0.59958408}; -SS(-0.16144976,-1,-0.33863959,-0.12233239,-0.87748906,-0.13583418,0,-0.83851883,-0.33849865,-0.2399131,-0.76005145,-0.25989531){1.1250711,0.78823805,0.80235204,0.6848256}; -SS(0.87272604,0.35900693,0.37172569,1,0.29178008,0.20838772,1,0.16158711,0.33859063,0.73568363,0.23203612,0.2735765){1.0107603,1.1084285,1.1259698,0.6509231}; -SS(-0.42066299,-0.84356131,-0.12906413,-0.35582611,-0.64426575,-0.070000747,-0.2399131,-0.76005145,-0.25989531,-0.49676106,-0.69523221,-0.26913048){0.88525127,0.52757348,0.6848256,0.78043195}; -SS(0.20129651,0.21389912,-0.31902192,0.24635331,0.35131343,-0.096025322,0.13402468,0.11673163,-0.1460819,0.37137652,0.1767682,-0.19801193){0.16839385,0.18045455,0.039337265,0.19205628}; -SS(0.77315808,0.36766952,0.075951375,0.86971177,0.13024645,0.1427188,0.73568363,0.23203612,0.2735765,0.63998586,0.17856447,0.051345521){0.71793497,0.77797836,0.6509231,0.42570365}; -SS(0.08017426,0.31429474,-0.16745504,-0.056808231,0.14323286,-0.13367928,-0.12449617,0.36606215,-0.28273955,-0.1182182,0.15955837,-0.3159857){0.11103103,0.022140076,0.21185338,0.11990198}; -SS(0.27170325,0.36204749,-0.4201745,0.16368264,0.50834729,-0.5,0.17777709,0.54047543,-0.2567554,0.34412919,0.6158316,-0.3427703){0.36885377,0.52115901,0.36840304,0.59958408}; -SS(-0.50537844,-0.68762812,0.023695348,-0.63348211,-0.7706683,-0.074889286,-0.49676106,-0.69523221,-0.26913048,-0.42066299,-0.84356131,-0.12906413){0.71483247,0.97907785,0.78043195,0.88525127}; -SS(1,0.29178008,0.20838772,0.86971177,0.13024645,0.1427188,1,0.16158711,0.33859063,0.73568363,0.23203612,0.2735765){1.1084285,0.77797836,1.1259698,0.6509231}; -SS(0.36016656,0.41044152,0.1594367,0.52843461,0.32737897,0.19102935,0.52218723,0.46943947,0.022097553,0.47723835,0.52605258,0.30619083){0.3073722,0.40790135,0.46892029,0.58228229}; -SS(0.49866453,0.63973666,-0.21510859,0.51674933,0.64481281,-0.39755292,0.33386283,0.81592026,-0.31808704,0.54326203,0.87223293,-0.356993){0.68344633,0.82858869,0.86115027,1.1662147}; -SS(-0.47972312,1,0.18932995,-0.30949447,0.8262402,0.33528492,-0.22223836,1,0.2622369,-0.44431425,1,0.36245944){1.2473472,0.87388961,1.0984067,1.3152029}; -SS(-0.38492375,-0.20017574,-0.33650716,-0.29237157,-0.11865629,-0.17606411,-0.36174,-0.40052234,-0.23665811,-0.1971424,-0.26981885,-0.30750196){0.28705324,0.11404163,0.32480953,0.19280289}; -SS(-1,1,-6.9388939e-15,-0.89962374,0.8609561,-0.16698164,-0.81095336,1,-0.07156149,-0.79370724,0.81084643,0.045877226){1.9810426,1.5692753,1.6471359,1.270911}; -SS(-0.30949447,0.8262402,0.33528492,-0.47972312,1,0.18932995,-0.22223836,1,0.2622369,-0.32294154,0.86180803,0.13108841){0.87388961,1.2473472,1.0984067,0.84829643}; -SS(0.10162062,0.65400865,-0.37913628,-0.0089783977,0.64320989,-0.13441642,0.17777709,0.54047543,-0.2567554,0.081865095,0.80626877,-0.27867109){0.5665506,0.41358858,0.36840304,0.71703623}; -SS(0.77491511,0.22516452,-0.26425516,0.81149777,0.18885984,-0.5,1,0.16156328,-0.33847781,0.83867599,0,-0.33865964){0.70313431,0.92750237,1.1261583,0.80182539}; -SS(-0.66546973,0.66566005,0.5,-0.87046532,0.63071146,0.35630423,-0.80481649,0.80494069,0.5,-0.76389013,0.77728265,0.25513738){1.1224691,1.2666006,1.5232843,1.2358334}; -SS(-0.20984637,0.69532212,0.20809493,-0.29261734,0.53193925,0.43339885,-0.11618574,0.50328545,0.29980467,-0.16015893,0.67694077,0.39025863){0.55022745,0.53993003,0.33969293,0.6265216}; -SS(0.52843461,0.32737897,0.19102935,0.36016656,0.41044152,0.1594367,0.42621669,0.19017509,0.30505062,0.50761134,0.34933779,0.39015973){0.40790135,0.3073722,0.29714896,0.51484928}; -SS(-0.47972312,1,0.18932995,-0.30949447,0.8262402,0.33528492,-0.47185361,0.73769401,0.24072705,-0.32294154,0.86180803,0.13108841){1.2473472,0.87388961,0.80384956,0.84829643}; -SS(-1,-0.5000565,0.0033661208,-0.83996275,-0.66999882,0.11765553,-1,-0.77608598,0.00064487429,-0.82285362,-0.63420593,-0.0683896){1.2263361,1.1553131,1.5844414,1.0691297}; -SS(0.34662081,0.36199915,-0.25068724,0.24635331,0.35131343,-0.096025322,0.17777709,0.54047543,-0.2567554,0.09693172,0.3918681,-0.3370861){0.29696992,0.18045455,0.36840304,0.26256104}; -SS(0.42864323,0.48543211,-0.13804456,0.34662081,0.36199915,-0.25068724,0.17777709,0.54047543,-0.2567554,0.34412919,0.6158316,-0.3427703){0.42022283,0.29696992,0.36840304,0.59958408}; -SS(-1,1,0.5,-0.80481649,0.80494069,0.5,-1,0.77777778,0.5,-1,0.84108515,0.33242406){2.2338249,1.5232843,1.8402752,1.8031397}; -SS(0.49866453,0.63973666,-0.21510859,0.34412919,0.6158316,-0.3427703,0.25248643,0.73785598,-0.13082591,0.33386283,0.81592026,-0.31808704){0.68344633,0.59958408,0.60350215,0.86115027}; -SS(-0.20984637,0.69532212,0.20809493,-0.29261734,0.53193925,0.43339885,-0.35521568,0.4957142,0.26668635,-0.11618574,0.50328545,0.29980467){0.55022745,0.53993003,0.42001946,0.33969293}; -SS(1,0,-0.5,1,0.16156328,-0.33847781,0.81149777,0.18885984,-0.5,0.83867599,0,-0.33865964){1.2327879,1.1261583,0.92750237,0.80182539}; -SS(0.76099919,0.76690574,0.25750996,0.87881231,0.64063264,0.37220388,0.6902006,0.50015172,0.27072419,0.84582719,0.572243,0.1361951){1.2143065,1.3069719,0.77938072,1.0417018}; -SS(0,-1,-0.5,0,-0.83851883,-0.33849865,-0.18848435,-0.81110947,-0.5,-0.16144976,-1,-0.33863959){1.2333742,0.80235204,0.92571371,1.1250711}; -SS(-0.89962374,0.8609561,-0.16698164,-1,1,-6.9388939e-15,-1,0.77631186,0.00053339564,-0.79370724,0.81084643,0.045877226){1.5692753,1.9810426,1.5817554,1.270911}; -SS(0,-1,0.5,0,-0.83845667,0.33864852,-0.16134158,-1,0.33850563,-0.18863677,-0.81113033,0.5){1.232491,0.80178572,1.129042,0.92459822}; -SS(0,0,-6.9388939e-15,-0.056808231,0.14323286,-0.13367928,-0.13709741,0.19518884,0.034033465,0.13261259,0.21336316,0.036566127){-0.017891206,0.022140076,0.040184006,0.046199082}; -SS(1,0,0.5,1,0.16158711,0.33859063,0.83866368,0,0.33843958,0.81143387,0.18901581,0.5){1.2336156,1.1259698,0.80106313,0.9265446}; -SS(-0.60421932,0.82298164,0.34468578,-0.47972312,1,0.18932995,-0.44431425,1,0.36245944,-0.47185361,0.73769401,0.24072705){1.1449713,1.2473472,1.3152029,0.80384956}; -SS(-0.58934795,0.84141567,-0.18062024,-0.61115597,1,-0.10200355,-0.81095336,1,-0.07156149,-0.74249217,0.75399014,-0.15399718){1.0736489,1.3611038,1.6471359,1.1267767}; -SS(-0.83996275,-0.66999882,0.11765553,-1,-0.47520831,0.27427507,-0.79575191,-0.55547687,0.30538166,-0.82595855,-0.48031431,0.11444494){1.1553131,1.2822693,1.0192798,0.90887195}; -SS(-0.26986228,0.26051837,0.22418657,-0.39806707,0.15776443,0.15870839,-0.39654734,0.26661646,0.019312696,-0.13709741,0.19518884,0.034033465){0.1749353,0.19317292,0.20710489,0.040184006}; -SS(-0.15128303,0.02253305,0.11422928,0,0,-6.9388939e-15,-0.20656092,-0.13938028,0.029547229,-0.28278924,0.041190137,-0.04219563){0.025420414,-0.017891206,0.048278496,0.063480395}; -SS(0.74440038,0.22095066,-0.087839409,1,0.2203628,5.6826691e-05,0.86971177,0.13024645,0.1427188,0.88354722,0.11667767,-0.13069643){0.59875958,1.0268649,0.77797836,0.79839767}; -SS(-0.41651431,0.41690828,-0.5,-0.31377045,0.30492781,-0.36427962,-0.17603462,0.24070348,-0.5,-0.20381263,0.45499536,-0.5){0.57523437,0.30770932,0.32537509,0.478983}; -SS(-0.64012388,-0.10177177,-0.37237302,-0.73174678,-0.21478859,-0.5,-0.7907607,-0.33838097,-0.28342271,-0.85707128,-0.1416783,-0.34083416){0.54269073,0.81151292,0.80149819,0.85441326}; -SS(0.33386283,0.81592026,-0.31808704,0.17426348,1,-0.18078905,0.2222976,1,-0.35617554,0.081865095,0.80626877,-0.27867109){0.86115027,1.045853,1.1585843,0.71703623}; -SS(-0.28278924,0.041190137,-0.04219563,-0.26297351,0.20404986,-0.17122089,-0.39654734,0.26661646,0.019312696,-0.13709741,0.19518884,0.034033465){0.063480395,0.12773981,0.20710489,0.040184006}; -SS(0.6902006,0.50015172,0.27072419,0.67112401,0.32933441,0.5,0.78912399,0.50423732,0.5,0.5725222,0.50074158,0.5){0.77938072,0.79210069,1.1096027,0.8121357}; -SS(-0.70236545,-0.13062851,-0.19140485,-0.61549046,-0.35581383,-0.12962263,-0.76760867,-0.33664988,-0.028298027,-0.7907607,-0.33838097,-0.28342271){0.5265969,0.50877487,0.68479998,0.80149819}; -SS(-0.7055892,-0.50616462,-0.017961589,-0.63348211,-0.7706683,-0.074889286,-0.52487586,-0.5117405,-0.017639258,-0.50537844,-0.68762812,0.023695348){0.74484897,0.97907785,0.51812974,0.71483247}; -SS(-0.36992714,1,-0.22970445,-0.58934795,0.84141567,-0.18062024,-0.35455825,0.80859576,-0.32177549,-0.38143574,0.84373572,-0.12387887){1.1684568,1.0736489,0.86460259,0.85864479}; -SS(0.59365279,0.65503723,0.24444947,0.66554141,0.67524133,0.5,0.76099919,0.76690574,0.25750996,0.55555177,0.82262944,0.31125158){0.82252715,1.1271263,1.2143065,1.0671623}; -SS(-0.49284988,-0.37485679,0.5,-0.62450053,-0.31310845,0.38575928,-0.50874333,-0.23900991,0.2620444,-0.56348952,-0.47594309,0.3052276){0.6163523,0.62379151,0.36443271,0.61776713}; -SS(0.11458044,0.70010244,0.010073529,-0.035654771,0.78507762,0.045007896,0.24404834,0.79519787,0.082231238,0.094968532,0.84539386,-0.087484586){0.49378055,0.60161266,0.68472542,0.71839764}; -SS(-0.60421932,0.82298164,0.34468578,-0.77777778,1,0.5,-0.66659408,1,0.32529585,-0.80481649,0.80494069,0.5){1.1449713,1.8407438,1.5364848,1.5232843}; -SS(-0.26986228,0.26051837,0.22418657,-0.19461387,0.3919517,0.10437587,-0.11618574,0.50328545,0.29980467,-0.11614487,0.30919383,0.33918095){0.1749353,0.19075448,0.33969293,0.20820823}; -SS(-0.48952189,0.78345034,0.019065462,-0.4433427,0.53576375,-0.12560501,-0.45563594,0.60375179,0.095527884,-0.62332411,0.59900263,-0.10904345){0.83409809,0.48429505,0.56263538,0.74800561}; -SS(0.24635331,0.35131343,-0.096025322,0.36021608,0.23247759,-0.012351094,0.13402468,0.11673163,-0.1460819,0.37137652,0.1767682,-0.19801193){0.18045455,0.16110593,0.039337265,0.19205628}; -SS(-0.80479144,0.80504612,-0.5,-1,1,-0.5,-1,0.77777778,-0.5,-1,0.83964442,-0.3309874){1.5255891,2.2287589,1.8398372,1.7979585}; -SS(-0.11614487,0.30919383,0.33918095,-0.24000819,0.17660305,0.5,-0.26986228,0.26051837,0.22418657,-0.20045203,0.067929244,0.29301468){0.20820823,0.3210912,0.1749353,0.10955402}; -SS(0.24635331,0.35131343,-0.096025322,0.08017426,0.31429474,-0.16745504,0.13261259,0.21336316,0.036566127,0.18202227,0.38279251,0.10350409){0.18045455,0.11103103,0.046199082,0.17617817}; -SS(0.09693172,0.3918681,-0.3370861,0.08017426,0.31429474,-0.16745504,0.17777709,0.54047543,-0.2567554,-0.01813809,0.53618118,-0.30537166){0.26256104,0.11103103,0.36840304,0.36567785}; -SS(-0.11754465,-0.65214472,-0.32749638,0,-0.5,-0.5,-0.14376826,-0.62489354,-0.5,-0.073421274,-0.375,-0.38984354){0.53347202,0.4845449,0.6489606,0.28201081}; -SS(-0.6293812,0.63993291,-0.28812602,-0.66548665,0.66585508,-0.5,-0.50014045,0.79673357,-0.5,-0.4813337,0.60105459,-0.5){0.87296464,1.1221664,1.1145783,0.83133251}; -SS(-0.64012388,-0.10177177,-0.37237302,-0.70236545,-0.13062851,-0.19140485,-0.7907607,-0.33838097,-0.28342271,-0.56113743,-0.28920115,-0.29204918){0.54269073,0.5265969,0.80149819,0.46850822}; -SS(-1,-0.55555556,-0.5,-0.91414606,-0.68082467,-0.37109558,-0.78315651,-0.45008839,-0.5,-0.81387526,-0.53653555,-0.3209601){1.5366945,1.4249306,1.0467962,1.0406635}; -SS(-0.0073778212,0.36022468,0.15230712,-0.10037172,0.18891947,0.20844359,-0.13709741,0.19518884,0.034033465,0.13261259,0.21336316,0.036566127){0.13675819,0.074828316,0.040184006,0.046199082}; -SS(0.24635331,0.35131343,-0.096025322,0.34662081,0.36199915,-0.25068724,0.17777709,0.54047543,-0.2567554,0.42864323,0.48543211,-0.13804456){0.18045455,0.29696992,0.36840304,0.42022283}; -SS(-0.24654336,0.57133462,-0.25396354,-0.31377045,0.30492781,-0.36427962,-0.12449617,0.36606215,-0.28273955,-0.34372617,0.39779568,-0.18541051){0.42991415,0.30770932,0.21185338,0.29650146}; -SS(0.67112401,0.32933441,0.5,0.50761134,0.34933779,0.39015973,0.5725222,0.50074158,0.5,0.6902006,0.50015172,0.27072419){0.79210069,0.51484928,0.8121357,0.77938072}; -SS(0.54326203,0.87223293,-0.356993,0.33333333,1,-0.5,0.45062041,0.7833899,-0.5,0.33386283,0.81592026,-0.31808704){1.1662147,1.342474,1.0506853,0.86115027}; -SS(0.62515059,0.14422159,0.5,0.59416595,0.14141347,0.32656529,0.42621669,0.19017509,0.30505062,0.50761134,0.34933779,0.39015973){0.64726001,0.46498444,0.29714896,0.51484928}; -SS(-0.10037172,0.18891947,0.20844359,0.13261259,0.21336316,0.036566127,0.050277172,0.20853018,0.30186362,0.13913358,0.10014326,0.18199659){0.074828316,0.046199082,0.12181545,0.045990896}; -SS(0.26064395,0.61953306,0.12890567,0.39612945,0.70614162,0.21524614,0.26138985,0.51848551,0.281015,0.47723835,0.52605258,0.30619083){0.45328252,0.68453461,0.40200156,0.58228229}; -SS(-0.66546973,0.66566005,0.5,-0.87046532,0.63071146,0.35630423,-0.76389013,0.77728265,0.25513738,-0.67801153,0.56076489,0.29217382){1.1224691,1.2666006,1.2358334,0.83617727}; -SS(0.65062064,0.64268786,0.069510863,0.8988736,0.63809662,-0.070284173,0.77861211,0.77861193,-0.067175459,0.84582719,0.572243,0.1361951){0.82620698,1.2046527,1.1981052,1.0417018}; -SS(0,0,-6.9388939e-15,-0.15128303,0.02253305,0.11422928,-0.13709741,0.19518884,0.034033465,-0.28278924,0.041190137,-0.04219563){-0.017891206,0.025420414,0.040184006,0.063480395}; -SS(-0.60421932,0.82298164,0.34468578,-0.66546973,0.66566005,0.5,-0.76389013,0.77728265,0.25513738,-0.67801153,0.56076489,0.29217382){1.1449713,1.1224691,1.2358334,0.83617727}; -SS(-0.49676106,-0.69523221,-0.26913048,-0.32879066,-0.67072359,-0.5,-0.50377808,-0.78884267,-0.5,-0.50036547,-0.57239096,-0.5){0.78043195,0.79007105,1.1087956,0.81333009}; -SS(0.050277172,0.20853018,0.30186362,0,0,0.5,0.1615172,0,0.33845519,0.12517622,0.12515553,0.5){0.12181545,0.23153294,0.13068911,0.27156885}; -SS(-0.77267892,0.13105707,-0.24874664,-0.89804207,0.11676539,-0.10792088,-0.76752638,0.004448061,-0.013214377,-0.78848723,0.26584533,-0.068869999){0.65386325,0.82300022,0.5734925,0.68151298}; -SS(0.59416595,0.14141347,0.32656529,0.70845584,0,0.20819814,0.50011436,0,0.27961788,0.46476684,0.14382827,0.12247557){0.46498444,0.52761363,0.30940041,0.23450402}; -SS(0.35689191,0.091376279,-0.36932783,0.34662081,0.36199915,-0.25068724,0.20129651,0.21389912,-0.31902192,0.37137652,0.1767682,-0.19801193){0.26145514,0.29696992,0.16839385,0.19205628}; -SS(-0.24000819,0.17660305,0.5,-0.11614487,0.30919383,0.33918095,-0.045146113,0.19012269,0.5,-0.20045203,0.067929244,0.29301468){0.3210912,0.20820823,0.27176836,0.10955402}; -SS(0.25126435,0.28098512,0.24657435,0.18202227,0.38279251,0.10350409,0.36021608,0.23247759,-0.012351094,0.13261259,0.21336316,0.036566127){0.18575023,0.17617817,0.16110593,0.046199082}; -SS(-0.45843014,-0.20445062,-0.15988901,-0.49808619,0.0026201378,-0.26387206,-0.56113743,-0.28920115,-0.29204918,-0.64012388,-0.10177177,-0.37237302){0.26094507,0.29810596,0.46850822,0.54269073}; -SS(0.69383766,0.49492178,-0.021800115,0.60662231,0.34516964,-0.13972301,0.52218723,0.46943947,0.022097553,0.42864323,0.48543211,-0.13804456){0.71284258,0.48782847,0.46892029,0.42022283}; -SS(0.74440038,0.22095066,-0.087839409,0.77315808,0.36766952,0.075951375,0.63998586,0.17856447,0.051345521,0.86971177,0.13024645,0.1427188){0.59875958,0.71793497,0.42570365,0.77797836}; -SS(-0.44431425,1,0.36245944,-0.60421932,0.82298164,0.34468578,-0.47185361,0.73769401,0.24072705,-0.30949447,0.8262402,0.33528492){1.3152029,1.1449713,0.80384956,0.87388961}; -SS(-0.12449617,0.36606215,-0.28273955,-0.24163432,0.33561251,-0.055881164,-0.096302334,0.43534175,-0.056072844,-0.34372617,0.39779568,-0.18541051){0.21185338,0.16437697,0.18078295,0.29650146}; -SS(-0.073421274,-0.375,-0.38984354,-0.23055166,-0.37480907,-0.5,-0.14376826,-0.62489354,-0.5,-0.26056819,-0.54975154,-0.34323516){0.28201081,0.41992239,0.6489606,0.46884495}; -SS(0.37501462,0.2307626,0.5,0.50761134,0.34933779,0.39015973,0.62515059,0.14422159,0.5,0.42621669,0.19017509,0.30505062){0.42590445,0.51484928,0.64726001,0.29714896}; -SS(-0.66659408,1,0.32529585,-0.77777778,1,0.5,-0.84394966,1,0.33504415,-0.80481649,0.80494069,0.5){1.5364848,1.8407438,1.8084725,1.5232843}; -SS(-0.23583358,-0.36008743,0.0071767184,-0.3727858,-0.19869367,0.11195566,-0.25897908,-0.24013326,0.26450313,-0.20656092,-0.13938028,0.029547229){0.16465457,0.16948569,0.17775565,0.048278496}; -SS(0.65062064,0.64268786,0.069510863,0.59365279,0.65503723,0.24444947,0.76099919,0.76690574,0.25750996,0.62860594,0.86645525,0.049037492){0.82620698,0.82252715,1.2143065,1.1303867}; -SS(-0.87046532,0.63071146,0.35630423,-1,0.84108515,0.33242406,-0.80481649,0.80494069,0.5,-0.76389013,0.77728265,0.25513738){1.2666006,1.8031397,1.5232843,1.2358334}; -SS(-0.11111111,1,0.5,-0.043441254,0.79173928,0.29440137,-0.014815866,1,0.31001515,0.00029730467,0.80760978,0.5){1.2487078,0.69563564,1.0772324,0.88423684}; -SS(-0.84084014,-0.14895162,0.31636914,-1,-0.11111111,0.5,-0.73174745,-0.21491043,0.5,-0.80727304,0.00024662976,0.5){0.81273381,1.2390062,0.81377033,0.88515177}; -SS(0.25,0,-0.5,0.35689191,0.091376279,-0.36932783,0.5,0,-0.5,0.37532516,0.23078833,-0.5){0.28810477,0.26145514,0.48471812,0.42551454}; -SS(-0.79227163,-0.79754897,0.0021844777,-0.77973152,-1,-0.0001062007,-0.63348211,-0.7706683,-0.074889286,-0.61978497,-0.82706917,0.12738472){1.2530106,1.588155,0.97907785,1.0681409}; -SS(0.51910919,0.22553632,-0.31417891,0.5,0,-0.5,0.6251418,0.1440922,-0.5,0.50007058,0,-0.27987971){0.40112301,0.48471812,0.63751638,0.31006895}; -SS(0.66554141,0.67524133,0.5,0.6902006,0.50015172,0.27072419,0.78912399,0.50423732,0.5,0.5725222,0.50074158,0.5){1.1271263,0.77938072,1.1096027,0.8121357}; -SS(-1,-0.70710233,0.21356199,-0.83996275,-0.66999882,0.11765553,-1,-0.47520831,0.27427507,-0.79575191,-0.55547687,0.30538166){1.5280688,1.1553131,1.2822693,1.0192798}; -SS(-0.5555987,0.045150158,0.095162244,-0.67616985,-0.069078192,0.18801024,-0.52427834,0.10778268,0.27208728,-0.72768327,0.10310141,0.33233484){0.29993682,0.47948004,0.34448415,0.63492881}; -SS(-0.78848723,0.26584533,-0.068869999,-0.58258855,0.14037208,-0.067351147,-0.7489605,0.18190923,0.13647301,-0.76752638,0.004448061,-0.013214377){0.68151298,0.34532741,0.59564173,0.5734925}; -SS(0.6657623,0.67544754,-0.5,0.51674933,0.64481281,-0.39755292,0.57309542,0.50075776,-0.5,0.67125235,0.44297685,-0.31879306){1.1304562,0.82858869,0.81773274,0.72773009}; -SS(0.87867265,0.36391919,-0.37720578,1,0.5,-0.5,0.78906409,0.5041626,-0.5,0.85153485,0.65148612,-0.35468846){1.03034,1.4840091,1.1105402,1.2568282}; -SS(-0.0073778212,0.36022468,0.15230712,-0.10037172,0.18891947,0.20844359,0.13261259,0.21336316,0.036566127,0.050277172,0.20853018,0.30186362){0.13675819,0.074828316,0.046199082,0.12181545}; -SS(-0.39806707,0.15776443,0.15870839,-0.34310942,-0.010167032,0.1509038,-0.28278924,0.041190137,-0.04219563,-0.15128303,0.02253305,0.11422928){0.19317292,0.12661586,0.063480395,0.025420414}; -SS(0.34662081,0.36199915,-0.25068724,0.24635331,0.35131343,-0.096025322,0.36021608,0.23247759,-0.012351094,0.42864323,0.48543211,-0.13804456){0.29696992,0.18045455,0.16110593,0.42022283}; -SS(0.24635331,0.35131343,-0.096025322,0.30434906,0.49798107,-4.0114635e-05,0.36021608,0.23247759,-0.012351094,0.42864323,0.48543211,-0.13804456){0.18045455,0.32377482,0.16110593,0.42022283}; -SS(-0.55555556,1,0.5,-0.60421932,0.82298164,0.34468578,-0.77777778,1,0.5,-0.66659408,1,0.32529585){1.5418081,1.1449713,1.8407438,1.5364848}; -SS(-0.15923414,-0.34171533,-0.15079999,0,-0.49997234,-0.27965571,-0.18618058,-0.5161726,-0.15035515,-0.073421274,-0.375,-0.38984354){0.14783141,0.30906942,0.30914003,0.28201081}; -SS(-0.15923414,-0.34171533,-0.15079999,0,-0.22019801,5.0496855e-05,-0.23583358,-0.36008743,0.0071767184,-0.10133362,-0.40777162,0.1162396){0.14783141,0.029059683,0.16465457,0.17697987}; -SS(0.11458044,0.70010244,0.010073529,0.30434906,0.49798107,-4.0114635e-05,0.25248643,0.73785598,-0.13082591,0.26064395,0.61953306,0.12890567){0.49378055,0.32377482,0.60350215,0.45328252}; -SS(0.46476684,0.14382827,0.12247557,0.36021608,0.23247759,-0.012351094,0.63998586,0.17856447,0.051345521,0.57129187,0.13526053,-0.13726946){0.23450402,0.16110593,0.42570365,0.35115136}; -SS(1,0.5,-0.5,0.87867265,0.36391919,-0.37720578,1,0.50010355,-0.27968748,0.85153485,0.65148612,-0.35468846){1.4840091,1.03034,1.3071084,1.2568282}; -SS(0.49866453,0.63973666,-0.21510859,0.54326203,0.87223293,-0.356993,0.33386283,0.81592026,-0.31808704,0.54700908,0.85955032,-0.16345766){0.68344633,1.1662147,0.86115027,1.0528061}; -SS(0.26138985,0.51848551,0.281015,0.26064395,0.61953306,0.12890567,0.47723835,0.52605258,0.30619083,0.36016656,0.41044152,0.1594367){0.40200156,0.45328252,0.58228229,0.3073722}; -SS(-0.50537844,-0.68762812,0.023695348,-0.35582611,-0.64426575,-0.070000747,-0.42889738,-0.75253072,0.17523232,-0.36608751,-0.8951802,0.074405883){0.71483247,0.52757348,0.75958282,0.92652515}; -SS(-0.11111111,1,0.5,-0.043441254,0.79173928,0.29440137,0.00029730467,0.80760978,0.5,-0.1827732,0.83017807,0.5){1.2487078,0.69563564,0.88423684,0.95598938}; -SS(-0.89663862,-0.69397302,0.37275403,-1,-0.55555556,0.5,-0.78327322,-0.45013966,0.5,-0.79575191,-0.55547687,0.30538166){1.4119512,1.5359657,1.0435491,1.0192798}; -SS(-0.056808231,0.14323286,-0.13367928,0,0,-6.9388939e-15,-0.13709741,0.19518884,0.034033465,-0.28278924,0.041190137,-0.04219563){0.022140076,-0.017891206,0.040184006,0.063480395}; -SS(-0.39806707,0.15776443,0.15870839,-0.26986228,0.26051837,0.22418657,-0.20045203,0.067929244,0.29301468,-0.15128303,0.02253305,0.11422928){0.19317292,0.1749353,0.10955402,0.025420414}; -SS(0,-0.29157012,0.20836692,-0.16643696,-0.21791406,0.42402077,-0.25897908,-0.24013326,0.26450313,-0.1853821,-0.42358473,0.30866054){0.11172813,0.23818505,0.17775565,0.29143101}; -SS(-0.32064519,0.49448821,1.4739833e-06,-0.34372617,0.39779568,-0.18541051,-0.39654734,0.26661646,0.019312696,-0.54631436,0.45612147,-0.00074796238){0.32892635,0.29650146,0.20710489,0.48593017}; -SS(-0.36608751,-0.8951802,0.074405883,-0.35582611,-0.64426575,-0.070000747,-0.42889738,-0.75253072,0.17523232,-0.22302806,-0.77703925,0.068353305){0.92652515,0.52757348,0.75958282,0.64063544}; -SS(-0.0089783977,0.64320989,-0.13441642,-0.01813809,0.53618118,-0.30537166,-0.24654336,0.57133462,-0.25396354,-0.14847812,0.78021305,-0.27623142){0.41358858,0.36567785,0.42991415,0.68882385}; -SS(0.60662231,0.34516964,-0.13972301,0.67125235,0.44297685,-0.31879306,0.77491511,0.22516452,-0.26425516,0.51910919,0.22553632,-0.31417891){0.48782847,0.72773009,0.70313431,0.40112301}; -SS(-0.88905946,-0.098697315,-0.13184676,-0.70236545,-0.13062851,-0.19140485,-0.7907607,-0.33838097,-0.28342271,-0.85707128,-0.1416783,-0.34083416){0.8023886,0.5265969,0.80149819,0.85441326}; -SS(-0.31377045,0.30492781,-0.36427962,-0.41651431,0.41690828,-0.5,-0.40408872,0.18166381,-0.5,-0.49391083,0.27907498,-0.27264436){0.30770932,0.57523437,0.42526168,0.37398026}; -SS(-0.80632325,-0.81147186,-0.5,-0.91414606,-0.68082467,-0.37109558,-1,-0.83959635,-0.33115777,-0.76546557,-0.72634686,-0.27513208){1.5409894,1.4249306,1.7998257,1.1696133}; -SS(-0.7489605,0.18190923,0.13647301,-0.5555987,0.045150158,0.095162244,-0.52427834,0.10778268,0.27208728,-0.72768327,0.10310141,0.33233484){0.59564173,0.29993682,0.34448415,0.63492881}; -SS(0.87272604,0.35900693,0.37172569,1,0.16158711,0.33859063,0.81143387,0.18901581,0.5,0.73568363,0.23203612,0.2735765){1.0107603,1.1259698,0.9265446,0.6509231}; -SS(-0.49808619,0.0026201378,-0.26387206,-0.45843014,-0.20445062,-0.15988901,-0.56113743,-0.28920115,-0.29204918,-0.38492375,-0.20017574,-0.33650716){0.29810596,0.26094507,0.46850822,0.28705324}; -SS(-1,-0.25140376,-0.1934451,-0.88905946,-0.098697315,-0.13184676,-0.7907607,-0.33838097,-0.28342271,-0.85707128,-0.1416783,-0.34083416){1.0790534,0.8023886,0.80149819,0.85441326}; -SS(-0.70236545,-0.13062851,-0.19140485,-0.45843014,-0.20445062,-0.15988901,-0.56113743,-0.28920115,-0.29204918,-0.64012388,-0.10177177,-0.37237302){0.5265969,0.26094507,0.46850822,0.54269073}; -SS(0.48047723,0.47791267,-0.33071402,0.60662231,0.34516964,-0.13972301,0.34662081,0.36199915,-0.25068724,0.51910919,0.22553632,-0.31417891){0.55795418,0.48782847,0.29696992,0.40112301}; -SS(-0.82285362,-0.63420593,-0.0683896,-0.65956212,-0.52273243,-0.19262862,-0.63348211,-0.7706683,-0.074889286,-0.76546557,-0.72634686,-0.27513208){1.0691297,0.7287475,0.97907785,1.1696133}; -SS(-0.4182056,0.11248126,-0.14182463,-0.26297351,0.20404986,-0.17122089,-0.49391083,0.27907498,-0.27264436,-0.34372617,0.39779568,-0.18541051){0.19428145,0.12773981,0.37398026,0.29650146}; -SS(-0.85520613,-0.46088631,-0.14784569,-1,-0.70523324,-0.21165758,-1,-0.47540235,-0.27521785,-0.81387526,-0.53653555,-0.3209601){0.95161001,1.5222776,1.2841965,1.0406635}; -SS(-0.30131805,-0.11512588,-0.5,-0.1971424,-0.26981885,-0.30750196,-0.23055166,-0.37480907,-0.5,-0.12484866,-0.12486094,-0.5){0.3368451,0.19280289,0.41992239,0.26766045}; -SS(-0.67616985,-0.069078192,0.18801024,-0.5555987,0.045150158,0.095162244,-0.7489605,0.18190923,0.13647301,-0.72768327,0.10310141,0.33233484){0.47948004,0.29993682,0.59564173,0.63492881}; -SS(-0.10037172,0.18891947,0.20844359,0,0,0.25,0.050277172,0.20853018,0.30186362,-0.20045203,0.067929244,0.29301468){0.074828316,0.045060365,0.12181545,0.10955402}; -SS(0.8988736,0.63809662,-0.070284173,1,0.70844226,-0.20827687,1,0.50010355,-0.27968748,0.75922048,0.56990614,-0.17060419){1.2046527,1.5310675,1.3071084,0.91133836}; -SS(0.52843461,0.32737897,0.19102935,0.63998586,0.17856447,0.051345521,0.77315808,0.36766952,0.075951375,0.73568363,0.23203612,0.2735765){0.40790135,0.42570365,0.71793497,0.6509231}; -SS(-0.80635543,-0.81164184,0.5,-1,-1,0.5,-1,-0.84092895,0.33252059,-0.8385203,-1,0.33846229){1.5410993,2.2322143,1.8030746,1.8024192}; -SS(-0.5,-1,0.5,-0.63815223,-0.88141187,0.37488811,-0.50400314,-0.78879927,0.5,-0.349759,-0.84853211,0.35590634){1.4840089,1.3088768,1.1086821,0.94981364}; -SS(-0.77091496,-0.77159441,0.2629049,-1,-0.84092895,0.33252059,-0.8385203,-1,0.33846229,-0.80635543,-0.81164184,0.5){1.2433034,1.8030746,1.8024192,1.5410993}; -SS(-0.47972312,1,0.18932995,-0.30949447,0.8262402,0.33528492,-0.44431425,1,0.36245944,-0.47185361,0.73769401,0.24072705){1.2473472,0.87388961,1.3152029,0.80384956}; -SS(0.36016656,0.41044152,0.1594367,0.52843461,0.32737897,0.19102935,0.42621669,0.19017509,0.30505062,0.46476684,0.14382827,0.12247557){0.3073722,0.40790135,0.29714896,0.23450402}; -SS(-0.11754465,-0.65214472,-0.32749638,-0.14376826,-0.62489354,-0.5,-0.26056819,-0.54975154,-0.34323516,-0.073421274,-0.375,-0.38984354){0.53347202,0.6489606,0.46884495,0.28201081}; -SS(0.33333333,1,-0.5,0.54326203,0.87223293,-0.356993,0.43683247,1,-0.26068681,0.33386283,0.81592026,-0.31808704){1.342474,1.1662147,1.2435523,0.86115027}; -SS(-0.65631386,-0.59724887,0.13822882,-0.7055892,-0.50616462,-0.017961589,-0.63348211,-0.7706683,-0.074889286,-0.82285362,-0.63420593,-0.0683896){0.7890621,0.74484897,0.97907785,1.0691297}; -SS(-0.63815223,-0.88141187,0.37488811,-0.5,-1,0.5,-0.4999534,-1,0.27968311,-0.349759,-0.84853211,0.35590634){1.3088768,1.4840089,1.3075402,0.94981364}; -SS(-0.30131805,-0.11512588,-0.5,-0.38492375,-0.20017574,-0.33650716,-0.23055166,-0.37480907,-0.5,-0.1971424,-0.26981885,-0.30750196){0.3368451,0.28705324,0.41992239,0.19280289}; -SS(0.10162062,0.65400865,-0.37913628,-0.0089783977,0.64320989,-0.13441642,0.081865095,0.80626877,-0.27867109,-0.01813809,0.53618118,-0.30537166){0.5665506,0.41358858,0.71703623,0.36567785}; -SS(-0.64012388,-0.10177177,-0.37237302,-0.49808619,0.0026201378,-0.26387206,-0.56113743,-0.28920115,-0.29204918,-0.38492375,-0.20017574,-0.33650716){0.54269073,0.29810596,0.46850822,0.28705324}; -SS(-0.10037172,0.18891947,0.20844359,-0.045146113,0.19012269,0.5,0.050277172,0.20853018,0.30186362,-0.11614487,0.30919383,0.33918095){0.074828316,0.27176836,0.12181545,0.20820823}; -SS(0.77491511,0.22516452,-0.26425516,0.671223,0.32907594,-0.5,0.81149777,0.18885984,-0.5,0.6251418,0.1440922,-0.5){0.70313431,0.79435762,0.92750237,0.63751638}; -SS(-0.4581749,-0.5263483,-0.32801665,-0.65956212,-0.52273243,-0.19262862,-0.56113743,-0.28920115,-0.29204918,-0.62341011,-0.46880832,-0.38153973){0.57811658,0.7287475,0.46850822,0.73807879}; -SS(0.62860594,0.86645525,0.049037492,0.68985253,1,-0.19792707,0.78186447,1,3.3673518e-05,0.77861211,0.77861193,-0.067175459){1.1303867,1.495304,1.5923176,1.1981052}; -SS(0.050277172,0.20853018,0.30186362,0,0,0.5,0,0,0.25,0.1615172,0,0.33845519){0.12181545,0.23153294,0.045060365,0.13068911}; -SS(-0.89646962,-0.32955067,0.34017365,-1,-0.33333333,0.5,-1,-0.55555556,0.5,-0.78327322,-0.45013966,0.5){1.0133061,1.3443603,1.5359657,1.0435491}; -SS(-0.49292178,-0.37477565,-0.5,-0.4581749,-0.5263483,-0.32801665,-0.36174,-0.40052234,-0.23665811,-0.56113743,-0.28920115,-0.29204918){0.6115465,0.57811658,0.32480953,0.46850822}; -SS(1,0.70844226,-0.20827687,0.85153485,0.65148612,-0.35468846,1,0.50010355,-0.27968748,0.75922048,0.56990614,-0.17060419){1.5310675,1.2568282,1.3071084,0.91133836}; -SS(0.25248643,0.73785598,-0.13082591,0.10162062,0.65400865,-0.37913628,0.17777709,0.54047543,-0.2567554,0.081865095,0.80626877,-0.27867109){0.60350215,0.5665506,0.36840304,0.71703623}; -SS(0.5725222,0.50074158,0.5,0.59365279,0.65503723,0.24444947,0.6902006,0.50015172,0.27072419,0.47723835,0.52605258,0.30619083){0.8121357,0.82252715,0.77938072,0.58228229}; -SS(-0.88905946,-0.098697315,-0.13184676,-1,-0.20076836,0.00061221676,-0.76760867,-0.33664988,-0.028298027,-0.82279039,-0.18997945,0.10657137){0.8023886,1.0172898,0.68479998,0.70945047}; -SS(-1,-1,-0.5,-0.80632325,-0.81147186,-0.5,-1,-0.83959635,-0.33115777,-0.83846289,-1,-0.33858677){2.2321573,1.5409894,1.7998257,1.8019179}; -SS(-0.79227163,-0.79754897,0.0021844777,-0.65631386,-0.59724887,0.13822882,-0.63348211,-0.7706683,-0.074889286,-0.82285362,-0.63420593,-0.0683896){1.2530106,0.7890621,0.97907785,1.0691297}; -SS(-0.29168215,-1,-0.20844865,-0.12233239,-0.87748906,-0.13583418,-0.2399131,-0.76005145,-0.25989531,-0.42066299,-0.84356131,-0.12906413){1.1132023,0.78823805,0.6848256,0.88525127}; -SS(1,0.16158711,0.33859063,0.86971177,0.13024645,0.1427188,0.83866368,0,0.33843958,0.73568363,0.23203612,0.2735765){1.1259698,0.77797836,0.80106313,0.6509231}; -SS(-0.17603462,0.24070348,-0.5,-0.31377045,0.30492781,-0.36427962,-0.29413589,0.046284299,-0.31274881,-0.1182182,0.15955837,-0.3159857){0.32537509,0.30770932,0.1681493,0.11990198}; -SS(0.17426348,1,-0.18078905,0.094968532,0.84539386,-0.087484586,-0.088882135,1,-0.23281641,0.081865095,0.80626877,-0.27867109){1.045853,0.71839764,1.0431215,0.71703623}; -SS(0.13402468,0.11673163,-0.1460819,0.22032809,0,-9.1119885e-05,0.36021608,0.23247759,-0.012351094,0.13261259,0.21336316,0.036566127){0.039337265,0.027339551,0.16110593,0.046199082}; -SS(-0.60421932,0.82298164,0.34468578,-0.44431425,1,0.36245944,-0.50037,0.79662088,0.5,-0.30949447,0.8262402,0.33528492){1.1449713,1.3152029,1.1183194,0.87388961}; -SS(-0.54640726,0.34339216,0.19847863,-0.63246299,0.29145388,0.035195127,-0.79172217,0.43302343,0.13373134,-0.54631436,0.45612147,-0.00074796238){0.43575493,0.47226275,0.80968993,0.48593017}; -SS(0.68966181,1,0.19790566,0.62860594,0.86645525,0.049037492,0.76099919,0.76690574,0.25750996,0.55555177,0.82262944,0.31125158){1.492557,1.1303867,1.2143065,1.0671623}; -SS(1,1,-0.5,0.77777778,1,-0.5,0.81205362,0.80656044,-0.5,0.82865019,1,-0.3214153){2.2331531,1.8341362,1.5391707,1.7714679}; -SS(-0.36992714,1,-0.22970445,-0.58934795,0.84141567,-0.18062024,-0.56041637,1,-0.29784853,-0.35455825,0.80859576,-0.32177549){1.1684568,1.0736489,1.3856141,0.86460259}; -SS(-0.8068077,0.56885008,-0.063754108,-1,0.70529035,-0.21162945,-0.74249217,0.75399014,-0.15399718,-0.80558396,0.5878127,-0.29244037){0.96112076,1.520296,1.1267767,1.0616703}; -SS(-0.89426176,0.41257007,-0.12932618,-1,0.49991607,0.0031934521,-1,0.29928494,0.0012550607,-0.79172217,0.43302343,0.13373134){0.974079,1.2302733,1.0718665,0.80968993}; -SS(-0.67495489,-0.6652659,-0.5,-0.49676106,-0.69523221,-0.26913048,-0.50377808,-0.78884267,-0.5,-0.50036547,-0.57239096,-0.5){1.1276355,0.78043195,1.1087956,0.81333009}; -SS(-0.66546973,0.66566005,0.5,-0.60421932,0.82298164,0.34468578,-0.50037,0.79662088,0.5,-0.48141868,0.60085372,0.5){1.1224691,1.1449713,1.1183194,0.82306978}; -SS(-0.30949447,0.8262402,0.33528492,-0.33333333,1,0.5,-0.3132159,0.69976014,0.5,-0.1827732,0.83017807,0.5){0.87388961,1.3433112,0.82050522,0.95598938}; -SS(-0.58934795,0.84141567,-0.18062024,-0.61115597,1,-0.10200355,-0.76988954,1,-0.26944904,-0.81095336,1,-0.07156149){1.0736489,1.3611038,1.6463902,1.6471359}; -SS(-1,0.77631186,0.00053339564,-0.8480722,0.62150313,0.12164012,-0.8068077,0.56885008,-0.063754108,-0.79370724,0.81084643,0.045877226){1.5817554,1.1084494,0.96112076,1.270911}; -SS(-0.89962374,0.8609561,-0.16698164,-1,0.77631186,0.00053339564,-0.74249217,0.75399014,-0.15399718,-0.79370724,0.81084643,0.045877226){1.5692753,1.5817554,1.1267767,1.270911}; -SS(1,1,0.5,0.77777778,1,0.5,0.82853688,1,0.32125076,0.81191124,0.80644944,0.5){2.2317116,1.8450917,1.7703132,1.5425973}; -SS(0.21512427,0.73211919,0.5,0.10211023,0.6404511,0.38011645,0.00029730467,0.80760978,0.5,0.22886345,0.79287946,0.30210005){0.81521474,0.55160362,0.88423684,0.75332396}; -SS(0.26064395,0.61953306,0.12890567,0.39612945,0.70614162,0.21524614,0.47723835,0.52605258,0.30619083,0.36016656,0.41044152,0.1594367){0.45328252,0.68453461,0.58228229,0.3073722}; -SS(0.34662081,0.36199915,-0.25068724,0.35689191,0.091376279,-0.36932783,0.51910919,0.22553632,-0.31417891,0.37137652,0.1767682,-0.19801193){0.29696992,0.26145514,0.40112301,0.19205628}; -SS(-0.19247216,-0.56000521,0.088357129,0,-0.7082575,0.2084616,-0.22656331,-0.68065623,0.28194433,-0.22302806,-0.77703925,0.068353305){0.34206231,0.52387062,0.57683818,0.64063544}; -SS(-0.45843014,-0.20445062,-0.15988901,-0.70236545,-0.13062851,-0.19140485,-0.49808619,0.0026201378,-0.26387206,-0.64012388,-0.10177177,-0.37237302){0.26094507,0.5265969,0.29810596,0.54269073}; -SS(-0.54640726,0.34339216,0.19847863,-0.61674646,0.25215289,0.3447871,-0.7489605,0.18190923,0.13647301,-0.52427834,0.10778268,0.27208728){0.43575493,0.54607287,0.59564173,0.34448415}; -SS(-0.83851866,0.33014205,0.32623765,-1,0.24865949,0.19540364,-1,0.4752276,0.27420758,-0.79172217,0.43302343,0.13373134){0.89937894,1.0814407,1.2803563,0.80968993}; -SS(-0.20984637,0.69532212,0.20809493,-0.098708274,0.55956225,0.10505678,-0.2401666,0.74114092,-0.051302261,-0.035654771,0.78507762,0.045007896){0.55022745,0.31633913,0.58653028,0.60161266}; -SS(0,0,-6.9388939e-15,-0.10037172,0.18891947,0.20844359,-0.13709741,0.19518884,0.034033465,-0.15128303,0.02253305,0.11422928){-0.017891206,0.074828316,0.040184006,0.025420414}; -SS(0.50010751,0,-0.00013054911,0.37137652,0.1767682,-0.19801193,0.36021608,0.23247759,-0.012351094,0.57129187,0.13526053,-0.13726946){0.22823279,0.19205628,0.16110593,0.35115136}; -SS(-0.79644003,0.50064951,-0.5,-0.63048479,0.37587985,-0.34368186,-0.80558396,0.5878127,-0.29244037,-0.83127473,0.33505962,-0.32026923){1.115532,0.64388066,1.0616703,0.89071695}; -SS(-0.50377808,-0.78884267,-0.5,-0.36340067,-0.87821042,-0.37678589,-0.49676106,-0.69523221,-0.26913048,-0.6448883,-0.87343314,-0.36731947){1.1087956,1.0307746,0.78043195,1.296688}; -SS(1,0.2203628,5.6826691e-05,0.74440038,0.22095066,-0.087839409,0.77315808,0.36766952,0.075951375,0.82562789,0.37565656,-0.12707714){1.0268649,0.59875958,0.71793497,0.82387041}; -SS(-0.17097214,0.64900986,-0.39927747,-0.31289368,0.69974287,-0.5,-0.20381263,0.45499536,-0.5,-0.39032311,0.63241857,-0.34621958){0.59741335,0.82323564,0.478983,0.65630059}; -SS(-0.20984637,0.69532212,0.20809493,-0.16015893,0.67694077,0.39025863,-0.11618574,0.50328545,0.29980467,-0.043441254,0.79173928,0.29440137){0.55022745,0.6265216,0.33969293,0.69563564}; -SS(0.29175541,0,0.20824909,0.26083053,0.15082484,0.37728795,0.50011436,0,0.27961788,0.42621669,0.19017509,0.30505062){0.1093371,0.21918499,0.30940041,0.29714896}; -SS(-0.80728146,0.00010990719,-0.5,-0.62938155,0.17932964,-0.37445272,-0.82994199,0.18319278,-0.5,-0.77267892,0.13105707,-0.24874664){0.88195685,0.55109073,0.95993957,0.65386325}; -SS(0.57129187,0.13526053,-0.13726946,0.50010751,0,-0.00013054911,0.77985819,0,-0.00014691753,0.63998586,0.17856447,0.051345521){0.35115136,0.22823279,0.58919206,0.42570365}; -SS(-0.61549046,-0.35581383,-0.12962263,-0.50159539,-0.29258506,7.2987381e-06,-0.36174,-0.40052234,-0.23665811,-0.45843014,-0.20445062,-0.15988901){0.50877487,0.32068114,0.32480953,0.26094507}; -SS(-0.24163432,0.33561251,-0.055881164,-0.32064519,0.49448821,1.4739833e-06,-0.096302334,0.43534175,-0.056072844,-0.34372617,0.39779568,-0.18541051){0.16437697,0.32892635,0.18078295,0.29650146}; -SS(-0.26056819,-0.54975154,-0.34323516,-0.23055166,-0.37480907,-0.5,-0.36174,-0.40052234,-0.23665811,-0.1971424,-0.26981885,-0.30750196){0.46884495,0.41992239,0.32480953,0.19280289}; -SS(0.25126435,0.28098512,0.24657435,0.36016656,0.41044152,0.1594367,0.42621669,0.19017509,0.30505062,0.46476684,0.14382827,0.12247557){0.18575023,0.3073722,0.29714896,0.23450402}; -SS(0.27170325,0.36204749,-0.4201745,0.37532516,0.23078833,-0.5,0.34662081,0.36199915,-0.25068724,0.20129651,0.21389912,-0.31902192){0.36885377,0.42551454,0.29696992,0.16839385}; -SS(0.18202227,0.38279251,0.10350409,-0.0073778212,0.36022468,0.15230712,0.13261259,0.21336316,0.036566127,0.050277172,0.20853018,0.30186362){0.17617817,0.13675819,0.046199082,0.12181545}; -SS(-0.60421932,0.82298164,0.34468578,-0.47185361,0.73769401,0.24072705,-0.76389013,0.77728265,0.25513738,-0.61311838,0.85766427,0.15491279){1.1449713,0.80384956,1.2358334,1.1216468}; -SS(0.25126435,0.28098512,0.24657435,0.18202227,0.38279251,0.10350409,0.13261259,0.21336316,0.036566127,0.050277172,0.20853018,0.30186362){0.18575023,0.17617817,0.046199082,0.12181545}; -SS(-0.16707278,-0.087678023,-0.31121894,0,0,-0.5,-0.19007896,0.04567822,-0.5,-0.1182182,0.15955837,-0.3159857){0.11599041,0.23465449,0.27736807,0.11990198}; -SS(-0.81387526,-0.53653555,-0.3209601,-1,-0.70523324,-0.21165758,-0.76546557,-0.72634686,-0.27513208,-0.82285362,-0.63420593,-0.0683896){1.0406635,1.5222776,1.1696133,1.0691297}; -SS(-0.29157863,-1,0.20827581,-0.36608751,-0.8951802,0.074405883,-0.4999534,-1,0.27968311,-0.349759,-0.84853211,0.35590634){1.1139248,0.92652515,1.3075402,0.94981364}; -SS(0.37549445,0.49317282,-0.5,0.51674933,0.64481281,-0.39755292,0.45062041,0.7833899,-0.5,0.34412919,0.6158316,-0.3427703){0.61648995,0.82858869,1.0506853,0.59958408}; -SS(0.68985253,1,-0.19792707,0.54700908,0.85955032,-0.16345766,0.77861211,0.77861193,-0.067175459,0.62860594,0.86645525,0.049037492){1.495304,1.0528061,1.1981052,1.1303867}; -SS(0.25126435,0.28098512,0.24657435,0.27123349,0.36190713,0.41476339,0.42621669,0.19017509,0.30505062,0.50761134,0.34933779,0.39015973){0.18575023,0.36300231,0.29714896,0.51484928}; -SS(0.87272604,0.35900693,0.37172569,0.67112401,0.32933441,0.5,0.78912399,0.50423732,0.5,0.6902006,0.50015172,0.27072419){1.0107603,0.79210069,1.1096027,0.77938072}; -SS(-0.37661764,-0.26006406,0.40868766,-0.49284988,-0.37485679,0.5,-0.50874333,-0.23900991,0.2620444,-0.56348952,-0.47594309,0.3052276){0.36234206,0.6163523,0.36443271,0.61776713}; -SS(-0.83248216,0.76782327,-0.31292259,-0.80479144,0.80504612,-0.5,-0.76988954,1,-0.26944904,-0.65756371,0.81308934,-0.3429452){1.366757,1.5255891,1.6463902,1.1958888}; -SS(-0.73479965,-0.34302295,0.24038072,-0.62450053,-0.31310845,0.38575928,-0.50874333,-0.23900991,0.2620444,-0.64009684,-0.10188458,0.37412975){0.69668046,0.62379151,0.36443271,0.54631619}; -SS(-0.39806707,0.15776443,0.15870839,-0.54640726,0.34339216,0.19847863,-0.26986228,0.26051837,0.22418657,-0.39654734,0.26661646,0.019312696){0.19317292,0.43575493,0.1749353,0.20710489}; -SS(-0.70823063,-1,-0.20843533,-0.6448883,-0.87343314,-0.36731947,-0.83846289,-1,-0.33858677,-0.76546557,-0.72634686,-0.27513208){1.5240742,1.296688,1.8019179,1.1696133}; -SS(-0.36340067,-0.87821042,-0.37678589,-0.32879066,-0.67072359,-0.5,-0.50377808,-0.78884267,-0.5,-0.49676106,-0.69523221,-0.26913048){1.0307746,0.79007105,1.1087956,0.78043195}; -SS(-0.70236545,-0.13062851,-0.19140485,-0.45843014,-0.20445062,-0.15988901,-0.49808619,0.0026201378,-0.26387206,-0.4720473,-0.063494476,-0.036829327){0.5265969,0.26094507,0.29810596,0.21285629}; -SS(0,0,-0.5,-0.16707278,-0.087678023,-0.31121894,0,0,-0.25,-0.1182182,0.15955837,-0.3159857){0.23465449,0.11599041,0.044304329,0.11990198}; -SS(-0.65756371,0.81308934,-0.3429452,-0.77777778,1,-0.5,-0.80479144,0.80504612,-0.5,-0.76988954,1,-0.26944904){1.1958888,1.8319852,1.5255891,1.6463902}; -SS(-0.4999534,-1,0.27968311,-0.36608751,-0.8951802,0.074405883,-0.42889738,-0.75253072,0.17523232,-0.349759,-0.84853211,0.35590634){1.3075402,0.92652515,0.75958282,0.94981364}; -SS(-1,0.33333333,0.5,-0.83851866,0.33014205,0.32623765,-0.69937107,0.31347586,0.5,-0.83006559,0.18329805,0.5){1.3403692,0.89937894,0.8165723,0.96159482}; -SS(0.6657623,0.67544754,-0.5,0.85153485,0.65148612,-0.35468846,0.78906409,0.5041626,-0.5,0.81205362,0.80656044,-0.5){1.1304562,1.2568282,1.1105402,1.5391707}; -SS(0.70845584,0,0.20819814,0.59416595,0.14141347,0.32656529,0.63998586,0.17856447,0.051345521,0.46476684,0.14382827,0.12247557){0.52761363,0.46498444,0.42570365,0.23450402}; -SS(-1,0.49991607,0.0031934521,-0.8480722,0.62150313,0.12164012,-1,0.4752276,0.27420758,-0.79172217,0.43302343,0.13373134){1.2302733,1.1084494,1.2803563,0.80968993}; -SS(-0.80481649,0.80494069,0.5,-1,1,0.5,-0.84394966,1,0.33504415,-1,0.84108515,0.33242406){1.5232843,2.2338249,1.8084725,1.8031397}; -SS(0.098704003,0.67249079,0.1943501,0.11458044,0.70010244,0.010073529,-0.035654771,0.78507762,0.045007896,0.24404834,0.79519787,0.082231238){0.47957633,0.49378055,0.60161266,0.68472542}; -SS(0,0,-0.25,0.13402468,0.11673163,-0.1460819,0.16149165,0,-0.33864688,0.20129651,0.21389912,-0.31902192){0.044304329,0.039337265,0.12746835,0.16839385}; -SS(-0.17097214,0.64900986,-0.39927747,-0.20381263,0.45499536,-0.5,-0.24654336,0.57133462,-0.25396354,-0.39032311,0.63241857,-0.34621958){0.59741335,0.478983,0.42991415,0.65630059}; -SS(-0.63246299,0.29145388,0.035195127,-0.58258855,0.14037208,-0.067351147,-0.39654734,0.26661646,0.019312696,-0.5555987,0.045150158,0.095162244){0.47226275,0.34532741,0.20710489,0.29993682}; -SS(-0.86742481,-0.86548068,-0.14483364,-0.70823063,-1,-0.20843533,-0.83846289,-1,-0.33858677,-0.76546557,-0.72634686,-0.27513208){1.5085891,1.5240742,1.8019179,1.1696133}; -SS(-0.10133362,-0.40777162,0.1162396,0,-0.22019801,5.0496855e-05,-0.23583358,-0.36008743,0.0071767184,-0.20656092,-0.13938028,0.029547229){0.17697987,0.029059683,0.16465457,0.048278496}; -SS(0.17426348,1,-0.18078905,0.34720309,0.90097601,-0.12745168,0.25248643,0.73785598,-0.13082591,0.33386283,0.81592026,-0.31808704){1.045853,0.93504792,0.60350215,0.86115027}; -SS(0.87881231,0.64063264,0.37220388,0.66554141,0.67524133,0.5,0.78912399,0.50423732,0.5,0.81191124,0.80644944,0.5){1.3069719,1.1271263,1.1096027,1.5425973}; -SS(-0.4720473,-0.063494476,-0.036829327,-0.5555987,0.045150158,0.095162244,-0.76752638,0.004448061,-0.013214377,-0.65367362,-0.16081953,0.0014934597){0.21285629,0.29993682,0.5734925,0.4344691}; -SS(-0.1853821,-0.42358473,0.30866054,0,-0.5,0.5,-0.23048975,-0.37484721,0.5,-0.14394692,-0.62481063,0.5){0.29143101,0.48207879,0.42714666,0.63866347}; -SS(0.87881231,0.64063264,0.37220388,0.78912399,0.50423732,0.5,0.6902006,0.50015172,0.27072419,0.87272604,0.35900693,0.37172569){1.3069719,1.1096027,0.77938072,1.0107603}; -SS(-0.6448883,-0.87343314,-0.36731947,-0.67495489,-0.6652659,-0.5,-0.50377808,-0.78884267,-0.5,-0.80632325,-0.81147186,-0.5){1.296688,1.1276355,1.1087956,1.5409894}; -SS(-0.41648151,0.41684878,0.5,-0.52470763,0.46530444,0.33754711,-0.41843781,0.30742585,0.3397996,-0.61674646,0.25215289,0.3447871){0.58097186,0.59371518,0.37011438,0.54607287}; -SS(-0.6448883,-0.87343314,-0.36731947,-0.80632325,-0.81147186,-0.5,-0.83846289,-1,-0.33858677,-0.76546557,-0.72634686,-0.27513208){1.296688,1.5409894,1.8019179,1.1696133}; -SS(0.36841015,0.87909734,0.37310922,0.33333333,1,0.5,0.21512427,0.73211919,0.5,0.45042372,0.78359022,0.5){1.0362544,1.3466764,0.81521474,1.0496179}; -SS(-0.3533559,-0.49437708,0.037576204,-0.36174,-0.40052234,-0.23665811,-0.23583358,-0.36008743,0.0071767184,-0.18618058,-0.5161726,-0.15035515){0.35575629,0.32480953,0.16465457,0.30914003}; -SS(0.59416595,0.14141347,0.32656529,0.5,0,0.5,0.62515059,0.14422159,0.5,0.42621669,0.19017509,0.30505062){0.46498444,0.47735984,0.64726001,0.29714896}; -SS(-0.70236545,-0.13062851,-0.19140485,-0.88905946,-0.098697315,-0.13184676,-0.76760867,-0.33664988,-0.028298027,-0.65367362,-0.16081953,0.0014934597){0.5265969,0.8023886,0.68479998,0.4344691}; -SS(-0.54640726,0.34339216,0.19847863,-0.63246299,0.29145388,0.035195127,-0.7489605,0.18190923,0.13647301,-0.79172217,0.43302343,0.13373134){0.43575493,0.47226275,0.59564173,0.80968993}; -SS(0.35689191,0.091376279,-0.36932783,0.5,0,-0.5,0.6251418,0.1440922,-0.5,0.51910919,0.22553632,-0.31417891){0.26145514,0.48471812,0.63751638,0.40112301}; -SS(-0.76988954,1,-0.26944904,-0.58934795,0.84141567,-0.18062024,-0.81095336,1,-0.07156149,-0.74249217,0.75399014,-0.15399718){1.6463902,1.0736489,1.6471359,1.1267767}; -SS(0.11583535,0.30145324,-0.5,0.09693172,0.3918681,-0.3370861,-0.029932551,0.40748663,-0.5,-0.010543702,0.17712261,-0.5){0.33954703,0.26256104,0.4038008,0.25750364}; -SS(-0.41648151,0.41684878,0.5,-0.41843781,0.30742585,0.3397996,-0.24000819,0.17660305,0.5,-0.4543958,0.20406131,0.5){0.58097186,0.37011438,0.3210912,0.48353653}; -SS(-0.67513028,-0.66529728,0.5,-0.63815223,-0.88141187,0.37488811,-0.50400314,-0.78879927,0.5,-0.80635543,-0.81164184,0.5){1.1284607,1.3088768,1.1086821,1.5410993}; -SS(-0.36145429,0.13293621,0.35430528,-0.24000819,0.17660305,0.5,-0.26986228,0.26051837,0.22418657,-0.41843781,0.30742585,0.3397996){0.26360063,0.3210912,0.1749353,0.37011438}; -SS(-0.073421274,-0.375,-0.38984354,0,-0.49997234,-0.27965571,-0.18618058,-0.5161726,-0.15035515,-0.26056819,-0.54975154,-0.34323516){0.28201081,0.30906942,0.30914003,0.46884495}; -SS(0.27123349,0.36190713,0.41476339,0.26138985,0.51848551,0.281015,0.47723835,0.52605258,0.30619083,0.36016656,0.41044152,0.1594367){0.36300231,0.40200156,0.58228229,0.3073722}; -SS(0.30434906,0.49798107,-4.0114635e-05,0.24635331,0.35131343,-0.096025322,0.17777709,0.54047543,-0.2567554,0.42864323,0.48543211,-0.13804456){0.32377482,0.18045455,0.36840304,0.42022283}; -SS(-0.73174678,-0.21478859,-0.5,-0.64012388,-0.10177177,-0.37237302,-0.7907607,-0.33838097,-0.28342271,-0.56113743,-0.28920115,-0.29204918){0.81151292,0.54269073,0.80149819,0.46850822}; -SS(-0.31377045,0.30492781,-0.36427962,-0.41651431,0.41690828,-0.5,-0.17603462,0.24070348,-0.5,-0.40408872,0.18166381,-0.5){0.30770932,0.57523437,0.32537509,0.42526168}; -SS(-0.3548152,-0.48825703,0.21848985,-0.3533559,-0.49437708,0.037576204,-0.52487586,-0.5117405,-0.017639258,-0.59094649,-0.40495207,0.12834587){0.38862106,0.35575629,0.51812974,0.51475101}; -SS(0.76099919,0.76690574,0.25750996,0.59365279,0.65503723,0.24444947,0.55555177,0.82262944,0.31125158,0.62860594,0.86645525,0.049037492){1.2143065,0.82252715,1.0671623,1.1303867}; -SS(-0.6293812,0.63993291,-0.28812602,-0.66548665,0.66585508,-0.5,-0.79644003,0.50064951,-0.5,-0.80558396,0.5878127,-0.29244037){0.87296464,1.1221664,1.115532,1.0616703}; -SS(-0.37661764,-0.26006406,0.40868766,-0.3548152,-0.48825703,0.21848985,-0.1853821,-0.42358473,0.30866054,-0.34549718,-0.50098866,0.4105565){0.36234206,0.38862106,0.29143101,0.5260109}; -SS(0,0,0.5,-0.20045203,0.067929244,0.29301468,0,0,0.25,-0.17669296,0.011023676,0.5){0.23153294,0.10955402,0.045060365,0.26322593}; -SS(-0.2401666,0.74114092,-0.051302261,-0.38143574,0.84373572,-0.12387887,-0.14847812,0.78021305,-0.27623142,-0.35455825,0.80859576,-0.32177549){0.58653028,0.85864479,0.68882385,0.86460259}; -SS(-0.5555987,0.045150158,0.095162244,-0.34310942,-0.010167032,0.1509038,-0.52427834,0.10778268,0.27208728,-0.40506391,-0.079541407,0.3303193){0.29993682,0.12661586,0.34448415,0.26156128}; -SS(-0.87046532,0.63071146,0.35630423,-1,0.55555556,0.5,-1,0.4752276,0.27420758,-0.79641575,0.50054117,0.5){1.2666006,1.5401154,1.2803563,1.1180299}; -SS(-1,-0.33333333,0.5,-0.89646962,-0.32955067,0.34017365,-0.73174745,-0.21491043,0.5,-0.78327322,-0.45013966,0.5){1.3443603,1.0133061,0.81377033,1.0435491}; -SS(-0.76389013,0.77728265,0.25513738,-0.84394966,1,0.33504415,-1,0.84108515,0.33242406,-0.80481649,0.80494069,0.5){1.2358334,1.8084725,1.8031397,1.5232843}; -SS(-1,0.29928494,0.0012550607,-0.89426176,0.41257007,-0.12932618,-0.79172217,0.43302343,0.13373134,-0.78848723,0.26584533,-0.068869999){1.0718665,0.974079,0.80968993,0.68151298}; -SS(-0.66546973,0.66566005,0.5,-0.87046532,0.63071146,0.35630423,-0.79641575,0.50054117,0.5,-0.80481649,0.80494069,0.5){1.1224691,1.2666006,1.1180299,1.5232843}; -SS(-0.26297351,0.20404986,-0.17122089,-0.4182056,0.11248126,-0.14182463,-0.39654734,0.26661646,0.019312696,-0.34372617,0.39779568,-0.18541051){0.12773981,0.19428145,0.20710489,0.29650146}; -SS(-0.17097214,0.64900986,-0.39927747,-0.14847812,0.78021305,-0.27623142,-0.01813809,0.53618118,-0.30537166,0.10162062,0.65400865,-0.37913628){0.59741335,0.68882385,0.36567785,0.5665506}; -SS(0.30434906,0.49798107,-4.0114635e-05,0.36016656,0.41044152,0.1594367,0.36021608,0.23247759,-0.012351094,0.52218723,0.46943947,0.022097553){0.32377482,0.3073722,0.16110593,0.46892029}; -SS(-0.045146113,0.19012269,0.5,-0.10037172,0.18891947,0.20844359,-0.20045203,0.067929244,0.29301468,-0.11614487,0.30919383,0.33918095){0.27176836,0.074828316,0.10955402,0.20820823}; -SS(-0.50159539,-0.29258506,7.2987381e-06,-0.3533559,-0.49437708,0.037576204,-0.23583358,-0.36008743,0.0071767184,-0.3727858,-0.19869367,0.11195566){0.32068114,0.35575629,0.16465457,0.16948569}; -SS(-0.83127473,0.33505962,-0.32026923,-1,0.33333333,-0.5,-0.69937066,0.31351533,-0.5,-0.82994199,0.18319278,-0.5){0.89071695,1.3393331,0.81965428,0.95993957}; -SS(-0.66548665,0.66585508,-0.5,-0.6293812,0.63993291,-0.28812602,-0.79644003,0.50064951,-0.5,-0.61503712,0.4760032,-0.5){1.1221664,0.87296464,1.115532,0.83978547}; -SS(-0.4581749,-0.5263483,-0.32801665,-0.50036547,-0.57239096,-0.5,-0.49676106,-0.69523221,-0.26913048,-0.62341011,-0.46880832,-0.38153973){0.57811658,0.81333009,0.78043195,0.73807879}; -SS(-0.61674646,0.25215289,0.3447871,-0.41648151,0.41684878,0.5,-0.4543958,0.20406131,0.5,-0.41843781,0.30742585,0.3397996){0.54607287,0.58097186,0.48353653,0.37011438}; -SS(0.35689191,0.091376279,-0.36932783,0.5,0,-0.5,0.37532516,0.23078833,-0.5,0.6251418,0.1440922,-0.5){0.26145514,0.48471812,0.42551454,0.63751638}; -SS(-0.64009684,-0.10188458,0.37412975,-0.67616985,-0.069078192,0.18801024,-0.73479965,-0.34302295,0.24038072,-0.84084014,-0.14895162,0.31636914){0.54631619,0.47948004,0.69668046,0.81273381}; -SS(1,0.75,-0.5,0.85153485,0.65148612,-0.35468846,1,0.70844226,-0.20827687,1,0.83864447,-0.33847614){1.7924126,1.2568282,1.5310675,1.8065101}; -SS(-1,-0.70523324,-0.21165758,-0.85520613,-0.46088631,-0.14784569,-0.82285362,-0.63420593,-0.0683896,-0.81387526,-0.53653555,-0.3209601){1.5222776,0.95161001,1.0691297,1.0406635}; -SS(-0.66548665,0.66585508,-0.5,-0.65756371,0.81308934,-0.3429452,-0.50014045,0.79673357,-0.5,-0.80479144,0.80504612,-0.5){1.1221664,1.1958888,1.1145783,1.5255891}; -SS(-0.349759,-0.84853211,0.35590634,-0.25,-1,0.5,-0.29157863,-1,0.20827581,-0.16134158,-1,0.33850563){0.94981364,1.2918821,1.1139248,1.129042}; -SS(-0.34310942,-0.010167032,0.1509038,-0.5555987,0.045150158,0.095162244,-0.4720473,-0.063494476,-0.036829327,-0.3727858,-0.19869367,0.11195566){0.12661586,0.29993682,0.21285629,0.16948569}; -SS(0.64232771,0.84838332,0.46476191,0.82853688,1,0.32125076,0.81191124,0.80644944,0.5,0.76099919,0.76690574,0.25750996){1.3339184,1.7703132,1.5425973,1.2143065}; -SS(-0.37661764,-0.26006406,0.40868766,-0.3548152,-0.48825703,0.21848985,-0.25897908,-0.24013326,0.26450313,-0.1853821,-0.42358473,0.30866054){0.36234206,0.38862106,0.17775565,0.29143101}; -SS(-0.65956212,-0.52273243,-0.19262862,-0.4581749,-0.5263483,-0.32801665,-0.56113743,-0.28920115,-0.29204918,-0.61549046,-0.35581383,-0.12962263){0.7287475,0.57811658,0.46850822,0.50877487}; -SS(0,0,-6.9388939e-15,-0.098950987,-0.13391411,-0.14594667,-0.20656092,-0.13938028,0.029547229,-0.28278924,0.041190137,-0.04219563){-0.017891206,0.03512721,0.048278496,0.063480395}; -SS(-0.60421932,0.82298164,0.34468578,-0.66546973,0.66566005,0.5,-0.50037,0.79662088,0.5,-0.80481649,0.80494069,0.5){1.1449713,1.1224691,1.1183194,1.5232843}; -SS(0,-0.5,0.5,-0.1853821,-0.42358473,0.30866054,0,-0.49989758,0.27983937,-0.14394692,-0.62481063,0.5){0.48207879,0.29143101,0.30650831,0.63866347}; -SS(0.59416595,0.14141347,0.32656529,0.5,0,0.5,0.75,0,0.5,0.62515059,0.14422159,0.5){0.46498444,0.47735984,0.79262349,0.64726001}; -SS(-0.17603462,0.24070348,-0.5,-0.29413589,0.046284299,-0.31274881,-0.40408872,0.18166381,-0.5,-0.19007896,0.04567822,-0.5){0.32537509,0.1681493,0.42526168,0.27736807}; -SS(0.37532516,0.23078833,-0.5,0.35689191,0.091376279,-0.36932783,0.6251418,0.1440922,-0.5,0.51910919,0.22553632,-0.31417891){0.42551454,0.26145514,0.63751638,0.40112301}; -SS(-0.33333333,1,0.5,-0.30949447,0.8262402,0.33528492,-0.22223836,1,0.2622369,-0.1827732,0.83017807,0.5){1.3433112,0.87388961,1.0984067,0.95598938}; -SS(0,0,-0.5,-0.1182182,0.15955837,-0.3159857,0,0,-0.25,-0.010543702,0.17712261,-0.5){0.23465449,0.11990198,0.044304329,0.25750364}; -SS(-0.6293812,0.63993291,-0.28812602,-0.79644003,0.50064951,-0.5,-0.61503712,0.4760032,-0.5,-0.80558396,0.5878127,-0.29244037){0.87296464,1.115532,0.83978547,1.0616703}; -SS(-0.63815223,-0.88141187,0.37488811,-0.50400314,-0.78879927,0.5,-0.349759,-0.84853211,0.35590634,-0.57994589,-0.69256437,0.31204703){1.3088768,1.1086821,0.94981364,0.89957508}; -SS(-1,-0.00012222908,0.26646899,-0.84289574,0.018333867,0.1608607,-0.84084014,-0.14895162,0.31636914,-0.82279039,-0.18997945,0.10657137){1.0506696,0.72430843,0.81273381,0.70945047}; -SS(-0.39806707,0.15776443,0.15870839,-0.39654734,0.26661646,0.019312696,-0.5555987,0.045150158,0.095162244,-0.63246299,0.29145388,0.035195127){0.19317292,0.20710489,0.29993682,0.47226275}; -SS(0.25,0,0.5,0.26083053,0.15082484,0.37728795,0.29175541,0,0.20824909,0.1615172,0,0.33845519){0.29281005,0.21918499,0.1093371,0.13068911}; -SS(-0.76760867,-0.33664988,-0.028298027,-0.88905946,-0.098697315,-0.13184676,-0.82279039,-0.18997945,0.10657137,-0.65367362,-0.16081953,0.0014934597){0.68479998,0.8023886,0.70945047,0.4344691}; -SS(-0.58258855,0.14037208,-0.067351147,-0.65355936,0.25468043,-0.1897796,-0.49391083,0.27907498,-0.27264436,-0.4182056,0.11248126,-0.14182463){0.34532741,0.51379882,0.37398026,0.19428145}; -SS(0.60662231,0.34516964,-0.13972301,0.37137652,0.1767682,-0.19801193,0.34662081,0.36199915,-0.25068724,0.51910919,0.22553632,-0.31417891){0.48782847,0.19205628,0.29696992,0.40112301}; -SS(-0.88905946,-0.098697315,-0.13184676,-0.70236545,-0.13062851,-0.19140485,-0.77267892,0.13105707,-0.24874664,-0.76752638,0.004448061,-0.013214377){0.8023886,0.5265969,0.65386325,0.5734925}; -SS(-1,-0.83959635,-0.33115777,-0.86742481,-0.86548068,-0.14483364,-0.83846289,-1,-0.33858677,-0.76546557,-0.72634686,-0.27513208){1.7998257,1.5085891,1.8019179,1.1696133}; -SS(-0.41648151,0.41684878,0.5,-0.29261734,0.53193925,0.43339885,-0.18136176,0.40461939,0.5,-0.41843781,0.30742585,0.3397996){0.58097186,0.53993003,0.42386795,0.37011438}; -SS(-0.12988976,-0.86995226,0.20452896,-0.16134158,-1,0.33850563,0,-0.83845667,0.33864852,-0.18863677,-0.81113033,0.5){0.79894991,1.129042,0.80178572,0.92459822}; -SS(-0.4433427,0.53576375,-0.12560501,-0.49391083,0.27907498,-0.27264436,-0.50782983,0.50249565,-0.29902586,-0.34372617,0.39779568,-0.18541051){0.48429505,0.37398026,0.58612549,0.29650146}; -SS(-0.36608751,-0.8951802,0.074405883,-0.4999534,-1,0.27968311,-0.42889738,-0.75253072,0.17523232,-0.61978497,-0.82706917,0.12738472){0.92652515,1.3075402,0.75958282,1.0681409}; -SS(0.37532516,0.23078833,-0.5,0.35689191,0.091376279,-0.36932783,0.34662081,0.36199915,-0.25068724,0.20129651,0.21389912,-0.31902192){0.42551454,0.26145514,0.29696992,0.16839385}; -SS(0.11136938,1,0.13859714,-0.043441254,0.79173928,0.29440137,-0.014815866,1,0.31001515,-0.084253952,1,0.13733396){1.0072058,0.69563564,1.0772324,1.0073117}; -SS(0,-0.77970171,0.00010845427,-0.14850787,-0.69358405,-0.087583548,-0.22302806,-0.77703925,0.068353305,-0.19247216,-0.56000521,0.088357129){0.58842154,0.49763432,0.64063544,0.34206231}; -SS(-0.67616985,-0.069078192,0.18801024,-0.64009684,-0.10188458,0.37412975,-0.50874333,-0.23900991,0.2620444,-0.40506391,-0.079541407,0.3303193){0.47948004,0.54631619,0.36443271,0.26156128}; -SS(1,1,-0.5,0.81205362,0.80656044,-0.5,1,0.83864447,-0.33847614,0.82865019,1,-0.3214153){2.2331531,1.5391707,1.8065101,1.7714679}; -SS(-0.58258855,0.14037208,-0.067351147,-0.78848723,0.26584533,-0.068869999,-0.77267892,0.13105707,-0.24874664,-0.76752638,0.004448061,-0.013214377){0.34532741,0.68151298,0.65386325,0.5734925}; -SS(-0.34549718,-0.50098866,0.4105565,-0.14394692,-0.62481063,0.5,-0.22656331,-0.68065623,0.28194433,-0.1853821,-0.42358473,0.30866054){0.5260109,0.63866347,0.57683818,0.29143101}; -SS(-0.65956212,-0.52273243,-0.19262862,-0.7055892,-0.50616462,-0.017961589,-0.63348211,-0.7706683,-0.074889286,-0.52487586,-0.5117405,-0.017639258){0.7287475,0.74484897,0.97907785,0.51812974}; -SS(-0.39806707,0.15776443,0.15870839,-0.39654734,0.26661646,0.019312696,-0.28278924,0.041190137,-0.04219563,-0.4182056,0.11248126,-0.14182463){0.19317292,0.20710489,0.063480395,0.19428145}; -SS(0.86971177,0.13024645,0.1427188,1,0.29178008,0.20838772,1,0.2203628,5.6826691e-05,0.77315808,0.36766952,0.075951375){0.77797836,1.1084285,1.0268649,0.71793497}; -SS(1,0.83856906,0.33864755,1,1,0.5,0.82853688,1,0.32125076,0.81191124,0.80644944,0.5){1.8033242,2.2317116,1.7703132,1.5425973}; -SS(-0.36174,-0.40052234,-0.23665811,-0.15923414,-0.34171533,-0.15079999,-0.18618058,-0.5161726,-0.15035515,-0.26056819,-0.54975154,-0.34323516){0.32480953,0.14783141,0.30914003,0.46884495}; -SS(-0.5555987,0.045150158,0.095162244,-0.34310942,-0.010167032,0.1509038,-0.4720473,-0.063494476,-0.036829327,-0.28278924,0.041190137,-0.04219563){0.29993682,0.12661586,0.21285629,0.063480395}; -SS(-0.33333333,1,-0.5,-0.35455825,0.80859576,-0.32177549,-0.31289368,0.69974287,-0.5,-0.18268367,0.83021756,-0.5){1.3407278,0.86460259,0.82323564,0.9573479}; -SS(-0.39032311,0.63241857,-0.34621958,-0.50014045,0.79673357,-0.5,-0.4813337,0.60105459,-0.5,-0.6293812,0.63993291,-0.28812602){0.65630059,1.1145783,0.83133251,0.87296464}; -SS(-0.30122568,-0.11513872,0.5,-0.40506391,-0.079541407,0.3303193,-0.17669296,0.011023676,0.5,-0.20045203,0.067929244,0.29301468){0.33848202,0.26156128,0.26322593,0.10955402}; -SS(0.5,0,0.5,0.42621669,0.19017509,0.30505062,0.37501462,0.2307626,0.5,0.62515059,0.14422159,0.5){0.47735984,0.29714896,0.42590445,0.64726001}; -SS(0.59365279,0.65503723,0.24444947,0.65062064,0.64268786,0.069510863,0.39612945,0.70614162,0.21524614,0.45788353,0.76094781,-0.0096633567){0.82252715,0.82620698,0.68453461,0.76853994}; -SS(1,0.50009037,3.487572e-05,0.69383766,0.49492178,-0.021800115,0.84582719,0.572243,0.1361951,0.8988736,0.63809662,-0.070284173){1.2275825,0.71284258,1.0417018,1.2046527}; -SS(-0.65776896,0.64141588,0.074371921,-0.61311838,0.85766427,0.15491279,-0.48952189,0.78345034,0.019065462,-0.79370724,0.81084643,0.045877226){0.83514199,1.1216468,0.83409809,1.270911}; -SS(-1,-1,-0.25,-0.86742481,-0.86548068,-0.14483364,-0.70823063,-1,-0.20843533,-0.83846289,-1,-0.33858677){2.0422973,1.5085891,1.5240742,1.8019179}; -SS(-0.54640726,0.34339216,0.19847863,-0.52470763,0.46530444,0.33754711,-0.35521568,0.4957142,0.26668635,-0.45563594,0.60375179,0.095527884){0.43575493,0.59371518,0.42001946,0.56263538}; -SS(-0.29237157,-0.11865629,-0.17606411,-0.15923414,-0.34171533,-0.15079999,-0.36174,-0.40052234,-0.23665811,-0.1971424,-0.26981885,-0.30750196){0.11404163,0.14783141,0.32480953,0.19280289}; -SS(0.61535375,0.70719289,-0.095218388,0.65062064,0.64268786,0.069510863,0.45788353,0.76094781,-0.0096633567,0.52218723,0.46943947,0.022097553){0.87858083,0.82620698,0.76853994,0.46892029}; -SS(0.35689191,0.091376279,-0.36932783,0.37532516,0.23078833,-0.5,0.34662081,0.36199915,-0.25068724,0.51910919,0.22553632,-0.31417891){0.26145514,0.42551454,0.29696992,0.40112301}; -SS(-0.8480722,0.62150313,0.12164012,-1,0.49991607,0.0031934521,-1,0.77631186,0.00053339564,-0.8068077,0.56885008,-0.063754108){1.1084494,1.2302733,1.5817554,0.96112076}; -SS(-0.77973152,-1,-0.0001062007,-0.79227163,-0.79754897,0.0021844777,-0.63348211,-0.7706683,-0.074889286,-0.86742481,-0.86548068,-0.14483364){1.588155,1.2530106,0.97907785,1.5085891}; -SS(-0.5555987,0.045150158,0.095162244,-0.58258855,0.14037208,-0.067351147,-0.4720473,-0.063494476,-0.036829327,-0.76752638,0.004448061,-0.013214377){0.29993682,0.34532741,0.21285629,0.5734925}; -SS(-0.39806707,0.15776443,0.15870839,-0.39654734,0.26661646,0.019312696,-0.13709741,0.19518884,0.034033465,-0.28278924,0.041190137,-0.04219563){0.19317292,0.20710489,0.040184006,0.063480395}; -SS(-0.8480722,0.62150313,0.12164012,-0.79172217,0.43302343,0.13373134,-0.67801153,0.56076489,0.29217382,-0.87046532,0.63071146,0.35630423){1.1084494,0.80968993,0.83617727,1.2666006}; -SS(-0.38492375,-0.20017574,-0.33650716,-0.49292178,-0.37477565,-0.5,-0.36174,-0.40052234,-0.23665811,-0.56113743,-0.28920115,-0.29204918){0.28705324,0.6115465,0.32480953,0.46850822}; -SS(-0.11111111,1,0.5,-0.33333333,1,0.5,-0.22223836,1,0.2622369,-0.1827732,0.83017807,0.5){1.2487078,1.3433112,1.0984067,0.95598938}; -SS(-0.62450053,-0.31310845,0.38575928,-0.73479965,-0.34302295,0.24038072,-0.56348952,-0.47594309,0.3052276,-0.79575191,-0.55547687,0.30538166){0.62379151,0.69668046,0.61776713,1.0192798}; -SS(-0.26986228,0.26051837,0.22418657,-0.39806707,0.15776443,0.15870839,-0.13709741,0.19518884,0.034033465,-0.15128303,0.02253305,0.11422928){0.1749353,0.19317292,0.040184006,0.025420414}; -SS(-0.36145429,0.13293621,0.35430528,-0.30122568,-0.11513872,0.5,-0.40752783,0.030201366,0.5,-0.40506391,-0.079541407,0.3303193){0.26360063,0.33848202,0.40526498,0.26156128}; -SS(-0.30122568,-0.11513872,0.5,-0.36145429,0.13293621,0.35430528,-0.40752783,0.030201366,0.5,-0.17669296,0.011023676,0.5){0.33848202,0.26360063,0.40526498,0.26322593}; -SS(-0.70823063,-1,-0.20843533,-0.86742481,-0.86548068,-0.14483364,-0.77973152,-1,-0.0001062007,-0.63348211,-0.7706683,-0.074889286){1.5240742,1.5085891,1.588155,0.97907785}; -SS(-0.18848435,-0.81110947,-0.5,-0.2399131,-0.76005145,-0.25989531,-0.16144976,-1,-0.33863959,0,-0.83851883,-0.33849865){0.92571371,0.6848256,1.1250711,0.80235204}; -SS(-0.49995867,-1,-0.27986665,-0.36340067,-0.87821042,-0.37678589,-0.49676106,-0.69523221,-0.26913048,-0.42066299,-0.84356131,-0.12906413){1.3082069,1.0307746,0.78043195,0.88525127}; -SS(-0.32879066,-0.67072359,-0.5,-0.4581749,-0.5263483,-0.32801665,-0.49676106,-0.69523221,-0.26913048,-0.26056819,-0.54975154,-0.34323516){0.79007105,0.57811658,0.78043195,0.46884495}; -SS(-1,-0.24887753,0.1953112,-0.82279039,-0.18997945,0.10657137,-1,-0.00012222908,0.26646899,-0.84084014,-0.14895162,0.31636914){1.0768014,0.70945047,1.0506696,0.81273381}; -SS(1,0,0.25,0.86971177,0.13024645,0.1427188,0.70845584,0,0.20819814,0.83866368,0,0.33843958){1.0436257,0.77797836,0.52761363,0.80106313}; -SS(-0.30122568,-0.11513872,0.5,-0.36145429,0.13293621,0.35430528,-0.17669296,0.011023676,0.5,-0.40506391,-0.079541407,0.3303193){0.33848202,0.26360063,0.26322593,0.26156128}; -SS(-0.13709741,0.19518884,0.034033465,-0.24163432,0.33561251,-0.055881164,-0.096302334,0.43534175,-0.056072844,-0.056808231,0.14323286,-0.13367928){0.040184006,0.16437697,0.18078295,0.022140076}; -SS(-0.39032311,0.63241857,-0.34621958,-0.48255002,0.69900846,-0.19155417,-0.24654336,0.57133462,-0.25396354,-0.35455825,0.80859576,-0.32177549){0.65630059,0.74365966,0.42991415,0.86460259}; -SS(-0.80558396,0.5878127,-0.29244037,-1,0.55555556,-0.5,-0.79644003,0.50064951,-0.5,-1,0.47527469,-0.27513051){1.0616703,1.5309384,1.115532,1.2834809}; -SS(0.37137652,0.1767682,-0.19801193,0.29173763,0,-0.20843742,0.22032809,0,-9.1119885e-05,0.13402468,0.11673163,-0.1460819){0.19205628,0.1134179,0.027339551,0.039337265}; -SS(0.86971177,0.13024645,0.1427188,1,0,0.25,1,0.29178008,0.20838772,1,0.16158711,0.33859063){0.77797836,1.0436257,1.1084285,1.1259698}; -SS(-0.17669296,0.011023676,0.5,-0.36145429,0.13293621,0.35430528,-0.20045203,0.067929244,0.29301468,-0.40506391,-0.079541407,0.3303193){0.26322593,0.26360063,0.10955402,0.26156128}; -SS(-0.20381263,0.45499536,-0.5,-0.17097214,0.64900986,-0.39927747,-0.24654336,0.57133462,-0.25396354,-0.01813809,0.53618118,-0.30537166){0.478983,0.59741335,0.42991415,0.36567785}; -SS(-0.65756371,0.81308934,-0.3429452,-0.77777778,1,-0.5,-0.76988954,1,-0.26944904,-0.56041637,1,-0.29784853){1.1958888,1.8319852,1.6463902,1.3856141}; -SS(-0.58934795,0.84141567,-0.18062024,-0.48255002,0.69900846,-0.19155417,-0.65756371,0.81308934,-0.3429452,-0.35455825,0.80859576,-0.32177549){1.0736489,0.74365966,1.1958888,0.86460259}; -SS(0.36016656,0.41044152,0.1594367,0.25126435,0.28098512,0.24657435,0.36021608,0.23247759,-0.012351094,0.46476684,0.14382827,0.12247557){0.3073722,0.18575023,0.16110593,0.23450402}; -SS(-0.17603462,0.24070348,-0.5,-0.31377045,0.30492781,-0.36427962,-0.40408872,0.18166381,-0.5,-0.29413589,0.046284299,-0.31274881){0.32537509,0.30770932,0.42526168,0.1681493}; -SS(-0.34310942,-0.010167032,0.1509038,-0.39806707,0.15776443,0.15870839,-0.28278924,0.041190137,-0.04219563,-0.5555987,0.045150158,0.095162244){0.12661586,0.19317292,0.063480395,0.29993682}; -SS(-0.62450053,-0.31310845,0.38575928,-0.78327322,-0.45013966,0.5,-0.73479965,-0.34302295,0.24038072,-0.79575191,-0.55547687,0.30538166){0.62379151,1.0435491,0.69668046,1.0192798}; -SS(-0.57994589,-0.69256437,0.31204703,-0.67513028,-0.66529728,0.5,-0.56348952,-0.47594309,0.3052276,-0.79575191,-0.55547687,0.30538166){0.89957508,1.1284607,0.61776713,1.0192798}; -SS(0.76099919,0.76690574,0.25750996,1,0.83856906,0.33864755,0.82853688,1,0.32125076,0.81191124,0.80644944,0.5){1.2143065,1.8033242,1.7703132,1.5425973}; -SS(0.66554141,0.67524133,0.5,0.87881231,0.64063264,0.37220388,0.78912399,0.50423732,0.5,0.6902006,0.50015172,0.27072419){1.1271263,1.3069719,1.1096027,0.77938072}; -SS(-0.79644003,0.50064951,-0.5,-0.63048479,0.37587985,-0.34368186,-0.61503712,0.4760032,-0.5,-0.80558396,0.5878127,-0.29244037){1.115532,0.64388066,0.83978547,1.0616703}; -SS(-0.65355936,0.25468043,-0.1897796,-0.49391083,0.27907498,-0.27264436,-0.49808619,0.0026201378,-0.26387206,-0.62938155,0.17932964,-0.37445272){0.51379882,0.37398026,0.29810596,0.55109073}; -SS(-0.67495489,-0.6652659,-0.5,-0.6448883,-0.87343314,-0.36731947,-0.50377808,-0.78884267,-0.5,-0.49676106,-0.69523221,-0.26913048){1.1276355,1.296688,1.1087956,0.78043195}; -SS(1,0.25,0.5,0.87272604,0.35900693,0.37172569,1,0.29178008,0.20838772,1,0.16158711,0.33859063){1.2942978,1.0107603,1.1084285,1.1259698}; -SS(0.36016656,0.41044152,0.1594367,0.52843461,0.32737897,0.19102935,0.36021608,0.23247759,-0.012351094,0.52218723,0.46943947,0.022097553){0.3073722,0.40790135,0.16110593,0.46892029}; -SS(0.36016656,0.41044152,0.1594367,0.25126435,0.28098512,0.24657435,0.42621669,0.19017509,0.30505062,0.50761134,0.34933779,0.39015973){0.3073722,0.18575023,0.29714896,0.51484928}; -SS(-0.65756371,0.81308934,-0.3429452,-0.55555556,1,-0.5,-0.77777778,1,-0.5,-0.56041637,1,-0.29784853){1.1958888,1.5379273,1.8319852,1.3856141}; -SS(-0.50159539,-0.29258506,7.2987381e-06,-0.3727858,-0.19869367,0.11195566,-0.4720473,-0.063494476,-0.036829327,-0.65367362,-0.16081953,0.0014934597){0.32068114,0.16948569,0.21285629,0.4344691}; -SS(-0.15923414,-0.34171533,-0.15079999,-0.29237157,-0.11865629,-0.17606411,-0.23583358,-0.36008743,0.0071767184,-0.20656092,-0.13938028,0.029547229){0.14783141,0.11404163,0.16465457,0.048278496}; -SS(-0.52470763,0.46530444,0.33754711,-0.47185361,0.73769401,0.24072705,-0.35521568,0.4957142,0.26668635,-0.45563594,0.60375179,0.095527884){0.59371518,0.80384956,0.42001946,0.56263538}; -SS(0.86971177,0.13024645,0.1427188,1,0.29178008,0.20838772,0.77315808,0.36766952,0.075951375,0.73568363,0.23203612,0.2735765){0.77797836,1.1084285,0.71793497,0.6509231}; -SS(-0.15923414,-0.34171533,-0.15079999,-0.36174,-0.40052234,-0.23665811,-0.1971424,-0.26981885,-0.30750196,-0.26056819,-0.54975154,-0.34323516){0.14783141,0.32480953,0.19280289,0.46884495}; -SS(-0.33333333,1,0.5,-0.30949447,0.8262402,0.33528492,-0.3132159,0.69976014,0.5,-0.50037,0.79662088,0.5){1.3433112,0.87388961,0.82050522,1.1183194}; -SS(-0.20381263,0.45499536,-0.5,-0.01813809,0.53618118,-0.30537166,-0.24654336,0.57133462,-0.25396354,-0.12449617,0.36606215,-0.28273955){0.478983,0.36567785,0.42991415,0.21185338}; -SS(-0.26986228,0.26051837,0.22418657,-0.19461387,0.3919517,0.10437587,-0.35521568,0.4957142,0.26668635,-0.11618574,0.50328545,0.29980467){0.1749353,0.19075448,0.42001946,0.33969293}; -SS(1,0.50009037,3.487572e-05,0.69383766,0.49492178,-0.021800115,0.77315808,0.36766952,0.075951375,0.84582719,0.572243,0.1361951){1.2275825,0.71284258,0.71793497,1.0417018}; -SS(0.88049681,0.87960137,0.13412341,1,0.70834898,0.20844998,0.76099919,0.76690574,0.25750996,0.84582719,0.572243,0.1361951){1.5518824,1.5291243,1.2143065,1.0417018}; -SS(-0.13709741,0.19518884,0.034033465,-0.39806707,0.15776443,0.15870839,-0.28278924,0.041190137,-0.04219563,-0.15128303,0.02253305,0.11422928){0.040184006,0.19317292,0.063480395,0.025420414}; -SS(0.59416595,0.14141347,0.32656529,0.75,0,0.5,0.70845584,0,0.20819814,0.83866368,0,0.33843958){0.46498444,0.79262349,0.52761363,0.80106313}; -SS(0.69383766,0.49492178,-0.021800115,1,0.50009037,3.487572e-05,0.82562789,0.37565656,-0.12707714,0.8988736,0.63809662,-0.070284173){0.71284258,1.2275825,0.82387041,1.2046527}; -SS(0.08017426,0.31429474,-0.16745504,0.24635331,0.35131343,-0.096025322,0.086744979,0.52712982,0.027891324,0.18202227,0.38279251,0.10350409){0.11103103,0.18045455,0.26660844,0.17617817}; -SS(-0.6448883,-0.87343314,-0.36731947,-0.75,-1,-0.5,-0.70823063,-1,-0.20843533,-0.83846289,-1,-0.33858677){1.296688,1.7946951,1.5240742,1.8019179}; -SS(-0.91004595,0.15296589,0.33139812,-1,0.11111111,0.5,-1,-0.00012222908,0.26646899,-0.80727304,0.00024662976,0.5){0.94743142,1.246301,1.0506696,0.88515177}; -SS(-0.3533559,-0.49437708,0.037576204,-0.35582611,-0.64426575,-0.070000747,-0.42889738,-0.75253072,0.17523232,-0.50537844,-0.68762812,0.023695348){0.35575629,0.52757348,0.75958282,0.71483247}; -SS(0.00024312215,0.80750011,-0.5,0.10162062,0.65400865,-0.37913628,0.081865095,0.80626877,-0.27867109,-0.14847812,0.78021305,-0.27623142){0.88610119,0.5665506,0.71703623,0.68882385}; -SS(0.59365279,0.65503723,0.24444947,0.66554141,0.67524133,0.5,0.5725222,0.50074158,0.5,0.6902006,0.50015172,0.27072419){0.82252715,1.1271263,0.8121357,0.77938072}; -SS(-0.12233239,-0.87748906,-0.13583418,0,-1,-0.25,-0.29168215,-1,-0.20844865,-0.16144976,-1,-0.33863959){0.78823805,1.0435946,1.1132023,1.1250711}; -SS(-0.83127473,0.33505962,-0.32026923,-0.79644003,0.50064951,-0.5,-1,0.47527469,-0.27513051,-0.80558396,0.5878127,-0.29244037){0.89071695,1.115532,1.2834809,1.0616703}; -SS(0.66554141,0.67524133,0.5,0.59365279,0.65503723,0.24444947,0.5725222,0.50074158,0.5,0.47723835,0.52605258,0.30619083){1.1271263,0.82252715,0.8121357,0.58228229}; -SS(-0.59094649,-0.40495207,0.12834587,-0.3548152,-0.48825703,0.21848985,-0.50874333,-0.23900991,0.2620444,-0.56348952,-0.47594309,0.3052276){0.51475101,0.38862106,0.36443271,0.61776713}; -SS(-0.19461387,0.3919517,0.10437587,-0.35521568,0.4957142,0.26668635,-0.11618574,0.50328545,0.29980467,-0.098708274,0.55956225,0.10505678){0.19075448,0.42001946,0.33969293,0.31633913}; -SS(-0.24654336,0.57133462,-0.25396354,-0.34372617,0.39779568,-0.18541051,-0.12449617,0.36606215,-0.28273955,-0.096302334,0.43534175,-0.056072844){0.42991415,0.29650146,0.21185338,0.18078295}; -SS(0.17426348,1,-0.18078905,0.33386283,0.81592026,-0.31808704,0.25248643,0.73785598,-0.13082591,0.081865095,0.80626877,-0.27867109){1.045853,0.86115027,0.60350215,0.71703623}; -SS(-0.17603462,0.24070348,-0.5,-0.1182182,0.15955837,-0.3159857,-0.010543702,0.17712261,-0.5,-0.12449617,0.36606215,-0.28273955){0.32537509,0.11990198,0.25750364,0.21185338}; -SS(0.08017426,0.31429474,-0.16745504,-0.01813809,0.53618118,-0.30537166,-0.12449617,0.36606215,-0.28273955,-0.096302334,0.43534175,-0.056072844){0.11103103,0.36567785,0.21185338,0.18078295}; -SS(0.69383766,0.49492178,-0.021800115,1,0.50009037,3.487572e-05,0.77315808,0.36766952,0.075951375,0.82562789,0.37565656,-0.12707714){0.71284258,1.2275825,0.71793497,0.82387041}; -SS(-0.10133362,-0.40777162,0.1162396,0,-0.22019801,5.0496855e-05,-0.20656092,-0.13938028,0.029547229,-0.1159097,-0.14329028,0.19302206){0.17697987,0.029059683,0.048278496,0.055235283}; -SS(0,-1,0.25,-0.12988976,-0.86995226,0.20452896,-0.29157863,-1,0.20827581,-0.16134158,-1,0.33850563){1.0438639,0.79894991,1.1139248,1.129042}; -SS(0,-1,-0.25,-0.12233239,-0.87748906,-0.13583418,0,-0.70830496,-0.20826096,0,-0.83851883,-0.33849865){1.0435946,0.78823805,0.5287181,0.80235204}; -SS(-0.4581749,-0.5263483,-0.32801665,-0.36174,-0.40052234,-0.23665811,-0.56113743,-0.28920115,-0.29204918,-0.61549046,-0.35581383,-0.12962263){0.57811658,0.32480953,0.46850822,0.50877487}; -SS(-0.25,-1,-0.5,-0.36340067,-0.87821042,-0.37678589,-0.29168215,-1,-0.20844865,-0.16144976,-1,-0.33863959){1.2929607,1.0307746,1.1132023,1.1250711}; -SS(-0.10743676,0.85847111,-0.11136175,-0.222315,1,-0.00011890035,-0.2401666,0.74114092,-0.051302261,-0.035654771,0.78507762,0.045007896){0.7462212,1.0307381,0.58653028,0.60161266}; -SS(-0.12988976,-0.86995226,0.20452896,0,-1,0.25,0,-0.7082575,0.2084616,0,-0.83845667,0.33864852){0.79894991,1.0438639,0.52387062,0.80178572}; -SS(-0.83851866,0.33014205,0.32623765,-1,0.33333333,0.5,-0.69937107,0.31347586,0.5,-0.79641575,0.50054117,0.5){0.89937894,1.3403692,0.8165723,1.1180299}; -SS(0.26083053,0.15082484,0.37728795,0.25,0,0.5,0.5,0,0.5,0.37501462,0.2307626,0.5){0.21918499,0.29281005,0.47735984,0.42590445}; -SS(0.42864323,0.48543211,-0.13804456,0.30434906,0.49798107,-4.0114635e-05,0.36021608,0.23247759,-0.012351094,0.52218723,0.46943947,0.022097553){0.42022283,0.32377482,0.16110593,0.46892029}; -SS(-0.045146113,0.19012269,0.5,-0.10037172,0.18891947,0.20844359,0.050277172,0.20853018,0.30186362,-0.20045203,0.067929244,0.29301468){0.27176836,0.074828316,0.12181545,0.10955402}; -SS(-0.67513028,-0.66529728,0.5,-0.89663862,-0.69397302,0.37275403,-0.78327322,-0.45013966,0.5,-0.79575191,-0.55547687,0.30538166){1.1284607,1.4119512,1.0435491,1.0192798}; -SS(0.78906409,0.5041626,-0.5,0.87867265,0.36391919,-0.37720578,0.85153485,0.65148612,-0.35468846,0.67125235,0.44297685,-0.31879306){1.1105402,1.03034,1.2568282,0.72773009}; -SS(-0.10037172,0.18891947,0.20844359,0,0,-6.9388939e-15,0,0,0.25,-0.15128303,0.02253305,0.11422928){0.074828316,-0.017891206,0.045060365,0.025420414}; -SS(1,0.16158711,0.33859063,0.73568363,0.23203612,0.2735765,0.83866368,0,0.33843958,0.81143387,0.18901581,0.5){1.1259698,0.6509231,0.80106313,0.9265446}; -SS(-0.62341011,-0.46880832,-0.38153973,-0.73174678,-0.21478859,-0.5,-0.78315651,-0.45008839,-0.5,-0.7907607,-0.33838097,-0.28342271){0.73807879,0.81151292,1.0467962,0.80149819}; -SS(-0.3727858,-0.19869367,0.11195566,-0.29237157,-0.11865629,-0.17606411,-0.4720473,-0.063494476,-0.036829327,-0.20656092,-0.13938028,0.029547229){0.16948569,0.11404163,0.21285629,0.048278496}; -SS(-1,-0.24887753,0.1953112,-0.89646962,-0.32955067,0.34017365,-1,-0.47520831,0.27427507,-0.82595855,-0.48031431,0.11444494){1.0768014,1.0133061,1.2822693,0.90887195}; -SS(0.87867265,0.36391919,-0.37720578,1,0.25,-0.5,1,0.2917639,-0.20827961,1,0.16156328,-0.33847781){1.03034,1.2935113,1.1127834,1.1261583}; -SS(-0.58258855,0.14037208,-0.067351147,-0.4182056,0.11248126,-0.14182463,-0.39654734,0.26661646,0.019312696,-0.5555987,0.045150158,0.095162244){0.34532741,0.19428145,0.20710489,0.29993682}; -SS(-0.8827276,-0.88146034,0.13123348,-1,-1,0.25,-0.70832062,-1,0.2082538,-0.8385203,-1,0.33846229){1.5595365,2.0427074,1.5291125,1.8024192}; -SS(0.59416595,0.14141347,0.32656529,0.75,0,0.5,0.81143387,0.18901581,0.5,0.62515059,0.14422159,0.5){0.46498444,0.79262349,0.9265446,0.64726001}; -SS(-1,0.47527469,-0.27513051,-0.89426176,0.41257007,-0.12932618,-0.80558396,0.5878127,-0.29244037,-0.8068077,0.56885008,-0.063754108){1.2834809,0.974079,1.0616703,0.96112076}; -SS(-0.45563594,0.60375179,0.095527884,-0.20984637,0.69532212,0.20809493,-0.47185361,0.73769401,0.24072705,-0.35521568,0.4957142,0.26668635){0.56263538,0.55022745,0.80384956,0.42001946}; -SS(1,1,0.25,0.88049681,0.87960137,0.13412341,1,0.70834898,0.20844998,1,0.83856906,0.33864755){2.0447444,1.5518824,1.5291243,1.8033242}; -SS(0.33333333,1,-0.5,0.33386283,0.81592026,-0.31808704,0.21543771,0.73213875,-0.5,0.45062041,0.7833899,-0.5){1.342474,0.86115027,0.81134051,1.0506853}; -SS(-0.65776896,0.64141588,0.074371921,-0.45563594,0.60375179,0.095527884,-0.47185361,0.73769401,0.24072705,-0.67801153,0.56076489,0.29217382){0.83514199,0.56263538,0.80384956,0.83617727}; -SS(-0.52470763,0.46530444,0.33754711,-0.41648151,0.41684878,0.5,-0.61509744,0.47589965,0.5,-0.61674646,0.25215289,0.3447871){0.59371518,0.58097186,0.84259202,0.54607287}; -SS(0.10162062,0.65400865,-0.37913628,0.081865095,0.80626877,-0.27867109,-0.14847812,0.78021305,-0.27623142,-0.01813809,0.53618118,-0.30537166){0.5665506,0.71703623,0.68882385,0.36567785}; -SS(-0.85520613,-0.46088631,-0.14784569,-1,-0.25140376,-0.1934451,-0.76760867,-0.33664988,-0.028298027,-0.7907607,-0.33838097,-0.28342271){0.95161001,1.0790534,0.68479998,0.80149819}; -SS(0.61535375,0.70719289,-0.095218388,0.49866453,0.63973666,-0.21510859,0.52218723,0.46943947,0.022097553,0.42864323,0.48543211,-0.13804456){0.87858083,0.68344633,0.46892029,0.42022283}; -SS(-0.3533559,-0.49437708,0.037576204,-0.35582611,-0.64426575,-0.070000747,-0.36174,-0.40052234,-0.23665811,-0.18618058,-0.5161726,-0.15035515){0.35575629,0.52757348,0.32480953,0.30914003}; -SS(-0.66659408,1,0.32529585,-0.60421932,0.82298164,0.34468578,-0.80481649,0.80494069,0.5,-0.76389013,0.77728265,0.25513738){1.5364848,1.1449713,1.5232843,1.2358334}; -SS(-0.65355936,0.25468043,-0.1897796,-0.58258855,0.14037208,-0.067351147,-0.49808619,0.0026201378,-0.26387206,-0.4182056,0.11248126,-0.14182463){0.51379882,0.34532741,0.29810596,0.19428145}; -SS(-0.26056819,-0.54975154,-0.34323516,-0.35582611,-0.64426575,-0.070000747,-0.2399131,-0.76005145,-0.25989531,-0.18618058,-0.5161726,-0.15035515){0.46884495,0.52757348,0.6848256,0.30914003}; -SS(0.88354722,0.11667767,-0.13069643,1,0,-0.25,0.70841775,0,-0.20847891,0.83867599,0,-0.33865964){0.79839767,1.043399,0.52293439,0.80182539}; -SS(-0.01813809,0.53618118,-0.30537166,-0.0089783977,0.64320989,-0.13441642,0.081865095,0.80626877,-0.27867109,-0.14847812,0.78021305,-0.27623142){0.36567785,0.41358858,0.71703623,0.68882385}; -SS(-0.74249217,0.75399014,-0.15399718,-0.58934795,0.84141567,-0.18062024,-0.48952189,0.78345034,0.019065462,-0.62332411,0.59900263,-0.10904345){1.1267767,1.0736489,0.83409809,0.74800561}; -SS(-0.78327322,-0.45013966,0.5,-0.62450053,-0.31310845,0.38575928,-0.56348952,-0.47594309,0.3052276,-0.79575191,-0.55547687,0.30538166){1.0435491,0.62379151,0.61776713,1.0192798}; -SS(0.00029730467,0.80760978,0.5,0.10211023,0.6404511,0.38011645,-0.043441254,0.79173928,0.29440137,0.22886345,0.79287946,0.30210005){0.88423684,0.55160362,0.69563564,0.75332396}; -SS(0.84582719,0.572243,0.1361951,1,0.50009037,3.487572e-05,1,0.70834898,0.20844998,1,0.50005385,0.27984222){1.0417018,1.2275825,1.5291243,1.3085441}; -SS(-0.098708274,0.55956225,0.10505678,-0.20984637,0.69532212,0.20809493,-0.35521568,0.4957142,0.26668635,-0.11618574,0.50328545,0.29980467){0.31633913,0.55022745,0.42001946,0.33969293}; -SS(0.87881231,0.64063264,0.37220388,1,0.75,0.5,1,0.70834898,0.20844998,1,0.83856906,0.33864755){1.3069719,1.7930237,1.5291243,1.8033242}; -SS(-0.01813809,0.53618118,-0.30537166,-0.24654336,0.57133462,-0.25396354,-0.12449617,0.36606215,-0.28273955,-0.096302334,0.43534175,-0.056072844){0.36567785,0.42991415,0.21185338,0.18078295}; -SS(-0.49998858,-1,-4.7037318e-05,-0.42066299,-0.84356131,-0.12906413,-0.29168215,-1,-0.20844865,-0.49995867,-1,-0.27986665){1.2276085,0.88525127,1.1132023,1.3082069}; -SS(-0.8480722,0.62150313,0.12164012,-1,0.49991607,0.0031934521,-1,0.70725984,0.21334539,-1,0.77631186,0.00053339564){1.1084494,1.2302733,1.5286486,1.5817554}; -SS(-0.49391083,0.27907498,-0.27264436,-0.65355936,0.25468043,-0.1897796,-0.49808619,0.0026201378,-0.26387206,-0.4182056,0.11248126,-0.14182463){0.37398026,0.51379882,0.29810596,0.19428145}; -SS(0,-0.49997946,0.00010199173,-0.14850787,-0.69358405,-0.087583548,0,-0.70830496,-0.20826096,0,-0.77970171,0.00010845427){0.22811872,0.49763432,0.5287181,0.58842154}; -SS(-0.58755791,0.033814853,0.5,-0.61674646,0.25215289,0.3447871,-0.69937107,0.31347586,0.5,-0.4543958,0.20406131,0.5){0.57778723,0.54607287,0.8165723,0.48353653}; -SS(-0.49998858,-1,-4.7037318e-05,-0.36608751,-0.8951802,0.074405883,-0.22019153,-1,-0.00010416607,-0.42066299,-0.84356131,-0.12906413){1.2276085,0.92652515,1.0287732,0.88525127}; -SS(-0.64009684,-0.10188458,0.37412975,-0.67616985,-0.069078192,0.18801024,-0.52427834,0.10778268,0.27208728,-0.40506391,-0.079541407,0.3303193){0.54631619,0.47948004,0.34448415,0.26156128}; -SS(-1,0.4752276,0.27420758,-0.87046532,0.63071146,0.35630423,-0.79641575,0.50054117,0.5,-0.83851866,0.33014205,0.32623765){1.2803563,1.2666006,1.1180299,0.89937894}; -SS(0.22886345,0.79287946,0.30210005,0.11136938,1,0.13859714,0.23106485,1,0.31398279,0.24404834,0.79519787,0.082231238){0.75332396,1.0072058,1.1340577,0.68472542}; -SS(-0.10133362,-0.40777162,0.1162396,0,-0.49997946,0.00010199173,0,-0.49989758,0.27983937,-0.19247216,-0.56000521,0.088357129){0.17697987,0.22811872,0.30650831,0.34206231}; -SS(0.25126435,0.28098512,0.24657435,0.27123349,0.36190713,0.41476339,0.50761134,0.34933779,0.39015973,0.36016656,0.41044152,0.1594367){0.18575023,0.36300231,0.51484928,0.3073722}; -SS(0.27123349,0.36190713,0.41476339,0.47723835,0.52605258,0.30619083,0.50761134,0.34933779,0.39015973,0.36016656,0.41044152,0.1594367){0.36300231,0.58228229,0.51484928,0.3073722}; -SS(-0.30949447,0.8262402,0.33528492,-0.22223836,1,0.2622369,-0.20984637,0.69532212,0.20809493,-0.32294154,0.86180803,0.13108841){0.87388961,1.0984067,0.55022745,0.84829643}; -SS(0.50010751,0,-0.00013054911,0.46476684,0.14382827,0.12247557,0.29175541,0,0.20824909,0.50011436,0,0.27961788){0.22823279,0.23450402,0.1093371,0.30940041}; -SS(1,0,-0.25,0.88354722,0.11667767,-0.13069643,1,0.2917639,-0.20827961,1,0.16156328,-0.33847781){1.043399,0.79839767,1.1127834,1.1261583}; -SS(-0.11618574,0.50328545,0.29980467,0.10211023,0.6404511,0.38011645,-0.043441254,0.79173928,0.29440137,-0.16015893,0.67694077,0.39025863){0.33969293,0.55160362,0.69563564,0.6265216}; -SS(0,-0.5,-0.5,-0.073421274,-0.375,-0.38984354,0,-0.25,-0.5,-0.23055166,-0.37480907,-0.5){0.4845449,0.28201081,0.29677328,0.41992239}; -SS(-0.20984637,0.69532212,0.20809493,-0.45563594,0.60375179,0.095527884,-0.47185361,0.73769401,0.24072705,-0.32294154,0.86180803,0.13108841){0.55022745,0.56263538,0.80384956,0.84829643}; -SS(0,-0.49997946,0.00010199173,-0.15923414,-0.34171533,-0.15079999,0,-0.49997234,-0.27965571,-0.18618058,-0.5161726,-0.15035515){0.22811872,0.14783141,0.30906942,0.30914003}; -SS(-0.8480722,0.62150313,0.12164012,-1,0.4752276,0.27420758,-0.79172217,0.43302343,0.13373134,-0.87046532,0.63071146,0.35630423){1.1084494,1.2803563,0.80968993,1.2666006}; -SS(-0.76389013,0.77728265,0.25513738,-0.66659408,1,0.32529585,-0.84394966,1,0.33504415,-0.80481649,0.80494069,0.5){1.2358334,1.5364848,1.8084725,1.5232843}; -SS(-0.77777778,1,-0.5,-0.83248216,0.76782327,-0.31292259,-0.80479144,0.80504612,-0.5,-0.76988954,1,-0.26944904){1.8319852,1.366757,1.5255891,1.6463902}; -SS(-0.20045203,0.067929244,0.29301468,0,0,0.5,-0.045146113,0.19012269,0.5,-0.17669296,0.011023676,0.5){0.10955402,0.23153294,0.27176836,0.26322593}; -SS(-0.38143574,0.84373572,-0.12387887,-0.48255002,0.69900846,-0.19155417,-0.2401666,0.74114092,-0.051302261,-0.48952189,0.78345034,0.019065462){0.85864479,0.74365966,0.58653028,0.83409809}; -SS(-1,-0.11111111,-0.5,-0.85707128,-0.1416783,-0.34083416,-0.80728146,0.00010990719,-0.5,-1,-0.00018427889,-0.26378916){1.2438655,0.85441326,0.88195685,1.0508045}; -SS(-0.63048479,0.37587985,-0.34368186,-0.41651431,0.41690828,-0.5,-0.69937066,0.31351533,-0.5,-0.61503712,0.4760032,-0.5){0.64388066,0.57523437,0.81965428,0.83978547}; -SS(-0.18136176,0.40461939,0.5,-0.29261734,0.53193925,0.43339885,-0.11618574,0.50328545,0.29980467,-0.11614487,0.30919383,0.33918095){0.42386795,0.53993003,0.33969293,0.20820823}; -SS(0.87881231,0.64063264,0.37220388,1,0.50005385,0.27984222,0.6902006,0.50015172,0.27072419,0.84582719,0.572243,0.1361951){1.3069719,1.3085441,0.77938072,1.0417018}; -SS(0.69383766,0.49492178,-0.021800115,0.60662231,0.34516964,-0.13972301,0.77315808,0.36766952,0.075951375,0.52218723,0.46943947,0.022097553){0.71284258,0.48782847,0.71793497,0.46892029}; -SS(-0.67616985,-0.069078192,0.18801024,-0.64009684,-0.10188458,0.37412975,-0.73479965,-0.34302295,0.24038072,-0.50874333,-0.23900991,0.2620444){0.47948004,0.54631619,0.69668046,0.36443271}; -SS(0.65062064,0.64268786,0.069510863,0.69383766,0.49492178,-0.021800115,0.6902006,0.50015172,0.27072419,0.52218723,0.46943947,0.022097553){0.82620698,0.71284258,0.77938072,0.46892029}; -SS(-1,0.33333333,-0.5,-0.83127473,0.33505962,-0.32026923,-0.69937066,0.31351533,-0.5,-0.79644003,0.50064951,-0.5){1.3393331,0.89071695,0.81965428,1.115532}; -SS(-0.0089783977,0.64320989,-0.13441642,0.081865095,0.80626877,-0.27867109,0.25248643,0.73785598,-0.13082591,0.17777709,0.54047543,-0.2567554){0.41358858,0.71703623,0.60350215,0.36840304}; -SS(-1,-0.5000565,0.0033661208,-0.83996275,-0.66999882,0.11765553,-1,-0.70710233,0.21356199,-1,-0.77608598,0.00064487429){1.2263361,1.1553131,1.5280688,1.5844414}; -SS(-0.30122568,-0.11513872,0.5,-0.16643696,-0.21791406,0.42402077,-0.25897908,-0.24013326,0.26450313,-0.40506391,-0.079541407,0.3303193){0.33848202,0.23818505,0.17775565,0.26156128}; -SS(-0.61311838,0.85766427,0.15491279,-0.61115597,1,-0.10200355,-0.42762906,1,-0.0094860889,-0.48952189,0.78345034,0.019065462){1.1216468,1.3611038,1.169501,0.83409809}; -SS(-1,-0.11111111,0.5,-0.84084014,-0.14895162,0.31636914,-1,-0.00012222908,0.26646899,-0.80727304,0.00024662976,0.5){1.2390062,0.81273381,1.0506696,0.88515177}; -SS(-0.92571354,0.17249619,-0.34283108,-1,0.11111111,-0.5,-0.80728146,0.00010990719,-0.5,-1,-0.00018427889,-0.26378916){0.99158484,1.2464205,0.88195685,1.0508045}; -SS(-0.35455825,0.80859576,-0.32177549,-0.33333333,1,-0.5,-0.31289368,0.69974287,-0.5,-0.50014045,0.79673357,-0.5){0.86460259,1.3407278,0.82323564,1.1145783}; -SS(-0.36608751,-0.8951802,0.074405883,-0.49998858,-1,-4.7037318e-05,-0.4999534,-1,0.27968311,-0.61978497,-0.82706917,0.12738472){0.92652515,1.2276085,1.3075402,1.0681409}; -SS(-0.23583358,-0.36008743,0.0071767184,-0.10133362,-0.40777162,0.1162396,-0.20656092,-0.13938028,0.029547229,-0.1159097,-0.14329028,0.19302206){0.16465457,0.17697987,0.048278496,0.055235283}; -SS(-0.60421932,0.82298164,0.34468578,-0.50037,0.79662088,0.5,-0.48141868,0.60085372,0.5,-0.47185361,0.73769401,0.24072705){1.1449713,1.1183194,0.82306978,0.80384956}; -SS(0.57129187,0.13526053,-0.13726946,0.50010751,0,-0.00013054911,0.70841775,0,-0.20847891,0.77985819,0,-0.00014691753){0.35115136,0.22823279,0.52293439,0.58919206}; -SS(-0.63048479,0.37587985,-0.34368186,-0.61503712,0.4760032,-0.5,-0.80558396,0.5878127,-0.29244037,-0.6293812,0.63993291,-0.28812602){0.64388066,0.83978547,1.0616703,0.87296464}; -SS(-0.75,-1,0.5,-0.63815223,-0.88141187,0.37488811,-0.70832062,-1,0.2082538,-0.8385203,-1,0.33846229){1.7943537,1.3088768,1.5291125,1.8024192}; -SS(-0.56113743,-0.28920115,-0.29204918,-0.49292178,-0.37477565,-0.5,-0.73174678,-0.21478859,-0.5,-0.50815189,-0.16301678,-0.5){0.46850822,0.6115465,0.81151292,0.52110597}; -SS(-0.12449617,0.36606215,-0.28273955,-0.17603462,0.24070348,-0.5,-0.029932551,0.40748663,-0.5,-0.010543702,0.17712261,-0.5){0.21185338,0.32537509,0.4038008,0.25750364}; -SS(0.8988736,0.63809662,-0.070284173,1,0.70834898,0.20844998,1,0.77979347,0.00010253841,0.84582719,0.572243,0.1361951){1.2046527,1.5291243,1.5887874,1.0417018}; -SS(-0.30949447,0.8262402,0.33528492,-0.3132159,0.69976014,0.5,-0.50037,0.79662088,0.5,-0.47185361,0.73769401,0.24072705){0.87388961,0.82050522,1.1183194,0.80384956}; -SS(-0.37661764,-0.26006406,0.40868766,-0.49284988,-0.37485679,0.5,-0.56348952,-0.47594309,0.3052276,-0.34549718,-0.50098866,0.4105565){0.36234206,0.6163523,0.61776713,0.5260109}; -SS(0.52843461,0.32737897,0.19102935,0.73568363,0.23203612,0.2735765,0.77315808,0.36766952,0.075951375,0.6902006,0.50015172,0.27072419){0.40790135,0.6509231,0.71793497,0.77938072}; -SS(-0.58754442,0.033885734,-0.5,-0.62938155,0.17932964,-0.37445272,-0.69937066,0.31351533,-0.5,-0.82994199,0.18319278,-0.5){0.58180393,0.55109073,0.81965428,0.95993957}; -SS(-0.15923414,-0.34171533,-0.15079999,0,-0.49997946,0.00010199173,0,-0.22019801,5.0496855e-05,-0.10133362,-0.40777162,0.1162396){0.14783141,0.22811872,0.029059683,0.17697987}; -SS(1,0.50010355,-0.27968748,0.8988736,0.63809662,-0.070284173,0.75922048,0.56990614,-0.17060419,0.82562789,0.37565656,-0.12707714){1.3071084,1.2046527,0.91133836,0.82387041}; -SS(-0.32064519,0.49448821,1.4739833e-06,-0.34372617,0.39779568,-0.18541051,-0.24654336,0.57133462,-0.25396354,-0.096302334,0.43534175,-0.056072844){0.32892635,0.29650146,0.42991415,0.18078295}; -SS(0.88049681,0.87960137,0.13412341,1,1,-6.9388939e-15,1,0.77979347,0.00010253841,0.78186447,1,3.3673518e-05){1.5518824,1.9807485,1.5887874,1.5923176}; -SS(-0.043441254,0.79173928,0.29440137,-0.11111111,1,0.5,-0.014815866,1,0.31001515,-0.1827732,0.83017807,0.5){0.69563564,1.2487078,1.0772324,0.95598938}; -SS(-0.17097214,0.64900986,-0.39927747,0.00024312215,0.80750011,-0.5,-0.14847812,0.78021305,-0.27623142,0.10162062,0.65400865,-0.37913628){0.59741335,0.88610119,0.68882385,0.5665506}; -SS(0.50010751,0,-0.00013054911,0.46476684,0.14382827,0.12247557,0.70845584,0,0.20819814,0.63998586,0.17856447,0.051345521){0.22823279,0.23450402,0.52761363,0.42570365}; -SS(-0.26056819,-0.54975154,-0.34323516,-0.32879066,-0.67072359,-0.5,-0.23055166,-0.37480907,-0.5,-0.14376826,-0.62489354,-0.5){0.46884495,0.79007105,0.41992239,0.6489606}; -SS(-0.61115597,1,-0.10200355,-0.79370724,0.81084643,0.045877226,-0.74954172,1,0.13574231,-0.81095336,1,-0.07156149){1.3611038,1.270911,1.562759,1.6471359}; -SS(0,0,0.25,-0.1159097,-0.14329028,0.19302206,0,-0.16137283,0.3386068,-0.20045203,0.067929244,0.29301468){0.045060365,0.055235283,0.12565914,0.10955402}; -SS(-0.76546557,-0.72634686,-0.27513208,-0.65956212,-0.52273243,-0.19262862,-0.63348211,-0.7706683,-0.074889286,-0.49676106,-0.69523221,-0.26913048){1.1696133,0.7287475,0.97907785,0.78043195}; -SS(-0.36340067,-0.87821042,-0.37678589,-0.49995867,-1,-0.27986665,-0.49676106,-0.69523221,-0.26913048,-0.6448883,-0.87343314,-0.36731947){1.0307746,1.3082069,0.78043195,1.296688}; -SS(-1,-0.25140376,-0.1934451,-0.88905946,-0.098697315,-0.13184676,-1,-0.20076836,0.00061221676,-0.76760867,-0.33664988,-0.028298027){1.0790534,0.8023886,1.0172898,0.68479998}; -SS(-1,0.24865949,0.19540364,-0.83851866,0.33014205,0.32623765,-0.7489605,0.18190923,0.13647301,-0.79172217,0.43302343,0.13373134){1.0814407,0.89937894,0.59564173,0.80968993}; -SS(0.25248643,0.73785598,-0.13082591,0.26064395,0.61953306,0.12890567,0.45788353,0.76094781,-0.0096633567,0.24404834,0.79519787,0.082231238){0.60350215,0.45328252,0.76853994,0.68472542}; -SS(-0.64012388,-0.10177177,-0.37237302,-0.58754442,0.033885734,-0.5,-0.80728146,0.00010990719,-0.5,-0.62938155,0.17932964,-0.37445272){0.54269073,0.58180393,0.88195685,0.55109073}; -SS(-0.4182056,0.11248126,-0.14182463,-0.49391083,0.27907498,-0.27264436,-0.39654734,0.26661646,0.019312696,-0.34372617,0.39779568,-0.18541051){0.19428145,0.37398026,0.20710489,0.29650146}; -SS(-0.66548665,0.66585508,-0.5,-0.83248216,0.76782327,-0.31292259,-0.80479144,0.80504612,-0.5,-0.80558396,0.5878127,-0.29244037){1.1221664,1.366757,1.5255891,1.0616703}; -SS(-0.20984637,0.69532212,0.20809493,-0.098708274,0.55956225,0.10505678,-0.035654771,0.78507762,0.045007896,-0.043441254,0.79173928,0.29440137){0.55022745,0.31633913,0.60161266,0.69563564}; -SS(-0.11754465,-0.65214472,-0.32749638,0,-0.75,-0.5,0,-0.70830496,-0.20826096,0,-0.83851883,-0.33849865){0.53347202,0.79460868,0.5287181,0.80235204}; -SS(-0.11614487,0.30919383,0.33918095,-0.26986228,0.26051837,0.22418657,-0.35521568,0.4957142,0.26668635,-0.11618574,0.50328545,0.29980467){0.20820823,0.1749353,0.42001946,0.33969293}; -SS(-0.50537844,-0.68762812,0.023695348,-0.49998858,-1,-4.7037318e-05,-0.42066299,-0.84356131,-0.12906413,-0.36608751,-0.8951802,0.074405883){0.71483247,1.2276085,0.88525127,0.92652515}; -SS(1,0.77979347,0.00010253841,0.88049681,0.87960137,0.13412341,0.78186447,1,3.3673518e-05,0.77861211,0.77861193,-0.067175459){1.5887874,1.5518824,1.5923176,1.1981052}; -SS(-0.41651431,0.41690828,-0.5,-0.39032311,0.63241857,-0.34621958,-0.31289368,0.69974287,-0.5,-0.4813337,0.60105459,-0.5){0.57523437,0.65630059,0.82323564,0.83133251}; -SS(0.5,0,0.5,0.26083053,0.15082484,0.37728795,0.37501462,0.2307626,0.5,0.42621669,0.19017509,0.30505062){0.47735984,0.21918499,0.42590445,0.29714896}; -SS(-0.12233239,-0.87748906,-0.13583418,-0.29168215,-1,-0.20844865,-0.22019153,-1,-0.00010416607,-0.42066299,-0.84356131,-0.12906413){0.78823805,1.1132023,1.0287732,0.88525127}; -SS(-0.098708274,0.55956225,0.10505678,0.098704003,0.67249079,0.1943501,-0.035654771,0.78507762,0.045007896,-0.043441254,0.79173928,0.29440137){0.31633913,0.47957633,0.60161266,0.69563564}; -SS(0,0,-6.9388939e-15,-0.10037172,0.18891947,0.20844359,0,0,0.25,0.13913358,0.10014326,0.18199659){-0.017891206,0.074828316,0.045060365,0.045990896}; -SS(-0.70823063,-1,-0.20843533,-0.86742481,-0.86548068,-0.14483364,-0.63348211,-0.7706683,-0.074889286,-0.76546557,-0.72634686,-0.27513208){1.5240742,1.5085891,0.97907785,1.1696133}; -SS(0.74440038,0.22095066,-0.087839409,1,0.2203628,5.6826691e-05,0.77315808,0.36766952,0.075951375,0.86971177,0.13024645,0.1427188){0.59875958,1.0268649,0.71793497,0.77797836}; -SS(-0.24163432,0.33561251,-0.055881164,-0.26297351,0.20404986,-0.17122089,-0.12449617,0.36606215,-0.28273955,-0.056808231,0.14323286,-0.13367928){0.16437697,0.12773981,0.21185338,0.022140076}; -SS(-1,0.11111111,0.5,-0.80727304,0.00024662976,0.5,-1,-0.11111111,0.5,-1,-0.00012222908,0.26646899){1.246301,0.88515177,1.2390062,1.0506696}; -SS(-0.49998858,-1,-4.7037318e-05,-0.50537844,-0.68762812,0.023695348,-0.61978497,-0.82706917,0.12738472,-0.36608751,-0.8951802,0.074405883){1.2276085,0.71483247,1.0681409,0.92652515}; -SS(-0.14850787,-0.69358405,-0.087583548,-0.35582611,-0.64426575,-0.070000747,-0.2399131,-0.76005145,-0.25989531,-0.42066299,-0.84356131,-0.12906413){0.49763432,0.52757348,0.6848256,0.88525127}; -SS(-0.61674646,0.25215289,0.3447871,-0.58755791,0.033814853,0.5,-0.69937107,0.31347586,0.5,-0.72768327,0.10310141,0.33233484){0.54607287,0.57778723,0.8165723,0.63492881}; -SS(-1,-0.00012222908,0.26646899,-0.91004595,0.15296589,0.33139812,-0.72768327,0.10310141,0.33233484,-0.84289574,0.018333867,0.1608607){1.0506696,0.94743142,0.63492881,0.72430843}; -SS(0,-1,-6.9388939e-15,-0.12233239,-0.87748906,-0.13583418,-0.22019153,-1,-0.00010416607,0,-0.77970171,0.00010845427){0.98008605,0.78823805,1.0287732,0.58842154}; -SS(-0.0089783977,0.64320989,-0.13441642,-0.14847812,0.78021305,-0.27623142,-0.24654336,0.57133462,-0.25396354,-0.2401666,0.74114092,-0.051302261){0.41358858,0.68882385,0.42991415,0.58653028}; -SS(-0.84289574,0.018333867,0.1608607,-1,-0.00012222908,0.26646899,-0.84084014,-0.14895162,0.31636914,-0.72768327,0.10310141,0.33233484){0.72430843,1.0506696,0.81273381,0.63492881}; -SS(-0.89646962,-0.32955067,0.34017365,-1,-0.24887753,0.1953112,-0.73479965,-0.34302295,0.24038072,-0.82595855,-0.48031431,0.11444494){1.0133061,1.0768014,0.69668046,0.90887195}; -SS(-0.62341011,-0.46880832,-0.38153973,-0.67495489,-0.6652659,-0.5,-0.78315651,-0.45008839,-0.5,-0.50036547,-0.57239096,-0.5){0.73807879,1.1276355,1.0467962,0.81333009}; -SS(-1,-0.00012222908,0.26646899,-0.91004595,0.15296589,0.33139812,-0.84084014,-0.14895162,0.31636914,-0.72768327,0.10310141,0.33233484){1.0506696,0.94743142,0.81273381,0.63492881}; -SS(0.49866453,0.63973666,-0.21510859,0.69383766,0.49492178,-0.021800115,0.75922048,0.56990614,-0.17060419,0.61535375,0.70719289,-0.095218388){0.68344633,0.71284258,0.91133836,0.87858083}; -SS(-1,0.49991607,0.0031934521,-0.8480722,0.62150313,0.12164012,-1,0.70725984,0.21334539,-1,0.4752276,0.27420758){1.2302733,1.1084494,1.5286486,1.2803563}; -SS(0.29175541,0,0.20824909,0.46476684,0.14382827,0.12247557,0.25126435,0.28098512,0.24657435,0.42621669,0.19017509,0.30505062){0.1093371,0.23450402,0.18575023,0.29714896}; -SS(-0.39654734,0.26661646,0.019312696,-0.39806707,0.15776443,0.15870839,-0.5555987,0.045150158,0.095162244,-0.4182056,0.11248126,-0.14182463){0.20710489,0.19317292,0.29993682,0.19428145}; -SS(0.67125235,0.44297685,-0.31879306,0.671223,0.32907594,-0.5,0.77491511,0.22516452,-0.26425516,0.51910919,0.22553632,-0.31417891){0.72773009,0.79435762,0.70313431,0.40112301}; -SS(-0.26297351,0.20404986,-0.17122089,-0.4182056,0.11248126,-0.14182463,-0.49391083,0.27907498,-0.27264436,-0.29413589,0.046284299,-0.31274881){0.12773981,0.19428145,0.37398026,0.1681493}; -SS(1,0.50009037,3.487572e-05,0.8988736,0.63809662,-0.070284173,1,0.70844226,-0.20827687,1,0.50010355,-0.27968748){1.2275825,1.2046527,1.5310675,1.3071084}; -SS(0.26064395,0.61953306,0.12890567,0.26138985,0.51848551,0.281015,0.086744979,0.52712982,0.027891324,0.18202227,0.38279251,0.10350409){0.45328252,0.40200156,0.26660844,0.17617817}; -SS(0.50010751,0,-0.00013054911,0.57129187,0.13526053,-0.13726946,0.70841775,0,-0.20847891,0.50007058,0,-0.27987971){0.22823279,0.35115136,0.52293439,0.31006895}; -SS(-0.12988976,-0.86995226,0.20452896,-0.16134158,-1,0.33850563,-0.18863677,-0.81113033,0.5,-0.349759,-0.84853211,0.35590634){0.79894991,1.129042,0.92459822,0.94981364}; -SS(0.37137652,0.1767682,-0.19801193,0.22032809,0,-9.1119885e-05,0.36021608,0.23247759,-0.012351094,0.13402468,0.11673163,-0.1460819){0.19205628,0.027339551,0.16110593,0.039337265}; -SS(-0.098708274,0.55956225,0.10505678,-0.0089783977,0.64320989,-0.13441642,-0.2401666,0.74114092,-0.051302261,-0.035654771,0.78507762,0.045007896){0.31633913,0.41358858,0.58653028,0.60161266}; -SS(0.50010751,0,-0.00013054911,0.63998586,0.17856447,0.051345521,0.70845584,0,0.20819814,0.77985819,0,-0.00014691753){0.22823279,0.42570365,0.52761363,0.58919206}; -SS(0.8781758,0.86708556,-0.1989731,1,1,-0.25,1,0.70844226,-0.20827687,1,0.83864447,-0.33847614){1.5462283,2.0438315,1.5310675,1.8065101}; -SS(0.094968532,0.84539386,-0.087484586,0.11136938,1,0.13859714,-0.035654771,0.78507762,0.045007896,0.24404834,0.79519787,0.082231238){0.71839764,1.0072058,0.60161266,0.68472542}; -SS(-0.14850787,-0.69358405,-0.087583548,0,-0.49997946,0.00010199173,0,-0.70830496,-0.20826096,-0.18618058,-0.5161726,-0.15035515){0.49763432,0.22811872,0.5287181,0.30914003}; -SS(0.81205362,0.80656044,-0.5,0.8781758,0.86708556,-0.1989731,1,0.83864447,-0.33847614,0.82865019,1,-0.3214153){1.5391707,1.5462283,1.8065101,1.7714679}; -SS(-0.91347537,0.15552497,0.067511395,-1,-0.00021427218,0.00011802244,-1,0.29928494,0.0012550607,-0.89804207,0.11676539,-0.10792088){0.85045394,0.98080906,1.0718665,0.82300022}; -SS(-0.36608751,-0.8951802,0.074405883,-0.49998858,-1,-4.7037318e-05,-0.29157863,-1,0.20827581,-0.4999534,-1,0.27968311){0.92652515,1.2276085,1.1139248,1.3075402}; -SS(-0.7489605,0.18190923,0.13647301,-0.91347537,0.15552497,0.067511395,-0.79172217,0.43302343,0.13373134,-0.78848723,0.26584533,-0.068869999){0.59564173,0.85045394,0.80968993,0.68151298}; -SS(-0.82285362,-0.63420593,-0.0683896,-1,-0.5000565,0.0033661208,-1,-0.70523324,-0.21165758,-1,-0.77608598,0.00064487429){1.0691297,1.2263361,1.5222776,1.5844414}; -SS(-0.59094649,-0.40495207,0.12834587,-0.50159539,-0.29258506,7.2987381e-06,-0.50874333,-0.23900991,0.2620444,-0.3727858,-0.19869367,0.11195566){0.51475101,0.32068114,0.36443271,0.16948569}; -SS(-0.31377045,0.30492781,-0.36427962,-0.20381263,0.45499536,-0.5,-0.24654336,0.57133462,-0.25396354,-0.12449617,0.36606215,-0.28273955){0.30770932,0.478983,0.42991415,0.21185338}; -SS(0,0,-0.25,0.13402468,0.11673163,-0.1460819,0.29173763,0,-0.20843742,0.16149165,0,-0.33864688){0.044304329,0.039337265,0.1134179,0.12746835}; -SS(0.671223,0.32907594,-0.5,0.51910919,0.22553632,-0.31417891,0.6251418,0.1440922,-0.5,0.77491511,0.22516452,-0.26425516){0.79435762,0.40112301,0.63751638,0.70313431}; -SS(-0.12233239,-0.87748906,-0.13583418,-0.22019153,-1,-0.00010416607,0,-0.77970171,0.00010845427,-0.22302806,-0.77703925,0.068353305){0.78823805,1.0287732,0.58842154,0.64063544}; -SS(-0.1853821,-0.42358473,0.30866054,0,-0.49989758,0.27983937,-0.22656331,-0.68065623,0.28194433,-0.19247216,-0.56000521,0.088357129){0.29143101,0.30650831,0.57683818,0.34206231}; -SS(-0.93582873,0.86427167,0.14668289,-1,1,-6.9388939e-15,-1,1,0.25,-0.74954172,1,0.13574231){1.6320629,1.9810426,2.0473025,1.562759}; -SS(0.54326203,0.87223293,-0.356993,0.6657623,0.67544754,-0.5,0.81205362,0.80656044,-0.5,0.68900489,0.77311276,-0.28043733){1.1662147,1.1304562,1.5391707,1.1326816}; -SS(0.40637652,0.87094343,0.13060843,0.23106485,1,0.31398279,0.24404834,0.79519787,0.082231238,0.22886345,0.79287946,0.30210005){0.92399337,1.1340577,0.68472542,0.75332396}; -SS(-0.68637718,0.43295764,-0.18031685,-0.89426176,0.41257007,-0.12932618,-0.78848723,0.26584533,-0.068869999,-0.8068077,0.56885008,-0.063754108){0.67437813,0.974079,0.68151298,0.96112076}; -SS(0.49866453,0.63973666,-0.21510859,0.34720309,0.90097601,-0.12745168,0.45788353,0.76094781,-0.0096633567,0.54700908,0.85955032,-0.16345766){0.68344633,0.93504792,0.76853994,1.0528061}; -SS(0.59416595,0.14141347,0.32656529,0.75,0,0.5,0.83866368,0,0.33843958,0.81143387,0.18901581,0.5){0.46498444,0.79262349,0.80106313,0.9265446}; -SS(0.098704003,0.67249079,0.1943501,0.10211023,0.6404511,0.38011645,-0.11618574,0.50328545,0.29980467,0.085954007,0.41736025,0.32943097){0.47957633,0.55160362,0.33969293,0.27115576}; -SS(0.37137652,0.1767682,-0.19801193,0.60662231,0.34516964,-0.13972301,0.36021608,0.23247759,-0.012351094,0.57129187,0.13526053,-0.13726946){0.19205628,0.48782847,0.16110593,0.35115136}; -SS(0.83866368,0,0.33843958,0.59416595,0.14141347,0.32656529,0.81143387,0.18901581,0.5,0.73568363,0.23203612,0.2735765){0.80106313,0.46498444,0.9265446,0.6509231}; -SS(-0.42066299,-0.84356131,-0.12906413,-0.49998858,-1,-4.7037318e-05,-0.29168215,-1,-0.20844865,-0.22019153,-1,-0.00010416607){0.88525127,1.2276085,1.1132023,1.0287732}; -SS(-0.49998858,-1,-4.7037318e-05,-0.61978497,-0.82706917,0.12738472,-0.70832062,-1,0.2082538,-0.4999534,-1,0.27968311){1.2276085,1.0681409,1.5291125,1.3075402}; -SS(-0.50537844,-0.68762812,0.023695348,-0.49998858,-1,-4.7037318e-05,-0.63348211,-0.7706683,-0.074889286,-0.42066299,-0.84356131,-0.12906413){0.71483247,1.2276085,0.97907785,0.88525127}; -SS(0.59365279,0.65503723,0.24444947,0.65062064,0.64268786,0.069510863,0.6902006,0.50015172,0.27072419,0.52218723,0.46943947,0.022097553){0.82252715,0.82620698,0.77938072,0.46892029}; -SS(-0.72768327,0.10310141,0.33233484,-0.58755791,0.033814853,0.5,-0.69937107,0.31347586,0.5,-0.83006559,0.18329805,0.5){0.63492881,0.57778723,0.8165723,0.96159482}; -SS(-0.49998858,-1,-4.7037318e-05,-0.50537844,-0.68762812,0.023695348,-0.63348211,-0.7706683,-0.074889286,-0.61978497,-0.82706917,0.12738472){1.2276085,0.71483247,0.97907785,1.0681409}; -SS(-0.32294154,0.86180803,0.13108841,-0.20984637,0.69532212,0.20809493,-0.2401666,0.74114092,-0.051302261,-0.035654771,0.78507762,0.045007896){0.84829643,0.55022745,0.58653028,0.60161266}; -SS(-0.23055166,-0.37480907,-0.5,-0.38492375,-0.20017574,-0.33650716,-0.36174,-0.40052234,-0.23665811,-0.1971424,-0.26981885,-0.30750196){0.41992239,0.28705324,0.32480953,0.19280289}; -SS(-0.4182056,0.11248126,-0.14182463,-0.4720473,-0.063494476,-0.036829327,-0.28278924,0.041190137,-0.04219563,-0.5555987,0.045150158,0.095162244){0.19428145,0.21285629,0.063480395,0.29993682}; -SS(-0.61115597,1,-0.10200355,-0.79370724,0.81084643,0.045877226,-0.81095336,1,-0.07156149,-0.74249217,0.75399014,-0.15399718){1.3611038,1.270911,1.6471359,1.1267767}; -SS(0.6657623,0.67544754,-0.5,0.67125235,0.44297685,-0.31879306,0.78906409,0.5041626,-0.5,0.85153485,0.65148612,-0.35468846){1.1304562,0.72773009,1.1105402,1.2568282}; -SS(0,-0.83845667,0.33864852,-0.12988976,-0.86995226,0.20452896,-0.18863677,-0.81113033,0.5,-0.22656331,-0.68065623,0.28194433){0.80178572,0.79894991,0.92459822,0.57683818}; -SS(-0.45843014,-0.20445062,-0.15988901,-0.29237157,-0.11865629,-0.17606411,-0.4720473,-0.063494476,-0.036829327,-0.3727858,-0.19869367,0.11195566){0.26094507,0.11404163,0.21285629,0.16948569}; -SS(-0.31377045,0.30492781,-0.36427962,-0.26297351,0.20404986,-0.17122089,-0.49391083,0.27907498,-0.27264436,-0.29413589,0.046284299,-0.31274881){0.30770932,0.12773981,0.37398026,0.1681493}; -SS(-0.47185361,0.73769401,0.24072705,-0.60421932,0.82298164,0.34468578,-0.76389013,0.77728265,0.25513738,-0.67801153,0.56076489,0.29217382){0.80384956,1.1449713,1.2358334,0.83617727}; -SS(0.8988736,0.63809662,-0.070284173,1,0.50009037,3.487572e-05,1,0.70834898,0.20844998,0.84582719,0.572243,0.1361951){1.2046527,1.2275825,1.5291243,1.0417018}; -SS(0.33386283,0.81592026,-0.31808704,0.33333333,1,-0.5,0.21543771,0.73213875,-0.5,0.2222976,1,-0.35617554){0.86115027,1.342474,0.81134051,1.1585843}; -SS(-0.15923414,-0.34171533,-0.15079999,0,-0.49997946,0.00010199173,0,-0.29164705,-0.20823955,0,-0.22019801,5.0496855e-05){0.14783141,0.22811872,0.11473247,0.029059683}; -SS(-0.85520613,-0.46088631,-0.14784569,-1,-0.5000565,0.0033661208,-1,-0.70523324,-0.21165758,-0.82285362,-0.63420593,-0.0683896){0.95161001,1.2263361,1.5222776,1.0691297}; -SS(1,0.50009037,3.487572e-05,0.8988736,0.63809662,-0.070284173,1,0.70834898,0.20844998,1,0.77979347,0.00010253841){1.2275825,1.2046527,1.5291243,1.5887874}; -SS(-0.62341011,-0.46880832,-0.38153973,-0.67495489,-0.6652659,-0.5,-0.50036547,-0.57239096,-0.5,-0.49676106,-0.69523221,-0.26913048){0.73807879,1.1276355,0.81333009,0.78043195}; -SS(0.46476684,0.14382827,0.12247557,0.50010751,0,-0.00013054911,0.70845584,0,0.20819814,0.50011436,0,0.27961788){0.23450402,0.22823279,0.52761363,0.30940041}; -SS(-0.88905946,-0.098697315,-0.13184676,-1,-0.00018427889,-0.26378916,-0.77267892,0.13105707,-0.24874664,-0.85707128,-0.1416783,-0.34083416){0.8023886,1.0508045,0.65386325,0.85441326}; -SS(0.098704003,0.67249079,0.1943501,0.26064395,0.61953306,0.12890567,0.26138985,0.51848551,0.281015,0.086744979,0.52712982,0.027891324){0.47957633,0.45328252,0.40200156,0.26660844}; -SS(-0.54640726,0.34339216,0.19847863,-0.39806707,0.15776443,0.15870839,-0.52427834,0.10778268,0.27208728,-0.5555987,0.045150158,0.095162244){0.43575493,0.19317292,0.34448415,0.29993682}; -SS(-0.01813809,0.53618118,-0.30537166,-0.0089783977,0.64320989,-0.13441642,-0.24654336,0.57133462,-0.25396354,-0.096302334,0.43534175,-0.056072844){0.36567785,0.41358858,0.42991415,0.18078295}; -SS(-0.80728146,0.00010990719,-0.5,-1,0.11111111,-0.5,-1,-0.11111111,-0.5,-1,-0.00018427889,-0.26378916){0.88195685,1.2464205,1.2438655,1.0508045}; -SS(-0.1159097,-0.14329028,0.19302206,-0.23583358,-0.36008743,0.0071767184,-0.25897908,-0.24013326,0.26450313,-0.20656092,-0.13938028,0.029547229){0.055235283,0.16465457,0.17775565,0.048278496}; -SS(-0.19247216,-0.56000521,0.088357129,0,-0.7082575,0.2084616,0,-0.49989758,0.27983937,-0.22656331,-0.68065623,0.28194433){0.34206231,0.52387062,0.30650831,0.57683818}; -SS(0.82562789,0.37565656,-0.12707714,1,0.50009037,3.487572e-05,1,0.2917639,-0.20827961,1,0.50010355,-0.27968748){0.82387041,1.2275825,1.1127834,1.3071084}; -SS(-0.80632325,-0.81147186,-0.5,-0.76546557,-0.72634686,-0.27513208,-1,-0.83959635,-0.33115777,-0.83846289,-1,-0.33858677){1.5409894,1.1696133,1.7998257,1.8019179}; -SS(-1,-0.47520831,0.27427507,-0.89646962,-0.32955067,0.34017365,-0.78327322,-0.45013966,0.5,-0.79575191,-0.55547687,0.30538166){1.2822693,1.0133061,1.0435491,1.0192798}; -SS(-0.8068077,0.56885008,-0.063754108,-0.65776896,0.64141588,0.074371921,-0.79172217,0.43302343,0.13373134,-0.54631436,0.45612147,-0.00074796238){0.96112076,0.83514199,0.80968993,0.48593017}; -SS(-1,-0.00012222908,0.26646899,-0.91004595,0.15296589,0.33139812,-0.80727304,0.00024662976,0.5,-0.84084014,-0.14895162,0.31636914){1.0506696,0.94743142,0.88515177,0.81273381}; -SS(-0.61978497,-0.82706917,0.12738472,-0.49998858,-1,-4.7037318e-05,-0.70832062,-1,0.2082538,-0.77973152,-1,-0.0001062007){1.0681409,1.2276085,1.5291125,1.588155}; -SS(0.60662231,0.34516964,-0.13972301,0.42864323,0.48543211,-0.13804456,0.67125235,0.44297685,-0.31879306,0.48047723,0.47791267,-0.33071402){0.48782847,0.42022283,0.72773009,0.55795418}; -SS(-0.91347537,0.15552497,0.067511395,-1,0.24865949,0.19540364,-0.7489605,0.18190923,0.13647301,-0.79172217,0.43302343,0.13373134){0.85045394,1.0814407,0.59564173,0.80968993}; -SS(-0.54640726,0.34339216,0.19847863,-0.41843781,0.30742585,0.3397996,-0.26986228,0.26051837,0.22418657,-0.35521568,0.4957142,0.26668635){0.43575493,0.37011438,0.1749353,0.42001946}; -SS(-0.91414606,-0.68082467,-0.37109558,-0.67495489,-0.6652659,-0.5,-0.78315651,-0.45008839,-0.5,-0.81387526,-0.53653555,-0.3209601){1.4249306,1.1276355,1.0467962,1.0406635}; -SS(0.68985253,1,-0.19792707,0.54326203,0.87223293,-0.356993,0.82865019,1,-0.3214153,0.68900489,0.77311276,-0.28043733){1.495304,1.1662147,1.7714679,1.1326816}; -SS(0.50761134,0.34933779,0.39015973,0.52843461,0.32737897,0.19102935,0.6902006,0.50015172,0.27072419,0.73568363,0.23203612,0.2735765){0.51484928,0.40790135,0.77938072,0.6509231}; -SS(1,0.50005385,0.27984222,0.87881231,0.64063264,0.37220388,0.6902006,0.50015172,0.27072419,0.87272604,0.35900693,0.37172569){1.3085441,1.3069719,0.77938072,1.0107603}; -SS(1,0.50009037,3.487572e-05,0.82562789,0.37565656,-0.12707714,1,0.2917639,-0.20827961,1,0.2203628,5.6826691e-05){1.2275825,0.82387041,1.1127834,1.0268649}; -SS(0.87272604,0.35900693,0.37172569,0.67112401,0.32933441,0.5,0.6902006,0.50015172,0.27072419,0.73568363,0.23203612,0.2735765){1.0107603,0.79210069,0.77938072,0.6509231}; -SS(-0.65956212,-0.52273243,-0.19262862,-0.62341011,-0.46880832,-0.38153973,-0.76546557,-0.72634686,-0.27513208,-0.81387526,-0.53653555,-0.3209601){0.7287475,0.73807879,1.1696133,1.0406635}; -SS(-0.56041637,1,-0.29784853,-0.58934795,0.84141567,-0.18062024,-0.65756371,0.81308934,-0.3429452,-0.35455825,0.80859576,-0.32177549){1.3856141,1.0736489,1.1958888,0.86460259}; -SS(0.87867265,0.36391919,-0.37720578,0.75922048,0.56990614,-0.17060419,0.67125235,0.44297685,-0.31879306,0.82562789,0.37565656,-0.12707714){1.03034,0.91133836,0.72773009,0.82387041}; -SS(-1,0.24865949,0.19540364,-0.91347537,0.15552497,0.067511395,-1,0.29928494,0.0012550607,-0.79172217,0.43302343,0.13373134){1.0814407,0.85045394,1.0718665,0.80968993}; -SS(0,-0.7082575,0.2084616,-0.19247216,-0.56000521,0.088357129,0,-0.77970171,0.00010845427,-0.22302806,-0.77703925,0.068353305){0.52387062,0.34206231,0.58842154,0.64063544}; -SS(-1,0.33333333,0.5,-0.91004595,0.15296589,0.33139812,-1,0.24865949,0.19540364,-0.83851866,0.33014205,0.32623765){1.3403692,0.94743142,1.0814407,0.89937894}; -SS(-0.65776896,0.64141588,0.074371921,-0.62332411,0.59900263,-0.10904345,-0.74249217,0.75399014,-0.15399718,-0.48952189,0.78345034,0.019065462){0.83514199,0.74800561,1.1267767,0.83409809}; -SS(0,-0.49997946,0.00010199173,-0.15923414,-0.34171533,-0.15079999,0,-0.29164705,-0.20823955,0,-0.49997234,-0.27965571){0.22811872,0.14783141,0.11473247,0.30906942}; -SS(0.34720309,0.90097601,-0.12745168,0.49866453,0.63973666,-0.21510859,0.33386283,0.81592026,-0.31808704,0.54700908,0.85955032,-0.16345766){0.93504792,0.68344633,0.86115027,1.0528061}; -SS(0.50761134,0.34933779,0.39015973,0.67112401,0.32933441,0.5,0.37501462,0.2307626,0.5,0.62515059,0.14422159,0.5){0.51484928,0.79210069,0.42590445,0.64726001}; -SS(1,0.50009037,3.487572e-05,0.8988736,0.63809662,-0.070284173,1,0.50010355,-0.27968748,0.82562789,0.37565656,-0.12707714){1.2275825,1.2046527,1.3071084,0.82387041}; -SS(-0.12988976,-0.86995226,0.20452896,-0.18863677,-0.81113033,0.5,-0.22656331,-0.68065623,0.28194433,-0.349759,-0.84853211,0.35590634){0.79894991,0.92459822,0.57683818,0.94981364}; -SS(-0.54640726,0.34339216,0.19847863,-0.39806707,0.15776443,0.15870839,-0.5555987,0.045150158,0.095162244,-0.63246299,0.29145388,0.035195127){0.43575493,0.19317292,0.29993682,0.47226275}; -SS(0.57129187,0.13526053,-0.13726946,0.70841775,0,-0.20847891,0.50007058,0,-0.27987971,0.51910919,0.22553632,-0.31417891){0.35115136,0.52293439,0.31006895,0.40112301}; -SS(-0.91347537,0.15552497,0.067511395,-1,0.29928494,0.0012550607,-0.79172217,0.43302343,0.13373134,-0.78848723,0.26584533,-0.068869999){0.85045394,1.0718665,0.80968993,0.68151298}; -SS(-0.22223836,1,0.2622369,-0.30949447,0.8262402,0.33528492,-0.20984637,0.69532212,0.20809493,-0.043441254,0.79173928,0.29440137){1.0984067,0.87388961,0.55022745,0.69563564}; -SS(0.69383766,0.49492178,-0.021800115,0.49866453,0.63973666,-0.21510859,0.52218723,0.46943947,0.022097553,0.61535375,0.70719289,-0.095218388){0.71284258,0.68344633,0.46892029,0.87858083}; -SS(0.11458044,0.70010244,0.010073529,-0.0089783977,0.64320989,-0.13441642,0.25248643,0.73785598,-0.13082591,0.17777709,0.54047543,-0.2567554){0.49378055,0.41358858,0.60350215,0.36840304}; -SS(-0.91004595,0.15296589,0.33139812,-0.80727304,0.00024662976,0.5,-0.84084014,-0.14895162,0.31636914,-0.72768327,0.10310141,0.33233484){0.94743142,0.88515177,0.81273381,0.63492881}; -SS(0,-0.49997946,0.00010199173,-0.14850787,-0.69358405,-0.087583548,0,-0.77970171,0.00010845427,-0.19247216,-0.56000521,0.088357129){0.22811872,0.49763432,0.58842154,0.34206231}; -SS(-0.41648151,0.41684878,0.5,-0.61674646,0.25215289,0.3447871,-0.69937107,0.31347586,0.5,-0.61509744,0.47589965,0.5){0.58097186,0.54607287,0.8165723,0.84259202}; -SS(-0.89646962,-0.32955067,0.34017365,-1,-0.55555556,0.5,-1,-0.47520831,0.27427507,-0.78327322,-0.45013966,0.5){1.0133061,1.5359657,1.2822693,1.0435491}; -SS(-0.4433427,0.53576375,-0.12560501,-0.32064519,0.49448821,1.4739833e-06,-0.24654336,0.57133462,-0.25396354,-0.2401666,0.74114092,-0.051302261){0.48429505,0.32892635,0.42991415,0.58653028}; -SS(-0.62341011,-0.46880832,-0.38153973,-0.73174678,-0.21478859,-0.5,-0.7907607,-0.33838097,-0.28342271,-0.56113743,-0.28920115,-0.29204918){0.73807879,0.81151292,0.80149819,0.46850822}; -SS(-0.61311838,0.85766427,0.15491279,-0.65776896,0.64141588,0.074371921,-0.47185361,0.73769401,0.24072705,-0.76389013,0.77728265,0.25513738){1.1216468,0.83514199,0.80384956,1.2358334}; -SS(-0.79641575,0.50054117,0.5,-0.87046532,0.63071146,0.35630423,-0.67801153,0.56076489,0.29217382,-0.83851866,0.33014205,0.32623765){1.1180299,1.2666006,0.83617727,0.89937894}; -SS(0,0,0.5,0,0,0.25,0,-0.16137283,0.3386068,-0.17669296,0.011023676,0.5){0.23153294,0.045060365,0.12565914,0.26322593}; -SS(0.25,0,-0.5,0.35689191,0.091376279,-0.36932783,0.37532516,0.23078833,-0.5,0.20129651,0.21389912,-0.31902192){0.28810477,0.26145514,0.42551454,0.16839385}; -SS(0.49866453,0.63973666,-0.21510859,0.69383766,0.49492178,-0.021800115,0.52218723,0.46943947,0.022097553,0.42864323,0.48543211,-0.13804456){0.68344633,0.71284258,0.46892029,0.42022283}; -SS(0,0,0.5,0.050277172,0.20853018,0.30186362,0,0,0.25,-0.045146113,0.19012269,0.5){0.23153294,0.12181545,0.045060365,0.27176836}; -SS(-0.15923414,-0.34171533,-0.15079999,-0.18618058,-0.5161726,-0.15035515,-0.26056819,-0.54975154,-0.34323516,-0.073421274,-0.375,-0.38984354){0.14783141,0.30914003,0.46884495,0.28201081}; -SS(0.49866453,0.63973666,-0.21510859,0.34720309,0.90097601,-0.12745168,0.25248643,0.73785598,-0.13082591,0.45788353,0.76094781,-0.0096633567){0.68344633,0.93504792,0.60350215,0.76853994}; -SS(0.16149165,0,-0.33864688,0,0,-0.5,0,0,-0.25,-0.010543702,0.17712261,-0.5){0.12746835,0.23465449,0.044304329,0.25750364}; -SS(-0.10133362,-0.40777162,0.1162396,-0.23583358,-0.36008743,0.0071767184,-0.25897908,-0.24013326,0.26450313,-0.1159097,-0.14329028,0.19302206){0.17697987,0.16465457,0.17775565,0.055235283}; -SS(0.37137652,0.1767682,-0.19801193,0.50010751,0,-0.00013054911,0.50007058,0,-0.27987971,0.57129187,0.13526053,-0.13726946){0.19205628,0.22823279,0.31006895,0.35115136}; -SS(-0.033588837,0.5879061,0.5,-0.29261734,0.53193925,0.43339885,-0.3132159,0.69976014,0.5,-0.16015893,0.67694077,0.39025863){0.57806214,0.53993003,0.82050522,0.6265216}; -SS(-0.1971424,-0.26981885,-0.30750196,-0.15923414,-0.34171533,-0.15079999,-0.26056819,-0.54975154,-0.34323516,-0.073421274,-0.375,-0.38984354){0.19280289,0.14783141,0.46884495,0.28201081}; -SS(-1,-0.55555556,0.5,-0.79575191,-0.55547687,0.30538166,-1,-0.47520831,0.27427507,-0.78327322,-0.45013966,0.5){1.5359657,1.0192798,1.2822693,1.0435491}; -SS(-0.70236545,-0.13062851,-0.19140485,-0.88905946,-0.098697315,-0.13184676,-0.77267892,0.13105707,-0.24874664,-0.85707128,-0.1416783,-0.34083416){0.5265969,0.8023886,0.65386325,0.85441326}; -SS(-0.39032311,0.63241857,-0.34621958,-0.41651431,0.41690828,-0.5,-0.31289368,0.69974287,-0.5,-0.20381263,0.45499536,-0.5){0.65630059,0.57523437,0.82323564,0.478983}; -SS(0.10162062,0.65400865,-0.37913628,0.25248643,0.73785598,-0.13082591,0.17777709,0.54047543,-0.2567554,0.34412919,0.6158316,-0.3427703){0.5665506,0.60350215,0.36840304,0.59958408}; -SS(-0.58934795,0.84141567,-0.18062024,-0.61115597,1,-0.10200355,-0.74249217,0.75399014,-0.15399718,-0.79370724,0.81084643,0.045877226){1.0736489,1.3611038,1.1267767,1.270911}; -SS(-0.36992714,1,-0.22970445,-0.35455825,0.80859576,-0.32177549,-0.23070339,1,-0.34855306,-0.14847812,0.78021305,-0.27623142){1.1684568,0.86460259,1.1599423,0.68882385}; -SS(-0.79370724,0.81084643,0.045877226,-1,0.77631186,0.00053339564,-0.74249217,0.75399014,-0.15399718,-0.8068077,0.56885008,-0.063754108){1.270911,1.5817554,1.1267767,0.96112076}; -SS(-1,0.77777778,0.5,-0.87046532,0.63071146,0.35630423,-1,0.70725984,0.21334539,-1,0.84108515,0.33242406){1.8402752,1.2666006,1.5286486,1.8031397}; -SS(0.59365279,0.65503723,0.24444947,0.39612945,0.70614162,0.21524614,0.55555177,0.82262944,0.31125158,0.40637652,0.87094343,0.13060843){0.82252715,0.68453461,1.0671623,0.92399337}; -SS(-0.3548152,-0.48825703,0.21848985,-0.3533559,-0.49437708,0.037576204,-0.42889738,-0.75253072,0.17523232,-0.50537844,-0.68762812,0.023695348){0.38862106,0.35575629,0.75958282,0.71483247}; -SS(-0.89426176,0.41257007,-0.12932618,-0.79172217,0.43302343,0.13373134,-0.78848723,0.26584533,-0.068869999,-0.8068077,0.56885008,-0.063754108){0.974079,0.80968993,0.68151298,0.96112076}; -SS(-0.42889738,-0.75253072,0.17523232,-0.19247216,-0.56000521,0.088357129,-0.22656331,-0.68065623,0.28194433,-0.22302806,-0.77703925,0.068353305){0.75958282,0.34206231,0.57683818,0.64063544}; -SS(0.10211023,0.6404511,0.38011645,0.098704003,0.67249079,0.1943501,-0.11618574,0.50328545,0.29980467,-0.043441254,0.79173928,0.29440137){0.55160362,0.47957633,0.33969293,0.69563564}; -SS(-1,-0.11111111,-0.5,-0.85707128,-0.1416783,-0.34083416,-1,-0.33333333,-0.5,-0.73174678,-0.21478859,-0.5){1.2438655,0.85441326,1.3342594,0.81151292}; -SS(0.0011150345,0.93517443,-0.37389303,0.11111111,1,-0.5,0.2222976,1,-0.35617554,0.081865095,0.80626877,-0.27867109){1.0026385,1.2422682,1.1585843,0.71703623}; -SS(-0.67495489,-0.6652659,-0.5,-0.6448883,-0.87343314,-0.36731947,-0.49676106,-0.69523221,-0.26913048,-0.76546557,-0.72634686,-0.27513208){1.1276355,1.296688,0.78043195,1.1696133}; -SS(-0.30949447,0.8262402,0.33528492,-0.22223836,1,0.2622369,-0.1827732,0.83017807,0.5,-0.043441254,0.79173928,0.29440137){0.87388961,1.0984067,0.95598938,0.69563564}; -SS(-0.61674646,0.25215289,0.3447871,-0.41648151,0.41684878,0.5,-0.69937107,0.31347586,0.5,-0.4543958,0.20406131,0.5){0.54607287,0.58097186,0.8165723,0.48353653}; -SS(-0.49391083,0.27907498,-0.27264436,-0.4182056,0.11248126,-0.14182463,-0.49808619,0.0026201378,-0.26387206,-0.29413589,0.046284299,-0.31274881){0.37398026,0.19428145,0.29810596,0.1681493}; -SS(-1,-0.24887753,0.1953112,-0.82279039,-0.18997945,0.10657137,-0.73479965,-0.34302295,0.24038072,-0.82595855,-0.48031431,0.11444494){1.0768014,0.70945047,0.69668046,0.90887195}; -SS(0,0,0.25,-0.1159097,-0.14329028,0.19302206,0,-0.29157012,0.20836692,0,-0.16137283,0.3386068){0.045060365,0.055235283,0.11172813,0.12565914}; -SS(0.8781758,0.86708556,-0.1989731,0.81205362,0.80656044,-0.5,1,0.83864447,-0.33847614,0.85153485,0.65148612,-0.35468846){1.5462283,1.5391707,1.8065101,1.2568282}; -SS(-0.32879066,-0.67072359,-0.5,-0.36340067,-0.87821042,-0.37678589,-0.2399131,-0.76005145,-0.25989531,-0.49676106,-0.69523221,-0.26913048){0.79007105,1.0307746,0.6848256,0.78043195}; -SS(-0.47185361,0.73769401,0.24072705,-0.3132159,0.69976014,0.5,-0.50037,0.79662088,0.5,-0.48141868,0.60085372,0.5){0.80384956,0.82050522,1.1183194,0.82306978}; -SS(0.34720309,0.90097601,-0.12745168,0.49866453,0.63973666,-0.21510859,0.25248643,0.73785598,-0.13082591,0.33386283,0.81592026,-0.31808704){0.93504792,0.68344633,0.60350215,0.86115027}; -SS(-0.41843781,0.30742585,0.3397996,-0.24000819,0.17660305,0.5,-0.26986228,0.26051837,0.22418657,-0.11614487,0.30919383,0.33918095){0.37011438,0.3210912,0.1749353,0.20820823}; -SS(-0.50537844,-0.68762812,0.023695348,-0.35582611,-0.64426575,-0.070000747,-0.49676106,-0.69523221,-0.26913048,-0.52487586,-0.5117405,-0.017639258){0.71483247,0.52757348,0.78043195,0.51812974}; -SS(-0.62341011,-0.46880832,-0.38153973,-0.67495489,-0.6652659,-0.5,-0.76546557,-0.72634686,-0.27513208,-0.81387526,-0.53653555,-0.3209601){0.73807879,1.1276355,1.1696133,1.0406635}; -SS(-0.73479965,-0.34302295,0.24038072,-0.65367362,-0.16081953,0.0014934597,-0.76760867,-0.33664988,-0.028298027,-0.82279039,-0.18997945,0.10657137){0.69668046,0.4344691,0.68479998,0.70945047}; -SS(-0.77267892,0.13105707,-0.24874664,-0.65355936,0.25468043,-0.1897796,-0.49808619,0.0026201378,-0.26387206,-0.62938155,0.17932964,-0.37445272){0.65386325,0.51379882,0.29810596,0.55109073}; -SS(-0.18136176,0.40461939,0.5,-0.11614487,0.30919383,0.33918095,-0.11618574,0.50328545,0.29980467,0.085954007,0.41736025,0.32943097){0.42386795,0.20820823,0.33969293,0.27115576}; -SS(-0.63246299,0.29145388,0.035195127,-0.54640726,0.34339216,0.19847863,-0.52427834,0.10778268,0.27208728,-0.5555987,0.045150158,0.095162244){0.47226275,0.43575493,0.34448415,0.29993682}; -SS(-0.056808231,0.14323286,-0.13367928,0,0,-6.9388939e-15,-0.28278924,0.041190137,-0.04219563,-0.098950987,-0.13391411,-0.14594667){0.022140076,-0.017891206,0.063480395,0.03512721}; -SS(0.81205362,0.80656044,-0.5,0.8781758,0.86708556,-0.1989731,0.82865019,1,-0.3214153,0.68900489,0.77311276,-0.28043733){1.5391707,1.5462283,1.7714679,1.1326816}; -SS(0.25248643,0.73785598,-0.13082591,0.10162062,0.65400865,-0.37913628,0.081865095,0.80626877,-0.27867109,0.33386283,0.81592026,-0.31808704){0.60350215,0.5665506,0.71703623,0.86115027}; -SS(0.68966181,1,0.19790566,0.40637652,0.87094343,0.13060843,0.43654676,1,0.2604635,0.62860594,0.86645525,0.049037492){1.492557,0.92399337,1.2403655,1.1303867}; -SS(-0.11614487,0.30919383,0.33918095,0.11523872,0.30161582,0.5,-0.18136176,0.40461939,0.5,-0.045146113,0.19012269,0.5){0.20820823,0.33546792,0.42386795,0.27176836}; -SS(0.33333333,1,-0.5,0.11111111,1,-0.5,0.21543771,0.73213875,-0.5,0.2222976,1,-0.35617554){1.342474,1.2422682,0.81134051,1.1585843}; -SS(-0.35582611,-0.64426575,-0.070000747,-0.3533559,-0.49437708,0.037576204,-0.36174,-0.40052234,-0.23665811,-0.52487586,-0.5117405,-0.017639258){0.52757348,0.35575629,0.32480953,0.51812974}; -SS(-0.18618058,-0.5161726,-0.15035515,0,-0.49997946,0.00010199173,0,-0.70830496,-0.20826096,0,-0.49997234,-0.27965571){0.30914003,0.22811872,0.5287181,0.30906942}; -SS(-1,0.70529035,-0.21162945,-0.8068077,0.56885008,-0.063754108,-1,0.47527469,-0.27513051,-0.80558396,0.5878127,-0.29244037){1.520296,0.96112076,1.2834809,1.0616703}; -SS(-0.41843781,0.30742585,0.3397996,-0.41648151,0.41684878,0.5,-0.24000819,0.17660305,0.5,-0.18136176,0.40461939,0.5){0.37011438,0.58097186,0.3210912,0.42386795}; -SS(0.46476684,0.14382827,0.12247557,0.50010751,0,-0.00013054911,0.29175541,0,0.20824909,0.22032809,0,-9.1119885e-05){0.23450402,0.22823279,0.1093371,0.027339551}; -SS(-0.50159539,-0.29258506,7.2987381e-06,-0.61549046,-0.35581383,-0.12962263,-0.36174,-0.40052234,-0.23665811,-0.52487586,-0.5117405,-0.017639258){0.32068114,0.50877487,0.32480953,0.51812974}; -SS(-0.1159097,-0.14329028,0.19302206,-0.34310942,-0.010167032,0.1509038,-0.25897908,-0.24013326,0.26450313,-0.20045203,0.067929244,0.29301468){0.055235283,0.12661586,0.17775565,0.10955402}; -SS(-0.58258855,0.14037208,-0.067351147,-0.4182056,0.11248126,-0.14182463,-0.49391083,0.27907498,-0.27264436,-0.39654734,0.26661646,0.019312696){0.34532741,0.19428145,0.37398026,0.20710489}; -SS(-0.63246299,0.29145388,0.035195127,-0.54640726,0.34339216,0.19847863,-0.7489605,0.18190923,0.13647301,-0.52427834,0.10778268,0.27208728){0.47226275,0.43575493,0.59564173,0.34448415}; -SS(-0.73479965,-0.34302295,0.24038072,-0.59094649,-0.40495207,0.12834587,-0.76760867,-0.33664988,-0.028298027,-0.65367362,-0.16081953,0.0014934597){0.69668046,0.51475101,0.68479998,0.4344691}; -SS(-0.39806707,0.15776443,0.15870839,-0.28278924,0.041190137,-0.04219563,-0.5555987,0.045150158,0.095162244,-0.4182056,0.11248126,-0.14182463){0.19317292,0.063480395,0.29993682,0.19428145}; -SS(-0.35582611,-0.64426575,-0.070000747,-0.14850787,-0.69358405,-0.087583548,-0.22302806,-0.77703925,0.068353305,-0.42066299,-0.84356131,-0.12906413){0.52757348,0.49763432,0.64063544,0.88525127}; -SS(1,0.50005385,0.27984222,0.87272604,0.35900693,0.37172569,0.6902006,0.50015172,0.27072419,0.84582719,0.572243,0.1361951){1.3085441,1.0107603,0.77938072,1.0417018}; -SS(-0.7489605,0.18190923,0.13647301,-0.63246299,0.29145388,0.035195127,-0.52427834,0.10778268,0.27208728,-0.5555987,0.045150158,0.095162244){0.59564173,0.47226275,0.34448415,0.29993682}; -SS(-0.45563594,0.60375179,0.095527884,-0.2401666,0.74114092,-0.051302261,-0.48952189,0.78345034,0.019065462,-0.32294154,0.86180803,0.13108841){0.56263538,0.58653028,0.83409809,0.84829643}; -SS(-0.47185361,0.73769401,0.24072705,-0.52470763,0.46530444,0.33754711,-0.67801153,0.56076489,0.29217382,-0.45563594,0.60375179,0.095527884){0.80384956,0.59371518,0.83617727,0.56263538}; -SS(0.81205362,0.80656044,-0.5,0.8781758,0.86708556,-0.1989731,0.68900489,0.77311276,-0.28043733,0.85153485,0.65148612,-0.35468846){1.5391707,1.5462283,1.1326816,1.2568282}; -SS(-1,-0.5000565,0.0033661208,-0.85520613,-0.46088631,-0.14784569,-1,-0.70523324,-0.21165758,-1,-0.47540235,-0.27521785){1.2263361,0.95161001,1.5222776,1.2841965}; -SS(-0.3548152,-0.48825703,0.21848985,-0.37661764,-0.26006406,0.40868766,-0.25897908,-0.24013326,0.26450313,-0.50874333,-0.23900991,0.2620444){0.38862106,0.36234206,0.17775565,0.36443271}; -SS(-0.42889738,-0.75253072,0.17523232,-0.63815223,-0.88141187,0.37488811,-0.57994589,-0.69256437,0.31204703,-0.61978497,-0.82706917,0.12738472){0.75958282,1.3088768,0.89957508,1.0681409}; -SS(-0.62341011,-0.46880832,-0.38153973,-0.49292178,-0.37477565,-0.5,-0.73174678,-0.21478859,-0.5,-0.56113743,-0.28920115,-0.29204918){0.73807879,0.6115465,0.81151292,0.46850822}; -SS(0.52843461,0.32737897,0.19102935,0.47723835,0.52605258,0.30619083,0.6902006,0.50015172,0.27072419,0.52218723,0.46943947,0.022097553){0.40790135,0.58228229,0.77938072,0.46892029}; -SS(-0.6448883,-0.87343314,-0.36731947,-0.63348211,-0.7706683,-0.074889286,-0.49676106,-0.69523221,-0.26913048,-0.76546557,-0.72634686,-0.27513208){1.296688,0.97907785,0.78043195,1.1696133}; -SS(0.11583535,0.30145324,-0.5,0.09693172,0.3918681,-0.3370861,-0.010543702,0.17712261,-0.5,0.20129651,0.21389912,-0.31902192){0.33954703,0.26256104,0.25750364,0.16839385}; -SS(-0.35582611,-0.64426575,-0.070000747,-0.26056819,-0.54975154,-0.34323516,-0.36174,-0.40052234,-0.23665811,-0.18618058,-0.5161726,-0.15035515){0.52757348,0.46884495,0.32480953,0.30914003}; -SS(-0.26297351,0.20404986,-0.17122089,-0.056808231,0.14323286,-0.13367928,-0.29413589,0.046284299,-0.31274881,-0.1182182,0.15955837,-0.3159857){0.12773981,0.022140076,0.1681493,0.11990198}; -SS(1,1,-6.9388939e-15,0.77861211,0.77861193,-0.067175459,1,0.77979347,0.00010253841,0.78186447,1,3.3673518e-05){1.9807485,1.1981052,1.5887874,1.5923176}; -SS(0.8781758,0.86708556,-0.1989731,1,1,-6.9388939e-15,0.78186447,1,3.3673518e-05,0.77861211,0.77861193,-0.067175459){1.5462283,1.9807485,1.5923176,1.1981052}; -SS(1,1,-6.9388939e-15,0.8781758,0.86708556,-0.1989731,1,0.77979347,0.00010253841,0.77861211,0.77861193,-0.067175459){1.9807485,1.5462283,1.5887874,1.1981052}; -SS(-0.87046532,0.63071146,0.35630423,-1,0.77777778,0.5,-1,0.55555556,0.5,-0.80481649,0.80494069,0.5){1.2666006,1.8402752,1.5401154,1.5232843}; -SS(-1,0.70529035,-0.21162945,-0.89962374,0.8609561,-0.16698164,-1,0.77631186,0.00053339564,-0.74249217,0.75399014,-0.15399718){1.520296,1.5692753,1.5817554,1.1267767}; -SS(-0.55555556,1,-0.5,-0.65756371,0.81308934,-0.3429452,-0.77777778,1,-0.5,-0.80479144,0.80504612,-0.5){1.5379273,1.1958888,1.8319852,1.5255891}; -SS(-0.64012388,-0.10177177,-0.37237302,-0.77267892,0.13105707,-0.24874664,-0.49808619,0.0026201378,-0.26387206,-0.62938155,0.17932964,-0.37445272){0.54269073,0.65386325,0.29810596,0.55109073}; -SS(-0.34310942,-0.010167032,0.1509038,-0.40506391,-0.079541407,0.3303193,-0.25897908,-0.24013326,0.26450313,-0.20045203,0.067929244,0.29301468){0.12661586,0.26156128,0.17775565,0.10955402}; -SS(-0.056808231,0.14323286,-0.13367928,0.08017426,0.31429474,-0.16745504,-0.12449617,0.36606215,-0.28273955,-0.096302334,0.43534175,-0.056072844){0.022140076,0.11103103,0.21185338,0.18078295}; -SS(-0.22019153,-1,-0.00010416607,-0.36608751,-0.8951802,0.074405883,-0.22302806,-0.77703925,0.068353305,-0.42066299,-0.84356131,-0.12906413){1.0287732,0.92652515,0.64063544,0.88525127}; -SS(0.75,0,-0.5,0.83867599,0,-0.33865964,0.81149777,0.18885984,-0.5,0.6251418,0.1440922,-0.5){0.79494611,0.80182539,0.92750237,0.63751638}; -SS(0,-0.75,0.5,0,-0.83845667,0.33864852,-0.18863677,-0.81113033,0.5,-0.14394692,-0.62481063,0.5){0.79557901,0.80178572,0.92459822,0.63866347}; -SS(0.87867265,0.36391919,-0.37720578,1,0.50010355,-0.27968748,0.75922048,0.56990614,-0.17060419,0.82562789,0.37565656,-0.12707714){1.03034,1.3071084,0.91133836,0.82387041}; -SS(0.46476684,0.14382827,0.12247557,0.50010751,0,-0.00013054911,0.22032809,0,-9.1119885e-05,0.36021608,0.23247759,-0.012351094){0.23450402,0.22823279,0.027339551,0.16110593}; -SS(0.64232771,0.84838332,0.46476191,0.68966181,1,0.19790566,0.76099919,0.76690574,0.25750996,0.55555177,0.82262944,0.31125158){1.3339184,1.492557,1.2143065,1.0671623}; -SS(-0.056808231,0.14323286,-0.13367928,0,0,-0.25,-0.1182182,0.15955837,-0.3159857,0.13402468,0.11673163,-0.1460819){0.022140076,0.044304329,0.11990198,0.039337265}; -SS(1,0.29178008,0.20838772,0.87272604,0.35900693,0.37172569,0.77315808,0.36766952,0.075951375,0.73568363,0.23203612,0.2735765){1.1084285,1.0107603,0.71793497,0.6509231}; -SS(-0.6448883,-0.87343314,-0.36731947,-0.70823063,-1,-0.20843533,-0.63348211,-0.7706683,-0.074889286,-0.76546557,-0.72634686,-0.27513208){1.296688,1.5240742,0.97907785,1.1696133}; -SS(0.21543771,0.73213875,-0.5,0.33386283,0.81592026,-0.31808704,0.2222976,1,-0.35617554,0.081865095,0.80626877,-0.27867109){0.81134051,0.86115027,1.1585843,0.71703623}; -SS(0.37137652,0.1767682,-0.19801193,0.50010751,0,-0.00013054911,0.29173763,0,-0.20843742,0.50007058,0,-0.27987971){0.19205628,0.22823279,0.1134179,0.31006895}; -SS(-1,-0.55555556,-0.5,-0.81387526,-0.53653555,-0.3209601,-0.78315651,-0.45008839,-0.5,-1,-0.47540235,-0.27521785){1.5366945,1.0406635,1.0467962,1.2841965}; -SS(-0.61115597,1,-0.10200355,-0.61311838,0.85766427,0.15491279,-0.74954172,1,0.13574231,-0.79370724,0.81084643,0.045877226){1.3611038,1.1216468,1.562759,1.270911}; -SS(0.69383766,0.49492178,-0.021800115,0.77315808,0.36766952,0.075951375,0.6902006,0.50015172,0.27072419,0.52218723,0.46943947,0.022097553){0.71284258,0.71793497,0.77938072,0.46892029}; -SS(-0.50014045,0.79673357,-0.5,-0.35455825,0.80859576,-0.32177549,-0.56041637,1,-0.29784853,-0.65756371,0.81308934,-0.3429452){1.1145783,0.86460259,1.3856141,1.1958888}; -SS(1,0.70834898,0.20844998,0.88049681,0.87960137,0.13412341,1,0.77979347,0.00010253841,0.84582719,0.572243,0.1361951){1.5291243,1.5518824,1.5887874,1.0417018}; -SS(0.42864323,0.48543211,-0.13804456,0.49866453,0.63973666,-0.21510859,0.67125235,0.44297685,-0.31879306,0.48047723,0.47791267,-0.33071402){0.42022283,0.68344633,0.72773009,0.55795418}; -SS(0.77315808,0.36766952,0.075951375,0.87272604,0.35900693,0.37172569,0.6902006,0.50015172,0.27072419,0.73568363,0.23203612,0.2735765){0.71793497,1.0107603,0.77938072,0.6509231}; -SS(-0.29261734,0.53193925,0.43339885,-0.35521568,0.4957142,0.26668635,-0.11618574,0.50328545,0.29980467,-0.11614487,0.30919383,0.33918095){0.53993003,0.42001946,0.33969293,0.20820823}; -SS(-0.65355936,0.25468043,-0.1897796,-0.58258855,0.14037208,-0.067351147,-0.77267892,0.13105707,-0.24874664,-0.49808619,0.0026201378,-0.26387206){0.51379882,0.34532741,0.65386325,0.29810596}; -SS(-0.50159539,-0.29258506,7.2987381e-06,-0.59094649,-0.40495207,0.12834587,-0.50874333,-0.23900991,0.2620444,-0.65367362,-0.16081953,0.0014934597){0.32068114,0.51475101,0.36443271,0.4344691}; -SS(0,-0.49997946,0.00010199173,-0.19247216,-0.56000521,0.088357129,0,-0.7082575,0.2084616,0,-0.49989758,0.27983937){0.22811872,0.34206231,0.52387062,0.30650831}; -SS(-0.26056819,-0.54975154,-0.34323516,-0.32879066,-0.67072359,-0.5,-0.2399131,-0.76005145,-0.25989531,-0.49676106,-0.69523221,-0.26913048){0.46884495,0.79007105,0.6848256,0.78043195}; -SS(0.59365279,0.65503723,0.24444947,0.65062064,0.64268786,0.069510863,0.45788353,0.76094781,-0.0096633567,0.62860594,0.86645525,0.049037492){0.82252715,0.82620698,0.76853994,1.1303867}; -SS(-0.48255002,0.69900846,-0.19155417,-0.4433427,0.53576375,-0.12560501,-0.24654336,0.57133462,-0.25396354,-0.2401666,0.74114092,-0.051302261){0.74365966,0.48429505,0.42991415,0.58653028}; -SS(0.37492492,0.49312259,0.5,0.35567295,0.65317229,0.39545235,0.45042372,0.78359022,0.5,0.5725222,0.50074158,0.5){0.61809871,0.69293227,1.0496179,0.8121357}; -SS(0.25248643,0.73785598,-0.13082591,0.10162062,0.65400865,-0.37913628,0.33386283,0.81592026,-0.31808704,0.34412919,0.6158316,-0.3427703){0.60350215,0.5665506,0.86115027,0.59958408}; -SS(-0.77777778,1,-0.5,-1,1,-0.5,-0.80479144,0.80504612,-0.5,-1,0.83964442,-0.3309874){1.8319852,2.2287589,1.5255891,1.7979585}; -SS(-0.67616985,-0.069078192,0.18801024,-0.5555987,0.045150158,0.095162244,-0.52427834,0.10778268,0.27208728,-0.40506391,-0.079541407,0.3303193){0.47948004,0.29993682,0.34448415,0.26156128}; -SS(-0.60421932,0.82298164,0.34468578,-0.55555556,1,0.5,-0.77777778,1,0.5,-0.80481649,0.80494069,0.5){1.1449713,1.5418081,1.8407438,1.5232843}; -SS(0.49866453,0.63973666,-0.21510859,0.42864323,0.48543211,-0.13804456,0.25248643,0.73785598,-0.13082591,0.34412919,0.6158316,-0.3427703){0.68344633,0.42022283,0.60350215,0.59958408}; -SS(-0.4999534,-1,0.27968311,-0.63815223,-0.88141187,0.37488811,-0.42889738,-0.75253072,0.17523232,-0.61978497,-0.82706917,0.12738472){1.3075402,1.3088768,0.75958282,1.0681409}; -SS(-0.098708274,0.55956225,0.10505678,-0.20984637,0.69532212,0.20809493,-0.11618574,0.50328545,0.29980467,-0.043441254,0.79173928,0.29440137){0.31633913,0.55022745,0.33969293,0.69563564}; -SS(0.34412919,0.6158316,-0.3427703,0.37549445,0.49317282,-0.5,0.21543771,0.73213875,-0.5,0.45062041,0.7833899,-0.5){0.59958408,0.61648995,0.81134051,1.0506853}; -SS(0.64232771,0.84838332,0.46476191,0.68966181,1,0.19790566,0.82853688,1,0.32125076,0.76099919,0.76690574,0.25750996){1.3339184,1.492557,1.7703132,1.2143065}; -SS(0.40637652,0.87094343,0.13060843,0.68966181,1,0.19790566,0.43654676,1,0.2604635,0.55555177,0.82262944,0.31125158){0.92399337,1.492557,1.2403655,1.0671623}; -SS(-0.0073778212,0.36022468,0.15230712,0.18202227,0.38279251,0.10350409,0.086744979,0.52712982,0.027891324,0.085954007,0.41736025,0.32943097){0.13675819,0.17617817,0.26660844,0.27115576}; -SS(-0.349759,-0.84853211,0.35590634,-0.42889738,-0.75253072,0.17523232,-0.22656331,-0.68065623,0.28194433,-0.22302806,-0.77703925,0.068353305){0.94981364,0.75958282,0.57683818,0.64063544}; -SS(0.40637652,0.87094343,0.13060843,0.68966181,1,0.19790566,0.55555177,0.82262944,0.31125158,0.62860594,0.86645525,0.049037492){0.92399337,1.492557,1.0671623,1.1303867}; -SS(0,-0.83845667,0.33864852,-0.22656331,-0.68065623,0.28194433,-0.18863677,-0.81113033,0.5,-0.14394692,-0.62481063,0.5){0.80178572,0.57683818,0.92459822,0.63866347}; -SS(0.6902006,0.50015172,0.27072419,0.59365279,0.65503723,0.24444947,0.52218723,0.46943947,0.022097553,0.47723835,0.52605258,0.30619083){0.77938072,0.82252715,0.46892029,0.58228229}; -SS(0.11136938,1,0.13859714,-0.043441254,0.79173928,0.29440137,-0.084253952,1,0.13733396,-0.035654771,0.78507762,0.045007896){1.0072058,0.69563564,1.0073117,0.60161266}; -SS(-0.64012388,-0.10177177,-0.37237302,-0.70236545,-0.13062851,-0.19140485,-0.77267892,0.13105707,-0.24874664,-0.85707128,-0.1416783,-0.34083416){0.54269073,0.5265969,0.65386325,0.85441326}; -SS(0.8988736,0.63809662,-0.070284173,1,0.70844226,-0.20827687,0.75922048,0.56990614,-0.17060419,0.85153485,0.65148612,-0.35468846){1.2046527,1.5310675,0.91133836,1.2568282}; -SS(-0.4433427,0.53576375,-0.12560501,-0.32064519,0.49448821,1.4739833e-06,-0.2401666,0.74114092,-0.051302261,-0.45563594,0.60375179,0.095527884){0.48429505,0.32892635,0.58653028,0.56263538}; -SS(-0.12988976,-0.86995226,0.20452896,-0.22656331,-0.68065623,0.28194433,-0.22302806,-0.77703925,0.068353305,-0.349759,-0.84853211,0.35590634){0.79894991,0.57683818,0.64063544,0.94981364}; -SS(0.24635331,0.35131343,-0.096025322,0.30434906,0.49798107,-4.0114635e-05,0.17777709,0.54047543,-0.2567554,0.086744979,0.52712982,0.027891324){0.18045455,0.32377482,0.36840304,0.26660844}; -SS(-0.49292178,-0.37477565,-0.5,-0.62341011,-0.46880832,-0.38153973,-0.73174678,-0.21478859,-0.5,-0.78315651,-0.45008839,-0.5){0.6115465,0.73807879,0.81151292,1.0467962}; -SS(-0.89646962,-0.32955067,0.34017365,-1,-0.11111111,0.5,-0.73174745,-0.21491043,0.5,-0.84084014,-0.14895162,0.31636914){1.0133061,1.2390062,0.81377033,0.81273381}; -SS(0.18202227,0.38279251,0.10350409,0.098704003,0.67249079,0.1943501,0.26138985,0.51848551,0.281015,0.086744979,0.52712982,0.027891324){0.17617817,0.47957633,0.40200156,0.26660844}; -SS(-1,-0.24887753,0.1953112,-0.84289574,0.018333867,0.1608607,-1,-0.00012222908,0.26646899,-0.82279039,-0.18997945,0.10657137){1.0768014,0.72430843,1.0506696,0.70945047}; -SS(0.67112401,0.32933441,0.5,0.50761134,0.34933779,0.39015973,0.6902006,0.50015172,0.27072419,0.73568363,0.23203612,0.2735765){0.79210069,0.51484928,0.77938072,0.6509231}; -SS(-0.3533559,-0.49437708,0.037576204,-0.3548152,-0.48825703,0.21848985,-0.23583358,-0.36008743,0.0071767184,-0.3727858,-0.19869367,0.11195566){0.35575629,0.38862106,0.16465457,0.16948569}; -SS(0.75922048,0.56990614,-0.17060419,0.85153485,0.65148612,-0.35468846,0.68900489,0.77311276,-0.28043733,0.77861211,0.77861193,-0.067175459){0.91133836,1.2568282,1.1326816,1.1981052}; -SS(-0.65776896,0.64141588,0.074371921,-0.67801153,0.56076489,0.29217382,-0.47185361,0.73769401,0.24072705,-0.76389013,0.77728265,0.25513738){0.83514199,0.83617727,0.80384956,1.2358334}; -SS(0.68900489,0.77311276,-0.28043733,0.8781758,0.86708556,-0.1989731,0.77861211,0.77861193,-0.067175459,0.85153485,0.65148612,-0.35468846){1.1326816,1.5462283,1.1981052,1.2568282}; -SS(0.09693172,0.3918681,-0.3370861,0.08017426,0.31429474,-0.16745504,-0.12449617,0.36606215,-0.28273955,-0.1182182,0.15955837,-0.3159857){0.26256104,0.11103103,0.21185338,0.11990198}; -SS(-0.16707278,-0.087678023,-0.31121894,0,0,-0.25,-0.1182182,0.15955837,-0.3159857,-0.056808231,0.14323286,-0.13367928){0.11599041,0.044304329,0.11990198,0.022140076}; -SS(-0.92571354,0.17249619,-0.34283108,-1,0.33333333,-0.5,-1,0.25105097,-0.19350143,-0.83127473,0.33505962,-0.32026923){0.99158484,1.3393331,1.0825888,0.89071695}; -SS(0.11458044,0.70010244,0.010073529,-0.0089783977,0.64320989,-0.13441642,0.17777709,0.54047543,-0.2567554,0.086744979,0.52712982,0.027891324){0.49378055,0.41358858,0.36840304,0.26660844}; -SS(-0.24163432,0.33561251,-0.055881164,-0.12449617,0.36606215,-0.28273955,-0.096302334,0.43534175,-0.056072844,-0.056808231,0.14323286,-0.13367928){0.16437697,0.21185338,0.18078295,0.022140076}; -SS(-0.22302806,-0.77703925,0.068353305,0,-1,-6.9388939e-15,-0.22019153,-1,-0.00010416607,0,-0.77970171,0.00010845427){0.64063544,0.98008605,1.0287732,0.58842154}; -SS(-0.38143574,0.84373572,-0.12387887,-0.36992714,1,-0.22970445,-0.14847812,0.78021305,-0.27623142,-0.35455825,0.80859576,-0.32177549){0.85864479,1.1684568,0.68882385,0.86460259}; -SS(-0.40408872,0.18166381,-0.5,-0.31377045,0.30492781,-0.36427962,-0.49391083,0.27907498,-0.27264436,-0.29413589,0.046284299,-0.31274881){0.42526168,0.30770932,0.37398026,0.1681493}; -SS(-0.222315,1,-0.00011890035,-0.32294154,0.86180803,0.13108841,-0.2401666,0.74114092,-0.051302261,-0.035654771,0.78507762,0.045007896){1.0307381,0.84829643,0.58653028,0.60161266}; -SS(0.70841775,0,-0.20847891,0.57129187,0.13526053,-0.13726946,0.77491511,0.22516452,-0.26425516,0.51910919,0.22553632,-0.31417891){0.52293439,0.35115136,0.70313431,0.40112301}; -SS(0,0,0.25,-0.20045203,0.067929244,0.29301468,0,-0.16137283,0.3386068,-0.17669296,0.011023676,0.5){0.045060365,0.10955402,0.12565914,0.26322593}; -SS(-0.24654336,0.57133462,-0.25396354,-0.35455825,0.80859576,-0.32177549,-0.2401666,0.74114092,-0.051302261,-0.14847812,0.78021305,-0.27623142){0.42991415,0.86460259,0.58653028,0.68882385}; -SS(-0.16643696,-0.21791406,0.42402077,0,-0.25,0.5,-0.23048975,-0.37484721,0.5,-0.1853821,-0.42358473,0.30866054){0.23818505,0.28720824,0.42714666,0.29143101}; -SS(-0.12988976,-0.86995226,0.20452896,0,-1,-6.9388939e-15,-0.22019153,-1,-0.00010416607,-0.22302806,-0.77703925,0.068353305){0.79894991,0.98008605,1.0287732,0.64063544}; -SS(0,-1,-6.9388939e-15,-0.12988976,-0.86995226,0.20452896,0,-0.77970171,0.00010845427,-0.22302806,-0.77703925,0.068353305){0.98008605,0.79894991,0.58842154,0.64063544}; -SS(-0.83996275,-0.66999882,0.11765553,-1,-0.5000565,0.0033661208,-1,-0.47520831,0.27427507,-0.82595855,-0.48031431,0.11444494){1.1553131,1.2263361,1.2822693,0.90887195}; -SS(0.60662231,0.34516964,-0.13972301,0.42864323,0.48543211,-0.13804456,0.36021608,0.23247759,-0.012351094,0.52218723,0.46943947,0.022097553){0.48782847,0.42022283,0.16110593,0.46892029}; -SS(-0.16643696,-0.21791406,0.42402077,-0.30122568,-0.11513872,0.5,-0.17669296,0.011023676,0.5,-0.20045203,0.067929244,0.29301468){0.23818505,0.33848202,0.26322593,0.10955402}; -SS(0.49866453,0.63973666,-0.21510859,0.61535375,0.70719289,-0.095218388,0.45788353,0.76094781,-0.0096633567,0.42864323,0.48543211,-0.13804456){0.68344633,0.87858083,0.76853994,0.42022283}; -SS(-0.83996275,-0.66999882,0.11765553,-1,-0.5000565,0.0033661208,-1,-0.70710233,0.21356199,-1,-0.47520831,0.27427507){1.1553131,1.2263361,1.5280688,1.2822693}; -SS(-0.014815866,1,0.31001515,-0.11111111,1,0.5,-0.22223836,1,0.2622369,-0.1827732,0.83017807,0.5){1.0772324,1.2487078,1.0984067,0.95598938}; -SS(-0.79644003,0.50064951,-0.5,-1,0.55555556,-0.5,-1,0.33333333,-0.5,-1,0.47527469,-0.27513051){1.115532,1.5309384,1.3393331,1.2834809}; -SS(-0.67616985,-0.069078192,0.18801024,-0.65367362,-0.16081953,0.0014934597,-0.73479965,-0.34302295,0.24038072,-0.82279039,-0.18997945,0.10657137){0.47948004,0.4344691,0.69668046,0.70945047}; -SS(-0.1853821,-0.42358473,0.30866054,0,-0.49989758,0.27983937,-0.14394692,-0.62481063,0.5,-0.22656331,-0.68065623,0.28194433){0.29143101,0.30650831,0.63866347,0.57683818}; -SS(0.40637652,0.87094343,0.13060843,0.11136938,1,0.13859714,0.24937941,1,-0.00011138016,0.24404834,0.79519787,0.082231238){0.92399337,1.0072058,1.0446566,0.68472542}; -SS(-0.89646962,-0.32955067,0.34017365,-1,-0.11111111,0.5,-1,-0.33333333,0.5,-0.73174745,-0.21491043,0.5){1.0133061,1.2390062,1.3443603,0.81377033}; -SS(0.33333333,1,0.5,0.36841015,0.87909734,0.37310922,0.11111111,1,0.5,0.23106485,1,0.31398279){1.3466764,1.0362544,1.2368521,1.1340577}; -SS(0,0,-0.5,0.25,0,-0.5,-0.010543702,0.17712261,-0.5,0.16149165,0,-0.33864688){0.23465449,0.28810477,0.25750364,0.12746835}; -SS(-0.349759,-0.84853211,0.35590634,-0.32897755,-0.67088709,0.5,-0.50400314,-0.78879927,0.5,-0.18863677,-0.81113033,0.5){0.94981364,0.79643001,1.1086821,0.92459822}; -SS(0.4450496,1,-0.00012892076,0.40637652,0.87094343,0.13060843,0.43654676,1,0.2604635,0.24937941,1,-0.00011138016){1.179155,0.92399337,1.2403655,1.0446566}; -SS(1,0.50009037,3.487572e-05,0.82562789,0.37565656,-0.12707714,1,0.2203628,5.6826691e-05,0.77315808,0.36766952,0.075951375){1.2275825,0.82387041,1.0268649,0.71793497}; -SS(-0.16643696,-0.21791406,0.42402077,0,-0.25,0.5,0,-0.29157012,0.20836692,0,-0.16137283,0.3386068){0.23818505,0.28720824,0.11172813,0.12565914}; -SS(-0.86742481,-0.86548068,-0.14483364,-1,-1,-0.25,-1,-0.70523324,-0.21165758,-1,-0.83959635,-0.33115777){1.5085891,2.0422973,1.5222776,1.7998257}; -SS(-1,0.70529035,-0.21162945,-0.89426176,0.41257007,-0.12932618,-1,0.47527469,-0.27513051,-0.8068077,0.56885008,-0.063754108){1.520296,0.974079,1.2834809,0.96112076}; -SS(0.098704003,0.67249079,0.1943501,-0.098708274,0.55956225,0.10505678,-0.11618574,0.50328545,0.29980467,-0.043441254,0.79173928,0.29440137){0.47957633,0.31633913,0.33969293,0.69563564}; -SS(-1,0.55555556,0.5,-0.79641575,0.50054117,0.5,-1,0.33333333,0.5,-1,0.4752276,0.27420758){1.5401154,1.1180299,1.3403692,1.2803563}; -SS(-0.67513028,-0.66529728,0.5,-0.79575191,-0.55547687,0.30538166,-0.78327322,-0.45013966,0.5,-0.56348952,-0.47594309,0.3052276){1.1284607,1.0192798,1.0435491,0.61776713}; -SS(0.45788353,0.76094781,-0.0096633567,0.61535375,0.70719289,-0.095218388,0.52218723,0.46943947,0.022097553,0.42864323,0.48543211,-0.13804456){0.76853994,0.87858083,0.46892029,0.42022283}; -SS(1,0.5,-0.5,0.85153485,0.65148612,-0.35468846,1,0.75,-0.5,0.78906409,0.5041626,-0.5){1.4840091,1.2568282,1.7924126,1.1105402}; -SS(0,0,0.5,-0.16643696,-0.21791406,0.42402077,0,-0.25,0.5,-0.17669296,0.011023676,0.5){0.23153294,0.23818505,0.28720824,0.26322593}; -SS(-1,0.33333333,0.5,-0.83851866,0.33014205,0.32623765,-1,0.24865949,0.19540364,-1,0.4752276,0.27420758){1.3403692,0.89937894,1.0814407,1.2803563}; -SS(-0.50014045,0.79673357,-0.5,-0.39032311,0.63241857,-0.34621958,-0.65756371,0.81308934,-0.3429452,-0.6293812,0.63993291,-0.28812602){1.1145783,0.65630059,1.1958888,0.87296464}; -SS(-0.78315651,-0.45008839,-0.5,-1,-0.33333333,-0.5,-1,-0.55555556,-0.5,-1,-0.47540235,-0.27521785){1.0467962,1.3342594,1.5366945,1.2841965}; -SS(-0.2399131,-0.76005145,-0.25989531,-0.14850787,-0.69358405,-0.087583548,-0.42066299,-0.84356131,-0.12906413,-0.12233239,-0.87748906,-0.13583418){0.6848256,0.49763432,0.88525127,0.78823805}; -SS(-0.19247216,-0.56000521,0.088357129,-0.3548152,-0.48825703,0.21848985,-0.42889738,-0.75253072,0.17523232,-0.22656331,-0.68065623,0.28194433){0.34206231,0.38862106,0.75958282,0.57683818}; -SS(-1,0.33333333,-0.5,-0.83127473,0.33505962,-0.32026923,-0.79644003,0.50064951,-0.5,-1,0.47527469,-0.27513051){1.3393331,0.89071695,1.115532,1.2834809}; -SS(-1,0.33333333,0.5,-0.83851866,0.33014205,0.32623765,-1,0.4752276,0.27420758,-0.79641575,0.50054117,0.5){1.3403692,0.89937894,1.2803563,1.1180299}; -SS(-0.39032311,0.63241857,-0.34621958,-0.48255002,0.69900846,-0.19155417,-0.65756371,0.81308934,-0.3429452,-0.6293812,0.63993291,-0.28812602){0.65630059,0.74365966,1.1958888,0.87296464}; -SS(-0.3548152,-0.48825703,0.21848985,-0.37661764,-0.26006406,0.40868766,-0.56348952,-0.47594309,0.3052276,-0.34549718,-0.50098866,0.4105565){0.38862106,0.36234206,0.61776713,0.5260109}; -SS(-0.3132159,0.69976014,0.5,-0.29261734,0.53193925,0.43339885,-0.30949447,0.8262402,0.33528492,-0.16015893,0.67694077,0.39025863){0.82050522,0.53993003,0.87388961,0.6265216}; -SS(-1,-1,0.25,-0.8827276,-0.88146034,0.13123348,-1,-0.70710233,0.21356199,-1,-0.84092895,0.33252059){2.0427074,1.5595365,1.5280688,1.8030746}; -SS(-0.61978497,-0.82706917,0.12738472,-0.49998858,-1,-4.7037318e-05,-0.77973152,-1,-0.0001062007,-0.63348211,-0.7706683,-0.074889286){1.0681409,1.2276085,1.588155,0.97907785}; -SS(-0.033588837,0.5879061,0.5,0.085954007,0.41736025,0.32943097,-0.18136176,0.40461939,0.5,-0.11618574,0.50328545,0.29980467){0.57806214,0.27115576,0.42386795,0.33969293}; -SS(-0.64012388,-0.10177177,-0.37237302,-0.80728146,0.00010990719,-0.5,-0.77267892,0.13105707,-0.24874664,-0.62938155,0.17932964,-0.37445272){0.54269073,0.88195685,0.65386325,0.55109073}; -SS(0.52218723,0.46943947,0.022097553,0.52843461,0.32737897,0.19102935,0.77315808,0.36766952,0.075951375,0.6902006,0.50015172,0.27072419){0.46892029,0.40790135,0.71793497,0.77938072}; -SS(-0.39032311,0.63241857,-0.34621958,-0.50014045,0.79673357,-0.5,-0.48255002,0.69900846,-0.19155417,-0.35455825,0.80859576,-0.32177549){0.65630059,1.1145783,0.74365966,0.86460259}; -SS(-0.088882135,1,-0.23281641,-0.10743676,0.85847111,-0.11136175,-0.23070339,1,-0.34855306,-0.14847812,0.78021305,-0.27623142){1.0431215,0.7462212,1.1599423,0.68882385}; -SS(0,-0.49997946,0.00010199173,-0.10133362,-0.40777162,0.1162396,0,-0.29157012,0.20836692,0,-0.22019801,5.0496855e-05){0.22811872,0.17697987,0.11172813,0.029059683}; -SS(-0.83127473,0.33505962,-0.32026923,-1,0.33333333,-0.5,-1,0.25105097,-0.19350143,-1,0.47527469,-0.27513051){0.89071695,1.3393331,1.0825888,1.2834809}; -SS(-0.32294154,0.86180803,0.13108841,-0.222315,1,-0.00011890035,-0.084253952,1,0.13733396,-0.035654771,0.78507762,0.045007896){0.84829643,1.0307381,1.0073117,0.60161266}; -SS(-0.10743676,0.85847111,-0.11136175,-0.222315,1,-0.00011890035,-0.36992714,1,-0.22970445,-0.38143574,0.84373572,-0.12387887){0.7462212,1.0307381,1.1684568,0.85864479}; -SS(-0.29157863,-1,0.20827581,-0.36608751,-0.8951802,0.074405883,-0.349759,-0.84853211,0.35590634,-0.12988976,-0.86995226,0.20452896){1.1139248,0.92652515,0.94981364,0.79894991}; -SS(-0.3727858,-0.19869367,0.11195566,-0.3548152,-0.48825703,0.21848985,-0.25897908,-0.24013326,0.26450313,-0.50874333,-0.23900991,0.2620444){0.16948569,0.38862106,0.17775565,0.36443271}; -SS(-0.35582611,-0.64426575,-0.070000747,-0.4581749,-0.5263483,-0.32801665,-0.36174,-0.40052234,-0.23665811,-0.26056819,-0.54975154,-0.34323516){0.52757348,0.57811658,0.32480953,0.46884495}; -SS(0.52843461,0.32737897,0.19102935,0.52218723,0.46943947,0.022097553,0.77315808,0.36766952,0.075951375,0.63998586,0.17856447,0.051345521){0.40790135,0.46892029,0.71793497,0.42570365}; -SS(-0.42889738,-0.75253072,0.17523232,-0.36608751,-0.8951802,0.074405883,-0.22302806,-0.77703925,0.068353305,-0.349759,-0.84853211,0.35590634){0.75958282,0.92652515,0.64063544,0.94981364}; -SS(0.09693172,0.3918681,-0.3370861,-0.029932551,0.40748663,-0.5,-0.010543702,0.17712261,-0.5,-0.12449617,0.36606215,-0.28273955){0.26256104,0.4038008,0.25750364,0.21185338}; -SS(-0.54640726,0.34339216,0.19847863,-0.52470763,0.46530444,0.33754711,-0.67801153,0.56076489,0.29217382,-0.61674646,0.25215289,0.3447871){0.43575493,0.59371518,0.83617727,0.54607287}; -SS(-0.22223836,1,0.2622369,-0.043441254,0.79173928,0.29440137,-0.014815866,1,0.31001515,-0.1827732,0.83017807,0.5){1.0984067,0.69563564,1.0772324,0.95598938}; -SS(-1,0.49991607,0.0031934521,-0.8068077,0.56885008,-0.063754108,-1,0.70529035,-0.21162945,-1,0.77631186,0.00053339564){1.2302733,0.96112076,1.520296,1.5817554}; -SS(-0.35455825,0.80859576,-0.32177549,-0.50014045,0.79673357,-0.5,-0.48255002,0.69900846,-0.19155417,-0.65756371,0.81308934,-0.3429452){0.86460259,1.1145783,0.74365966,1.1958888}; -SS(0.66554141,0.67524133,0.5,0.59365279,0.65503723,0.24444947,0.76099919,0.76690574,0.25750996,0.6902006,0.50015172,0.27072419){1.1271263,0.82252715,1.2143065,0.77938072}; -SS(0.8781758,0.86708556,-0.1989731,0.75922048,0.56990614,-0.17060419,0.77861211,0.77861193,-0.067175459,0.85153485,0.65148612,-0.35468846){1.5462283,0.91133836,1.1981052,1.2568282}; -SS(-0.3548152,-0.48825703,0.21848985,-0.10133362,-0.40777162,0.1162396,-0.23583358,-0.36008743,0.0071767184,-0.1853821,-0.42358473,0.30866054){0.38862106,0.17697987,0.16465457,0.29143101}; -SS(0.87881231,0.64063264,0.37220388,0.66554141,0.67524133,0.5,0.76099919,0.76690574,0.25750996,0.6902006,0.50015172,0.27072419){1.3069719,1.1271263,1.2143065,0.77938072}; -SS(-0.23583358,-0.36008743,0.0071767184,-0.10133362,-0.40777162,0.1162396,-0.25897908,-0.24013326,0.26450313,-0.1853821,-0.42358473,0.30866054){0.16465457,0.17697987,0.17775565,0.29143101}; -SS(0.8988736,0.63809662,-0.070284173,1,0.70844226,-0.20827687,0.85153485,0.65148612,-0.35468846,0.8781758,0.86708556,-0.1989731){1.2046527,1.5310675,1.2568282,1.5462283}; -SS(0.08017426,0.31429474,-0.16745504,-0.056808231,0.14323286,-0.13367928,-0.13709741,0.19518884,0.034033465,-0.096302334,0.43534175,-0.056072844){0.11103103,0.022140076,0.040184006,0.18078295}; -SS(0.8988736,0.63809662,-0.070284173,0.75922048,0.56990614,-0.17060419,0.77861211,0.77861193,-0.067175459,0.8781758,0.86708556,-0.1989731){1.2046527,0.91133836,1.1981052,1.5462283}; -SS(-0.36608751,-0.8951802,0.074405883,-0.22302806,-0.77703925,0.068353305,-0.349759,-0.84853211,0.35590634,-0.12988976,-0.86995226,0.20452896){0.92652515,0.64063544,0.94981364,0.79894991}; -SS(0.26064395,0.61953306,0.12890567,0.30434906,0.49798107,-4.0114635e-05,0.25248643,0.73785598,-0.13082591,0.45788353,0.76094781,-0.0096633567){0.45328252,0.32377482,0.60350215,0.76853994}; -SS(-0.8068077,0.56885008,-0.063754108,-1,0.70529035,-0.21162945,-1,0.77631186,0.00053339564,-0.74249217,0.75399014,-0.15399718){0.96112076,1.520296,1.5817554,1.1267767}; -SS(0.75922048,0.56990614,-0.17060419,0.8988736,0.63809662,-0.070284173,0.85153485,0.65148612,-0.35468846,0.8781758,0.86708556,-0.1989731){0.91133836,1.2046527,1.2568282,1.5462283}; -SS(-0.3548152,-0.48825703,0.21848985,-0.1853821,-0.42358473,0.30866054,-0.23583358,-0.36008743,0.0071767184,-0.25897908,-0.24013326,0.26450313){0.38862106,0.29143101,0.16465457,0.17775565}; -SS(0,0,0.25,-0.20045203,0.067929244,0.29301468,-0.045146113,0.19012269,0.5,0.050277172,0.20853018,0.30186362){0.045060365,0.10955402,0.27176836,0.12181545}; -SS(-0.45563594,0.60375179,0.095527884,-0.32064519,0.49448821,1.4739833e-06,-0.20984637,0.69532212,0.20809493,-0.35521568,0.4957142,0.26668635){0.56263538,0.32892635,0.55022745,0.42001946}; -SS(0.59365279,0.65503723,0.24444947,0.55555177,0.82262944,0.31125158,0.62860594,0.86645525,0.049037492,0.40637652,0.87094343,0.13060843){0.82252715,1.0671623,1.1303867,0.92399337}; -SS(-0.50014045,0.79673357,-0.5,-0.39032311,0.63241857,-0.34621958,-0.48255002,0.69900846,-0.19155417,-0.65756371,0.81308934,-0.3429452){1.1145783,0.65630059,0.74365966,1.1958888}; -SS(-0.70236545,-0.13062851,-0.19140485,-0.64012388,-0.10177177,-0.37237302,-0.77267892,0.13105707,-0.24874664,-0.49808619,0.0026201378,-0.26387206){0.5265969,0.54269073,0.65386325,0.29810596}; -SS(0.76099919,0.76690574,0.25750996,0.88049681,0.87960137,0.13412341,0.77861211,0.77861193,-0.067175459,0.62860594,0.86645525,0.049037492){1.2143065,1.5518824,1.1981052,1.1303867}; -SS(-0.68637718,0.43295764,-0.18031685,-0.4433427,0.53576375,-0.12560501,-0.49391083,0.27907498,-0.27264436,-0.50782983,0.50249565,-0.29902586){0.67437813,0.48429505,0.37398026,0.58612549}; -SS(0.52843461,0.32737897,0.19102935,0.46476684,0.14382827,0.12247557,0.36021608,0.23247759,-0.012351094,0.63998586,0.17856447,0.051345521){0.40790135,0.23450402,0.16110593,0.42570365}; -SS(-0.3533559,-0.49437708,0.037576204,-0.3548152,-0.48825703,0.21848985,-0.42889738,-0.75253072,0.17523232,-0.19247216,-0.56000521,0.088357129){0.35575629,0.38862106,0.75958282,0.34206231}; -SS(0.11111111,1,-0.5,0.0011150345,0.93517443,-0.37389303,0.00024312215,0.80750011,-0.5,0.081865095,0.80626877,-0.27867109){1.2422682,1.0026385,0.88610119,0.71703623}; -SS(-0.10037172,0.18891947,0.20844359,0,0,-6.9388939e-15,-0.13709741,0.19518884,0.034033465,0.13261259,0.21336316,0.036566127){0.074828316,-0.017891206,0.040184006,0.046199082}; -SS(-0.20045203,0.067929244,0.29301468,0,0,0.5,0,0,0.25,-0.045146113,0.19012269,0.5){0.10955402,0.23153294,0.045060365,0.27176836}; -SS(-0.88905946,-0.098697315,-0.13184676,-0.70236545,-0.13062851,-0.19140485,-0.76760867,-0.33664988,-0.028298027,-0.7907607,-0.33838097,-0.28342271){0.8023886,0.5265969,0.68479998,0.80149819}; -SS(-0.3727858,-0.19869367,0.11195566,-0.50159539,-0.29258506,7.2987381e-06,-0.50874333,-0.23900991,0.2620444,-0.65367362,-0.16081953,0.0014934597){0.16948569,0.32068114,0.36443271,0.4344691}; -SS(-0.10037172,0.18891947,0.20844359,0,0,-6.9388939e-15,0.13261259,0.21336316,0.036566127,0.13913358,0.10014326,0.18199659){0.074828316,-0.017891206,0.046199082,0.045990896}; -SS(0.26083053,0.15082484,0.37728795,0.5,0,0.5,0.50011436,0,0.27961788,0.42621669,0.19017509,0.30505062){0.21918499,0.47735984,0.30940041,0.29714896}; -SS(0.87867265,0.36391919,-0.37720578,0.75922048,0.56990614,-0.17060419,0.85153485,0.65148612,-0.35468846,0.67125235,0.44297685,-0.31879306){1.03034,0.91133836,1.2568282,0.72773009}; -SS(1,0.50010355,-0.27968748,0.87867265,0.36391919,-0.37720578,0.75922048,0.56990614,-0.17060419,0.85153485,0.65148612,-0.35468846){1.3071084,1.03034,0.91133836,1.2568282}; -SS(-0.3533559,-0.49437708,0.037576204,-0.50159539,-0.29258506,7.2987381e-06,-0.36174,-0.40052234,-0.23665811,-0.52487586,-0.5117405,-0.017639258){0.35575629,0.32068114,0.32480953,0.51812974}; -SS(-0.4581749,-0.5263483,-0.32801665,-0.35582611,-0.64426575,-0.070000747,-0.49676106,-0.69523221,-0.26913048,-0.26056819,-0.54975154,-0.34323516){0.57811658,0.52757348,0.78043195,0.46884495}; -SS(-0.19461387,0.3919517,0.10437587,-0.32064519,0.49448821,1.4739833e-06,-0.35521568,0.4957142,0.26668635,-0.098708274,0.55956225,0.10505678){0.19075448,0.32892635,0.42001946,0.31633913}; -SS(-0.3727858,-0.19869367,0.11195566,-0.3548152,-0.48825703,0.21848985,-0.23583358,-0.36008743,0.0071767184,-0.25897908,-0.24013326,0.26450313){0.16948569,0.38862106,0.16465457,0.17775565}; -SS(0.81149777,0.18885984,-0.5,0.77491511,0.22516452,-0.26425516,0.6251418,0.1440922,-0.5,0.83867599,0,-0.33865964){0.92750237,0.70313431,0.63751638,0.80182539}; -SS(-0.40408872,0.18166381,-0.5,-0.41767704,0.010770256,-0.44072823,-0.49391083,0.27907498,-0.27264436,-0.62938155,0.17932964,-0.37445272){0.42526168,0.35514259,0.37398026,0.55109073}; -SS(0.67112401,0.32933441,0.5,0.87272604,0.35900693,0.37172569,0.78912399,0.50423732,0.5,0.81143387,0.18901581,0.5){0.79210069,1.0107603,1.1096027,0.9265446}; -SS(0.40637652,0.87094343,0.13060843,0.4450496,1,-0.00012892076,0.43654676,1,0.2604635,0.62860594,0.86645525,0.049037492){0.92399337,1.179155,1.2403655,1.1303867}; -SS(-0.3548152,-0.48825703,0.21848985,-0.37661764,-0.26006406,0.40868766,-0.50874333,-0.23900991,0.2620444,-0.56348952,-0.47594309,0.3052276){0.38862106,0.36234206,0.36443271,0.61776713}; -SS(0.65062064,0.64268786,0.069510863,0.62860594,0.86645525,0.049037492,0.76099919,0.76690574,0.25750996,0.77861211,0.77861193,-0.067175459){0.82620698,1.1303867,1.2143065,1.1981052}; -SS(-0.24000819,0.17660305,0.5,-0.41843781,0.30742585,0.3397996,-0.18136176,0.40461939,0.5,-0.11614487,0.30919383,0.33918095){0.3210912,0.37011438,0.42386795,0.20820823}; -SS(-0.49292178,-0.37477565,-0.5,-0.38492375,-0.20017574,-0.33650716,-0.30131805,-0.11512588,-0.5,-0.50815189,-0.16301678,-0.5){0.6115465,0.28705324,0.3368451,0.52110597}; -SS(-0.80558396,0.5878127,-0.29244037,-0.66548665,0.66585508,-0.5,-0.79644003,0.50064951,-0.5,-0.80479144,0.80504612,-0.5){1.0616703,1.1221664,1.115532,1.5255891}; -SS(0.52218723,0.46943947,0.022097553,0.60662231,0.34516964,-0.13972301,0.77315808,0.36766952,0.075951375,0.63998586,0.17856447,0.051345521){0.46892029,0.48782847,0.71793497,0.42570365}; -SS(-0.222315,1,-0.00011890035,-0.10743676,0.85847111,-0.11136175,-0.36992714,1,-0.22970445,-0.088882135,1,-0.23281641){1.0307381,0.7462212,1.1684568,1.0431215}; -SS(-0.19247216,-0.56000521,0.088357129,0,-0.49997946,0.00010199173,0,-0.7082575,0.2084616,0,-0.77970171,0.00010845427){0.34206231,0.22811872,0.52387062,0.58842154}; -SS(-0.80728146,0.00010990719,-0.5,-0.64012388,-0.10177177,-0.37237302,-0.77267892,0.13105707,-0.24874664,-0.85707128,-0.1416783,-0.34083416){0.88195685,0.54269073,0.65386325,0.85441326}; -SS(-0.89426176,0.41257007,-0.12932618,-1,0.49991607,0.0031934521,-1,0.70529035,-0.21162945,-1,0.47527469,-0.27513051){0.974079,1.2302733,1.520296,1.2834809}; -SS(-0.48141868,0.60085372,0.5,-0.52470763,0.46530444,0.33754711,-0.47185361,0.73769401,0.24072705,-0.35521568,0.4957142,0.26668635){0.82306978,0.59371518,0.80384956,0.42001946}; -SS(-0.49391083,0.27907498,-0.27264436,-0.41767704,0.010770256,-0.44072823,-0.49808619,0.0026201378,-0.26387206,-0.62938155,0.17932964,-0.37445272){0.37398026,0.35514259,0.29810596,0.55109073}; -SS(-0.42889738,-0.75253072,0.17523232,-0.63815223,-0.88141187,0.37488811,-0.349759,-0.84853211,0.35590634,-0.57994589,-0.69256437,0.31204703){0.75958282,1.3088768,0.94981364,0.89957508}; -SS(-0.63815223,-0.88141187,0.37488811,-0.4999534,-1,0.27968311,-0.42889738,-0.75253072,0.17523232,-0.349759,-0.84853211,0.35590634){1.3088768,1.3075402,0.75958282,0.94981364}; -SS(0.30434906,0.49798107,-4.0114635e-05,0.42864323,0.48543211,-0.13804456,0.45788353,0.76094781,-0.0096633567,0.52218723,0.46943947,0.022097553){0.32377482,0.42022283,0.76853994,0.46892029}; -SS(0.57129187,0.13526053,-0.13726946,0.60662231,0.34516964,-0.13972301,0.36021608,0.23247759,-0.012351094,0.63998586,0.17856447,0.051345521){0.35115136,0.48782847,0.16110593,0.42570365}; -SS(-0.033588837,0.5879061,0.5,-0.16015893,0.67694077,0.39025863,-0.3132159,0.69976014,0.5,-0.1827732,0.83017807,0.5){0.57806214,0.6265216,0.82050522,0.95598938}; -SS(-0.80728146,0.00010990719,-0.5,-0.92571354,0.17249619,-0.34283108,-1,-0.00018427889,-0.26378916,-0.85707128,-0.1416783,-0.34083416){0.88195685,0.99158484,1.0508045,0.85441326}; -SS(0.11136938,1,0.13859714,0.40637652,0.87094343,0.13060843,0.23106485,1,0.31398279,0.24404834,0.79519787,0.082231238){1.0072058,0.92399337,1.1340577,0.68472542}; -SS(-0.098708274,0.55956225,0.10505678,-0.32064519,0.49448821,1.4739833e-06,-0.20984637,0.69532212,0.20809493,-0.2401666,0.74114092,-0.051302261){0.31633913,0.32892635,0.55022745,0.58653028}; -SS(-0.12233239,-0.87748906,-0.13583418,-0.22019153,-1,-0.00010416607,-0.22302806,-0.77703925,0.068353305,-0.42066299,-0.84356131,-0.12906413){0.78823805,1.0287732,0.64063544,0.88525127}; -SS(-0.62450053,-0.31310845,0.38575928,-0.49284988,-0.37485679,0.5,-0.78327322,-0.45013966,0.5,-0.56348952,-0.47594309,0.3052276){0.62379151,0.6163523,1.0435491,0.61776713}; -SS(-0.79370724,0.81084643,0.045877226,-0.65776896,0.64141588,0.074371921,-0.74249217,0.75399014,-0.15399718,-0.48952189,0.78345034,0.019065462){1.270911,0.83514199,1.1267767,0.83409809}; -SS(-0.61311838,0.85766427,0.15491279,-0.61115597,1,-0.10200355,-0.47972312,1,0.18932995,-0.42762906,1,-0.0094860889){1.1216468,1.3611038,1.2473472,1.169501}; -SS(-1,0.49991607,0.0031934521,-0.89426176,0.41257007,-0.12932618,-1,0.70529035,-0.21162945,-0.8068077,0.56885008,-0.063754108){1.2302733,0.974079,1.520296,0.96112076}; -SS(-0.67513028,-0.66529728,0.5,-0.56348952,-0.47594309,0.3052276,-0.78327322,-0.45013966,0.5,-0.50050976,-0.57246927,0.5){1.1284607,0.61776713,1.0435491,0.81219504}; -SS(-0.33333333,1,-0.5,-0.35455825,0.80859576,-0.32177549,-0.36992714,1,-0.22970445,-0.56041637,1,-0.29784853){1.3407278,0.86460259,1.1684568,1.3856141}; -SS(0.77777778,1,-0.5,0.68900489,0.77311276,-0.28043733,0.81205362,0.80656044,-0.5,0.82865019,1,-0.3214153){1.8341362,1.1326816,1.5391707,1.7714679}; -SS(-0.83248216,0.76782327,-0.31292259,-1,0.77777778,-0.5,-1,0.70529035,-0.21162945,-1,0.83964442,-0.3309874){1.366757,1.8398372,1.520296,1.7979585}; -SS(0.22886345,0.79287946,0.30210005,0.11136938,1,0.13859714,-0.014815866,1,0.31001515,0.23106485,1,0.31398279){0.75332396,1.0072058,1.0772324,1.1340577}; -SS(-0.87046532,0.63071146,0.35630423,-1,0.4752276,0.27420758,-0.79172217,0.43302343,0.13373134,-0.83851866,0.33014205,0.32623765){1.2666006,1.2803563,0.80968993,0.89937894}; -SS(0.39612945,0.70614162,0.21524614,0.59365279,0.65503723,0.24444947,0.45788353,0.76094781,-0.0096633567,0.40637652,0.87094343,0.13060843){0.68453461,0.82252715,0.76853994,0.92399337}; -SS(-0.85520613,-0.46088631,-0.14784569,-1,-0.5000565,0.0033661208,-1,-0.25140376,-0.1934451,-1,-0.47540235,-0.27521785){0.95161001,1.2263361,1.0790534,1.2841965}; -SS(0.25248643,0.73785598,-0.13082591,0.42864323,0.48543211,-0.13804456,0.17777709,0.54047543,-0.2567554,0.34412919,0.6158316,-0.3427703){0.60350215,0.42022283,0.36840304,0.59958408}; -SS(-0.32879066,-0.67072359,-0.5,-0.36340067,-0.87821042,-0.37678589,-0.50377808,-0.78884267,-0.5,-0.18848435,-0.81110947,-0.5){0.79007105,1.0307746,1.1087956,0.92571371}; -SS(0.081865095,0.80626877,-0.27867109,0.11111111,1,-0.5,0.21543771,0.73213875,-0.5,0.00024312215,0.80750011,-0.5){0.71703623,1.2422682,0.81134051,0.88610119}; -SS(-0.35582611,-0.64426575,-0.070000747,-0.19247216,-0.56000521,0.088357129,-0.42889738,-0.75253072,0.17523232,-0.22302806,-0.77703925,0.068353305){0.52757348,0.34206231,0.75958282,0.64063544}; -SS(0,-0.16137283,0.3386068,-0.16643696,-0.21791406,0.42402077,-0.20045203,0.067929244,0.29301468,-0.1159097,-0.14329028,0.19302206){0.12565914,0.23818505,0.10955402,0.055235283}; -SS(-0.35582611,-0.64426575,-0.070000747,-0.26056819,-0.54975154,-0.34323516,-0.2399131,-0.76005145,-0.25989531,-0.49676106,-0.69523221,-0.26913048){0.52757348,0.46884495,0.6848256,0.78043195}; -SS(-0.4581749,-0.5263483,-0.32801665,-0.23055166,-0.37480907,-0.5,-0.36174,-0.40052234,-0.23665811,-0.26056819,-0.54975154,-0.34323516){0.57811658,0.41992239,0.32480953,0.46884495}; -SS(-0.48255002,0.69900846,-0.19155417,-0.4433427,0.53576375,-0.12560501,-0.2401666,0.74114092,-0.051302261,-0.48952189,0.78345034,0.019065462){0.74365966,0.48429505,0.58653028,0.83409809}; -SS(-0.010543702,0.17712261,-0.5,0.09693172,0.3918681,-0.3370861,-0.12449617,0.36606215,-0.28273955,-0.1182182,0.15955837,-0.3159857){0.25750364,0.26256104,0.21185338,0.11990198}; -SS(-0.056808231,0.14323286,-0.13367928,0.08017426,0.31429474,-0.16745504,-0.13709741,0.19518884,0.034033465,0.13261259,0.21336316,0.036566127){0.022140076,0.11103103,0.040184006,0.046199082}; -SS(-1,-0.25140376,-0.1934451,-0.88905946,-0.098697315,-0.13184676,-0.76760867,-0.33664988,-0.028298027,-0.7907607,-0.33838097,-0.28342271){1.0790534,0.8023886,0.68479998,0.80149819}; -SS(0.87867265,0.36391919,-0.37720578,0.671223,0.32907594,-0.5,0.78906409,0.5041626,-0.5,0.81149777,0.18885984,-0.5){1.03034,0.79435762,1.1105402,0.92750237}; -SS(-0.69937107,0.31347586,0.5,-0.83851866,0.33014205,0.32623765,-0.79641575,0.50054117,0.5,-0.61509744,0.47589965,0.5){0.8165723,0.89937894,1.1180299,0.84259202}; -SS(0.4450496,1,-0.00012892076,0.54700908,0.85955032,-0.16345766,0.68985253,1,-0.19792707,0.62860594,0.86645525,0.049037492){1.179155,1.0528061,1.495304,1.1303867}; -SS(0.085954007,0.41736025,0.32943097,-0.033588837,0.5879061,0.5,0.11523872,0.30161582,0.5,0.16321322,0.50838432,0.5){0.27115576,0.57806214,0.33546792,0.52238519}; -SS(0.11111111,1,0.5,0.22886345,0.79287946,0.30210005,0.21512427,0.73211919,0.5,0.00029730467,0.80760978,0.5){1.2368521,0.75332396,0.81521474,0.88423684}; -SS(-0.14850787,-0.69358405,-0.087583548,-0.22302806,-0.77703925,0.068353305,-0.42066299,-0.84356131,-0.12906413,-0.12233239,-0.87748906,-0.13583418){0.49763432,0.64063544,0.88525127,0.78823805}; -SS(-0.87046532,0.63071146,0.35630423,-0.79172217,0.43302343,0.13373134,-0.67801153,0.56076489,0.29217382,-0.83851866,0.33014205,0.32623765){1.2666006,0.80968993,0.83617727,0.89937894}; -SS(-0.35582611,-0.64426575,-0.070000747,-0.3533559,-0.49437708,0.037576204,-0.42889738,-0.75253072,0.17523232,-0.19247216,-0.56000521,0.088357129){0.52757348,0.35575629,0.75958282,0.34206231}; -SS(-0.4581749,-0.5263483,-0.32801665,-0.65956212,-0.52273243,-0.19262862,-0.49676106,-0.69523221,-0.26913048,-0.52487586,-0.5117405,-0.017639258){0.57811658,0.7287475,0.78043195,0.51812974}; -SS(-1,-0.00018427889,-0.26378916,-0.92571354,0.17249619,-0.34283108,-0.77267892,0.13105707,-0.24874664,-0.85707128,-0.1416783,-0.34083416){1.0508045,0.99158484,0.65386325,0.85441326}; -SS(-0.75,-1,-0.5,-0.6448883,-0.87343314,-0.36731947,-0.5,-1,-0.5,-0.50377808,-0.78884267,-0.5){1.7946951,1.296688,1.4844013,1.1087956}; -SS(-0.83851866,0.33014205,0.32623765,-0.79641575,0.50054117,0.5,-0.61509744,0.47589965,0.5,-0.67801153,0.56076489,0.29217382){0.89937894,1.1180299,0.84259202,0.83617727}; -SS(0.37137652,0.1767682,-0.19801193,0.60662231,0.34516964,-0.13972301,0.34662081,0.36199915,-0.25068724,0.36021608,0.23247759,-0.012351094){0.19205628,0.48782847,0.29696992,0.16110593}; -SS(0.54700908,0.85955032,-0.16345766,0.4450496,1,-0.00012892076,0.68985253,1,-0.19792707,0.43683247,1,-0.26068681){1.0528061,1.179155,1.495304,1.2435523}; -SS(-0.10743676,0.85847111,-0.11136175,-0.36992714,1,-0.22970445,-0.088882135,1,-0.23281641,-0.23070339,1,-0.34855306){0.7462212,1.1684568,1.0431215,1.1599423}; -SS(0.08017426,0.31429474,-0.16745504,0.24635331,0.35131343,-0.096025322,0.17777709,0.54047543,-0.2567554,0.086744979,0.52712982,0.027891324){0.11103103,0.18045455,0.36840304,0.26660844}; -SS(0,0,-0.25,-0.16707278,-0.087678023,-0.31121894,-0.098950987,-0.13391411,-0.14594667,-0.056808231,0.14323286,-0.13367928){0.044304329,0.11599041,0.03512721,0.022140076}; -SS(0.40637652,0.87094343,0.13060843,0.11136938,1,0.13859714,0.23106485,1,0.31398279,0.24937941,1,-0.00011138016){0.92399337,1.0072058,1.1340577,1.0446566}; -SS(0.36841015,0.87909734,0.37310922,0.33333333,1,0.5,0.11111111,1,0.5,0.21512427,0.73211919,0.5){1.0362544,1.3466764,1.2368521,0.81521474}; -SS(0.42864323,0.48543211,-0.13804456,0.30434906,0.49798107,-4.0114635e-05,0.25248643,0.73785598,-0.13082591,0.17777709,0.54047543,-0.2567554){0.42022283,0.32377482,0.60350215,0.36840304}; -SS(-0.16643696,-0.21791406,0.42402077,-0.25897908,-0.24013326,0.26450313,-0.20045203,0.067929244,0.29301468,-0.1159097,-0.14329028,0.19302206){0.23818505,0.17775565,0.10955402,0.055235283}; -SS(0.45788353,0.76094781,-0.0096633567,0.59365279,0.65503723,0.24444947,0.62860594,0.86645525,0.049037492,0.40637652,0.87094343,0.13060843){0.76853994,0.82252715,1.1303867,0.92399337}; -SS(0.4450496,1,-0.00012892076,0.62860594,0.86645525,0.049037492,0.68966181,1,0.19790566,0.43654676,1,0.2604635){1.179155,1.1303867,1.492557,1.2403655}; -SS(-0.92571354,0.17249619,-0.34283108,-0.80728146,0.00010990719,-0.5,-0.77267892,0.13105707,-0.24874664,-0.85707128,-0.1416783,-0.34083416){0.99158484,0.88195685,0.65386325,0.85441326}; -SS(-0.098950987,-0.13391411,-0.14594667,0,0,-0.25,0,-0.29164705,-0.20823955,0,-0.16143077,-0.33843101){0.03512721,0.044304329,0.11473247,0.12966739}; -SS(0.60662231,0.34516964,-0.13972301,0.42864323,0.48543211,-0.13804456,0.49866453,0.63973666,-0.21510859,0.67125235,0.44297685,-0.31879306){0.48782847,0.42022283,0.68344633,0.72773009}; -SS(0.60662231,0.34516964,-0.13972301,0.42864323,0.48543211,-0.13804456,0.34662081,0.36199915,-0.25068724,0.36021608,0.23247759,-0.012351094){0.48782847,0.42022283,0.29696992,0.16110593}; -SS(-0.69937107,0.31347586,0.5,-0.83851866,0.33014205,0.32623765,-0.61509744,0.47589965,0.5,-0.67801153,0.56076489,0.29217382){0.8165723,0.89937894,0.84259202,0.83617727}; -SS(0.59365279,0.65503723,0.24444947,0.45042372,0.78359022,0.5,0.55555177,0.82262944,0.31125158,0.35567295,0.65317229,0.39545235){0.82252715,1.0496179,1.0671623,0.69293227}; -SS(-0.3727858,-0.19869367,0.11195566,-0.34310942,-0.010167032,0.1509038,-0.50874333,-0.23900991,0.2620444,-0.40506391,-0.079541407,0.3303193){0.16948569,0.12661586,0.36443271,0.26156128}; -SS(-0.65756371,0.81308934,-0.3429452,-0.55555556,1,-0.5,-0.50014045,0.79673357,-0.5,-0.80479144,0.80504612,-0.5){1.1958888,1.5379273,1.1145783,1.5255891}; -SS(-0.55555556,1,0.5,-0.60421932,0.82298164,0.34468578,-0.50037,0.79662088,0.5,-0.80481649,0.80494069,0.5){1.5418081,1.1449713,1.1183194,1.5232843}; -SS(0.36841015,0.87909734,0.37310922,0.11111111,1,0.5,0.23106485,1,0.31398279,0.22886345,0.79287946,0.30210005){1.0362544,1.2368521,1.1340577,0.75332396}; -SS(-0.81387526,-0.53653555,-0.3209601,-0.78315651,-0.45008839,-0.5,-1,-0.47540235,-0.27521785,-0.7907607,-0.33838097,-0.28342271){1.0406635,1.0467962,1.2841965,0.80149819}; -SS(-0.50159539,-0.29258506,7.2987381e-06,-0.3533559,-0.49437708,0.037576204,-0.3548152,-0.48825703,0.21848985,-0.59094649,-0.40495207,0.12834587){0.32068114,0.35575629,0.38862106,0.51475101}; -SS(-0.50159539,-0.29258506,7.2987381e-06,-0.3533559,-0.49437708,0.037576204,-0.36174,-0.40052234,-0.23665811,-0.23583358,-0.36008743,0.0071767184){0.32068114,0.35575629,0.32480953,0.16465457}; -SS(-0.70236545,-0.13062851,-0.19140485,-0.65367362,-0.16081953,0.0014934597,-0.4720473,-0.063494476,-0.036829327,-0.76752638,0.004448061,-0.013214377){0.5265969,0.4344691,0.21285629,0.5734925}; -SS(-0.7907607,-0.33838097,-0.28342271,-1,-0.33333333,-0.5,-0.73174678,-0.21478859,-0.5,-0.78315651,-0.45008839,-0.5){0.80149819,1.3342594,0.81151292,1.0467962}; -SS(0.35567295,0.65317229,0.39545235,0.66554141,0.67524133,0.5,0.45042372,0.78359022,0.5,0.5725222,0.50074158,0.5){0.69293227,1.1271263,1.0496179,0.8121357}; -SS(-0.38143574,0.84373572,-0.12387887,-0.48255002,0.69900846,-0.19155417,-0.24654336,0.57133462,-0.25396354,-0.2401666,0.74114092,-0.051302261){0.85864479,0.74365966,0.42991415,0.58653028}; -SS(0.26064395,0.61953306,0.12890567,0.30434906,0.49798107,-4.0114635e-05,0.52218723,0.46943947,0.022097553,0.36016656,0.41044152,0.1594367){0.45328252,0.32377482,0.46892029,0.3073722}; -SS(-0.24654336,0.57133462,-0.25396354,-0.38143574,0.84373572,-0.12387887,-0.2401666,0.74114092,-0.051302261,-0.35455825,0.80859576,-0.32177549){0.42991415,0.85864479,0.58653028,0.86460259}; -SS(-0.52470763,0.46530444,0.33754711,-0.48141868,0.60085372,0.5,-0.47185361,0.73769401,0.24072705,-0.67801153,0.56076489,0.29217382){0.59371518,0.82306978,0.80384956,0.83617727}; -SS(0.29175541,0,0.20824909,0.46476684,0.14382827,0.12247557,0.22032809,0,-9.1119885e-05,0.36021608,0.23247759,-0.012351094){0.1093371,0.23450402,0.027339551,0.16110593}; -SS(-0.48255002,0.69900846,-0.19155417,-0.38143574,0.84373572,-0.12387887,-0.24654336,0.57133462,-0.25396354,-0.35455825,0.80859576,-0.32177549){0.74365966,0.85864479,0.42991415,0.86460259}; -SS(-0.3533559,-0.49437708,0.037576204,-0.3548152,-0.48825703,0.21848985,-0.52487586,-0.5117405,-0.017639258,-0.50537844,-0.68762812,0.023695348){0.35575629,0.38862106,0.51812974,0.71483247}; -SS(-0.29261734,0.53193925,0.43339885,-0.20984637,0.69532212,0.20809493,-0.30949447,0.8262402,0.33528492,-0.16015893,0.67694077,0.39025863){0.53993003,0.55022745,0.87388961,0.6265216}; -SS(0,-0.16137283,0.3386068,-0.16643696,-0.21791406,0.42402077,-0.17669296,0.011023676,0.5,-0.20045203,0.067929244,0.29301468){0.12565914,0.23818505,0.26322593,0.10955402}; -SS(-0.32897755,-0.67088709,0.5,-0.34549718,-0.50098866,0.4105565,-0.23048975,-0.37484721,0.5,-0.14394692,-0.62481063,0.5){0.79643001,0.5260109,0.42714666,0.63866347}; -SS(-0.58934795,0.84141567,-0.18062024,-0.74249217,0.75399014,-0.15399718,-0.48952189,0.78345034,0.019065462,-0.79370724,0.81084643,0.045877226){1.0736489,1.1267767,0.83409809,1.270911}; -SS(-0.1853821,-0.42358473,0.30866054,0,-0.5,0.5,0,-0.25,0.5,-0.23048975,-0.37484721,0.5){0.29143101,0.48207879,0.28720824,0.42714666}; -SS(-0.83248216,0.76782327,-0.31292259,-0.77777778,1,-0.5,-0.80479144,0.80504612,-0.5,-1,0.83964442,-0.3309874){1.366757,1.8319852,1.5255891,1.7979585}; -SS(-0.4433427,0.53576375,-0.12560501,-0.2401666,0.74114092,-0.051302261,-0.48952189,0.78345034,0.019065462,-0.45563594,0.60375179,0.095527884){0.48429505,0.58653028,0.83409809,0.56263538}; -SS(-0.222315,1,-0.00011890035,-0.32294154,0.86180803,0.13108841,-0.47972312,1,0.18932995,-0.42762906,1,-0.0094860889){1.0307381,0.84829643,1.2473472,1.169501}; -SS(-0.45563594,0.60375179,0.095527884,-0.20984637,0.69532212,0.20809493,-0.2401666,0.74114092,-0.051302261,-0.32294154,0.86180803,0.13108841){0.56263538,0.55022745,0.58653028,0.84829643}; -SS(-0.32064519,0.49448821,1.4739833e-06,-0.098708274,0.55956225,0.10505678,-0.20984637,0.69532212,0.20809493,-0.35521568,0.4957142,0.26668635){0.32892635,0.31633913,0.55022745,0.42001946}; -SS(-0.68637718,0.43295764,-0.18031685,-0.65355936,0.25468043,-0.1897796,-0.49391083,0.27907498,-0.27264436,-0.54631436,0.45612147,-0.00074796238){0.67437813,0.51379882,0.37398026,0.48593017}; -SS(-0.85707128,-0.1416783,-0.34083416,-1,-0.33333333,-0.5,-0.73174678,-0.21478859,-0.5,-0.7907607,-0.33838097,-0.28342271){0.85441326,1.3342594,0.81151292,0.80149819}; -SS(-0.349759,-0.84853211,0.35590634,-0.5,-1,0.5,-0.25,-1,0.5,-0.50400314,-0.78879927,0.5){0.94981364,1.4840089,1.2918821,1.1086821}; -SS(-1,-0.5000565,0.0033661208,-0.82595855,-0.48031431,0.11444494,-1,-0.24887753,0.1953112,-1,-0.47520831,0.27427507){1.2263361,0.90887195,1.0768014,1.2822693}; -SS(-0.59094649,-0.40495207,0.12834587,-0.65631386,-0.59724887,0.13822882,-0.3548152,-0.48825703,0.21848985,-0.56348952,-0.47594309,0.3052276){0.51475101,0.7890621,0.38862106,0.61776713}; -SS(-0.56348952,-0.47594309,0.3052276,-0.49284988,-0.37485679,0.5,-0.78327322,-0.45013966,0.5,-0.50050976,-0.57246927,0.5){0.61776713,0.6163523,1.0435491,0.81219504}; -SS(-0.29413589,0.046284299,-0.31274881,-0.16707278,-0.087678023,-0.31121894,-0.1182182,0.15955837,-0.3159857,-0.056808231,0.14323286,-0.13367928){0.1681493,0.11599041,0.11990198,0.022140076}; -SS(0.22032809,0,-9.1119885e-05,0.13913358,0.10014326,0.18199659,0.36021608,0.23247759,-0.012351094,0.13261259,0.21336316,0.036566127){0.027339551,0.045990896,0.16110593,0.046199082}; -SS(-0.15923414,-0.34171533,-0.15079999,-0.29237157,-0.11865629,-0.17606411,-0.36174,-0.40052234,-0.23665811,-0.45843014,-0.20445062,-0.15988901){0.14783141,0.11404163,0.32480953,0.26094507}; -SS(-0.49391083,0.27907498,-0.27264436,-0.4433427,0.53576375,-0.12560501,-0.54631436,0.45612147,-0.00074796238,-0.34372617,0.39779568,-0.18541051){0.37398026,0.48429505,0.48593017,0.29650146}; -SS(-0.63348211,-0.7706683,-0.074889286,-0.50537844,-0.68762812,0.023695348,-0.49676106,-0.69523221,-0.26913048,-0.52487586,-0.5117405,-0.017639258){0.97907785,0.71483247,0.78043195,0.51812974}; -SS(0.11111111,1,-0.5,0.081865095,0.80626877,-0.27867109,0.21543771,0.73213875,-0.5,0.2222976,1,-0.35617554){1.2422682,0.71703623,0.81134051,1.1585843}; -SS(-0.41843781,0.30742585,0.3397996,-0.26986228,0.26051837,0.22418657,-0.35521568,0.4957142,0.26668635,-0.11614487,0.30919383,0.33918095){0.37011438,0.1749353,0.42001946,0.20820823}; -SS(0.87881231,0.64063264,0.37220388,1,0.5,0.5,1,0.75,0.5,0.78912399,0.50423732,0.5){1.3069719,1.484684,1.7930237,1.1096027}; -SS(-0.45843014,-0.20445062,-0.15988901,-0.50159539,-0.29258506,7.2987381e-06,-0.23583358,-0.36008743,0.0071767184,-0.3727858,-0.19869367,0.11195566){0.26094507,0.32068114,0.16465457,0.16948569}; -SS(-0.45843014,-0.20445062,-0.15988901,-0.50159539,-0.29258506,7.2987381e-06,-0.36174,-0.40052234,-0.23665811,-0.23583358,-0.36008743,0.0071767184){0.26094507,0.32068114,0.32480953,0.16465457}; -SS(-0.65956212,-0.52273243,-0.19262862,-0.52487586,-0.5117405,-0.017639258,-0.63348211,-0.7706683,-0.074889286,-0.49676106,-0.69523221,-0.26913048){0.7287475,0.51812974,0.97907785,0.78043195}; -SS(-0.6448883,-0.87343314,-0.36731947,-0.49995867,-1,-0.27986665,-0.49676106,-0.69523221,-0.26913048,-0.42066299,-0.84356131,-0.12906413){1.296688,1.3082069,0.78043195,0.88525127}; -SS(0.8988736,0.63809662,-0.070284173,1,0.77979347,0.00010253841,0.77861211,0.77861193,-0.067175459,0.84582719,0.572243,0.1361951){1.2046527,1.5887874,1.1981052,1.0417018}; -SS(-0.35455825,0.80859576,-0.32177549,-0.55555556,1,-0.5,-0.50014045,0.79673357,-0.5,-0.56041637,1,-0.29784853){0.86460259,1.5379273,1.1145783,1.3856141}; -SS(0.11111111,1,0.5,0.36841015,0.87909734,0.37310922,0.21512427,0.73211919,0.5,0.22886345,0.79287946,0.30210005){1.2368521,1.0362544,0.81521474,0.75332396}; -SS(-0.61674646,0.25215289,0.3447871,-0.54640726,0.34339216,0.19847863,-0.7489605,0.18190923,0.13647301,-0.83851866,0.33014205,0.32623765){0.54607287,0.43575493,0.59564173,0.89937894}; -SS(-0.8068077,0.56885008,-0.063754108,-0.68637718,0.43295764,-0.18031685,-0.79172217,0.43302343,0.13373134,-0.78848723,0.26584533,-0.068869999){0.96112076,0.67437813,0.80968993,0.68151298}; -SS(0.098704003,0.67249079,0.1943501,0.18202227,0.38279251,0.10350409,0.26138985,0.51848551,0.281015,0.085954007,0.41736025,0.32943097){0.47957633,0.17617817,0.40200156,0.27115576}; -SS(-0.33333333,1,-0.5,-0.35455825,0.80859576,-0.32177549,-0.55555556,1,-0.5,-0.50014045,0.79673357,-0.5){1.3407278,0.86460259,1.5379273,1.1145783}; -SS(0.77777778,1,-0.5,0.54326203,0.87223293,-0.356993,0.55555556,1,-0.5,0.81205362,0.80656044,-0.5){1.8341362,1.1662147,1.5352494,1.5391707}; -SS(-0.41767704,0.010770256,-0.44072823,-0.40408872,0.18166381,-0.5,-0.49391083,0.27907498,-0.27264436,-0.29413589,0.046284299,-0.31274881){0.35514259,0.42526168,0.37398026,0.1681493}; -SS(-1,-0.55555556,-0.5,-0.91414606,-0.68082467,-0.37109558,-1,-0.77777778,-0.5,-0.80632325,-0.81147186,-0.5){1.5366945,1.4249306,1.8436809,1.5409894}; -SS(-0.033284914,0.58770906,-0.5,-0.17097214,0.64900986,-0.39927747,-0.31289368,0.69974287,-0.5,-0.20381263,0.45499536,-0.5){0.58301644,0.59741335,0.82323564,0.478983}; -SS(-0.41767704,0.010770256,-0.44072823,-0.49391083,0.27907498,-0.27264436,-0.49808619,0.0026201378,-0.26387206,-0.29413589,0.046284299,-0.31274881){0.35514259,0.37398026,0.29810596,0.1681493}; -SS(-0.83851866,0.33014205,0.32623765,-0.54640726,0.34339216,0.19847863,-0.7489605,0.18190923,0.13647301,-0.79172217,0.43302343,0.13373134){0.89937894,0.43575493,0.59564173,0.80968993}; -SS(-0.85520613,-0.46088631,-0.14784569,-1,-0.25140376,-0.1934451,-1,-0.20076836,0.00061221676,-0.76760867,-0.33664988,-0.028298027){0.95161001,1.0790534,1.0172898,0.68479998}; -SS(-0.7907607,-0.33838097,-0.28342271,-1,-0.33333333,-0.5,-0.78315651,-0.45008839,-0.5,-1,-0.47540235,-0.27521785){0.80149819,1.3342594,1.0467962,1.2841965}; -SS(-0.0073778212,0.36022468,0.15230712,-0.098708274,0.55956225,0.10505678,-0.11618574,0.50328545,0.29980467,0.085954007,0.41736025,0.32943097){0.13675819,0.31633913,0.33969293,0.27115576}; -SS(0.42864323,0.48543211,-0.13804456,0.49866453,0.63973666,-0.21510859,0.25248643,0.73785598,-0.13082591,0.45788353,0.76094781,-0.0096633567){0.42022283,0.68344633,0.60350215,0.76853994}; -SS(-0.10743676,0.85847111,-0.11136175,-0.36992714,1,-0.22970445,-0.23070339,1,-0.34855306,-0.14847812,0.78021305,-0.27623142){0.7462212,1.1684568,1.1599423,0.68882385}; -SS(0.18202227,0.38279251,0.10350409,0.098704003,0.67249079,0.1943501,0.086744979,0.52712982,0.027891324,0.085954007,0.41736025,0.32943097){0.17617817,0.47957633,0.26660844,0.27115576}; -SS(1,1,-0.25,0.8781758,0.86708556,-0.1989731,1,1,-6.9388939e-15,0.78186447,1,3.3673518e-05){2.0438315,1.5462283,1.9807485,1.5923176}; -SS(0.66554141,0.67524133,0.5,0.59365279,0.65503723,0.24444947,0.45042372,0.78359022,0.5,0.55555177,0.82262944,0.31125158){1.1271263,0.82252715,1.0496179,1.0671623}; -SS(-0.87046532,0.63071146,0.35630423,-1,0.55555556,0.5,-0.79641575,0.50054117,0.5,-0.80481649,0.80494069,0.5){1.2666006,1.5401154,1.1180299,1.5232843}; -SS(0.08017426,0.31429474,-0.16745504,-0.056808231,0.14323286,-0.13367928,-0.1182182,0.15955837,-0.3159857,0.13402468,0.11673163,-0.1460819){0.11103103,0.022140076,0.11990198,0.039337265}; -SS(0.13913358,0.10014326,0.18199659,0.25126435,0.28098512,0.24657435,0.36021608,0.23247759,-0.012351094,0.13261259,0.21336316,0.036566127){0.045990896,0.18575023,0.16110593,0.046199082}; -SS(-0.77777778,1,-0.5,-0.83248216,0.76782327,-0.31292259,-0.76988954,1,-0.26944904,-1,0.83964442,-0.3309874){1.8319852,1.366757,1.6463902,1.7979585}; -SS(-0.10743676,0.85847111,-0.11136175,-0.36992714,1,-0.22970445,-0.14847812,0.78021305,-0.27623142,-0.38143574,0.84373572,-0.12387887){0.7462212,1.1684568,0.68882385,0.85864479}; -SS(-0.87046532,0.63071146,0.35630423,-1,0.55555556,0.5,-1,0.70725984,0.21334539,-1,0.4752276,0.27420758){1.2666006,1.5401154,1.5286486,1.2803563}; -SS(0.5,0,0.5,0.59416595,0.14141347,0.32656529,0.75,0,0.5,0.50011436,0,0.27961788){0.47735984,0.46498444,0.79262349,0.30940041}; -SS(-0.68637718,0.43295764,-0.18031685,-0.63246299,0.29145388,0.035195127,-0.79172217,0.43302343,0.13373134,-0.78848723,0.26584533,-0.068869999){0.67437813,0.47226275,0.80968993,0.68151298}; -SS(-0.5,-1,0.5,-0.349759,-0.84853211,0.35590634,-0.25,-1,0.5,-0.4999534,-1,0.27968311){1.4840089,0.94981364,1.2918821,1.3075402}; -SS(-0.0073778212,0.36022468,0.15230712,-0.098708274,0.55956225,0.10505678,0.098704003,0.67249079,0.1943501,0.086744979,0.52712982,0.027891324){0.13675819,0.31633913,0.47957633,0.26660844}; -SS(0.77315808,0.36766952,0.075951375,1,0.50009037,3.487572e-05,1,0.29178008,0.20838772,1,0.2203628,5.6826691e-05){0.71793497,1.2275825,1.1084285,1.0268649}; -SS(-0.4581749,-0.5263483,-0.32801665,-0.65956212,-0.52273243,-0.19262862,-0.36174,-0.40052234,-0.23665811,-0.61549046,-0.35581383,-0.12962263){0.57811658,0.7287475,0.32480953,0.50877487}; -SS(-0.61549046,-0.35581383,-0.12962263,-0.65956212,-0.52273243,-0.19262862,-0.36174,-0.40052234,-0.23665811,-0.52487586,-0.5117405,-0.017639258){0.50877487,0.7287475,0.32480953,0.51812974}; -SS(-0.65956212,-0.52273243,-0.19262862,-0.4581749,-0.5263483,-0.32801665,-0.36174,-0.40052234,-0.23665811,-0.52487586,-0.5117405,-0.017639258){0.7287475,0.57811658,0.32480953,0.51812974}; -SS(0.6657623,0.67544754,-0.5,0.51674933,0.64481281,-0.39755292,0.45062041,0.7833899,-0.5,0.57309542,0.50075776,-0.5){1.1304562,0.82858869,1.0506853,0.81773274}; -SS(0.85153485,0.65148612,-0.35468846,1,0.5,-0.5,1,0.75,-0.5,1,0.50010355,-0.27968748){1.2568282,1.4840091,1.7924126,1.3071084}; -SS(-0.89663862,-0.69397302,0.37275403,-1,-0.55555556,0.5,-1,-0.77777778,0.5,-0.80635543,-0.81164184,0.5){1.4119512,1.5359657,1.8434331,1.5410993}; -SS(0.77777778,1,-0.5,0.54326203,0.87223293,-0.356993,0.81205362,0.80656044,-0.5,0.68900489,0.77311276,-0.28043733){1.8341362,1.1662147,1.5391707,1.1326816}; -SS(-0.58258855,0.14037208,-0.067351147,-0.4720473,-0.063494476,-0.036829327,-0.70236545,-0.13062851,-0.19140485,-0.49808619,0.0026201378,-0.26387206){0.34532741,0.21285629,0.5265969,0.29810596}; -SS(0.85153485,0.65148612,-0.35468846,1,0.75,-0.5,0.78906409,0.5041626,-0.5,0.81205362,0.80656044,-0.5){1.2568282,1.7924126,1.1105402,1.5391707}; -SS(0.84582719,0.572243,0.1361951,1,0.29178008,0.20838772,1,0.50005385,0.27984222,0.77315808,0.36766952,0.075951375){1.0417018,1.1084285,1.3085441,0.71793497}; -SS(-0.49292178,-0.37477565,-0.5,-0.4581749,-0.5263483,-0.32801665,-0.23055166,-0.37480907,-0.5,-0.36174,-0.40052234,-0.23665811){0.6115465,0.57811658,0.41992239,0.32480953}; -SS(-0.63815223,-0.88141187,0.37488811,-0.75,-1,0.5,-0.5,-1,0.5,-0.50400314,-0.78879927,0.5){1.3088768,1.7943537,1.4840089,1.1086821}; -SS(-1,-0.00021427218,0.00011802244,-0.82279039,-0.18997945,0.10657137,-1,-0.24887753,0.1953112,-1,-0.20076836,0.00061221676){0.98080906,0.70945047,1.0768014,1.0172898}; -SS(0,-1,-6.9388939e-15,-0.12988976,-0.86995226,0.20452896,0,-1,0.25,0,-0.77970171,0.00010845427){0.98008605,0.79894991,1.0438639,0.58842154}; -SS(-0.4433427,0.53576375,-0.12560501,-0.68637718,0.43295764,-0.18031685,-0.49391083,0.27907498,-0.27264436,-0.54631436,0.45612147,-0.00074796238){0.48429505,0.67437813,0.37398026,0.48593017}; -SS(0.11523872,0.30161582,0.5,-0.11614487,0.30919383,0.33918095,-0.18136176,0.40461939,0.5,0.085954007,0.41736025,0.32943097){0.33546792,0.20820823,0.42386795,0.27115576}; -SS(-0.12988976,-0.86995226,0.20452896,0,-1,-6.9388939e-15,0,-1,0.25,-0.22019153,-1,-0.00010416607){0.79894991,0.98008605,1.0438639,1.0287732}; -SS(0.30434906,0.49798107,-4.0114635e-05,0.11458044,0.70010244,0.010073529,0.25248643,0.73785598,-0.13082591,0.086744979,0.52712982,0.027891324){0.32377482,0.49378055,0.60350215,0.26660844}; -SS(-0.58258855,0.14037208,-0.067351147,-0.76752638,0.004448061,-0.013214377,-0.70236545,-0.13062851,-0.19140485,-0.4720473,-0.063494476,-0.036829327){0.34532741,0.5734925,0.5265969,0.21285629}; -SS(-0.62450053,-0.31310845,0.38575928,-0.49284988,-0.37485679,0.5,-0.73174745,-0.21491043,0.5,-0.78327322,-0.45013966,0.5){0.62379151,0.6163523,0.81377033,1.0435491}; -SS(0.13261259,0.21336316,0.036566127,-0.0073778212,0.36022468,0.15230712,0.08017426,0.31429474,-0.16745504,-0.096302334,0.43534175,-0.056072844){0.046199082,0.13675819,0.11103103,0.18078295}; -SS(-0.52470763,0.46530444,0.33754711,-0.54640726,0.34339216,0.19847863,-0.67801153,0.56076489,0.29217382,-0.45563594,0.60375179,0.095527884){0.59371518,0.43575493,0.83617727,0.56263538}; -SS(0.54326203,0.87223293,-0.356993,0.77777778,1,-0.5,0.82865019,1,-0.3214153,0.68900489,0.77311276,-0.28043733){1.1662147,1.8341362,1.7714679,1.1326816}; -SS(0.5,0,-0.5,0.75,0,-0.5,0.6251418,0.1440922,-0.5,0.50007058,0,-0.27987971){0.48471812,0.79494611,0.63751638,0.31006895}; -SS(-0.35582611,-0.64426575,-0.070000747,-0.4581749,-0.5263483,-0.32801665,-0.49676106,-0.69523221,-0.26913048,-0.52487586,-0.5117405,-0.017639258){0.52757348,0.57811658,0.78043195,0.51812974}; -SS(0,-0.49989758,0.27983937,0,-0.75,0.5,0,-0.5,0.5,-0.14394692,-0.62481063,0.5){0.30650831,0.79557901,0.48207879,0.63866347}; -SS(-0.32064519,0.49448821,1.4739833e-06,-0.45563594,0.60375179,0.095527884,-0.20984637,0.69532212,0.20809493,-0.2401666,0.74114092,-0.051302261){0.32892635,0.56263538,0.55022745,0.58653028}; -SS(-0.38492375,-0.20017574,-0.33650716,-0.49292178,-0.37477565,-0.5,-0.23055166,-0.37480907,-0.5,-0.36174,-0.40052234,-0.23665811){0.28705324,0.6115465,0.41992239,0.32480953}; -SS(-0.17097214,0.64900986,-0.39927747,-0.033284914,0.58770906,-0.5,-0.31289368,0.69974287,-0.5,-0.18268367,0.83021756,-0.5){0.59741335,0.58301644,0.82323564,0.9573479}; -SS(1,0.77979347,0.00010253841,0.88049681,0.87960137,0.13412341,0.77861211,0.77861193,-0.067175459,0.84582719,0.572243,0.1361951){1.5887874,1.5518824,1.1981052,1.0417018}; -SS(-0.49998858,-1,-4.7037318e-05,-0.63348211,-0.7706683,-0.074889286,-0.70823063,-1,-0.20843533,-0.77973152,-1,-0.0001062007){1.2276085,0.97907785,1.5240742,1.588155}; -SS(-1,1,-0.5,-0.76988954,1,-0.26944904,-1,1,-0.25,-1,0.83964442,-0.3309874){2.2287589,1.6463902,2.0450698,1.7979585}; -SS(-0.056808231,0.14323286,-0.13367928,-0.26297351,0.20404986,-0.17122089,-0.29413589,0.046284299,-0.31274881,-0.28278924,0.041190137,-0.04219563){0.022140076,0.12773981,0.1681493,0.063480395}; -SS(-0.29261734,0.53193925,0.43339885,-0.18136176,0.40461939,0.5,-0.35521568,0.4957142,0.26668635,-0.11614487,0.30919383,0.33918095){0.53993003,0.42386795,0.42001946,0.20820823}; -SS(0.13913358,0.10014326,0.18199659,0,0,0.25,0.29175541,0,0.20824909,0.1615172,0,0.33845519){0.045990896,0.045060365,0.1093371,0.13068911}; -SS(0.11136938,1,0.13859714,0.22886345,0.79287946,0.30210005,0.098704003,0.67249079,0.1943501,0.24404834,0.79519787,0.082231238){1.0072058,0.75332396,0.47957633,0.68472542}; -SS(-0.38492375,-0.20017574,-0.33650716,-0.49292178,-0.37477565,-0.5,-0.30131805,-0.11512588,-0.5,-0.23055166,-0.37480907,-0.5){0.28705324,0.6115465,0.3368451,0.41992239}; -SS(-0.35455825,0.80859576,-0.32177549,-0.33333333,1,-0.5,-0.55555556,1,-0.5,-0.56041637,1,-0.29784853){0.86460259,1.3407278,1.5379273,1.3856141}; -SS(-1,0.55555556,-0.5,-0.80558396,0.5878127,-0.29244037,-1,0.70529035,-0.21162945,-1,0.47527469,-0.27513051){1.5309384,1.0616703,1.520296,1.2834809}; -SS(1,0.50009037,3.487572e-05,0.84582719,0.572243,0.1361951,1,0.29178008,0.20838772,1,0.50005385,0.27984222){1.2275825,1.0417018,1.1084285,1.3085441}; -SS(0.085954007,0.41736025,0.32943097,-0.0073778212,0.36022468,0.15230712,0.098704003,0.67249079,0.1943501,0.086744979,0.52712982,0.027891324){0.27115576,0.13675819,0.47957633,0.26660844}; -SS(-0.3533559,-0.49437708,0.037576204,-0.50159539,-0.29258506,7.2987381e-06,-0.3548152,-0.48825703,0.21848985,-0.3727858,-0.19869367,0.11195566){0.35575629,0.32068114,0.38862106,0.16948569}; -SS(0.64232771,0.84838332,0.46476191,0.55555556,1,0.5,0.68966181,1,0.19790566,0.55555177,0.82262944,0.31125158){1.3339184,1.5357742,1.492557,1.0671623}; -SS(-0.49998858,-1,-4.7037318e-05,-0.36608751,-0.8951802,0.074405883,-0.29157863,-1,0.20827581,-0.22019153,-1,-0.00010416607){1.2276085,0.92652515,1.1139248,1.0287732}; -SS(-0.68637718,0.43295764,-0.18031685,-0.8068077,0.56885008,-0.063754108,-0.79172217,0.43302343,0.13373134,-0.54631436,0.45612147,-0.00074796238){0.67437813,0.96112076,0.80968993,0.48593017}; -SS(0.35567295,0.65317229,0.39545235,0.66554141,0.67524133,0.5,0.5725222,0.50074158,0.5,0.47723835,0.52605258,0.30619083){0.69293227,1.1271263,0.8121357,0.58228229}; -SS(-0.29237157,-0.11865629,-0.17606411,-0.16707278,-0.087678023,-0.31121894,-0.29413589,0.046284299,-0.31274881,-0.28278924,0.041190137,-0.04219563){0.11404163,0.11599041,0.1681493,0.063480395}; -SS(-0.63246299,0.29145388,0.035195127,-0.68637718,0.43295764,-0.18031685,-0.79172217,0.43302343,0.13373134,-0.54631436,0.45612147,-0.00074796238){0.47226275,0.67437813,0.80968993,0.48593017}; -SS(0.75922048,0.56990614,-0.17060419,0.67125235,0.44297685,-0.31879306,0.68900489,0.77311276,-0.28043733,0.85153485,0.65148612,-0.35468846){0.91133836,0.72773009,1.1326816,1.2568282}; -SS(-0.16643696,-0.21791406,0.42402077,-0.30122568,-0.11513872,0.5,-0.20045203,0.067929244,0.29301468,-0.40506391,-0.079541407,0.3303193){0.23818505,0.33848202,0.10955402,0.26156128}; -SS(-0.31377045,0.30492781,-0.36427962,-0.24654336,0.57133462,-0.25396354,-0.50782983,0.50249565,-0.29902586,-0.34372617,0.39779568,-0.18541051){0.30770932,0.42991415,0.58612549,0.29650146}; -SS(-0.76752638,0.004448061,-0.013214377,-0.58258855,0.14037208,-0.067351147,-0.70236545,-0.13062851,-0.19140485,-0.77267892,0.13105707,-0.24874664){0.5734925,0.34532741,0.5265969,0.65386325}; -SS(0,0,-0.25,0.13402468,0.11673163,-0.1460819,0.20129651,0.21389912,-0.31902192,-0.1182182,0.15955837,-0.3159857){0.044304329,0.039337265,0.16839385,0.11990198}; -SS(-0.65956212,-0.52273243,-0.19262862,-0.62341011,-0.46880832,-0.38153973,-0.49676106,-0.69523221,-0.26913048,-0.76546557,-0.72634686,-0.27513208){0.7287475,0.73807879,0.78043195,1.1696133}; -SS(-1,-0.11111111,0.5,-0.89646962,-0.32955067,0.34017365,-1,-0.24887753,0.1953112,-0.84084014,-0.14895162,0.31636914){1.2390062,1.0133061,1.0768014,0.81273381}; -SS(-0.10133362,-0.40777162,0.1162396,0,-0.49997946,0.00010199173,0,-0.29157012,0.20836692,0,-0.49989758,0.27983937){0.17697987,0.22811872,0.11172813,0.30650831}; -SS(-0.4581749,-0.5263483,-0.32801665,-0.35582611,-0.64426575,-0.070000747,-0.36174,-0.40052234,-0.23665811,-0.52487586,-0.5117405,-0.017639258){0.57811658,0.52757348,0.32480953,0.51812974}; -SS(0.11136938,1,0.13859714,0.22886345,0.79287946,0.30210005,-0.014815866,1,0.31001515,-0.043441254,0.79173928,0.29440137){1.0072058,0.75332396,1.0772324,0.69563564}; -SS(0.11136938,1,0.13859714,0.24404834,0.79519787,0.082231238,0.098704003,0.67249079,0.1943501,-0.035654771,0.78507762,0.045007896){1.0072058,0.68472542,0.47957633,0.60161266}; -SS(0.25248643,0.73785598,-0.13082591,0.11458044,0.70010244,0.010073529,0.17777709,0.54047543,-0.2567554,0.086744979,0.52712982,0.027891324){0.60350215,0.49378055,0.36840304,0.26660844}; -SS(-0.098708274,0.55956225,0.10505678,0.098704003,0.67249079,0.1943501,-0.11618574,0.50328545,0.29980467,0.085954007,0.41736025,0.32943097){0.31633913,0.47957633,0.33969293,0.27115576}; -SS(-1,-0.00021427218,0.00011802244,-0.84289574,0.018333867,0.1608607,-1,-0.24887753,0.1953112,-0.82279039,-0.18997945,0.10657137){0.98080906,0.72430843,1.0768014,0.70945047}; -SS(-0.41651431,0.41690828,-0.5,-0.39032311,0.63241857,-0.34621958,-0.50782983,0.50249565,-0.29902586,-0.31377045,0.30492781,-0.36427962){0.57523437,0.65630059,0.58612549,0.30770932}; -SS(-0.49292178,-0.37477565,-0.5,-0.62341011,-0.46880832,-0.38153973,-0.78315651,-0.45008839,-0.5,-0.50036547,-0.57239096,-0.5){0.6115465,0.73807879,1.0467962,0.81333009}; -SS(-0.18136176,0.40461939,0.5,-0.29261734,0.53193925,0.43339885,-0.35521568,0.4957142,0.26668635,-0.41843781,0.30742585,0.3397996){0.42386795,0.53993003,0.42001946,0.37011438}; -SS(-0.69937107,0.31347586,0.5,-0.52470763,0.46530444,0.33754711,-0.61509744,0.47589965,0.5,-0.61674646,0.25215289,0.3447871){0.8165723,0.59371518,0.84259202,0.54607287}; -SS(-0.52470763,0.46530444,0.33754711,-0.69937107,0.31347586,0.5,-0.61509744,0.47589965,0.5,-0.67801153,0.56076489,0.29217382){0.59371518,0.8165723,0.84259202,0.83617727}; -SS(-0.52470763,0.46530444,0.33754711,-0.69937107,0.31347586,0.5,-0.67801153,0.56076489,0.29217382,-0.61674646,0.25215289,0.3447871){0.59371518,0.8165723,0.83617727,0.54607287}; -SS(0,-0.25,0.5,-0.16643696,-0.21791406,0.42402077,0,-0.29157012,0.20836692,-0.1853821,-0.42358473,0.30866054){0.28720824,0.23818505,0.11172813,0.29143101}; -SS(-0.84289574,0.018333867,0.1608607,-1,-0.00021427218,0.00011802244,-1,-0.24887753,0.1953112,-1,-0.00012222908,0.26646899){0.72430843,0.98080906,1.0768014,1.0506696}; -SS(-0.79172217,0.43302343,0.13373134,-1,0.24865949,0.19540364,-1,0.4752276,0.27420758,-1,0.29928494,0.0012550607){0.80968993,1.0814407,1.2803563,1.0718665}; -SS(-1,0.49991607,0.0031934521,-0.79172217,0.43302343,0.13373134,-1,0.4752276,0.27420758,-1,0.29928494,0.0012550607){1.2302733,0.80968993,1.2803563,1.0718665}; -SS(-0.66546973,0.66566005,0.5,-0.60421932,0.82298164,0.34468578,-0.48141868,0.60085372,0.5,-0.67801153,0.56076489,0.29217382){1.1224691,1.1449713,0.82306978,0.83617727}; -SS(0.43654676,1,0.2604635,0.40637652,0.87094343,0.13060843,0.23106485,1,0.31398279,0.24937941,1,-0.00011138016){1.2403655,0.92399337,1.1340577,1.0446566}; -SS(-0.29237157,-0.11865629,-0.17606411,-0.16707278,-0.087678023,-0.31121894,-0.28278924,0.041190137,-0.04219563,-0.098950987,-0.13391411,-0.14594667){0.11404163,0.11599041,0.063480395,0.03512721}; -SS(0.30434906,0.49798107,-4.0114635e-05,0.42864323,0.48543211,-0.13804456,0.25248643,0.73785598,-0.13082591,0.45788353,0.76094781,-0.0096633567){0.32377482,0.42022283,0.60350215,0.76853994}; -SS(-0.76988954,1,-0.26944904,-1,1,-0.5,-0.77777778,1,-0.5,-1,0.83964442,-0.3309874){1.6463902,2.2287589,1.8319852,1.7979585}; -SS(-0.65631386,-0.59724887,0.13822882,-0.59094649,-0.40495207,0.12834587,-0.3548152,-0.48825703,0.21848985,-0.52487586,-0.5117405,-0.017639258){0.7890621,0.51475101,0.38862106,0.51812974}; -SS(-0.15923414,-0.34171533,-0.15079999,-0.36174,-0.40052234,-0.23665811,-0.23583358,-0.36008743,0.0071767184,-0.45843014,-0.20445062,-0.15988901){0.14783141,0.32480953,0.16465457,0.26094507}; -SS(-0.25897908,-0.24013326,0.26450313,-0.16643696,-0.21791406,0.42402077,-0.20045203,0.067929244,0.29301468,-0.40506391,-0.079541407,0.3303193){0.17775565,0.23818505,0.10955402,0.26156128}; -SS(-0.29237157,-0.11865629,-0.17606411,-0.15923414,-0.34171533,-0.15079999,-0.23583358,-0.36008743,0.0071767184,-0.45843014,-0.20445062,-0.15988901){0.11404163,0.14783141,0.16465457,0.26094507}; -SS(0.25,0,0.5,0.26083053,0.15082484,0.37728795,0.5,0,0.5,0.50011436,0,0.27961788){0.29281005,0.21918499,0.47735984,0.30940041}; -SS(0.13402468,0.11673163,-0.1460819,0.08017426,0.31429474,-0.16745504,0.20129651,0.21389912,-0.31902192,-0.1182182,0.15955837,-0.3159857){0.039337265,0.11103103,0.16839385,0.11990198}; -SS(-0.54631436,0.45612147,-0.00074796238,-0.32064519,0.49448821,1.4739833e-06,-0.54640726,0.34339216,0.19847863,-0.39654734,0.26661646,0.019312696){0.48593017,0.32892635,0.43575493,0.20710489}; -SS(-0.32294154,0.86180803,0.13108841,-0.222315,1,-0.00011890035,-0.47972312,1,0.18932995,-0.22223836,1,0.2622369){0.84829643,1.0307381,1.2473472,1.0984067}; -SS(-0.084253952,1,0.13733396,-0.043441254,0.79173928,0.29440137,-0.20984637,0.69532212,0.20809493,-0.035654771,0.78507762,0.045007896){1.0073117,0.69563564,0.55022745,0.60161266}; -SS(-0.39032311,0.63241857,-0.34621958,-0.24654336,0.57133462,-0.25396354,-0.50782983,0.50249565,-0.29902586,-0.31377045,0.30492781,-0.36427962){0.65630059,0.42991415,0.58612549,0.30770932}; -SS(-0.61115597,1,-0.10200355,-0.61311838,0.85766427,0.15491279,-0.47972312,1,0.18932995,-0.74954172,1,0.13574231){1.3611038,1.1216468,1.2473472,1.562759}; -SS(0.87272604,0.35900693,0.37172569,0.77315808,0.36766952,0.075951375,0.6902006,0.50015172,0.27072419,0.84582719,0.572243,0.1361951){1.0107603,0.71793497,0.77938072,1.0417018}; -SS(0.8781758,0.86708556,-0.1989731,1,1,-0.25,1,1,-6.9388939e-15,1,0.77979347,0.00010253841){1.5462283,2.0438315,1.9807485,1.5887874}; -SS(0.59365279,0.65503723,0.24444947,0.39612945,0.70614162,0.21524614,0.52218723,0.46943947,0.022097553,0.47723835,0.52605258,0.30619083){0.82252715,0.68453461,0.46892029,0.58228229}; -SS(0.60662231,0.34516964,-0.13972301,0.69383766,0.49492178,-0.021800115,0.49866453,0.63973666,-0.21510859,0.42864323,0.48543211,-0.13804456){0.48782847,0.71284258,0.68344633,0.42022283}; -SS(-0.18136176,0.40461939,0.5,-0.41843781,0.30742585,0.3397996,-0.35521568,0.4957142,0.26668635,-0.11614487,0.30919383,0.33918095){0.42386795,0.37011438,0.42001946,0.20820823}; -SS(-0.29261734,0.53193925,0.43339885,-0.48141868,0.60085372,0.5,-0.47185361,0.73769401,0.24072705,-0.35521568,0.4957142,0.26668635){0.53993003,0.82306978,0.80384956,0.42001946}; -SS(0,-0.75,0.5,0,-0.7082575,0.2084616,0,-0.83845667,0.33864852,-0.14394692,-0.62481063,0.5){0.79557901,0.52387062,0.80178572,0.63866347}; -SS(0.75,0,-0.5,0.83867599,0,-0.33865964,0.6251418,0.1440922,-0.5,0.70841775,0,-0.20847891){0.79494611,0.80182539,0.63751638,0.52293439}; -SS(-0.39032311,0.63241857,-0.34621958,-0.41651431,0.41690828,-0.5,-0.20381263,0.45499536,-0.5,-0.24654336,0.57133462,-0.25396354){0.65630059,0.57523437,0.478983,0.42991415}; -SS(-1,-0.55555556,0.5,-0.89663862,-0.69397302,0.37275403,-1,-0.70710233,0.21356199,-1,-0.47520831,0.27427507){1.5359657,1.4119512,1.5280688,1.2822693}; -SS(-0.59094649,-0.40495207,0.12834587,-0.73479965,-0.34302295,0.24038072,-0.50874333,-0.23900991,0.2620444,-0.65367362,-0.16081953,0.0014934597){0.51475101,0.69668046,0.36443271,0.4344691}; -SS(0,-0.7082575,0.2084616,-0.22656331,-0.68065623,0.28194433,0,-0.83845667,0.33864852,-0.14394692,-0.62481063,0.5){0.52387062,0.57683818,0.80178572,0.63866347}; -SS(-0.48141868,0.60085372,0.5,-0.60421932,0.82298164,0.34468578,-0.47185361,0.73769401,0.24072705,-0.67801153,0.56076489,0.29217382){0.82306978,1.1449713,0.80384956,0.83617727}; -SS(0.60662231,0.34516964,-0.13972301,0.67125235,0.44297685,-0.31879306,0.49866453,0.63973666,-0.21510859,0.75922048,0.56990614,-0.17060419){0.48782847,0.72773009,0.68344633,0.91133836}; -SS(-0.098708274,0.55956225,0.10505678,-0.0073778212,0.36022468,0.15230712,0.098704003,0.67249079,0.1943501,0.085954007,0.41736025,0.32943097){0.31633913,0.13675819,0.47957633,0.27115576}; -SS(-0.65367362,-0.16081953,0.0014934597,-0.67616985,-0.069078192,0.18801024,-0.73479965,-0.34302295,0.24038072,-0.50874333,-0.23900991,0.2620444){0.4344691,0.47948004,0.69668046,0.36443271}; -SS(0.65062064,0.64268786,0.069510863,0.59365279,0.65503723,0.24444947,0.39612945,0.70614162,0.21524614,0.52218723,0.46943947,0.022097553){0.82620698,0.82252715,0.68453461,0.46892029}; -SS(-0.61674646,0.25215289,0.3447871,-0.69937107,0.31347586,0.5,-0.67801153,0.56076489,0.29217382,-0.83851866,0.33014205,0.32623765){0.54607287,0.8165723,0.83617727,0.89937894}; -SS(-0.83851866,0.33014205,0.32623765,-0.54640726,0.34339216,0.19847863,-0.79172217,0.43302343,0.13373134,-0.67801153,0.56076489,0.29217382){0.89937894,0.43575493,0.80968993,0.83617727}; -SS(0.35689191,0.091376279,-0.36932783,0.25,0,-0.5,0.29173763,0,-0.20843742,0.16149165,0,-0.33864688){0.26145514,0.28810477,0.1134179,0.12746835}; -SS(0.18202227,0.38279251,0.10350409,-0.0073778212,0.36022468,0.15230712,0.08017426,0.31429474,-0.16745504,0.13261259,0.21336316,0.036566127){0.17617817,0.13675819,0.11103103,0.046199082}; -SS(-1,-0.33333333,-0.5,-0.7907607,-0.33838097,-0.28342271,-1,-0.25140376,-0.1934451,-1,-0.47540235,-0.27521785){1.3342594,0.80149819,1.0790534,1.2841965}; -SS(-0.5555987,0.045150158,0.095162244,-0.67616985,-0.069078192,0.18801024,-0.50874333,-0.23900991,0.2620444,-0.40506391,-0.079541407,0.3303193){0.29993682,0.47948004,0.36443271,0.26156128}; -SS(-1,-0.33333333,-0.5,-0.85707128,-0.1416783,-0.34083416,-1,-0.25140376,-0.1934451,-0.7907607,-0.33838097,-0.28342271){1.3342594,0.85441326,1.0790534,0.80149819}; -SS(0.84582719,0.572243,0.1361951,1,0.50009037,3.487572e-05,1,0.29178008,0.20838772,0.77315808,0.36766952,0.075951375){1.0417018,1.2275825,1.1084285,0.71793497}; -SS(-0.3132159,0.69976014,0.5,-0.29261734,0.53193925,0.43339885,-0.48141868,0.60085372,0.5,-0.47185361,0.73769401,0.24072705){0.82050522,0.53993003,0.82306978,0.80384956}; -SS(-0.3548152,-0.48825703,0.21848985,-0.59094649,-0.40495207,0.12834587,-0.50874333,-0.23900991,0.2620444,-0.3727858,-0.19869367,0.11195566){0.38862106,0.51475101,0.36443271,0.16948569}; -SS(-1,-1,-0.25,-0.86742481,-0.86548068,-0.14483364,-1,-1,-6.9388939e-15,-0.77973152,-1,-0.0001062007){2.0422973,1.5085891,1.9831286,1.588155}; -SS(-0.54640726,0.34339216,0.19847863,-0.61674646,0.25215289,0.3447871,-0.67801153,0.56076489,0.29217382,-0.83851866,0.33014205,0.32623765){0.43575493,0.54607287,0.83617727,0.89937894}; -SS(0.50010751,0,-0.00013054911,0.37137652,0.1767682,-0.19801193,0.29173763,0,-0.20843742,0.22032809,0,-9.1119885e-05){0.22823279,0.19205628,0.1134179,0.027339551}; -SS(-1,-0.11111111,0.5,-0.84084014,-0.14895162,0.31636914,-1,-0.24887753,0.1953112,-1,-0.00012222908,0.26646899){1.2390062,0.81273381,1.0768014,1.0506696}; -SS(0.55555177,0.82262944,0.31125158,0.55555556,1,0.5,0.68966181,1,0.19790566,0.43654676,1,0.2604635){1.0671623,1.5357742,1.492557,1.2403655}; -SS(-0.62341011,-0.46880832,-0.38153973,-0.67495489,-0.6652659,-0.5,-0.49676106,-0.69523221,-0.26913048,-0.76546557,-0.72634686,-0.27513208){0.73807879,1.1276355,0.78043195,1.1696133}; -SS(-0.70823063,-1,-0.20843533,-0.42066299,-0.84356131,-0.12906413,-0.49995867,-1,-0.27986665,-0.63348211,-0.7706683,-0.074889286){1.5240742,0.88525127,1.3082069,0.97907785}; -SS(0.30434906,0.49798107,-4.0114635e-05,0.086744979,0.52712982,0.027891324,0.25248643,0.73785598,-0.13082591,0.17777709,0.54047543,-0.2567554){0.32377482,0.26660844,0.60350215,0.36840304}; -SS(-0.65355936,0.25468043,-0.1897796,-0.58258855,0.14037208,-0.067351147,-0.39654734,0.26661646,0.019312696,-0.63246299,0.29145388,0.035195127){0.51379882,0.34532741,0.20710489,0.47226275}; -SS(0.13913358,0.10014326,0.18199659,0.29175541,0,0.20824909,0.22032809,0,-9.1119885e-05,0.36021608,0.23247759,-0.012351094){0.045990896,0.1093371,0.027339551,0.16110593}; -SS(-0.63048479,0.37587985,-0.34368186,-0.40408872,0.18166381,-0.5,-0.49391083,0.27907498,-0.27264436,-0.62938155,0.17932964,-0.37445272){0.64388066,0.42526168,0.37398026,0.55109073}; -SS(0.67125235,0.44297685,-0.31879306,0.49866453,0.63973666,-0.21510859,0.75922048,0.56990614,-0.17060419,0.68900489,0.77311276,-0.28043733){0.72773009,0.68344633,0.91133836,1.1326816}; -SS(-1,-0.5000565,0.0033661208,-0.85520613,-0.46088631,-0.14784569,-1,-0.25140376,-0.1934451,-1,-0.20076836,0.00061221676){1.2263361,0.95161001,1.0790534,1.0172898}; -SS(0.08017426,0.31429474,-0.16745504,0.09693172,0.3918681,-0.3370861,0.20129651,0.21389912,-0.31902192,-0.1182182,0.15955837,-0.3159857){0.11103103,0.26256104,0.16839385,0.11990198}; -SS(-1,-0.5000565,0.0033661208,-0.85520613,-0.46088631,-0.14784569,-1,-0.20076836,0.00061221676,-0.76760867,-0.33664988,-0.028298027){1.2263361,0.95161001,1.0172898,0.68479998}; -SS(0.87272604,0.35900693,0.37172569,1,0.25,0.5,1,0.5,0.5,0.78912399,0.50423732,0.5){1.0107603,1.2942978,1.484684,1.1096027}; -SS(0.26083053,0.15082484,0.37728795,0.25,0,0.5,0.29175541,0,0.20824909,0.50011436,0,0.27961788){0.21918499,0.29281005,0.1093371,0.30940041}; -SS(0.49866453,0.63973666,-0.21510859,0.51674933,0.64481281,-0.39755292,0.68900489,0.77311276,-0.28043733,0.67125235,0.44297685,-0.31879306){0.68344633,0.82858869,1.1326816,0.72773009}; -SS(0.69383766,0.49492178,-0.021800115,0.60662231,0.34516964,-0.13972301,0.49866453,0.63973666,-0.21510859,0.75922048,0.56990614,-0.17060419){0.71284258,0.48782847,0.68344633,0.91133836}; -SS(0.50010751,0,-0.00013054911,0.37137652,0.1767682,-0.19801193,0.22032809,0,-9.1119885e-05,0.36021608,0.23247759,-0.012351094){0.22823279,0.19205628,0.027339551,0.16110593}; -SS(-0.39032311,0.63241857,-0.34621958,-0.41651431,0.41690828,-0.5,-0.24654336,0.57133462,-0.25396354,-0.31377045,0.30492781,-0.36427962){0.65630059,0.57523437,0.42991415,0.30770932}; -SS(0.77777778,1,0.5,0.64232771,0.84838332,0.46476191,0.55555556,1,0.5,0.82853688,1,0.32125076){1.8450917,1.3339184,1.5357742,1.7703132}; -SS(-0.50159539,-0.29258506,7.2987381e-06,-0.59094649,-0.40495207,0.12834587,-0.3548152,-0.48825703,0.21848985,-0.3727858,-0.19869367,0.11195566){0.32068114,0.51475101,0.38862106,0.16948569}; -SS(-0.65355936,0.25468043,-0.1897796,-0.58258855,0.14037208,-0.067351147,-0.49391083,0.27907498,-0.27264436,-0.39654734,0.26661646,0.019312696){0.51379882,0.34532741,0.37398026,0.20710489}; -SS(-0.098708274,0.55956225,0.10505678,-0.32064519,0.49448821,1.4739833e-06,-0.2401666,0.74114092,-0.051302261,-0.096302334,0.43534175,-0.056072844){0.31633913,0.32892635,0.58653028,0.18078295}; -SS(-0.41651431,0.41690828,-0.5,-0.31377045,0.30492781,-0.36427962,-0.20381263,0.45499536,-0.5,-0.24654336,0.57133462,-0.25396354){0.57523437,0.30770932,0.478983,0.42991415}; -SS(0.54326203,0.87223293,-0.356993,0.77777778,1,-0.5,0.55555556,1,-0.5,0.82865019,1,-0.3214153){1.1662147,1.8341362,1.5352494,1.7714679}; -SS(-0.41651431,0.41690828,-0.5,-0.63048479,0.37587985,-0.34368186,-0.40408872,0.18166381,-0.5,-0.49391083,0.27907498,-0.27264436){0.57523437,0.64388066,0.42526168,0.37398026}; -SS(-0.0073778212,0.36022468,0.15230712,0.13261259,0.21336316,0.036566127,-0.13709741,0.19518884,0.034033465,-0.096302334,0.43534175,-0.056072844){0.13675819,0.046199082,0.040184006,0.18078295}; -SS(-0.0089783977,0.64320989,-0.13441642,-0.098708274,0.55956225,0.10505678,-0.2401666,0.74114092,-0.051302261,-0.096302334,0.43534175,-0.056072844){0.41358858,0.31633913,0.58653028,0.18078295}; -SS(-0.75,-1,-0.5,-0.6448883,-0.87343314,-0.36731947,-0.50377808,-0.78884267,-0.5,-0.80632325,-0.81147186,-0.5){1.7946951,1.296688,1.1087956,1.5409894}; -SS(-0.32294154,0.86180803,0.13108841,-0.084253952,1,0.13733396,-0.20984637,0.69532212,0.20809493,-0.035654771,0.78507762,0.045007896){0.84829643,1.0073117,0.55022745,0.60161266}; -SS(-0.0073778212,0.36022468,0.15230712,0.086744979,0.52712982,0.027891324,0.08017426,0.31429474,-0.16745504,-0.096302334,0.43534175,-0.056072844){0.13675819,0.26660844,0.11103103,0.18078295}; -SS(0.84582719,0.572243,0.1361951,0.65062064,0.64268786,0.069510863,0.76099919,0.76690574,0.25750996,0.77861211,0.77861193,-0.067175459){1.0417018,0.82620698,1.2143065,1.1981052}; -SS(0.25,0,-0.5,0.20129651,0.21389912,-0.31902192,-0.010543702,0.17712261,-0.5,0.16149165,0,-0.33864688){0.28810477,0.16839385,0.25750364,0.12746835}; -SS(-0.0073778212,0.36022468,0.15230712,0.18202227,0.38279251,0.10350409,0.08017426,0.31429474,-0.16745504,0.086744979,0.52712982,0.027891324){0.13675819,0.17617817,0.11103103,0.26660844}; -SS(0.39612945,0.70614162,0.21524614,0.36016656,0.41044152,0.1594367,0.52218723,0.46943947,0.022097553,0.47723835,0.52605258,0.30619083){0.68453461,0.3073722,0.46892029,0.58228229}; -SS(0.75,0,0.5,0.59416595,0.14141347,0.32656529,0.70845584,0,0.20819814,0.50011436,0,0.27961788){0.79262349,0.46498444,0.52761363,0.30940041}; -SS(-0.22656331,-0.68065623,0.28194433,0,-0.7082575,0.2084616,0,-0.49989758,0.27983937,-0.14394692,-0.62481063,0.5){0.57683818,0.52387062,0.30650831,0.63866347}; -SS(-0.22223836,1,0.2622369,-0.32294154,0.86180803,0.13108841,-0.084253952,1,0.13733396,-0.20984637,0.69532212,0.20809493){1.0984067,0.84829643,1.0073117,0.55022745}; -SS(-0.043441254,0.79173928,0.29440137,-0.22223836,1,0.2622369,-0.084253952,1,0.13733396,-0.20984637,0.69532212,0.20809493){0.69563564,1.0984067,1.0073117,0.55022745}; -SS(0.8988736,0.63809662,-0.070284173,1,0.50009037,3.487572e-05,1,0.70844226,-0.20827687,1,0.77979347,0.00010253841){1.2046527,1.2275825,1.5310675,1.5887874}; -SS(0.20129651,0.21389912,-0.31902192,0.25,0,-0.5,0.11583535,0.30145324,-0.5,0.37532516,0.23078833,-0.5){0.16839385,0.28810477,0.33954703,0.42551454}; -SS(-0.19461387,0.3919517,0.10437587,-0.26986228,0.26051837,0.22418657,-0.35521568,0.4957142,0.26668635,-0.39654734,0.26661646,0.019312696){0.19075448,0.1749353,0.42001946,0.20710489}; -SS(-0.1159097,-0.14329028,0.19302206,0,0,-6.9388939e-15,0,0,0.25,0,-0.22019801,5.0496855e-05){0.055235283,-0.017891206,0.045060365,0.029059683}; -SS(-0.45563594,0.60375179,0.095527884,-0.32064519,0.49448821,1.4739833e-06,-0.54640726,0.34339216,0.19847863,-0.54631436,0.45612147,-0.00074796238){0.56263538,0.32892635,0.43575493,0.48593017}; -SS(-0.25,-1,0.5,-0.349759,-0.84853211,0.35590634,-0.29157863,-1,0.20827581,-0.4999534,-1,0.27968311){1.2918821,0.94981364,1.1139248,1.3075402}; -SS(0.11111111,1,0.5,0.22886345,0.79287946,0.30210005,-0.014815866,1,0.31001515,0.23106485,1,0.31398279){1.2368521,0.75332396,1.0772324,1.1340577}; -SS(-1,0.77777778,-0.5,-0.83248216,0.76782327,-0.31292259,-1,0.55555556,-0.5,-0.80479144,0.80504612,-0.5){1.8398372,1.366757,1.5309384,1.5255891}; -SS(0.88049681,0.87960137,0.13412341,0.76099919,0.76690574,0.25750996,0.77861211,0.77861193,-0.067175459,0.84582719,0.572243,0.1361951){1.5518824,1.2143065,1.1981052,1.0417018}; -SS(0.39612945,0.70614162,0.21524614,0.26064395,0.61953306,0.12890567,0.52218723,0.46943947,0.022097553,0.36016656,0.41044152,0.1594367){0.68453461,0.45328252,0.46892029,0.3073722}; -SS(-0.61311838,0.85766427,0.15491279,-0.61115597,1,-0.10200355,-0.48952189,0.78345034,0.019065462,-0.79370724,0.81084643,0.045877226){1.1216468,1.3611038,0.83409809,1.270911}; -SS(-0.67616985,-0.069078192,0.18801024,-0.5555987,0.045150158,0.095162244,-0.50874333,-0.23900991,0.2620444,-0.3727858,-0.19869367,0.11195566){0.47948004,0.29993682,0.36443271,0.16948569}; -SS(-0.29237157,-0.11865629,-0.17606411,-0.3727858,-0.19869367,0.11195566,-0.23583358,-0.36008743,0.0071767184,-0.20656092,-0.13938028,0.029547229){0.11404163,0.16948569,0.16465457,0.048278496}; -SS(-0.043441254,0.79173928,0.29440137,0.11136938,1,0.13859714,0.098704003,0.67249079,0.1943501,-0.035654771,0.78507762,0.045007896){0.69563564,1.0072058,0.47957633,0.60161266}; -SS(-0.39654734,0.26661646,0.019312696,-0.54640726,0.34339216,0.19847863,-0.26986228,0.26051837,0.22418657,-0.35521568,0.4957142,0.26668635){0.20710489,0.43575493,0.1749353,0.42001946}; -SS(-1,0.77777778,0.5,-0.87046532,0.63071146,0.35630423,-1,0.55555556,0.5,-1,0.70725984,0.21334539){1.8402752,1.2666006,1.5401154,1.5286486}; -SS(-0.32064519,0.49448821,1.4739833e-06,-0.45563594,0.60375179,0.095527884,-0.54640726,0.34339216,0.19847863,-0.35521568,0.4957142,0.26668635){0.32892635,0.56263538,0.43575493,0.42001946}; -SS(-0.20984637,0.69532212,0.20809493,-0.30949447,0.8262402,0.33528492,-0.47185361,0.73769401,0.24072705,-0.35521568,0.4957142,0.26668635){0.55022745,0.87388961,0.80384956,0.42001946}; -SS(0.09693172,0.3918681,-0.3370861,-0.010543702,0.17712261,-0.5,0.20129651,0.21389912,-0.31902192,-0.1182182,0.15955837,-0.3159857){0.26256104,0.25750364,0.16839385,0.11990198}; -SS(-0.4581749,-0.5263483,-0.32801665,-0.49292178,-0.37477565,-0.5,-0.23055166,-0.37480907,-0.5,-0.26056819,-0.54975154,-0.34323516){0.57811658,0.6115465,0.41992239,0.46884495}; -SS(0.85153485,0.65148612,-0.35468846,1,0.75,-0.5,1,0.70844226,-0.20827687,1,0.50010355,-0.27968748){1.2568282,1.7924126,1.5310675,1.3071084}; -SS(1,0,-6.9388939e-15,0.86971177,0.13024645,0.1427188,1,0,0.25,1,0.2203628,5.6826691e-05){0.9846322,0.77797836,1.0436257,1.0268649}; -SS(-0.29237157,-0.11865629,-0.17606411,-0.45843014,-0.20445062,-0.15988901,-0.23583358,-0.36008743,0.0071767184,-0.3727858,-0.19869367,0.11195566){0.11404163,0.26094507,0.16465457,0.16948569}; -SS(0.86971177,0.13024645,0.1427188,1,0,-6.9388939e-15,1,0,0.25,0.77985819,0,-0.00014691753){0.77797836,0.9846322,1.0436257,0.58919206}; -SS(0.66554141,0.67524133,0.5,0.59365279,0.65503723,0.24444947,0.47723835,0.52605258,0.30619083,0.35567295,0.65317229,0.39545235){1.1271263,0.82252715,0.58228229,0.69293227}; -SS(-0.54631436,0.45612147,-0.00074796238,-0.65776896,0.64141588,0.074371921,-0.79172217,0.43302343,0.13373134,-0.67801153,0.56076489,0.29217382){0.48593017,0.83514199,0.80968993,0.83617727}; -SS(0.59365279,0.65503723,0.24444947,0.66554141,0.67524133,0.5,0.45042372,0.78359022,0.5,0.35567295,0.65317229,0.39545235){0.82252715,1.1271263,1.0496179,0.69293227}; -SS(-0.42066299,-0.84356131,-0.12906413,-0.49998858,-1,-4.7037318e-05,-0.70823063,-1,-0.20843533,-0.49995867,-1,-0.27986665){0.88525127,1.2276085,1.5240742,1.3082069}; -SS(-0.61115597,1,-0.10200355,-0.58934795,0.84141567,-0.18062024,-0.48952189,0.78345034,0.019065462,-0.79370724,0.81084643,0.045877226){1.3611038,1.0736489,0.83409809,1.270911}; -SS(-0.32064519,0.49448821,1.4739833e-06,-0.19461387,0.3919517,0.10437587,-0.35521568,0.4957142,0.26668635,-0.39654734,0.26661646,0.019312696){0.32892635,0.19075448,0.42001946,0.20710489}; -SS(0.29175541,0,0.20824909,0.13913358,0.10014326,0.18199659,0.25126435,0.28098512,0.24657435,0.46476684,0.14382827,0.12247557){0.1093371,0.045990896,0.18575023,0.23450402}; -SS(1,0.75,0.5,0.87881231,0.64063264,0.37220388,0.78912399,0.50423732,0.5,0.81191124,0.80644944,0.5){1.7930237,1.3069719,1.1096027,1.5425973}; -SS(-0.0089783977,0.64320989,-0.13441642,-0.01813809,0.53618118,-0.30537166,0.08017426,0.31429474,-0.16745504,-0.096302334,0.43534175,-0.056072844){0.41358858,0.36567785,0.11103103,0.18078295}; -SS(1,0.29178008,0.20838772,0.87272604,0.35900693,0.37172569,1,0.50005385,0.27984222,0.77315808,0.36766952,0.075951375){1.1084285,1.0107603,1.3085441,0.71793497}; -SS(-0.11754465,-0.65214472,-0.32749638,0,-0.75,-0.5,0,-0.5,-0.5,0,-0.49997234,-0.27965571){0.53347202,0.79460868,0.4845449,0.30906942}; -SS(0.54326203,0.87223293,-0.356993,0.55555556,1,-0.5,0.68985253,1,-0.19792707,0.82865019,1,-0.3214153){1.1662147,1.5352494,1.495304,1.7714679}; -SS(-0.32879066,-0.67072359,-0.5,-0.26056819,-0.54975154,-0.34323516,-0.23055166,-0.37480907,-0.5,-0.50036547,-0.57239096,-0.5){0.79007105,0.46884495,0.41992239,0.81333009}; -SS(-0.54640726,0.34339216,0.19847863,-0.54631436,0.45612147,-0.00074796238,-0.79172217,0.43302343,0.13373134,-0.67801153,0.56076489,0.29217382){0.43575493,0.48593017,0.80968993,0.83617727}; -SS(-0.34310942,-0.010167032,0.1509038,-0.5555987,0.045150158,0.095162244,-0.50874333,-0.23900991,0.2620444,-0.40506391,-0.079541407,0.3303193){0.12661586,0.29993682,0.36443271,0.26156128}; -SS(-0.3132159,0.69976014,0.5,-0.29261734,0.53193925,0.43339885,-0.47185361,0.73769401,0.24072705,-0.30949447,0.8262402,0.33528492){0.82050522,0.53993003,0.80384956,0.87388961}; -SS(-0.5555987,0.045150158,0.095162244,-0.34310942,-0.010167032,0.1509038,-0.50874333,-0.23900991,0.2620444,-0.3727858,-0.19869367,0.11195566){0.29993682,0.12661586,0.36443271,0.16948569}; -SS(0.13261259,0.21336316,0.036566127,0.08017426,0.31429474,-0.16745504,-0.13709741,0.19518884,0.034033465,-0.096302334,0.43534175,-0.056072844){0.046199082,0.11103103,0.040184006,0.18078295}; -SS(-0.65776896,0.64141588,0.074371921,-0.45563594,0.60375179,0.095527884,-0.67801153,0.56076489,0.29217382,-0.54631436,0.45612147,-0.00074796238){0.83514199,0.56263538,0.83617727,0.48593017}; -SS(-0.49292178,-0.37477565,-0.5,-0.4581749,-0.5263483,-0.32801665,-0.50036547,-0.57239096,-0.5,-0.26056819,-0.54975154,-0.34323516){0.6115465,0.57811658,0.81333009,0.46884495}; -SS(0.51674933,0.64481281,-0.39755292,0.6657623,0.67544754,-0.5,0.68900489,0.77311276,-0.28043733,0.67125235,0.44297685,-0.31879306){0.82858869,1.1304562,1.1326816,0.72773009}; -SS(0.87272604,0.35900693,0.37172569,1,0.50005385,0.27984222,0.77315808,0.36766952,0.075951375,0.84582719,0.572243,0.1361951){1.0107603,1.3085441,0.71793497,1.0417018}; -SS(-0.50537844,-0.68762812,0.023695348,-0.65631386,-0.59724887,0.13822882,-0.3548152,-0.48825703,0.21848985,-0.52487586,-0.5117405,-0.017639258){0.71483247,0.7890621,0.38862106,0.51812974}; -SS(-0.26056819,-0.54975154,-0.34323516,-0.49292178,-0.37477565,-0.5,-0.23055166,-0.37480907,-0.5,-0.50036547,-0.57239096,-0.5){0.46884495,0.6115465,0.41992239,0.81333009}; -SS(0.22886345,0.79287946,0.30210005,0.11136938,1,0.13859714,0.098704003,0.67249079,0.1943501,-0.043441254,0.79173928,0.29440137){0.75332396,1.0072058,0.47957633,0.69563564}; -SS(0.55555556,1,0.5,0.64232771,0.84838332,0.46476191,0.68966181,1,0.19790566,0.82853688,1,0.32125076){1.5357742,1.3339184,1.492557,1.7703132}; -SS(-0.29261734,0.53193925,0.43339885,-0.20984637,0.69532212,0.20809493,-0.35521568,0.4957142,0.26668635,-0.30949447,0.8262402,0.33528492){0.53993003,0.55022745,0.42001946,0.87388961}; -SS(0.67125235,0.44297685,-0.31879306,0.6657623,0.67544754,-0.5,0.68900489,0.77311276,-0.28043733,0.85153485,0.65148612,-0.35468846){0.72773009,1.1304562,1.1326816,1.2568282}; -SS(0.54326203,0.87223293,-0.356993,0.55555556,1,-0.5,0.6657623,0.67544754,-0.5,0.45062041,0.7833899,-0.5){1.1662147,1.5352494,1.1304562,1.0506853}; -SS(-0.63348211,-0.7706683,-0.074889286,-0.6448883,-0.87343314,-0.36731947,-0.49676106,-0.69523221,-0.26913048,-0.42066299,-0.84356131,-0.12906413){0.97907785,1.296688,0.78043195,0.88525127}; -SS(0,-0.5,0.5,-0.1853821,-0.42358473,0.30866054,0,-0.25,0.5,0,-0.49989758,0.27983937){0.48207879,0.29143101,0.28720824,0.30650831}; -SS(-0.6448883,-0.87343314,-0.36731947,-0.70823063,-1,-0.20843533,-0.49995867,-1,-0.27986665,-0.63348211,-0.7706683,-0.074889286){1.296688,1.5240742,1.3082069,0.97907785}; -SS(-0.67616985,-0.069078192,0.18801024,-0.3727858,-0.19869367,0.11195566,-0.50874333,-0.23900991,0.2620444,-0.65367362,-0.16081953,0.0014934597){0.47948004,0.16948569,0.36443271,0.4344691}; -SS(-1,-0.55555556,-0.5,-0.91414606,-0.68082467,-0.37109558,-0.67495489,-0.6652659,-0.5,-0.78315651,-0.45008839,-0.5){1.5366945,1.4249306,1.1276355,1.0467962}; -SS(0.25,0,-0.5,0.20129651,0.21389912,-0.31902192,0.11583535,0.30145324,-0.5,-0.010543702,0.17712261,-0.5){0.28810477,0.16839385,0.33954703,0.25750364}; -SS(-0.5,-1,-0.5,-0.36340067,-0.87821042,-0.37678589,-0.25,-1,-0.5,-0.50377808,-0.78884267,-0.5){1.4844013,1.0307746,1.2929607,1.1087956}; -SS(-0.89663862,-0.69397302,0.37275403,-1,-0.55555556,0.5,-0.67513028,-0.66529728,0.5,-0.78327322,-0.45013966,0.5){1.4119512,1.5359657,1.1284607,1.0435491}; -SS(0.20129651,0.21389912,-0.31902192,0,0,-0.25,-0.010543702,0.17712261,-0.5,0.16149165,0,-0.33864688){0.16839385,0.044304329,0.25750364,0.12746835}; -SS(-0.01813809,0.53618118,-0.30537166,-0.0089783977,0.64320989,-0.13441642,0.08017426,0.31429474,-0.16745504,0.17777709,0.54047543,-0.2567554){0.36567785,0.41358858,0.11103103,0.36840304}; -SS(-0.6448883,-0.87343314,-0.36731947,-0.75,-1,-0.5,-0.5,-1,-0.5,-0.49995867,-1,-0.27986665){1.296688,1.7946951,1.4844013,1.3082069}; -SS(-0.58258855,0.14037208,-0.067351147,-0.49808619,0.0026201378,-0.26387206,-0.70236545,-0.13062851,-0.19140485,-0.77267892,0.13105707,-0.24874664){0.34532741,0.29810596,0.5265969,0.65386325}; -SS(-0.45563594,0.60375179,0.095527884,-0.54640726,0.34339216,0.19847863,-0.67801153,0.56076489,0.29217382,-0.54631436,0.45612147,-0.00074796238){0.56263538,0.43575493,0.83617727,0.48593017}; -SS(0.13913358,0.10014326,0.18199659,0.29175541,0,0.20824909,0.36021608,0.23247759,-0.012351094,0.46476684,0.14382827,0.12247557){0.045990896,0.1093371,0.16110593,0.23450402}; -SS(-0.86742481,-0.86548068,-0.14483364,-1,-1,-0.25,-1,-1,-6.9388939e-15,-1,-0.77608598,0.00064487429){1.5085891,2.0422973,1.9831286,1.5844414}; -SS(1,0.25,0.5,0.87272604,0.35900693,0.37172569,1,0.5,0.5,1,0.50005385,0.27984222){1.2942978,1.0107603,1.484684,1.3085441}; -SS(1,0.25,-0.5,0.87867265,0.36391919,-0.37720578,1,0.5,-0.5,0.78906409,0.5041626,-0.5){1.2935113,1.03034,1.4840091,1.1105402}; -SS(-0.63815223,-0.88141187,0.37488811,-0.75,-1,0.5,-0.50400314,-0.78879927,0.5,-0.80635543,-0.81164184,0.5){1.3088768,1.7943537,1.1086821,1.5410993}; -SS(-0.49998858,-1,-4.7037318e-05,-0.42066299,-0.84356131,-0.12906413,-0.70823063,-1,-0.20843533,-0.63348211,-0.7706683,-0.074889286){1.2276085,0.88525127,1.5240742,0.97907785}; -SS(0.51674933,0.64481281,-0.39755292,0.37549445,0.49317282,-0.5,0.45062041,0.7833899,-0.5,0.57309542,0.50075776,-0.5){0.82858869,0.61648995,1.0506853,0.81773274}; -SS(-0.1182182,0.15955837,-0.3159857,0,0,-0.25,-0.010543702,0.17712261,-0.5,0.20129651,0.21389912,-0.31902192){0.11990198,0.044304329,0.25750364,0.16839385}; -SS(-0.89663862,-0.69397302,0.37275403,-1,-0.77777778,0.5,-1,-0.70710233,0.21356199,-1,-0.84092895,0.33252059){1.4119512,1.8434331,1.5280688,1.8030746}; -SS(-1,0.55555556,-0.5,-0.83248216,0.76782327,-0.31292259,-1,0.70529035,-0.21162945,-0.80558396,0.5878127,-0.29244037){1.5309384,1.366757,1.520296,1.0616703}; -SS(-0.63048479,0.37587985,-0.34368186,-0.41651431,0.41690828,-0.5,-0.40408872,0.18166381,-0.5,-0.62938155,0.17932964,-0.37445272){0.64388066,0.57523437,0.42526168,0.55109073}; -SS(-0.25,-1,0.5,-0.349759,-0.84853211,0.35590634,-0.50400314,-0.78879927,0.5,-0.18863677,-0.81113033,0.5){1.2918821,0.94981364,1.1086821,0.92459822}; -SS(0.6251418,0.1440922,-0.5,0.77491511,0.22516452,-0.26425516,0.70841775,0,-0.20847891,0.83867599,0,-0.33865964){0.63751638,0.70313431,0.52293439,0.80182539}; -SS(0.65062064,0.64268786,0.069510863,0.52218723,0.46943947,0.022097553,0.39612945,0.70614162,0.21524614,0.45788353,0.76094781,-0.0096633567){0.82620698,0.46892029,0.68453461,0.76853994}; -SS(0.8781758,0.86708556,-0.1989731,0.68985253,1,-0.19792707,0.78186447,1,3.3673518e-05,0.82865019,1,-0.3214153){1.5462283,1.495304,1.5923176,1.7714679}; -SS(-0.34372617,0.39779568,-0.18541051,-0.49391083,0.27907498,-0.27264436,-0.39654734,0.26661646,0.019312696,-0.54631436,0.45612147,-0.00074796238){0.29650146,0.37398026,0.20710489,0.48593017}; -SS(-0.4720473,-0.063494476,-0.036829327,-0.5555987,0.045150158,0.095162244,-0.65367362,-0.16081953,0.0014934597,-0.3727858,-0.19869367,0.11195566){0.21285629,0.29993682,0.4344691,0.16948569}; -SS(0.086744979,0.52712982,0.027891324,-0.0089783977,0.64320989,-0.13441642,0.08017426,0.31429474,-0.16745504,-0.096302334,0.43534175,-0.056072844){0.26660844,0.41358858,0.11103103,0.18078295}; -SS(-0.12988976,-0.86995226,0.20452896,0,-1,0.25,-0.29157863,-1,0.20827581,-0.22019153,-1,-0.00010416607){0.79894991,1.0438639,1.1139248,1.0287732}; -SS(0,-1,0.25,-0.12988976,-0.86995226,0.20452896,0,-0.7082575,0.2084616,0,-0.77970171,0.00010845427){1.0438639,0.79894991,0.52387062,0.58842154}; -SS(-0.83248216,0.76782327,-0.31292259,-1,0.77777778,-0.5,-1,0.55555556,-0.5,-1,0.70529035,-0.21162945){1.366757,1.8398372,1.5309384,1.520296}; -SS(-0.47185361,0.73769401,0.24072705,-0.29261734,0.53193925,0.43339885,-0.35521568,0.4957142,0.26668635,-0.30949447,0.8262402,0.33528492){0.80384956,0.53993003,0.42001946,0.87388961}; -SS(-0.62938155,0.17932964,-0.37445272,-0.58754442,0.033885734,-0.5,-0.69937066,0.31351533,-0.5,-0.40408872,0.18166381,-0.5){0.55109073,0.58180393,0.81965428,0.42526168}; -SS(0.52218723,0.46943947,0.022097553,0.52843461,0.32737897,0.19102935,0.36021608,0.23247759,-0.012351094,0.63998586,0.17856447,0.051345521){0.46892029,0.40790135,0.16110593,0.42570365}; -SS(-0.5555987,0.045150158,0.095162244,-0.67616985,-0.069078192,0.18801024,-0.65367362,-0.16081953,0.0014934597,-0.3727858,-0.19869367,0.11195566){0.29993682,0.47948004,0.4344691,0.16948569}; -SS(0.25126435,0.28098512,0.24657435,0.13913358,0.10014326,0.18199659,0.36021608,0.23247759,-0.012351094,0.46476684,0.14382827,0.12247557){0.18575023,0.045990896,0.16110593,0.23450402}; -SS(-0.42889738,-0.75253072,0.17523232,-0.40125956,-0.65699374,0.33213173,-0.56348952,-0.47594309,0.3052276,-0.57994589,-0.69256437,0.31204703){0.75958282,0.69449311,0.61776713,0.89957508}; -SS(-0.49995867,-1,-0.27986665,-0.6448883,-0.87343314,-0.36731947,-0.63348211,-0.7706683,-0.074889286,-0.42066299,-0.84356131,-0.12906413){1.3082069,1.296688,0.97907785,0.88525127}; -SS(-0.41651431,0.41690828,-0.5,-0.63048479,0.37587985,-0.34368186,-0.69937066,0.31351533,-0.5,-0.62938155,0.17932964,-0.37445272){0.57523437,0.64388066,0.81965428,0.55109073}; -SS(-0.65631386,-0.59724887,0.13822882,-0.57994589,-0.69256437,0.31204703,-0.42889738,-0.75253072,0.17523232,-0.56348952,-0.47594309,0.3052276){0.7890621,0.89957508,0.75958282,0.61776713}; -SS(0.6251418,0.1440922,-0.5,0.75,0,-0.5,0.70841775,0,-0.20847891,0.50007058,0,-0.27987971){0.63751638,0.79494611,0.52293439,0.31006895}; -SS(-0.65631386,-0.59724887,0.13822882,-0.50537844,-0.68762812,0.023695348,-0.3548152,-0.48825703,0.21848985,-0.42889738,-0.75253072,0.17523232){0.7890621,0.71483247,0.38862106,0.75958282}; -SS(0,-0.75,0.5,0,-0.49989758,0.27983937,0,-0.7082575,0.2084616,-0.14394692,-0.62481063,0.5){0.79557901,0.30650831,0.52387062,0.63866347}; -SS(-0.40125956,-0.65699374,0.33213173,-0.3548152,-0.48825703,0.21848985,-0.42889738,-0.75253072,0.17523232,-0.56348952,-0.47594309,0.3052276){0.69449311,0.38862106,0.75958282,0.61776713}; -SS(-0.033588837,0.5879061,0.5,0.085954007,0.41736025,0.32943097,0.11523872,0.30161582,0.5,-0.18136176,0.40461939,0.5){0.57806214,0.27115576,0.33546792,0.42386795}; -SS(-0.41651431,0.41690828,-0.5,-0.62938155,0.17932964,-0.37445272,-0.69937066,0.31351533,-0.5,-0.40408872,0.18166381,-0.5){0.57523437,0.55109073,0.81965428,0.42526168}; -SS(0.55555556,1,-0.5,0.54326203,0.87223293,-0.356993,0.68985253,1,-0.19792707,0.43683247,1,-0.26068681){1.5352494,1.1662147,1.495304,1.2435523}; -SS(-0.85707128,-0.1416783,-0.34083416,-1,-0.11111111,-0.5,-1,-0.25140376,-0.1934451,-1,-0.00018427889,-0.26378916){0.85441326,1.2438655,1.0790534,1.0508045}; -SS(0,-0.25,0.5,-0.1853821,-0.42358473,0.30866054,0,-0.29157012,0.20836692,0,-0.49989758,0.27983937){0.28720824,0.29143101,0.11172813,0.30650831}; -SS(-0.014815866,1,0.31001515,0.22886345,0.79287946,0.30210005,0.00029730467,0.80760978,0.5,-0.043441254,0.79173928,0.29440137){1.0772324,0.75332396,0.88423684,0.69563564}; -SS(-0.0089783977,0.64320989,-0.13441642,0.086744979,0.52712982,0.027891324,0.08017426,0.31429474,-0.16745504,0.17777709,0.54047543,-0.2567554){0.41358858,0.26660844,0.11103103,0.36840304}; -SS(-0.16707278,-0.087678023,-0.31121894,-0.28278924,0.041190137,-0.04219563,-0.098950987,-0.13391411,-0.14594667,-0.056808231,0.14323286,-0.13367928){0.11599041,0.063480395,0.03512721,0.022140076}; -SS(-0.56348952,-0.47594309,0.3052276,-0.65631386,-0.59724887,0.13822882,-0.3548152,-0.48825703,0.21848985,-0.42889738,-0.75253072,0.17523232){0.61776713,0.7890621,0.38862106,0.75958282}; -SS(0.60662231,0.34516964,-0.13972301,0.52218723,0.46943947,0.022097553,0.36021608,0.23247759,-0.012351094,0.63998586,0.17856447,0.051345521){0.48782847,0.46892029,0.16110593,0.42570365}; -SS(0.51910919,0.22553632,-0.31417891,0.6251418,0.1440922,-0.5,0.70841775,0,-0.20847891,0.50007058,0,-0.27987971){0.40112301,0.63751638,0.52293439,0.31006895}; -SS(-0.39654734,0.26661646,0.019312696,-0.32064519,0.49448821,1.4739833e-06,-0.54640726,0.34339216,0.19847863,-0.35521568,0.4957142,0.26668635){0.20710489,0.32892635,0.43575493,0.42001946}; -SS(-0.65355936,0.25468043,-0.1897796,-0.39654734,0.26661646,0.019312696,-0.54631436,0.45612147,-0.00074796238,-0.63246299,0.29145388,0.035195127){0.51379882,0.20710489,0.48593017,0.47226275}; -SS(-0.12233239,-0.87748906,-0.13583418,0,-1,-0.25,0,-1,-6.9388939e-15,-0.22019153,-1,-0.00010416607){0.78823805,1.0435946,0.98008605,1.0287732}; -SS(0.4450496,1,-0.00012892076,0.62860594,0.86645525,0.049037492,0.68985253,1,-0.19792707,0.78186447,1,3.3673518e-05){1.179155,1.1303867,1.495304,1.5923176}; -SS(-0.86742481,-0.86548068,-0.14483364,-1,-1,-0.25,-0.70823063,-1,-0.20843533,-0.77973152,-1,-0.0001062007){1.5085891,2.0422973,1.5240742,1.588155}; -SS(1,1,-6.9388939e-15,0.88049681,0.87960137,0.13412341,1,1,0.25,0.78186447,1,3.3673518e-05){1.9807485,1.5518824,2.0447444,1.5923176}; -SS(1,0.5,0.5,0.87881231,0.64063264,0.37220388,1,0.75,0.5,1,0.50005385,0.27984222){1.484684,1.3069719,1.7930237,1.3085441}; -SS(0,-1,-0.25,-0.12233239,-0.87748906,-0.13583418,0,-1,-6.9388939e-15,0,-0.77970171,0.00010845427){1.0435946,0.78823805,0.98008605,0.58842154}; -SS(-0.83248216,0.76782327,-0.31292259,-1,0.55555556,-0.5,-0.80479144,0.80504612,-0.5,-0.80558396,0.5878127,-0.29244037){1.366757,1.5309384,1.5255891,1.0616703}; -SS(-0.36340067,-0.87821042,-0.37678589,-0.5,-1,-0.5,-0.25,-1,-0.5,-0.49995867,-1,-0.27986665){1.0307746,1.4844013,1.2929607,1.3082069}; -SS(-0.16707278,-0.087678023,-0.31121894,-0.29413589,0.046284299,-0.31274881,-0.28278924,0.041190137,-0.04219563,-0.056808231,0.14323286,-0.13367928){0.11599041,0.1681493,0.063480395,0.022140076}; -SS(-1,0.55555556,-0.5,-0.80558396,0.5878127,-0.29244037,-0.79644003,0.50064951,-0.5,-0.80479144,0.80504612,-0.5){1.5309384,1.0616703,1.115532,1.5255891}; -SS(0.22886345,0.79287946,0.30210005,0.11111111,1,0.5,-0.014815866,1,0.31001515,0.00029730467,0.80760978,0.5){0.75332396,1.2368521,1.0772324,0.88423684}; -SS(-0.32064519,0.49448821,1.4739833e-06,-0.096302334,0.43534175,-0.056072844,-0.24654336,0.57133462,-0.25396354,-0.2401666,0.74114092,-0.051302261){0.32892635,0.18078295,0.42991415,0.58653028}; -SS(-0.096302334,0.43534175,-0.056072844,-0.0089783977,0.64320989,-0.13441642,-0.24654336,0.57133462,-0.25396354,-0.2401666,0.74114092,-0.051302261){0.18078295,0.41358858,0.42991415,0.58653028}; -SS(0.55555556,1,-0.5,0.54326203,0.87223293,-0.356993,0.6657623,0.67544754,-0.5,0.81205362,0.80656044,-0.5){1.5352494,1.1662147,1.1304562,1.5391707}; -SS(1,1,-0.25,0.8781758,0.86708556,-0.1989731,0.78186447,1,3.3673518e-05,0.82865019,1,-0.3214153){2.0438315,1.5462283,1.5923176,1.7714679}; -SS(-0.82279039,-0.18997945,0.10657137,-1,-0.20076836,0.00061221676,-0.76760867,-0.33664988,-0.028298027,-0.82595855,-0.48031431,0.11444494){0.70945047,1.0172898,0.68479998,0.90887195}; -SS(0.87867265,0.36391919,-0.37720578,1,0.25,-0.5,1,0.5,-0.5,1,0.50010355,-0.27968748){1.03034,1.2935113,1.4840091,1.3071084}; -SS(-0.85707128,-0.1416783,-0.34083416,-1,-0.11111111,-0.5,-1,-0.33333333,-0.5,-1,-0.25140376,-0.1934451){0.85441326,1.2438655,1.3342594,1.0790534}; -SS(-0.82279039,-0.18997945,0.10657137,-1,-0.24887753,0.1953112,-1,-0.20076836,0.00061221676,-0.82595855,-0.48031431,0.11444494){0.70945047,1.0768014,1.0172898,0.90887195}; -SS(-0.82595855,-0.48031431,0.11444494,-1,-0.5000565,0.0033661208,-1,-0.20076836,0.00061221676,-0.76760867,-0.33664988,-0.028298027){0.90887195,1.2263361,1.0172898,0.68479998}; -SS(0.26064395,0.61953306,0.12890567,0.30434906,0.49798107,-4.0114635e-05,0.45788353,0.76094781,-0.0096633567,0.52218723,0.46943947,0.022097553){0.45328252,0.32377482,0.76853994,0.46892029}; -SS(0.6251418,0.1440922,-0.5,0.51910919,0.22553632,-0.31417891,0.70841775,0,-0.20847891,0.77491511,0.22516452,-0.26425516){0.63751638,0.40112301,0.52293439,0.70313431}; -SS(0.86971177,0.13024645,0.1427188,1,0,0.25,0.70845584,0,0.20819814,0.77985819,0,-0.00014691753){0.77797836,1.0436257,0.52761363,0.58919206}; -SS(1,0,0.25,0.86971177,0.13024645,0.1427188,1,0.29178008,0.20838772,1,0.2203628,5.6826691e-05){1.0436257,0.77797836,1.1084285,1.0268649}; -SS(0.88049681,0.87960137,0.13412341,1,1,-6.9388939e-15,1,1,0.25,1,0.77979347,0.00010253841){1.5518824,1.9807485,2.0447444,1.5887874}; -SS(1,1,-0.25,0.8781758,0.86708556,-0.1989731,1,0.70844226,-0.20827687,1,0.77979347,0.00010253841){2.0438315,1.5462283,1.5310675,1.5887874}; -SS(0,0,-0.25,0.13402468,0.11673163,-0.1460819,0,0,-6.9388939e-15,0.22032809,0,-9.1119885e-05){0.044304329,0.039337265,-0.017891206,0.027339551}; -SS(-0.75,-1,0.5,-0.63815223,-0.88141187,0.37488811,-0.5,-1,0.5,-0.4999534,-1,0.27968311){1.7943537,1.3088768,1.4840089,1.3075402}; -SS(-0.49391083,0.27907498,-0.27264436,-0.65355936,0.25468043,-0.1897796,-0.39654734,0.26661646,0.019312696,-0.54631436,0.45612147,-0.00074796238){0.37398026,0.51379882,0.20710489,0.48593017}; -SS(0.39612945,0.70614162,0.21524614,0.26064395,0.61953306,0.12890567,0.45788353,0.76094781,-0.0096633567,0.52218723,0.46943947,0.022097553){0.68453461,0.45328252,0.76853994,0.46892029}; -SS(-0.82595855,-0.48031431,0.11444494,-1,-0.5000565,0.0033661208,-1,-0.24887753,0.1953112,-1,-0.20076836,0.00061221676){0.90887195,1.2263361,1.0768014,1.0172898}; -}; diff --git a/utils/Makefile b/utils/Makefile deleted file mode 100644 index 58a954454595362ef8bf7920e1d0c9eedff095b9..0000000000000000000000000000000000000000 --- a/utils/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -# $Id: Makefile,v 1.3 2001-02-03 13:10:26 geuzaine Exp $ - -CC = c++ -C_FLAGS = -g - -RM = rm -RMFLAGS = -f - -dxf2geo: dxf2geo.c message.c - $(CC) $(C_FLAGS) -o ../bin/dxf2geo -I../DataStr\ - dxf2geo.c message.c ../lib/libDataStr.a -lm - -clean: - $(RM) $(RMFLAGS) *.o - -depend: - true diff --git a/utils/addId b/utils/addId deleted file mode 100644 index c23389c525dabf58bd856b198249f3599aab49f6..0000000000000000000000000000000000000000 --- a/utils/addId +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -if [ $# -lt 1 ] ; then - echo "Usage: addId files" 1>&2 - exit 1 -else -# echo "/* \$Id\$ */" > _tmp_string_ - echo "# \$Id\$" > _tmp_string_ -# echo "c \$Id\$" > _tmp_string_ - - for file in $@; do - echo Modifying $file - mv $file $file~ - cat _tmp_string_ $file~ > $file - done - - rm -f _tmp_string_ -fi - - diff --git a/utils/build_machines b/utils/build_machines deleted file mode 100644 index cc1f24777a71345f3090c21025abc5a7961e4700..0000000000000000000000000000000000000000 --- a/utils/build_machines +++ /dev/null @@ -1,16 +0,0 @@ -Windows elap{15|74}.montefiore.ulg.ac.be -Linux elap21.montefiore.ulg.ac.be -TRU64 elap53.montefiore.ulg.ac.be -IRIX elap20.montefiore.ulg.ac.be -SunOS montef01.montefiore.ulg.ac.be -HP-UX stokes.ltas.ulg.ac.be -AIX sp2s.ulg.ac.be - - -Where to change the version number? -1) Makfile -2) utils/gmsh_fltk.spec (2 occurrences) -3) doc/gmsh.1 (2 occurrences) -4) doc/VERSIONS (1 occurrence) -5) www/gmsh.html (several occurrences) - diff --git a/utils/dxf2geo.c b/utils/dxf2geo.c deleted file mode 100644 index 702280191660683acb75dfcbf3cde4c8c0f001ae..0000000000000000000000000000000000000000 --- a/utils/dxf2geo.c +++ /dev/null @@ -1,439 +0,0 @@ -/* $Id: dxf2geo.c,v 1.2 2001-04-23 07:01:50 geuzaine Exp $ */ - -/* - AutoCAD DXF to Gmsh GEO Data File Converter - - This is a hack from the DXF to DKB translator by Aaron A. Collins (8/13/90) - - Christophe.Geuzaine@AdValvas.be -*/ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <math.h> -#include "Tree.h" - -#define DEG2RAD 3.14159265359/180. -#define BUFSIZE 2048 -#define GEOLINE 1 -#define GEOCIRCLE 2 - -FILE *infile, *outfile; -char inname[80], outname[80], curobj[80], linbuf[BUFSIZE]; -long primitives = 0L, degenerates = 0L; -int groupcode, curcolor, ints[10], nump=1 , numc=1; -float curthick, xcoords[10], ycoords[10], zcoords[10], floats[10], angles[10]; -float max_x, max_y, max_z, min_x, min_y, min_z ; -float THETOL, THEROT=0., THETRANSX=0., THETRANSY=0. ; -Tree_T *Point_T, *Curve_T ; - -struct Point { - int num ; - float x,y,z ; -} ; - -int fcmpPoint (const void *a, const void *b){ - struct Point *q,*w; - - q = (struct Point*)a; - w = (struct Point*)b; - - if(fabs(q->x - w->x) < THETOL && - fabs(q->y - w->y) < THETOL && - fabs(q->x - w->x) < THETOL) return 0; - - if(q->x > w->x) return(1); - if(q->x < w->x) return(-1); - if(q->y > w->y) return(1); - if(q->y < w->y) return(-1); - if(q->z > w->z) return(1); - if(q->z < w->z) return(-1); -} - -int addpoint(struct Point *p){ - struct Point *pp ; - - if((pp = (struct Point*)Tree_PQuery(Point_T, p))) - return pp->num ; - - p->num = nump++ ; - Tree_Add(Point_T, p) ; - return p->num ; -} - -void writepoint(void *a, void *b){ - struct Point *p ; - float x, y ; - - p = (struct Point *) a ; - - x = p->x ; - y = p->y ; - - p->x = cos(-THEROT*DEG2RAD) * x + sin(-THEROT*DEG2RAD) * y ; - p->y = -sin(-THEROT*DEG2RAD) * x + cos(-THEROT*DEG2RAD) * y; - - p->x += THETRANSX ; - p->y += THETRANSY ; - - fprintf(outfile, "Point (%d) = {%g *u, %g *u, %g *u, lc} ;\n", - p->num, p->x, p->y, p->z) ; -} - -struct Curve { - int num, type, a, b, c ; -} ; - -int fcmpCurve (const void *a, const void *b){ - struct Curve *q,*w; - - q = (struct Curve*)a; - w = (struct Curve*)b; - - if(q->num < w->num) return(-1); - return(1); -} - -void addcurve(struct Curve *c){ - c->num = numc++ ; - Tree_Add(Curve_T, c) ; -} - -void writecurve(void *a, void *b){ - struct Curve *c ; - - c = (struct Curve *) a ; - - switch(c->type){ - case GEOLINE : - fprintf(outfile, "Line (%d) = {%d, %d} ;\n", - c->num, c->a, c->b) ; - break ; - case GEOCIRCLE : - fprintf(outfile, "Circle (%d) = {%d, %d, %d} ;\n", - c->num, c->a, c->b, c->c) ; - break ; - } -} - - - - - -int checkdegen(int a, int b, int c){ /* check for degenerate triangle structure */ - if ( (xcoords[a] == xcoords[b] && - ycoords[a] == ycoords[b] && - zcoords[a] == zcoords[b]) || - (xcoords[b] == xcoords[c] && - ycoords[b] == ycoords[c] && - zcoords[b] == zcoords[c]) || - (xcoords[a] == xcoords[c] && - ycoords[a] == ycoords[c] && - zcoords[a] == zcoords[c]) ) - return(1); - return(0); -} - -void addobj(void){ /* dump out current object we should have all info on */ - struct Point p, *pp ; - struct Curve c ; - int num[10]; - float tmp ; - - if (strstr(curobj, "POINT")){ - p.x = xcoords[0] ; p.y = ycoords[0] ; p.z = zcoords[0] ; addpoint(&p) ; - } - else if (strstr(curobj, "LINE") || strstr(curobj, "3DLINE")){ - if (xcoords[0] == xcoords[1] && ycoords[0] == ycoords[1] && zcoords[0] == zcoords[1]){ - degenerates++; - return; - } - p.x = xcoords[0] ; p.y = ycoords[0] ; p.z = zcoords[0] ; num[0] = addpoint(&p) ; - p.x = xcoords[1] ; p.y = ycoords[1] ; p.z = zcoords[1] ; num[1] = addpoint(&p) ; - c.type = GEOLINE ; c.a = num[0] ; c.b = num[1] ; addcurve(&c) ; - } - else if (strstr(curobj, "CIRCLE")){ - p.x = xcoords[0] ; p.y = ycoords[0] ; p.z = zcoords[0] ; num[0] = addpoint(&p) ; - p.x = xcoords[0]-floats[0] ; p.y = ycoords[0] ; p.z = zcoords[0] ; - num[1] = addpoint(&p) ; - p.x = xcoords[0]+floats[0] ; p.y = ycoords[0] ; p.z = zcoords[0] ; - num[2] = addpoint(&p) ; - p.x = xcoords[0] ; p.y = ycoords[0]-floats[0] ; p.z = zcoords[0] ; - num[3] = addpoint(&p) ; - p.x = xcoords[0] ; p.y = ycoords[0]+floats[0] ; p.z = zcoords[0] ; - num[4] = addpoint(&p) ; - c.type = GEOCIRCLE ; c.a = num[2] ; c.b = num[0] ; c.c = num[4]; addcurve(&c) ; - c.type = GEOCIRCLE ; c.a = num[4] ; c.b = num[0] ; c.c = num[1]; addcurve(&c) ; - c.type = GEOCIRCLE ; c.a = num[1] ; c.b = num[0] ; c.c = num[3]; addcurve(&c) ; - c.type = GEOCIRCLE ; c.a = num[3] ; c.b = num[0] ; c.c = num[2]; addcurve(&c) ; - } - else if (strstr(curobj, "ARC")){ - p.x = xcoords[0] ; p.y = ycoords[0] ; p.z = zcoords[0] ; num[0] = addpoint(&p) ; - - p.x = xcoords[0]+floats[0]*cos(angles[0]*DEG2RAD) ; - p.y = ycoords[0]+floats[0]*sin(angles[0]*DEG2RAD) ; - p.z = zcoords[0] ; num[1] = addpoint(&p) ; - - p.x = xcoords[0]+floats[0]*cos(angles[1]*DEG2RAD) ; - p.y = ycoords[0]+floats[0]*sin(angles[1]*DEG2RAD) ; - p.z = zcoords[0] ; num[2] = addpoint(&p) ; - - if((angles[1]-angles[0] > 0 && angles[1]-angles[0] < 180) || - (angles[1]-angles[0] < 0 && angles[1]-angles[0] < -180)){ - c.type = GEOCIRCLE ; c.a = num[1] ; c.b = num[0] ; c.c = num[2]; addcurve(&c) ; - } - else{ - if(angles[1]-angles[0] > 0){ - p.x = xcoords[0]+floats[0]*cos((angles[1]-angles[0])*0.5*DEG2RAD) ; - p.y = ycoords[0]+floats[0]*sin((angles[1]-angles[0])*0.5*DEG2RAD) ; - } - else{ - p.x = xcoords[0]+floats[0]*cos((angles[0]-angles[1])*0.5*DEG2RAD) ; - p.y = ycoords[0]+floats[0]*sin((angles[0]-angles[1])*0.5*DEG2RAD) ; - } - p.z = zcoords[0] ; num[3] = addpoint(&p) ; - c.type = GEOCIRCLE ; c.a = num[1] ; c.b = num[0] ; c.c = num[3]; addcurve(&c) ; - c.type = GEOCIRCLE ; c.a = num[3] ; c.b = num[0] ; c.c = num[2]; addcurve(&c) ; - } - } - else if (strstr(curobj, "TRACE")){ /* 2 back-to-back triangles */ - if (checkdegen(0, 1, 2)){ - degenerates++; - return; - } - /* add triangle 0, 1, 2 */ - - if (checkdegen(0, 3, 2)){ - degenerates++; - return; - } - /* add triangle 0 3 2 */ - } - else if (strstr(curobj, "SOLID")){ /* 1 or 2 triangles */ - if (checkdegen(0, 1, 2)){ - degenerates++; - return; - } - /* add triangle 0, 1, 2 */ - - if (xcoords[2] == xcoords[3] && ycoords[2] == ycoords[3] && zcoords[2] == zcoords[3]) - return; /* one triangle was enough... */ - - if (checkdegen(0, 3, 2)){ - degenerates++; - return; - } - /* add triangle 0 3 2 */ - } - else if (strstr(curobj, "TEXT")){ /* not implemented for now */ - } - else if (strstr(curobj, "SHAPE")){ /* these look very hard */ - } - else if (strstr(curobj, "BLOCK")){ /* these look very hard */ - } - else if (strstr(curobj, "ENDBLK")){ /* these look very hard */ - } - else if (strstr(curobj, "INSERT")){ /* these look very hard */ - } - else if (strstr(curobj, "ATTDEF")){ /* not implemented for now */ - } - else if (strstr(curobj, "ATTRIB")){ /* not implemented for now */ - } - else if (strstr(curobj, "POLYLINE")){ /* these look fairly hard */ - } - else if (strstr(curobj, "VERTEX")){ /* these look fairly hard */ - } - else if (strstr(curobj, "SEQEND")){ /* these look fairly hard */ - } - else if (strstr(curobj, "3DFACE")){ /* 1 or 2 triangles */ - if (checkdegen(0, 1, 2)){ - degenerates++; - return; - } - /* add triangle 0 1 2 */ - - if (xcoords[2] == xcoords[3] && ycoords[2] == ycoords[3] && zcoords[2] == zcoords[3]) - return; /* one triangle was enough... */ - - if (checkdegen(0, 3, 2)){ - degenerates++; - return; - } - /* add triangle 0 3 2 */ - } - else if (strstr(curobj, "DIMENSION")){ /* not implemented for now */ - } - -} - -int getline(void){ /* read a group code and the next line from infile */ - fgets(linbuf, BUFSIZE, infile); /* get a line from .DXF */ - if (feof(infile)) - return(1); - sscanf(linbuf, "%3d", &groupcode); /* scan out group code */ - fgets(linbuf, BUFSIZE, infile); /* get a line from .DXF */ - if (feof(infile)) - return(1); - return(0); -} - - - -int main(int argc, char *argv[]){ - char *index; - - printf("dxf2geo, a 2D AutoCad DXF to Gmsh GEO file translator\n"); - if (argc < 3){ - printf("Usage: %s file[.dxf] tolerance [rotation] [xoffset] [yoffset]\n", argv[0]); - exit(1); - } - - THETOL = atof(argv[2]) ; - if(argc > 3) THEROT = atof(argv[3]) ; - if(argc > 4) THETRANSX = atof(argv[4]) ; - if(argc > 5) THETRANSY = atof(argv[5]) ; - - strcpy(inname, argv[1]); /* make copy we can mess with */ - if (!strchr(inname, '.')) /* no dot present in filename? */ - strcat(inname, ".dxf"); - if (!(infile = fopen(inname, "r"))){ - printf("Cannot open input file %s\n", inname); - exit(1); - } - strcpy(outname, inname); - index = strchr(outname, '.'); /* find the dot */ - strcpy(index, ".geo"); /* make new ext. .geo... */ - - if (!(outfile = fopen(outname, "w"))){ - printf("Cannot create output file %s\n", outname); - fclose(infile); - exit(1); - } - - curobj[0] = '\0'; /* not working on any object currently */ - curcolor = 7; /* and it also doesn't have a color yet... */ - max_x = max_y = max_z = -10000000.0; /* init bounding limits */ - min_x = min_y = min_z = 10000000.0; - - Point_T = Tree_Create(sizeof(struct Point), fcmpPoint) ; - Curve_T = Tree_Create(sizeof(struct Curve), fcmpCurve) ; - -find: - while (!feof(infile)){ /* run file up to the "ENTITIES" section */ - if (getline()) goto stopit; - if (groupcode == 0){ /* file section mark */ - if (strstr(linbuf, "EOF")) goto stopit; - if (strstr(linbuf, "SECTION")){ - if (getline()) goto stopit; - if (groupcode != 2) continue; - if (strstr(linbuf, "ENTITIES")) break; - } - } - } - - while (!feof(infile)){ /* scan ENTITIES section */ - if (getline()) /* get a group code and a line */ - break; - if (groupcode < 10){ /* cardinal group codes */ - switch(groupcode){ - case 0: /* start of entity, table, file sep */ - if (strstr(linbuf, "EOF")){ - addobj(); /* dump object */ - goto stopit; - } - if (strstr(linbuf, "ENDSEC")){ - addobj(); /* dump object */ - goto find; - } - addobj(); /* dump old object */ - curobj[0] = '\0'; /* reset object */ - curcolor = 7; - strcpy(curobj, linbuf); /* get new */ - break; - case 1: /* primary text value for entity (?)*/ - break; - case 2: /* block name, attribute tag, etc */ - case 3: /* other names */ - case 4: - break; - case 5: /* entity handle (hex string) */ - break; - case 6: /* line type name */ - break; - case 7: /* text style name */ - break; - case 8: /* layer name */ - break; - case 9: /* variable name ID (only in header)*/ - break; - } - } - else if (groupcode >= 10 && groupcode < 19){ /* Some X coord */ - sscanf(linbuf, "%f", &(xcoords[groupcode-10])); - if (xcoords[groupcode-10] > max_x) - max_x = xcoords[groupcode-10]; - if (xcoords[groupcode-10] < min_x) - min_x = xcoords[groupcode-10]; - } - else if (groupcode >= 20 && groupcode < 29){ /* Some Y coord */ - sscanf(linbuf, "%f", &(ycoords[groupcode-20])); - if (ycoords[groupcode-20] > max_y) - max_y = ycoords[groupcode-20]; - if (ycoords[groupcode-20] < min_y) - min_y = ycoords[groupcode-20]; - } - else if (groupcode >= 30 && groupcode < 38){ /* Some Z coord */ - sscanf(linbuf, "%f", &(zcoords[groupcode-30])); - if (zcoords[groupcode-30] > max_z) - max_z = zcoords[groupcode-30]; - if (zcoords[groupcode-30] < min_z) - min_z = zcoords[groupcode-30]; - } - else if (groupcode == 38){ /* entity elevation if nonzero */ - } - else if (groupcode == 39){ /* entity thickness if nonzero */ - } - else if (groupcode >= 40 && groupcode < 49){ /* misc floats */ - sscanf(linbuf, "%f", &(floats[groupcode-40])); - } - else if (groupcode == 49){ /* repeated value groups */ - } - else if (groupcode >= 50 && groupcode < 59){ /* misc angles */ - sscanf(linbuf, "%f", &(angles[groupcode-50])); - } - else if (groupcode == 62){ /* Color number */ - sscanf(linbuf, "%6d", &curcolor); - } - else if (groupcode == 66){ /* "entities follow" flag */ - } - else if (groupcode >= 70 && groupcode < 79){ /* misc ints */ - sscanf(linbuf, "%f", &(ints[groupcode-70])); - } - else if (groupcode == 210 || groupcode == 220 || groupcode == 230){ - /* X, Y, Z components of extrusion direction */ - } - } - -stopit: - fclose(infile); - fprintf(outfile, "/* Converted from AutoCad DXF file: %s */\n", inname); - fprintf(outfile, "/* Tolerance %g: %d points / %d curves */\n\n", - THETOL, Tree_Nbr(Point_T), Tree_Nbr(Curve_T)); - fprintf(outfile, "u = 1; \nlc = 1 ;\n\n"); - Tree_Action(Point_T, writepoint); - fprintf(outfile, "\n"); - Tree_Action(Curve_T, writecurve); - fprintf(outfile, "\n"); - fflush(outfile); - fclose(outfile); - printf("bounding box [%g,%g] [%g,%g] [%g,%g]\n", - min_x, max_x, min_y, max_y, min_z, max_z); - printf("tolerance %g: %d points / %d curves / %d degenerate entities removed\n", - THETOL, Tree_Nbr(Point_T), Tree_Nbr(Curve_T), degenerates); - Tree_Delete(Point_T) ; - Tree_Delete(Curve_T) ; - exit(0); - -} - diff --git a/utils/endian.c b/utils/endian.c deleted file mode 100644 index 25ec8d9037fe1ba5d1a5634d3cc9d57d7fef0c48..0000000000000000000000000000000000000000 --- a/utils/endian.c +++ /dev/null @@ -1,21 +0,0 @@ - -/* Are we little or big endian? From Harbison&Steele. */ - -main () { - union{ - long l; - char c[sizeof (long)]; - } u; - - u.l = 1; - if (u.c[0] == 1) - printf ("LittleEndian\n"); - else if (u.c[sizeof (long) - 1] == 1) - printf ("BigEndian\n"); - else - printf ("unknownEndian"); - - exit (u.c[sizeof (long) - 1] == 1); -} - - diff --git a/utils/gmsh_fltk.spec b/utils/gmsh_fltk.spec deleted file mode 100644 index c8788aab0057efe0d1e6f6f22d88f3dac8927f95..0000000000000000000000000000000000000000 --- a/utils/gmsh_fltk.spec +++ /dev/null @@ -1,55 +0,0 @@ -Summary: A 3D mesh generator with pre- and post-processing facilities -Name: gmsh -Version: 1.23 -Source: gmsh-1.23.tar.gz -Release: 1 -Copyright: distributable -Group: Applications/Engineering -URL: http://www.geuz.org/gmsh/ -Packager: Christophe.Geuzaine@AdValvas.be -Buildroot: /var/tmp/%{name}-buildroot -Requires: Mesa >= 3.2 - -%description -Gmsh is an automatic three-dimensional finite element mesh generator, -primarily Delaunay, with built-in pre- and post-processing -facilities. Its primal goal is to provide a simple meshing tool for -academic test cases with parametric input and up to date visualization -capabilities. One of the strengths of Gmsh is its ability to respect -a characteristic length field for the generation of adapted meshes on -lines, surfaces and volumes. Gmsh requires OpenGL (or Mesa) to be -installed on your system. - -Install Gmsh if you need a 3D finite element mesh generator and/or -post-processor. - -%prep - -%setup -c -q - -%build -make fltk_linux_2952 -#make fltk_linux -make distrib -make utilities -rm -rf CVS */CVS */*/CVS - -%install -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/usr/bin -mkdir -p $RPM_BUILD_ROOT/usr/man/man1 - -install -m 755 bin/gmsh $RPM_BUILD_ROOT/usr/bin/gmsh -install -m 755 bin/dxf2geo $RPM_BUILD_ROOT/usr/bin/dxf2geo -install -m 644 doc/gmsh.1 $RPM_BUILD_ROOT/usr/man/man1/gmsh.1 - -%clean -rm -rf $RPM_BUILD_ROOT - -%files -%defattr(-,root,root) -%doc doc/FORMATS doc/VERSIONS doc/FAQ doc/CONTRIBUTORS demos tutorial -/usr/bin/gmsh -/usr/bin/dxf2geo -/usr/man/man1/gmsh* - diff --git a/utils/gmsh_motif.spec b/utils/gmsh_motif.spec deleted file mode 100644 index 92e9357233c79781649f788b8634d15aa3ac388a..0000000000000000000000000000000000000000 --- a/utils/gmsh_motif.spec +++ /dev/null @@ -1,56 +0,0 @@ -Summary: A 3D mesh generator with pre- and post-processing facilities -Name: gmsh -Version: 1.00 -Source: gmsh-1.00.tar.gz -Release: 1 -Copyright: distributable -Group: Applications/Engineering -URL: http://www.geuz.org/gmsh/ -Packager: Christophe.Geuzaine@AdValvas.be -Buildroot: /var/tmp/%{name}-buildroot -Requires: Mesa >= 3.0 lesstif >= 0.90 - -%description -Gmsh is an automatic three-dimensional finite element mesh generator, -primarily Delaunay, with built-in pre- and post-processing -facilities. Its primal goal is to provide a simple meshing tool for -academic test cases with parametric input and up to date visualization -capabilities. One of the strengths of Gmsh is its ability to respect -a characteristic length field for the generation of adapted meshes on -lines, surfaces and volumes. Gmsh requires the Mesa and Lesstif -libraries to be installed on your system. - -Install Gmsh if you need a 3D finite element mesh generator and/or -post-processor. - -%prep - -%setup -c -q - -%build -make motif_linux_2952 -make utilities -rm -rf CVS */CVS */*/CVS - -%install -rm -rf $RPM_BUILD_ROOT -mkdir -p $RPM_BUILD_ROOT/usr/bin -mkdir -p $RPM_BUILD_ROOT/usr/man/man1 - -install -m 755 bin/gmsh $RPM_BUILD_ROOT/usr/bin/gmsh -install -m 755 bin/dxf2geo $RPM_BUILD_ROOT/usr/bin/dxf2geo -install -m 644 doc/gmsh.1 $RPM_BUILD_ROOT/usr/man/man1/gmsh.1 - -%clean -rm -rf $RPM_BUILD_ROOT - -%files -%defattr(-,root,root) -%doc doc/FORMATS demos tutorial -/usr/bin/gmsh -/usr/bin/dxf2geo -/usr/man/man1/gmsh* - -%changelog -* Sat Sep 23 2000 Christophe Geuzaine <Christophe.Geuzaine@AdValvas.be> - - initial revision diff --git a/utils/message.c b/utils/message.c deleted file mode 100644 index 9b12df3b8fa3211a07a6453ed2710ca4f7126d4e..0000000000000000000000000000000000000000 --- a/utils/message.c +++ /dev/null @@ -1,13 +0,0 @@ - -#include <stdlib.h> -#include <stdio.h> -#include <signal.h> -#include <stdarg.h> - -void Msg(int level, char *fmt, ...){ - va_list args; - va_start (args, fmt); - vfprintf(stderr, fmt, args); fprintf(stderr, "\n"); - va_end (args); -} - diff --git a/utils/modifs b/utils/modifs deleted file mode 100644 index 572ca5a9badba4c54daf04a6139d6766d886320e..0000000000000000000000000000000000000000 --- a/utils/modifs +++ /dev/null @@ -1,22 +0,0 @@ -#! /bin/csh -f - -if ( "$#argv" < "1" ) then - echo usage: modif number_of_days - exit -endif - -find . \( -mtime -$1 -a ! -type d -a ! -name "*.o" -a ! -name "*.a" -a ! -name "*.bak" -a ! -name "*.tar*" -a ! -name "*~" -a ! -name "gmsh*" \) - -echo "archiver ? (y/n)" -set caca = "$<" - -if ("$caca" == "y") then - set liste = `find . \( -mtime -$1 -a ! -type d -a ! -name "*.o" -a ! -name "*.a" -a ! -name "*.bak" -a ! -name "*.tar*" -a ! -name "*~" -a ! -name "gmsh*" \)` - set date = `date "+%d.%m.%y-%Hh%M"` - tar cvf modifs-gmsh-$date.tar $liste - gzip modifs-gmsh-$date.tar -else - echo "bye" -endif - - diff --git a/utils/replace b/utils/replace deleted file mode 100644 index 6186bebf0b62585e0ee5bd6717ccc1ae40c9e77c..0000000000000000000000000000000000000000 --- a/utils/replace +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - - -for A in $* -do -sed "s/msh_include/msh_Include/g" $A > $A.XXX -/bin/rm -f $A -mv $A.XXX $A -done diff --git a/utils/tut2html b/utils/tut2html deleted file mode 100644 index b67e85a9df4414a05e62f3ccbb26a5ffc012a884..0000000000000000000000000000000000000000 --- a/utils/tut2html +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -#if [ $# = 0 ] ; then -# echo "Usage: tut2html files" -# exit 1 -#fi - -#enscript -Ecpp --color -Whtml --toc -pt.html $* -enscript -Ecpp --color -Whtml --toc -pt.html README *.geo - -cat t.html | \ -sed "s/<FONT COLOR=\"#BC8F8F\"><B>//g" | \ -sed "s/<B><FONT COLOR=\"#5F9EA0\">//g" | \ -sed "s/<B><FONT COLOR=\"#A020F0\">//g" | \ -sed "s/<B><FONT COLOR=\"#0000FF\">//g" | \ -sed "s/<\/FONT><\/B>//g" > tutorial.html - -rm -f t.html - -echo output moved to tutorial.html diff --git a/utils/unix2dos.awk b/utils/unix2dos.awk deleted file mode 100644 index aa9e6f5f6f246465dc7411d3447fc43d72d8ac47..0000000000000000000000000000000000000000 --- a/utils/unix2dos.awk +++ /dev/null @@ -1,3 +0,0 @@ -{ - printf("%s \n", $0); -} diff --git a/utils/untabify b/utils/untabify deleted file mode 100644 index 906951801a4566156cecf858543477112887445f..0000000000000000000000000000000000000000 --- a/utils/untabify +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -if [ $# -lt 1 ] ; then - echo "Usage: untabify files" 1>&2 - exit 1 -else - for file in $@; do - echo Modifying $file - mv $file $file~ - expand $file~ > $file - done -fi - - diff --git a/www/Makefile b/www/Makefile deleted file mode 100644 index 01c01d89d1d10e7e441db406c82f55ffd291892b..0000000000000000000000000000000000000000 --- a/www/Makefile +++ /dev/null @@ -1,19 +0,0 @@ - -cgi: - cat gmsh.html |\ - sed "s/<!---BEGINSCRIPT//g" |\ - sed "s/ENDSCRIPT--->//g" |\ - sed "s/<!---BEGINDATE.Date: /Last updated<br>/g" |\ - sed "s/ .ENDDATE--->/<p>/g" \ - > geuzaine-gmsh.cgi - chmod 755 geuzaine-gmsh.cgi - -noncgi: - cat gmsh.html |\ - sed "s/\/gmsh\//http:\/\/geuz.org\/gmsh\//g" |\ - sed "s/\/getdp\//http:\/\/geuz.org\/getdp\//g" |\ - sed "s/<!---BEGINDATE.Date: /Last updated<br>/g" |\ - sed "s/ .ENDDATE--->/<p>/g" |\ - sed "s/<!---BEGINMIRROR//g" |\ - sed "s/ENDMIRROR--->//g" \ - > gmsh2.html diff --git a/www/gmsh-mirror.html b/www/gmsh-mirror.html deleted file mode 100644 index b216522210923abec8bfdd497edd36413b305740..0000000000000000000000000000000000000000 --- a/www/gmsh-mirror.html +++ /dev/null @@ -1,275 +0,0 @@ -<HTML> - -<HEAD> - -<TITLE>Gmsh homepage</TITLE> - -<meta name="description" content="Gmsh is a free automatic -three-dimensional finite element mesh generator with pre- and -post-processing facilities."> - -<meta name="keywords" content="free mesh generator, free finite element software, -mesh generation, mesh refinement, free, delaunay triangulation, -automatic, maillages automatiques, mailleur, modelisation, opengl, -maillages 3D, 3D meshes, 3-D meshes, maillages 3-D, voronoi, -adaptation de maillages, mesh adaptation, modeling"> - -<META name="Autor-Handle" content="Christophe.Geuzaine@advalvas.be"> - -</HEAD> - -<body text="#000000" bgcolor="#ffffff" background="http://geuz.org/gmsh/images/background.gif"> - -<!------------------------------------------------------------------> - -<table width="100%" border=0 cellspacing=10 cellpadding=5> - -<tr valign=bottom> - - <td width="130" align="right" valign=top><font size=-2 face="Helvetica, Arial" color="#fffff"> - -Copyright © 1998-2001<br> -Jean-Fran�ois Remacle and -Christophe Geuzaine<br> - - </font></td> - - <td width="60"> - </td> - - <td><font face="Helvetica, Arial"> - <font size="+3"><b>Gmsh</b></font> - <p> - <b>A three-dimensional finite element mesh generator with built-in pre- and - post-processing facilities</b> - - </font></td> - -</tr> - -<!------------------------------------------------------------------> - -<tr valign=bottom> - - <td><spacer type="vertical" size=20> - </td> - -</tr> - -<!------------------------------------------------------------------> - -<tr valign=top> - - <td width="130" align="right"> - <font color="#ffffff" face="Helvetica, Arial"><b>General Description</b></font></td> - - <td width="60"> - </td> - - <td><font face="Helvetica, Arial" size=-1> - -Gmsh is an automatic three-dimensional finite element mesh generator, -primarily Delaunay, with built-in pre- and post-processing -facilities. Its primal goal is to provide a simple meshing tool for -academic test cases with parametric input and up to date visualization -capabilities. One of the strengths of Gmsh is its ability to respect a -characteristic length field for the generation of adapted meshes on -lines, surfaces and volumes. These adapted meshes can be mixed with -simple structured (transfinite, elliptic, etc.) meshes in order to -augment the flexibility. - -<!------------------------------------------------------------------> - -<tr valign=top> - - <td width="130" align="right"> - <font color="#ffffff" face="Helvetica, Arial"><b>Geometrical Entity Definition</b></font></td> - - <td width="60"> - </td> - - <td><font face="Helvetica, Arial" size=-1> - -Parameterized geometries are created by successively defining points, -oriented curves (segments, circles, ellipsis, splines, etc.), oriented -surfaces (plane surfaces, ruled surfaces, etc.) and volumes. Compound -groups of geometrical entities can be defined, based on these -elementary parameterized geometric entities. Data can be defined -either interactively thanks to the menu system, or directly in the ASCII -input files. - - </td> - -</tr> - -<!------------------------------------------------------------------> - -<tr valign=top> - - <td width="130" align="right"> - <font color="#ffffff" face="Helvetica, Arial"><b>Mesh Generation</b></font></td> - - <td width="60"> - </td> - - <td><font face="Helvetica, Arial" size=-1> - -A finite element mesh is a tessellation of a given subset of R^3 by -elementary geometrical elements of various shapes (in this case lines, -triangles, quadrangles, tetrahedra, prisms and hexahedra), arranged in -such a way that two of them intersect, if they do, along a common -face, edge or node, and never otherwise. All the finite element meshes -produced by Gmsh as unstructured, even if they were generated in -a structured way. This implies that the elementary geometrical -elements are defined only by an ordered list of their vertices (which -allows the orientation of all their lower order geometrical entities) -but no predefined relation is assumed between any two elementary -elements. -<p> -The procedure follows the same order as for the geometry creation: -curves are discretized first; the mesh of the curves is then used to -mesh the surfaces; then the mesh of the surfaces is used to mesh the -volumes. This automatically assures the continuity of the mesh when, -for example, two surfaces share a common curve. Every meshing step is -constrained by the characteristic length field, which can be uniform, -specified by characteristic length associated to elementary -geometrical entities, or associated to another mesh (the background -mesh). -<p> -For each meshing step (i.e. the discretization of lines, surfaces and -volumes), all structured mesh directives are executed first, and serve -as additional constraints for the unstructured parts. The implemented -Delaunay algorithm is subdivided in the following five steps for -surface/volume discretization: -<p> -<ol> -<li> -trivial meshing of a box including the convex polygon/polyhedron -defined by the boundary nodes resulting from the discretization of the -curves/surfaces; -<li> -creation of the initial mesh by insertion of all the nodes on the -curves/surfaces thanks to the Bowyer algorithm; -<li> -boundary restoration to force all the edges/faces of the -curves/surfaces to be present in the initial mesh; -<li> -suppression of all the unwanted triangles/tetrahedra (in -particular those containing the nodes of the initial box); -<li> -insertion of new nodes by the Bowyer algorithm until the -characteristic size of each simplex is lower or equal to the -characteristic length field evaluated at the center of its -circumscribed circle/sphere. -</ol> - - - </td> - -</tr> - -<!------------------------------------------------------------------> - -<tr valign=top> - - <td width="130" align="right"> - <font color="#ffffff" face="Helvetica, Arial"><p><b>Scalar and Vector Field Visualization</b></font></td> - - <td width="60"> - </td> - - <td><font face="Helvetica, Arial" size=-1> - -Multiple post-processing scalar or vector maps can be loaded and -manipulated (globally or individually) along with the geometry and the -mesh. Scalar fields are represented by iso-value curves or color maps -and vector fields by three-dimensional arrows or displacement -maps. Post-processor functions include offsets, elevation, interactive -color map modification, range clamping, interactive and scriptable -animation, vector postscript output, etc. All post-processing options -can be accessed either interactively or through the the input ascii -files. - - </td> - -</tr> - -<!------------------------------------------------------------------> - -<tr valign=top> - - <td width="130" align="right"> - <font color="#ffffff" face="Helvetica, Arial"><b>Mailing lists</b></font></td> - - <td width="60"> - </td> - - <td align="left" colspan=2><font face="Helvetica, Arial" size=-1> - - <ul> - <li><a target="_top" - href="http://www.geuz.org//mailman/listinfo/gmsh-announce/">gmsh-announce</a> is a - moderated list for announcements about significant Gmsh - events. You should subscribe to this list to get information - about software releases, important bug fixes and other - Gmsh-specific news. The list is archived <a target="_top" - href="http://www.geuz.org/pipermail/gmsh-announce/">here</a>. - - <li><a target="_top" href="http://www.geuz.org/mailman/listinfo/gmsh/">gmsh</a> is - the public mailing list for Gmsh users. You should send all - questions, bug reports, requests or pleas for changes related to - Gmsh to this list. The list is archived <a target="_top" - href="http://www.geuz.org/pipermail/gmsh/">here</a> - </ul> - - </font></td> - -</tr> - -<!------------------------------------------------------------------> - -<tr valign=top> - - <td width="130" align="right"> - <font color="#ffffff" face="Helvetica, Arial"><b>Documentation and Download</b></font></td> - - <td width="60"> - </td> - - <td align="left" colspan=2><font face="Helvetica, Arial" size=-1> - -Go to the <a target="_top" href="http://www.geuz.org/gmsh/">official Gmsh homepage</a>. - - </font></td> - -</tr> - -<!------------------------------------------------------------------> - -<tr valign=top> - - <td width="130" align="right"> - <font color="#ffffff" face="Helvetica, Arial"><b>Authors</b></font></td> - - <td width="60"> - </td> - - <td><font face="Helvetica, Arial" size=-1> - -Gmsh is developed by <A -HREF="mailto:Remacle@scorec.rpi.edu">Jean-Fran�ois Remacle</A> and <A -HREF="mailto:Christophe.Geuzaine@ulg.ac.be">Christophe Geuzaine</A>. - - </td> - -</tr> - -<!------------------------------------------------------------------> - -</table> - -<p> - -</BODY> -</HTML> - diff --git a/www/gmsh.html b/www/gmsh.html deleted file mode 100644 index d67e75dfc03cdf93d09ed9bef917e2c6f340f035..0000000000000000000000000000000000000000 --- a/www/gmsh.html +++ /dev/null @@ -1,471 +0,0 @@ -<!---BEGINSCRIPT#!/bin/sh - -BASEDIR=/usr/local/cgi-bin - -echo Content-type: text/html -echo -cat << EOM -ENDSCRIPT---> - -<HTML> - -<!--- PLEASE DO NOT EDIT the BEGINSCRIPT and ENDSCRIPT comments ---> - -<HEAD> - -<TITLE>Gmsh homepage</TITLE> - -<meta name="description" content="Gmsh is a free automatic -three-dimensional finite element mesh generator with pre- and -post-processing facilities."> - -<meta name="keywords" content="free mesh generator, free finite element software, -mesh generation, mesh refinement, free, delaunay triangulation, -automatic, maillages automatiques, mailleur, modelisation, opengl, -maillages 3D, 3D meshes, 3-D meshes, maillages 3-D, voronoi, -adaptation de maillages, mesh adaptation, modeling"> - -<META name="Autor-Handle" content="Christophe.Geuzaine@advalvas.be"> - -</HEAD> - -<body text="#000000" bgcolor="#ffffff" background="/gmsh/images/background.gif"> - -<!------------------------------------------------------------------> - -<table width="100%" border=0 cellspacing=10 cellpadding=5> - -<tr valign=bottom> - - <td width="130" align="right" valign=top><font size=-2 face="Helvetica, Arial" color="#fffff"> - -<!---BEGINSCRIPT -EOM -${BASEDIR}/n2l ${BASEDIR}/counter.gmsh -cat << EOM -page requests since<br>1998/05/24<p> -ENDSCRIPT---> - -<!---BEGINDATE$Date: 2001-08-03 16:03:00 $ENDDATE---> - -Copyright © 1998-2001<br> -Jean-Fran�ois Remacle and -Christophe Geuzaine<br> - - </font></td> - - <td width="60"> - </td> - - <td><font face="Helvetica, Arial"> - <font size="+3"><b>Gmsh</b></font> - <p> - <b>A three-dimensional finite element mesh generator with built-in pre- and - post-processing facilities</b> - - </font></td> - -</tr> - -<!------------------------------------------------------------------> - -<tr valign=bottom> - - <td><spacer type="vertical" size=20> - </td> - -</tr> - -<!------------------------------------------------------------------> - -<tr valign=top> - - <td width="130" align="right"> - <font color="#ffffff" face="Helvetica, Arial"><b>General Description</b></font></td> - - <td width="60"> - </td> - - <td><font face="Helvetica, Arial" size=-1> - -Gmsh is an automatic three-dimensional finite element mesh generator, -primarily Delaunay, with built-in pre- and post-processing -facilities. Its primal goal is to provide a simple meshing tool for -academic test cases with parametric input and up to date visualization -capabilities. One of the strengths of Gmsh is its ability to respect a -characteristic length field for the generation of adapted meshes on -lines, surfaces and volumes. These adapted meshes can be mixed with -simple structured (transfinite, elliptic, etc.) meshes in order to -augment the flexibility. - -<!------------------------------------------------------------------> - -<tr valign=top> - - <td width="130" align="right"> - <font color="#ffffff" face="Helvetica, Arial"><b>Geometrical Entity Definition</b></font></td> - - <td width="60"> - </td> - - <td><font face="Helvetica, Arial" size=-1> - -Parameterized geometries are created by successively defining points, -oriented curves (segments, circles, ellipsis, splines, etc.), oriented -surfaces (plane surfaces, ruled surfaces, etc.) and volumes. Compound -groups of geometrical entities can be defined, based on these -elementary parameterized geometric entities. Data can be defined -either interactively thanks to the menu system, or directly in the ASCII -input files. - - </td> - -</tr> - -<!------------------------------------------------------------------> - -<tr valign=top> - - <td width="130" align="right"> - <font color="#ffffff" face="Helvetica, Arial"><b>Mesh Generation</b></font></td> - - <td width="60"> - </td> - - <td><font face="Helvetica, Arial" size=-1> - -A finite element mesh is a tessellation of a given subset of R^3 by -elementary geometrical elements of various shapes (in this case lines, -triangles, quadrangles, tetrahedra, prisms and hexahedra), arranged in -such a way that two of them intersect, if they do, along a common -face, edge or node, and never otherwise. All the finite element meshes -produced by Gmsh as unstructured, even if they were generated in -a structured way. This implies that the elementary geometrical -elements are defined only by an ordered list of their vertices (which -allows the orientation of all their lower order geometrical entities) -but no predefined relation is assumed between any two elementary -elements. -<p> -The procedure follows the same order as for the geometry creation: -curves are discretized first; the mesh of the curves is then used to -mesh the surfaces; then the mesh of the surfaces is used to mesh the -volumes. This automatically assures the continuity of the mesh when, -for example, two surfaces share a common curve. Every meshing step is -constrained by the characteristic length field, which can be uniform, -specified by characteristic length associated to elementary -geometrical entities, or associated to another mesh (the background -mesh). -<p> -For each meshing step (i.e. the discretization of lines, surfaces and -volumes), all structured mesh directives are executed first, and serve -as additional constraints for the unstructured parts. The implemented -Delaunay algorithm is subdivided in the following five steps for -surface/volume discretization: -<p> -<ol> -<li> -trivial meshing of a box including the convex polygon/polyhedron -defined by the boundary nodes resulting from the discretization of the -curves/surfaces; -<li> -creation of the initial mesh by insertion of all the nodes on the -curves/surfaces thanks to the Bowyer algorithm; -<li> -boundary restoration to force all the edges/faces of the -curves/surfaces to be present in the initial mesh; -<li> -suppression of all the unwanted triangles/tetrahedra (in -particular those containing the nodes of the initial box); -<li> -insertion of new nodes by the Bowyer algorithm until the -characteristic size of each simplex is lower or equal to the -characteristic length field evaluated at the center of its -circumscribed circle/sphere. -</ol> - - - </td> - -</tr> - -<!------------------------------------------------------------------> - -<tr valign=top> - - <td width="130" align="right"> - <font color="#ffffff" face="Helvetica, Arial"><b>Scalar and Vector Field Visualization</b></font></td> - - <td width="60"> - </td> - - <td><font face="Helvetica, Arial" size=-1> - -Multiple post-processing scalar or vector maps can be loaded and -manipulated (globally or individually) along with the geometry and the -mesh. Scalar fields are represented by iso-value curves or color maps -and vector fields by three-dimensional arrows or displacement -maps. Post-processor functions include offsets, elevation, interactive -color map modification, range clamping, interactive and scriptable -animation, vector postscript output, etc. All post-processing options -can be accessed either interactively or through the the input ascii -files. - - </td> - -</tr> - -<!------------------------------------------------------------------> - -<tr valign=top> - - <td width="130" align="right"> - <font color="#ffffff" face="Helvetica, Arial"><b>Documentation</b></font></td> - - <td width="60"> - </td> - - <td><font face="Helvetica, Arial" size=-1> - - <ul> - <li><A target="_top" href="/gmsh/doc/tutorial.html">Online tutorial</A> - (Please <b>read</b> this tutorial before sending any question to the mailing list!) - <li><A target="_top" href="/gmsh/doc/FORMATS">Mesh and post-processing file formats</A> - <li><A target="_top" href="/gmsh/doc/VERSIONS">Version history</A> - <li><a target="_top" href="/gmsh/doc/FAQ">Frequently asked questions</a> - <li><a target="_top" href="/gmsh/doc/KEYWORDS">List of all reserved keywords</a> - <li><a target="_top" href="/gmsh/doc/README.txt">For Windows versions only</a> -<!------------ - <li><a target="_top" href="/gmsh/doc/BUGS">List of open bugs</a> - <li><a target="_top" href="/gmsh/doc/CONTRIBUTORS">List of contributors</a> ------------> - </ul> - - </td> - -</tr> - -<!------------------------------------------------------------------> - -<!---BEGINSCRIPT - -<tr valign=top> - - <td width="130" align="right"> - <font color="#ffffff" face="Helvetica, Arial"><b>Mailing lists</b></font></td> - - <td width="60"> - </td> - - <td align="left" colspan=2><font face="Helvetica, Arial" size=-1> - - <ul> - <li><a target="_top" - href="/mailman/listinfo/gmsh-announce/">gmsh-announce</a> is a - moderated list for announcements about significant Gmsh - events. You should subscribe to this list to get information - about software releases, important bug fixes and other - Gmsh-specific news. The list is archived <a target="_top" - href="/pipermail/gmsh-announce/">here</a>. - - <li><a target="_top" href="/mailman/listinfo/gmsh/">gmsh</a> is - the public mailing list for Gmsh users. You should send all - questions, bug reports, requests or pleas for changes related to - Gmsh to this list. The list is archived <a target="_top" - href="/pipermail/gmsh/">here</a> - </ul> - - </font></td> - -</tr> - -<!------------------------------------------------------------------> - -<tr valign=top> - - <td width="130" align="right"> - <font color="#ffffff" face="Helvetica, Arial"><b>Search documentation</b></font></td> - - <td width="60"> - </td> - - <td align="left" colspan=2><font face="Helvetica, Arial" size=-1> - -<form method="post" action="/cgi-bin/htsearch"> -<input type="text" size="30" name="words" value=""> -<input type="hidden" name="config" value="htdig"> -<input type="hidden" name="exclude" value=""> - -Match <select name="method"> -<option value="and" selected>all words</option> -<option value="or">any words</option> -<option value="boolean">boolean expression</option> -</select> -Limit to <select name="restrict"> -<option value="http://www.geuz.org/gmsh/">regular pages</option> -<option value="http://www.geuz.org/pipermail/gmsh/">mailing list</option> -</select> -</form> - - </font></td> - -</tr> - -ENDSCRIPT---> - -<!------------------------------------------------------------------> - -<tr valign=top> - - <td width="130" align="right"> - <font color="#ffffff" face="Helvetica, Arial"><b>Download</b></font></td> - - <td width="60"> - </td> - - <td bgcolor="#ededed"><font face="Helvetica, Arial" size=-1> - -<b>Version 1.22 (August 3, 2001)</b> -<p> -Executable versions of Gmsh are available for Windows and for most of -the classical UNIX platforms. These versions are free, and are all -dynamically linked with OpenGL<a href="#opengl-footnote" -name="opengl-footmark"><sup>1</sup></a>. The only thing required if -you use Gmsh is to mention it in your work. The tutorial and demo -files are included in the archives. -<ul> -<li><A href="/gmsh/bin/gmsh-1.22-Windows.zip">Windows zip archive (95/98/NT)</A> -<li><A href="/gmsh/bin/gmsh-1.22-1.i386.rpm">Linux RPM (Red Hat 6.2 and compatible, i386, glibc 2.1)</A> -<li><A href="/gmsh/bin/gmsh-1.22-Linux.tgz">Linux tarball (i386, glibc 2.1)</A> -<li><A href="/gmsh/bin/gmsh-1.22-OSF1.tgz">Compaq Tru64 tarball (OSF 4.0)</A> -<li><A href="/gmsh/bin/gmsh-1.22-SunOS.tgz">Sun tarball (SunOS 5.5)</A> -<li><A href="/gmsh/bin/gmsh-1.22-AIX.tgz">IBM tarball (AIX)</A> -<li><A href="/gmsh/bin/gmsh-1.22-IRIX.tgz">SGI IRIX tarball (IRIX 6.5)</A> -<li><A href="/gmsh/bin/gmsh-1.22-HP-UX.tgz">HP tarball (HPUX 10.20)</A> - -</ul> - - </td> - -</tr> - - -<!------------------------------------------------------------------> - -<tr valign=top> - - <td width="130" align="right"> - <font color="#ffffff" face="Helvetica, Arial"><b>Authors</b></font></td> - - <td width="60"> - </td> - - <td><font face="Helvetica, Arial" size=-1> - -Gmsh is developed by <A -HREF="mailto:Remacle@scorec.rpi.edu">Jean-Fran�ois Remacle</A> -(currently with the <a target="_top" href="http://www.rpi.edu">Rensselaer Polytechnic Institute</a>) -and <A HREF="mailto:Christophe.Geuzaine@ulg.ac.be">Christophe Geuzaine</A> -(currently with the <a target="_top" href="http://www.ulg.ac.be">University of Li�ge</a>). -Please use <A HREF="mailto:gmsh@geuz.org">gmsh@geuz.org</A> instead of -our personnal e-mails to send questions or bug reports! - - </td> - -</tr> - -<!------------------------------------------------------------------> - -<tr valign=top> - - <td width="130" align="right"> - <font color="#ffffff" face="Helvetica, Arial"><b>Gallery</b></font></td> - - <td width="60"> - </td> - - <td><font face="Helvetica, Arial" size=-1> - -Some pictures made with Gmsh: -<ul> -<li> Meshes of - <A href="/gmsh/gallery/Mesh1D.gif">lines</A>, - <A href="/gmsh/gallery/Mesh2DCiss.gif">surfaces</A> and - <A href="/gmsh/gallery/Mesh3D.gif">volumes</A> - respecting a given characteristic length field (d(r) = a (sin(X) * sin (Y)) + b). -<li> 3D mesh of an - <A href="/gmsh/gallery/bigelec4.gif">electrical component</A> - (courtesy S.K. Choi). -<li> Part of a <A href="/gmsh/gallery/shoulder.gif">shoulder bone</a> - (Javad Fatemi). -<li> A mechanical part in the demo files: - <A href="/gmsh/gallery/ex09-0.gif">pict1</A>, - <A href="/gmsh/gallery/ex09-1.gif">pict2</A>, - <A href="/gmsh/gallery/ex09-2.gif">pict3</A>. -<li> Mach number on a F16 - <A href="/gmsh/gallery/f16-1.gif">pict1</A>, - <A href="/gmsh/gallery/f16-2.gif">pict2</A>, - <A href="/gmsh/gallery/f16-3.gif">pict3</A>, - <A href="/gmsh/gallery/f16-5.gif">pict4</A> (courtesy P. Geuzaine). -<li> Example of on-screen information display: - <A href="/gmsh/gallery/infodisplay1.gif">1</A>, - <A href="/gmsh/gallery/infodisplay2.gif">2</A>. -<li> A 3D <A href="/gmsh/gallery/adap.gif">adapted mesh</A>. -<li> Smooth 2D <A href="/gmsh/gallery/blob.gif">colormap</A> and - 3D <A href="/gmsh/gallery/density.mov">quicktime movie</A>. -<li> Some didactic animations about computational electromagnetics at - <A target="_top" href="http://elap.montefiore.ulg.ac.be/elm/demos_en.html">ELAP</A>. -</ul> - - </td> - -</tr> - -<!------------------------------------------------------------------> - -<tr valign=top> - - <td width="130" align="right"> - <font color="#ffffff" face="Helvetica, Arial"><b>Links</b></font></td> - - <td width="60"> - </td> - - <td><font face="Helvetica, Arial" size=-1> - -Check out <A TARGET="_top" HREF="/getdp/">GetDP</A>, a scientific -computation software for the numerical solution of -integro-differential equations, using finite element and integral type -methods. - -<p> -<br> -<p> -<a name="opengl-footnote"></a><a -href="#opengl-footmark"><sup>1</sup></a>For Unix versions only: you -should have the OpenGL libraries installed on your system, and in the -path of the library loader. A free replacement for OpenGL can be found -at <A target="_top" -href="http://mesa3d.sourceforge.net">http://mesa3d.sourceforge.net</A> -(a Linux RPM is directly available <A -href="/gmsh/thirdparty/Mesa-3.2-2.i386.rpm">here</A>). Remember that -you may have to reconfigure the loader (ldconfig under Linux) or -modify the LD_LIBRARY_PATH (or SHLIB_PATH on HP) environment variable -in order for Gmsh to find the libraries. - - - </font></td> - -</tr> - -<!------------------------------------------------------------------> - -</table> - -<p> - -</BODY> -</HTML> - -<!---BEGINSCRIPT -EOM -ENDSCRIPT--->