Skip to content
Snippets Groups Projects
Commit 2efa9acc authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

fix

parent 70fc390b
No related branches found
No related tags found
No related merge requests found
// Gmsh - Copyright (C) 1997-2016 C. Geuzaine, J.-F. Remacle
//
// See the LICENSE.txt file for license information. Please report all
// bugs and problems to the public mailing list <gmsh@onelab.info>.
#include <stdlib.h> #include <stdlib.h>
#include <vector> #include <vector>
// general // general
...@@ -27,55 +32,58 @@ ...@@ -27,55 +32,58 @@
#include "MPrism.h" #include "MPrism.h"
#include "MHexahedron.h" #include "MHexahedron.h"
// triangles are defining the boundary // triangles are defining the boundary
// internal points are allowed // internal points are allowed
// This has been done for HEXTREME // This has been done for HEXTREME
GRegion * createDiscreteRegionFromRawData ( GModel *gm, fullMatrix<double> & pts, fullMatrix<int> &triangles) { GRegion * createDiscreteRegionFromRawData(GModel *gm, fullMatrix<double> &pts,
fullMatrix<int> &triangles)
{
GRegion *gr = new discreteRegion(gm, NEWREG()); GRegion *gr = new discreteRegion(gm, NEWREG());
GFace *gf = new discreteFace (gm, NEWREG()); GFace *gf = new discreteFace(gm, NEWREG());
gm->add (gr); gm->add(gr);
gm->add (gf); gm->add(gf);
std::list<GFace*> faces ; faces.push_back(gf) ; gr->set (faces); std::list<GFace*> faces; faces.push_back(gf); gr->set(faces);
// get boundary nodes // get boundary nodes
std::set<int> bnd; std::set<int> bnd;
int nbTriangles = triangles.size1(); unsigned int nbTriangles = triangles.size1();
int nbPts = pts.size1(); unsigned int nbPts = pts.size1();
for (unsigned int i=0 ; i<nbTriangles ; i++) { for (unsigned int i = 0; i < nbTriangles; i++) {
bnd.insert(triangles(i,0)); bnd.insert(triangles(i, 0));
bnd.insert(triangles(i,1)); bnd.insert(triangles(i, 1));
bnd.insert(triangles(i,2)); bnd.insert(triangles(i, 2));
} }
// create points // create points
std::vector<MVertex*> vs (nbPts); std::vector<MVertex*> vs(nbPts);
for (unsigned int i=0 ; i<nbPts ; i++) { for (unsigned int i = 0; i < nbPts; i++) {
if (bnd.find(i) == bnd.end()){ if (bnd.find(i) == bnd.end()){
MVertex *v = new MVertex (pts(i,0), pts(i,1), pts(i,2), gr); MVertex *v = new MVertex(pts(i,0), pts(i,1), pts(i,2), gr);
gr->mesh_vertices.push_back(v); gr->mesh_vertices.push_back(v);
vs[i] = v; vs[i] = v;
} }
else { else {
MVertex *v = new MFaceVertex (pts(i,0), pts(i,1), pts(i,2), gr, 0, 0); MVertex *v = new MFaceVertex(pts(i,0), pts(i,1), pts(i,2), gr, 0, 0);
gr->mesh_vertices.push_back(v); gr->mesh_vertices.push_back(v);
vs[i] = v; vs[i] = v;
} }
} }
// create triangles // create triangles
for (unsigned int i=0 ; i<nbTriangles ; i++) { for (unsigned int i = 0 ; i < nbTriangles; i++) {
int i0= triangles(i,0); int i0 = triangles(i,0);
int i1= triangles(i,1); int i1 = triangles(i,1);
int i2= triangles(i,2); int i2 = triangles(i,2);
MTriangle *t = new MTriangle(vs[i0],vs[i1],vs[i2]); MTriangle *t = new MTriangle(vs[i0], vs[i1], vs[i2]);
gf->triangles.push_back(t); gf->triangles.push_back(t);
} }
delaunayTriangulation(1, 1, vs, gr->tetrahedra); delaunayTriangulation(1, 1, vs, gr->tetrahedra);
return gr; return gr;
} }
GRegion * createTetrahedralMesh ( GModel *gm, fullMatrix<double> & pts, fullMatrix<int> &triangles ) { GRegion *createTetrahedralMesh(GModel *gm, fullMatrix<double> &pts,
fullMatrix<int> &triangles)
GRegion *gr = createDiscreteRegionFromRawData ( gm, pts, triangles ); {
GRegion *gr = createDiscreteRegionFromRawData(gm, pts, triangles);
try{ try{
meshGRegionBoundaryRecovery(gr); meshGRegionBoundaryRecovery(gr);
} }
...@@ -87,7 +95,5 @@ GRegion * createTetrahedralMesh ( GModel *gm, fullMatrix<double> & pts, fullMatr ...@@ -87,7 +95,5 @@ GRegion * createTetrahedralMesh ( GModel *gm, fullMatrix<double> & pts, fullMatr
Msg::Error("Could not recover boundary: error %d", err); Msg::Error("Could not recover boundary: error %d", err);
} }
} }
return gr;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment