diff --git a/Geo/ExtrudeParams.cpp b/Geo/ExtrudeParams.cpp index 06a078af9c7d0a2eefc3df390b755a3f1e8dbe27..79aa972a2d51e65a1e40b662cf92f8b5cd7a51ce 100644 --- a/Geo/ExtrudeParams.cpp +++ b/Geo/ExtrudeParams.cpp @@ -1,4 +1,4 @@ -// $Id: ExtrudeParams.cpp,v 1.19 2006-11-25 16:52:43 geuzaine Exp $ +// $Id: ExtrudeParams.cpp,v 1.20 2006-11-26 19:30:23 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -44,7 +44,6 @@ ExtrudeParams::ExtrudeParams(int ModeEx) mesh.Recombine = false; } - void ExtrudeParams::fill(int type, double T0, double T1, double T2, double A0, double A1, double A2, diff --git a/Mesh/meshGFaceExtruded.cpp b/Mesh/meshGFaceExtruded.cpp index 36ad48b5264cd9c02c24a194de707f2f61d40998..1ade00cc354edf386b8d1d681217f37c9e652eab 100644 --- a/Mesh/meshGFaceExtruded.cpp +++ b/Mesh/meshGFaceExtruded.cpp @@ -1,4 +1,4 @@ -// $Id: meshGFaceExtruded.cpp,v 1.2 2006-11-26 16:24:04 geuzaine Exp $ +// $Id: meshGFaceExtruded.cpp,v 1.3 2006-11-26 19:30:23 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -31,6 +31,30 @@ #include "Context.h" #include "Message.h" +int extrudeVertex(GFace *gf, MVertex *v) +{ + ExtrudeParams *ep = gf->meshAttributes.extrude; + for(int i = 0; i < ep->mesh.NbLayer; i++) { + for(int j = 1; j < ep->mesh.NbElmLayer[i]; j++) { + double x = v->x(), y = v->y(), z = v->z(); + ep->Extrude(i, j, x, y, z); + gf->mesh_vertices.push_back(new MVertex(x, y, z, gf)); + } + } +} + +int copyMesh(GFace *gf, GFace *from) +{ + ExtrudeParams *ep = gf->meshAttributes.extrude; + for(unsigned int i = 0; i < from->mesh_vertices.size(); i++){ + MVertex *v = from->mesh_vertices[i]; + double x = v->x(), y = v->y(), z = v->z(); + ep->Extrude(ep->mesh.NbLayer - 1, ep->mesh.NbElmLayer[ep->mesh.NbLayer - 1], + x, y, z); + gf->mesh_vertices.push_back(new MVertex(x, y, z, gf)); + } +} + int MeshExtrudedSurface(GFace *gf) { ExtrudeParams *ep = gf->meshAttributes.extrude; @@ -40,32 +64,18 @@ int MeshExtrudedSurface(GFace *gf) 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) - return false; - for(int i = 0; i < List_Nbr(c->Vertices); i++) { - List_Read(c->Vertices, i, &v1); - Extrude_Vertex(&v1, NULL); - } - Extrude_Curve(&c, NULL); - */ + GEdge *e = gf->model()->edgeByTag(std::abs(ep->geo.Source)); + if(!e) return 0; + for(unsigned int i = 0; i < e->mesh_vertices.size(); i++) + extrudeVertex(gf, e->mesh_vertices[i]); + // get bounding edges and create quads/tris } else { // copy of a surface ("chapeau") - /* - source = FindSurface(ep->geo.Source); - if(!source) - return false; - copy_mesh(ss, s); - */ + GFace *f = gf->model()->faceByTag(std::abs(ep->geo.Source)); + if(!f) return 0; + copyMesh(gf, f); } return 1; } - diff --git a/Mesh/meshGFaceTransfinite.cpp b/Mesh/meshGFaceTransfinite.cpp index 3e54924726f3c597534521e5eec5276ef3c7a1a6..5abfb6f3e553132d4fa42eceecb74ee2b024f04b 100644 --- a/Mesh/meshGFaceTransfinite.cpp +++ b/Mesh/meshGFaceTransfinite.cpp @@ -1,4 +1,4 @@ -// $Id: meshGFaceTransfinite.cpp,v 1.5 2006-11-26 16:24:04 geuzaine Exp $ +// $Id: meshGFaceTransfinite.cpp,v 1.6 2006-11-26 19:30:23 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -93,6 +93,8 @@ int MeshTransfiniteSurface( GFace *gf) int Lb = N4 - N3; int Hb = m_vertices.size() - N4; + // FIXME need to reimplement 3-side transfinite interpolation! + if(Lb != L || Hb != H){ Msg(GERROR,"Surface %d cannot be meshed using the transfinite algo", gf->tag()); return 0;