From 507f773205b89af11e1db51c60ec3b667a281a84 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Sun, 26 Nov 2006 19:30:23 +0000 Subject: [PATCH] *** empty log message *** --- Geo/ExtrudeParams.cpp | 3 +- Mesh/meshGFaceExtruded.cpp | 56 +++++++++++++++++++++-------------- Mesh/meshGFaceTransfinite.cpp | 4 ++- 3 files changed, 37 insertions(+), 26 deletions(-) diff --git a/Geo/ExtrudeParams.cpp b/Geo/ExtrudeParams.cpp index 06a078af9c..79aa972a2d 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 36ad48b526..1ade00cc35 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 3e54924726..5abfb6f3e5 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; -- GitLab