diff --git a/Mesh/meshGFaceExtruded.cpp b/Mesh/meshGFaceExtruded.cpp index 4d81462be3248a86aa4ed6ae7b426c031e78786b..36ad48b5264cd9c02c24a194de707f2f61d40998 100644 --- a/Mesh/meshGFaceExtruded.cpp +++ b/Mesh/meshGFaceExtruded.cpp @@ -1,4 +1,4 @@ -// $Id: meshGFaceExtruded.cpp,v 1.1 2006-11-26 04:36:46 geuzaine Exp $ +// $Id: meshGFaceExtruded.cpp,v 1.2 2006-11-26 16:24:04 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -22,6 +22,7 @@ #include <map> #include "ExtrudeParams.h" #include "meshGFace.h" +#include "GModel.h" #include "GVertex.h" #include "GEdge.h" #include "GFace.h" @@ -35,12 +36,15 @@ int MeshExtrudedSurface(GFace *gf) ExtrudeParams *ep = gf->meshAttributes.extrude; if(!ep || !ep->mesh.ExtrudeMesh) - return false; - - Msg(GERROR, "Extrusion has yet to be reinterfaced!"); + return 0; if(ep->geo.Mode == EXTRUDED_ENTITY) { // extruded from a curve + GEdge *ge = gf->model()->edgeByTag(ep->geo.Source); + if(!ge) return 0; + for(unsigned int i = 0; i < ge->mesh_vertices.size(); i++) { + //printf("extruding vertex %d\n", i); + } /* c = FindCurve(abs(ep->geo.Source)); if(!c) @@ -53,7 +57,7 @@ int MeshExtrudedSurface(GFace *gf) */ } else { - // this is the "hat" of an extruded surface + // copy of a surface ("chapeau") /* source = FindSurface(ep->geo.Source); if(!source) diff --git a/Mesh/meshGFaceTransfinite.cpp b/Mesh/meshGFaceTransfinite.cpp index 34c08972d291e0eb5d881cdb618b93898b4b7ece..3e54924726f3c597534521e5eec5276ef3c7a1a6 100644 --- a/Mesh/meshGFaceTransfinite.cpp +++ b/Mesh/meshGFaceTransfinite.cpp @@ -1,4 +1,4 @@ -// $Id: meshGFaceTransfinite.cpp,v 1.4 2006-09-08 02:39:43 geuzaine Exp $ +// $Id: meshGFaceTransfinite.cpp,v 1.5 2006-11-26 16:24:04 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -34,98 +34,98 @@ int MeshTransfiniteSurface( GFace *gf) { - if(gf->meshAttributes.Method != TRANSFINI) - return 0; + if(gf->meshAttributes.Method != TRANSFINI) return 0; + std::vector <MVertex *> corners; std::vector <MVertex *> d_vertices; std::vector <int> indices; - for (unsigned int i=0;i<gf->meshAttributes.corners.size();i++) + for(unsigned int i=0;i<gf->meshAttributes.corners.size();i++) corners.push_back(gf->meshAttributes.corners[i]->mesh_vertices[0]); - computeEdgeLoops (gf,d_vertices, indices); + computeEdgeLoops(gf, d_vertices, indices); - if (corners.size () != 3 && corners.size () != 4) - Msg (GERROR,"Surface %d is transfinite but has %d corners",gf->tag(),corners.size()); - if (indices.size () != 2) - Msg (GERROR,"Surface %d is transfinite but has %d holes",gf->tag(),indices.size()-2); + if(corners.size () != 3 && corners.size () != 4){ + Msg(GERROR,"Surface %d is transfinite but has %d corners", gf->tag(), corners.size()); + return 0; + } + if(indices.size () != 2){ + Msg(GERROR,"Surface %d is transfinite but has %d holes", gf->tag(), indices.size() - 2); + return 0; + } std::vector <MVertex *> m_vertices; unsigned int I; - for (I=0;I<d_vertices.size();I++) - if(d_vertices[I] == corners[0])break; - for (unsigned int j=0;j<d_vertices.size();j++) - m_vertices.push_back(d_vertices[(I+j)%d_vertices.size()]); + for(I = 0; I < d_vertices.size(); I++) + if(d_vertices[I] == corners[0]) break; + for(unsigned int j = 0; j < d_vertices.size(); j++) + m_vertices.push_back(d_vertices[(I + j) % d_vertices.size()]); int iCorner = 0; int N[4]; std::vector<double> U; std::vector<double> V; - std::map<std::pair<int,int> , MVertex*> tab; - for (unsigned int i=0;i<m_vertices.size();i++) - { - MVertex *v = m_vertices[i]; - if (v==corners[0]||v==corners[1]||v==corners[2]|| (corners.size()==4 && v==corners[3])) - { - N[iCorner++] = i; - if (iCorner > 4) - Msg (GERROR,"Surface %d transfinite parameters are incoherent",gf->tag()); - } - SPoint2 param = gf->parFromPoint (SPoint3(v->x(),v->y(),v->z())); - U.push_back(param.x()); - V.push_back(param.y()); + for(unsigned int i = 0; i < m_vertices.size(); i++){ + MVertex *v = m_vertices[i]; + if(v == corners[0] || v == corners[1] || v == corners[2] || + (corners.size() == 4 && v == corners[3])){ + N[iCorner++] = i; + if (iCorner > 4){ + Msg (GERROR,"Surface %d transfinite parameters are incoherent", gf->tag()); + return 0; + } } + SPoint2 param = gf->parFromPoint (SPoint3(v->x(),v->y(),v->z())); + U.push_back(param.x()); + V.push_back(param.y()); + } int N1 = N[0]; int N2 = N[1]; int N3 = N[2]; int N4 = N[3]; - int L = N2-N1; - int H = N3-N2; + int L = N2 - N1; + int H = N3 - N2; - int Lb = N4-N3; - int Hb = m_vertices.size()-N4; + int Lb = N4 - N3; + int Hb = m_vertices.size() - N4; - if (Lb != L || Hb != H) - { - Msg(GERROR,"Surface %d cannot be meshed using the transfinite algo",gf->tag()); - return 0; - } + if(Lb != L || Hb != H){ + Msg(GERROR,"Surface %d cannot be meshed using the transfinite algo", gf->tag()); + return 0; + } std::vector<double> lengths_i; std::vector<double> lengths_j; - double L_i=0; - double L_j=0; - - lengths_i.push_back( 0. ); - lengths_j.push_back( 0. ); - for (int i=0;i<L;i++) - { - MVertex *v1 = m_vertices[i]; - MVertex *v2 = m_vertices[i+1]; - double l = sqrt ((v1->x()-v2->x())*(v1->x()-v2->x())+ - (v1->y()-v2->y())*(v1->y()-v2->y())+ - (v1->z()-v2->z())*(v1->z()-v2->z())); - L_i+= l; - lengths_i.push_back( L_i ); - } - for (int i=L;i<L+H;i++) - { - MVertex *v1 = m_vertices[i]; - MVertex *v2 = m_vertices[i+1]; - double l = sqrt ((v1->x()-v2->x())*(v1->x()-v2->x())+ - (v1->y()-v2->y())*(v1->y()-v2->y())+ - (v1->z()-v2->z())*(v1->z()-v2->z())); - L_j+= l; - lengths_j.push_back( L_j ); - } - - - //Msg (INFO,"L %d H %d -- %d -- %d %d %d %d",L,H,m_vertices.size(),N1,N2,N3,N4); + double L_i = 0; + double L_j = 0; + + lengths_i.push_back(0.); + lengths_j.push_back(0.); + for(int i = 0; i < L; i++){ + MVertex *v1 = m_vertices[i]; + MVertex *v2 = m_vertices[i + 1]; + double l = sqrt((v1->x() - v2->x()) * (v1->x() - v2->x()) + + (v1->y() - v2->y()) * (v1->y() - v2->y()) + + (v1->z() - v2->z()) * (v1->z() - v2->z())); + L_i += l; + lengths_i.push_back(L_i); + } + for(int i = L; i < L + H; i++){ + MVertex *v1 = m_vertices[i]; + MVertex *v2 = m_vertices[i + 1]; + double l = sqrt((v1->x() - v2->x()) * (v1->x() - v2->x()) + + (v1->y() - v2->y()) * (v1->y() - v2->y()) + + (v1->z() - v2->z()) * (v1->z() - v2->z())); + L_j += l; + lengths_j.push_back(L_j); + } + + //Msg(INFO,"L %d H %d -- %d -- %d %d %d %d", L, H, m_vertices.size(), N1, N2, N3, N4); /* 2L+H @@ -136,7 +136,6 @@ int MeshTransfiniteSurface( GFace *gf) 2L+2H+2 | | +------------+ 0 L - */ tab[std::make_pair(0,0)] = m_vertices[0]; @@ -144,16 +143,14 @@ int MeshTransfiniteSurface( GFace *gf) tab[std::make_pair(L,H)] = m_vertices[L+H]; tab[std::make_pair(0,H)] = m_vertices[2*L+H]; - for (int i=1;i<L;i++) - { - tab[std::make_pair(i,0)] = m_vertices[i]; - tab[std::make_pair(i,H)] = m_vertices[2*L+H-i]; - } - for (int i=1;i<H;i++) - { - tab[std::make_pair(L,i)] = m_vertices[L+i]; - tab[std::make_pair(0,i)] = m_vertices[2*L+2*H-i]; - } + for (int i = 1; i < L; i++){ + tab[std::make_pair(i,0)] = m_vertices[i]; + tab[std::make_pair(i,H)] = m_vertices[2*L+H-i]; + } + for(int i = 1; i < H;i++){ + tab[std::make_pair(L,i)] = m_vertices[L+i]; + tab[std::make_pair(0,i)] = m_vertices[2*L+2*H-i]; + } double UC1 = U[N1]; double UC2 = U[N2]; @@ -164,110 +161,86 @@ int MeshTransfiniteSurface( GFace *gf) double VC3 = V[N3]; double VC4 = V[N4]; - //create points using transfinite interpolation - for(int i = 1; i<L; i++) - { - double u = lengths_i[i]/L_i; - for(int j = 1; j < H; j++) - { - double v = lengths_j[j]/L_j; - int iP1 = N1+i; - int iP2 = N2+j; - int iP3 = N4-i; - int iP4 = (N4+(N3-N2)-j)%m_vertices.size(); - - double Up = TRAN_QUA ( U[iP1], U[iP2], U[iP3], U[iP4] , UC1, UC2, UC3, UC4, u, v ); - double Vp = TRAN_QUA ( V[iP1], V[iP2], V[iP3], V[iP4] , VC1, VC2, VC3, VC4, u, v ); - - GPoint gp = gf->point (SPoint2(Up,Vp)); - MFaceVertex *newv = new MFaceVertex ( gp.x(),gp.y(),gp.z(), gf, Up, Vp ); - gf->mesh_vertices.push_back (newv); - tab[std::make_pair(i,j)] = newv; - } + for(int i = 1; i < L; i++){ + double u = lengths_i[i]/L_i; + for(int j = 1; j < H; j++){ + double v = lengths_j[j]/L_j; + int iP1 = N1+i; + int iP2 = N2+j; + int iP3 = N4-i; + int iP4 = (N4+(N3-N2)-j)%m_vertices.size(); + double Up = TRAN_QUA ( U[iP1], U[iP2], U[iP3], U[iP4] , UC1, UC2, UC3, UC4, u, v ); + double Vp = TRAN_QUA ( V[iP1], V[iP2], V[iP3], V[iP4] , VC1, VC2, VC3, VC4, u, v ); + GPoint gp = gf->point (SPoint2(Up,Vp)); + MFaceVertex *newv = new MFaceVertex ( gp.x(),gp.y(),gp.z(), gf, Up, Vp ); + gf->mesh_vertices.push_back (newv); + tab[std::make_pair(i,j)] = newv; } - - if (gf->geomType() == GEntity::Plane) // some work 2 be done to smooth the stuff in parametric coords - // parametric coords are available (MFaceVertex) ! - { - // elliptic smoother - for (int IT = 0;IT< 10;IT++) - { - for(int i = 1; i<L; i++) - { - for(int j = 1; j < H; j++) - { - MVertex *v11 = tab[std::make_pair(i-1,j-1)]; - MVertex *v12 = tab[std::make_pair(i-1,j)]; - MVertex *v13 = tab[std::make_pair(i-1,j+1)]; - MVertex *v21 = tab[std::make_pair(i,j-1)]; - MVertex *v22 = tab[std::make_pair(i,j)]; - MVertex *v23 = tab[std::make_pair(i,j+1)]; - MVertex *v31 = tab[std::make_pair(i+1,j-1)]; - MVertex *v32 = tab[std::make_pair(i+1,j)]; - MVertex *v33 = tab[std::make_pair(i+1,j+1)]; - - double alpha = 0.25 * (DSQR(v23->x() - v21->x()) + - DSQR(v23->y() - v21->y()) + - DSQR(v23->z() - v21->z()) - ); - double gamma = 0.25 * (DSQR(v32->x() - v12->x()) + - DSQR(v32->y() - v12->y()) + - DSQR(v32->z() - v12->z()) - ); - double beta = 0.0625 * ((v32->x() - v12->x()) * - (v23->x() - v21->x()) + - (v32->y() - v12->y()) * - (v23->y() - v21->y()) + - (v32->z() - v12->z()) * - (v23->z() - v21->z()) - ); - - v22->x() = 0.5 * (alpha * (v32->x() + v12->x()) + - gamma * (v23->x() + v21->x()) - - 2. * beta * (v33->x() - v13->x() - - v31->x() + v11->x())) - / (alpha + gamma); - v22->y() = 0.5 * (alpha * (v32->y() + v12->y()) + - gamma * (v23->y() + v21->y()) - - 2. * beta * (v33->y() - v13->y() - - v31->y() + v11->y())) - / (alpha + gamma); - v22->z() = 0.5 * (alpha * (v32->z() + v12->z()) + - gamma * (v23->z() + v21->z()) - - 2. * beta * (v33->z() - v13->z() - - v31->z() + v11->z())) - / (alpha + gamma); - } - } + } + + // elliptic smoother (don't apply this by default) + if(CTX.mesh.nb_smoothing > 1 && gf->geomType() == GEntity::Plane){ + for (int IT = 0; IT< CTX.mesh.nb_smoothing; IT++){ + for(int i = 1; i < L; i++){ + for(int j = 1; j < H; j++){ + MVertex *v11 = tab[std::make_pair(i-1,j-1)]; + MVertex *v12 = tab[std::make_pair(i-1,j)]; + MVertex *v13 = tab[std::make_pair(i-1,j+1)]; + MVertex *v21 = tab[std::make_pair(i,j-1)]; + MVertex *v22 = tab[std::make_pair(i,j)]; + MVertex *v23 = tab[std::make_pair(i,j+1)]; + MVertex *v31 = tab[std::make_pair(i+1,j-1)]; + MVertex *v32 = tab[std::make_pair(i+1,j)]; + MVertex *v33 = tab[std::make_pair(i+1,j+1)]; + + double alpha = 0.25 * (DSQR(v23->x() - v21->x()) + + DSQR(v23->y() - v21->y()) + + DSQR(v23->z() - v21->z())); + double gamma = 0.25 * (DSQR(v32->x() - v12->x()) + + DSQR(v32->y() - v12->y()) + + DSQR(v32->z() - v12->z())); + double beta = 0.0625 * ((v32->x() - v12->x()) * (v23->x() - v21->x()) + + (v32->y() - v12->y()) * (v23->y() - v21->y()) + + (v32->z() - v12->z()) * (v23->z() - v21->z())); + v22->x() = 0.5 * (alpha * (v32->x() + v12->x()) + + gamma * (v23->x() + v21->x()) - + 2. * beta * (v33->x() - v13->x() - + v31->x() + v11->x())) / (alpha + gamma); + v22->y() = 0.5 * (alpha * (v32->y() + v12->y()) + + gamma * (v23->y() + v21->y()) - + 2. * beta * (v33->y() - v13->y() - + v31->y() + v11->y())) / (alpha + gamma); + v22->z() = 0.5 * (alpha * (v32->z() + v12->z()) + + gamma * (v23->z() + v21->z()) - + 2. * beta * (v33->z() - v13->z() - + v31->z() + v11->z())) / (alpha + gamma); } + } } + } + // create elements - for(int i = 0; i < L ; i++) - { - for(int j = 0; j < H; j++) - { - MVertex *v1 = tab[std::make_pair(i,j)]; - MVertex *v2 = tab[std::make_pair(i+1,j)]; - MVertex *v3 = tab[std::make_pair(i+1,j+1)]; - MVertex *v4 = tab[std::make_pair(i,j+1)]; - if (gf->meshAttributes.recombine) - gf->quadrangles.push_back(new MQuadrangle (v1,v2,v3,v4)); - else if ( gf->meshAttributes.transfiniteArrangement == 1 || - (gf->meshAttributes.transfiniteArrangement == 0 && - (( i % 2 == 0 && j % 2 == 1 ) || - ( i % 2 == 1 && j % 2 == 0 ) ) ) ) - { - gf->triangles.push_back(new MTriangle (v1,v2,v3)); - gf->triangles.push_back(new MTriangle (v3,v4,v1)); - } - else - { - gf->triangles.push_back(new MTriangle (v1,v2,v4)); - gf->triangles.push_back(new MTriangle (v4,v2,v3)); - } - } + for(int i = 0; i < L ; i++){ + for(int j = 0; j < H; j++){ + MVertex *v1 = tab[std::make_pair(i,j)]; + MVertex *v2 = tab[std::make_pair(i+1,j)]; + MVertex *v3 = tab[std::make_pair(i+1,j+1)]; + MVertex *v4 = tab[std::make_pair(i,j+1)]; + if(gf->meshAttributes.recombine) + gf->quadrangles.push_back(new MQuadrangle(v1, v2, v3, v4)); + else if(gf->meshAttributes.transfiniteArrangement == 1 || + (gf->meshAttributes.transfiniteArrangement == 0 && + ((i % 2 == 0 && j % 2 == 1) || + (i % 2 == 1 && j % 2 == 0)))){ + gf->triangles.push_back(new MTriangle(v1, v2, v3)); + gf->triangles.push_back(new MTriangle(v3, v4, v1)); + } + else{ + gf->triangles.push_back(new MTriangle(v1, v2, v4)); + gf->triangles.push_back(new MTriangle(v4, v2, v3)); + } } + } return 1; } - diff --git a/configure b/configure index c54796415e7c8c1c7f60c2ee556148609cc4b167..729597a6fb2b1006483984aec9fe197ed289447f 100755 --- a/configure +++ b/configure @@ -858,8 +858,8 @@ Optional Features: --enable-contrib enable contrib packages (default=yes) --enable-triangle compile Triangle if available (default=yes) --enable-netgen compile Netgen if available (default=yes) - --enable-ann compile ANN if available (default=yes) - --enable-metis compile METIS if available (default=yes) + --enable-ann compile ANN if available (default=no) + --enable-metis compile METIS if available (default=no) --enable-tetgen compile Tetgen if available (default=yes) --enable-matheval compile MathEval if available (default=yes) --enable-osmesa use OSMesa for offscreen rendering (default=no) @@ -3984,7 +3984,7 @@ else fi if test "x${ANN}" = "xyes"; then - if test "x$enable_ann" != "xno"; then + if test "x$enable_ann" = "xyes"; then GMSH_DIRS="${GMSH_DIRS} contrib/ANN" GMSH_LIBS="${GMSH_LIBS} -lGmshANN" FLAGS="-DHAVE_ANN_ ${FLAGS}" @@ -3998,7 +3998,7 @@ fi echo "********************************************************************" fi else - if test "x$enable_ann" != "xno"; then + if test "x$enable_ann" = "xyes"; then echo "********************************************************************" echo "If you want to use ANN for doing fast geometrical searchs in the" echo "STL mesher, please download ANN from the author's web site at" @@ -4033,7 +4033,7 @@ else fi if test "x${METIS}" = "xyes"; then - if test "x$enable_metis" != "xno"; then + if test "x$enable_metis" = "xyes"; then GMSH_DIRS="${GMSH_DIRS} contrib/Metis" GMSH_LIBS="${GMSH_LIBS} -lGmshMetis" FLAGS="-DHAVE_METIS ${FLAGS}" @@ -4047,7 +4047,7 @@ fi echo "********************************************************************" fi else - if test "x$enable-metis" != "xno"; then + if test "x$enable-metis" = "xyes"; then echo "********************************************************************" echo "If you want to use METIS for doing mesh partitioning, please" echo "download METIS from the author's web site at" @@ -4422,7 +4422,9 @@ echo "$as_me: error: Could not find GSL, aborting." >&2;} fi if test "x${CGNS_PREFIX}" != "x"; then - enable_cgns="yes" + if test "x$enable_cgns" != "xno"; then + enable_cgns="yes" + fi fi if test "x$enable_cgns" = "xyes"; then if test "x${CGNS_PREFIX}" != "x"; then @@ -4504,7 +4506,9 @@ fi fi if test "x${OCC_PREFIX}" != "x"; then - enable_occ="yes" + if test "x$enable_occ" != "xno"; then + enable_occ="yes" + fi fi if test "x$enable_occ" = "xyes"; then if test "x${OCC_PREFIX}" != "x"; then diff --git a/configure.in b/configure.in index 81da824dcc48522b7b0c5c304baa6dd3421f68e7..25fa758ce03d9917fa8ec19026ed6b3d413a97ae 100644 --- a/configure.in +++ b/configure.in @@ -1,4 +1,4 @@ -dnl $Id: configure.in,v 1.113 2006-11-21 23:03:13 geuzaine Exp $ +dnl $Id: configure.in,v 1.114 2006-11-26 16:24:04 geuzaine Exp $ dnl dnl Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle dnl @@ -95,10 +95,10 @@ AC_ARG_ENABLE(netgen, [compile Netgen if available (default=yes)])) AC_ARG_ENABLE(ann, AC_HELP_STRING([--enable-ann], - [compile ANN if available (default=yes)])) + [compile ANN if available (default=no)])) AC_ARG_ENABLE(metis, AC_HELP_STRING([--enable-metis], - [compile METIS if available (default=yes)])) + [compile METIS if available (default=no)])) AC_ARG_ENABLE(tetgen, AC_HELP_STRING([--enable-tetgen], [compile Tetgen if available (default=yes)])) @@ -347,7 +347,7 @@ if test "x$enable_contrib" != "xno"; then dnl Check for ANN AC_CHECK_FILE(./contrib/ANN/include/ANN/ANN.h, ANN="yes", ANN="no") if test "x${ANN}" = "xyes"; then - if test "x$enable_ann" != "xno"; then + if test "x$enable_ann" = "xyes"; then GMSH_DIRS="${GMSH_DIRS} contrib/ANN" GMSH_LIBS="${GMSH_LIBS} -lGmshANN" FLAGS="-DHAVE_ANN_ ${FLAGS}" @@ -361,7 +361,7 @@ if test "x$enable_contrib" != "xno"; then echo "********************************************************************" fi else - if test "x$enable_ann" != "xno"; then + if test "x$enable_ann" = "xyes"; then echo "********************************************************************" echo "If you want to use ANN for doing fast geometrical searchs in the" echo "STL mesher, please download ANN from the author's web site at" @@ -375,7 +375,7 @@ if test "x$enable_contrib" != "xno"; then dnl Check for METIS AC_CHECK_FILE(./contrib/Metis/metis.h, METIS="yes", METIS="no") if test "x${METIS}" = "xyes"; then - if test "x$enable_metis" != "xno"; then + if test "x$enable_metis" = "xyes"; then GMSH_DIRS="${GMSH_DIRS} contrib/Metis" GMSH_LIBS="${GMSH_LIBS} -lGmshMetis" FLAGS="-DHAVE_METIS ${FLAGS}" @@ -389,7 +389,7 @@ if test "x$enable_contrib" != "xno"; then echo "********************************************************************" fi else - if test "x$enable-metis" != "xno"; then + if test "x$enable-metis" = "xyes"; then echo "********************************************************************" echo "If you want to use METIS for doing mesh partitioning, please" echo "download METIS from the author's web site at" @@ -529,7 +529,9 @@ fi dnl Check for CGNS if test "x${CGNS_PREFIX}" != "x"; then - enable_cgns="yes" + if test "x$enable_cgns" != "xno"; then + enable_cgns="yes" + fi fi if test "x$enable_cgns" = "xyes"; then if test "x${CGNS_PREFIX}" != "x"; then @@ -549,7 +551,9 @@ fi dnl Check for OpenCascade if test "x${OCC_PREFIX}" != "x"; then - enable_occ="yes" + if test "x$enable_occ" != "xno"; then + enable_occ="yes" + fi fi if test "x$enable_occ" = "xyes"; then if test "x${OCC_PREFIX}" != "x"; then