diff --git a/Geo/MElementCut.cpp b/Geo/MElementCut.cpp index 676cee9c348a402c0153487e79b8e5584167d219..3146757b26b505668c0aa8877291ba1b1825a268 100644 --- a/Geo/MElementCut.cpp +++ b/Geo/MElementCut.cpp @@ -1338,9 +1338,7 @@ GModel *buildCutMesh(GModel *gm, gLevelset *ls, } for(DI_Point::Container::iterator it = cp.begin(); it != cp.end(); it++) delete *it; - printf("coucou delet dim =%d\n", gmEntities[i]->dim()); for(unsigned int k = 0; k < lines.size(); k++) delete lines[k]; - printf("coucou delet \n"); for(unsigned int k = 0; k < triangles.size(); k++) delete triangles[k]; for(unsigned int k = 0; k < quads.size(); k++) delete quads[k]; for(unsigned int k = 0; k < tetras.size(); k++) delete tetras[k]; diff --git a/Geo/gmshLevelset.h b/Geo/gmshLevelset.h index 1b750089324f79826f90c8766e8b2351d6216b3e..de05cd67edf988883c5cb9f846c74bc599144b6f 100644 --- a/Geo/gmshLevelset.h +++ b/Geo/gmshLevelset.h @@ -271,13 +271,16 @@ class gLevelsetTools : public gLevelset { protected: std::vector<gLevelset *> children; + bool _delChildren;//flag to delete only if called from gmsh Parser public: gLevelsetTools () {} - gLevelsetTools (std::vector<gLevelset *> &p) {children = p;} + gLevelsetTools (const std::vector<gLevelset *> &p, bool delC=false) {children = p; _delChildren=delC;} gLevelsetTools (const gLevelsetTools &); - ~gLevelsetTools () { - for(int i = 0; i < (int)children.size(); i++) - delete children[i]; + virtual ~gLevelsetTools () { + if (_delChildren){ + for(int i = 0; i < (int)children.size(); i++) + delete children[i]; + } } double operator () (const double x, const double y, const double z) const { double d = (*children[0])(x, y, z); @@ -328,7 +331,7 @@ public: class gLevelsetCut : public gLevelsetTools { public: - gLevelsetCut (std::vector<gLevelset *> p) : gLevelsetTools(p) { } + gLevelsetCut (std::vector<gLevelset *> p, bool delC=false) : gLevelsetTools(p,delC) { } double choose (double d1, double d2) const { return (d1 > -d2) ? d1 : -d2; // greater of d1 and -d2 } @@ -341,7 +344,7 @@ public: class gLevelsetUnion : public gLevelsetTools { public: - gLevelsetUnion (std::vector<gLevelset *> p) : gLevelsetTools(p) { } + gLevelsetUnion (std::vector<gLevelset *> p, bool delC=false) : gLevelsetTools(p,delC) { } gLevelsetUnion(const gLevelsetUnion &lv):gLevelsetTools(lv){} virtual gLevelset * clone() const{return new gLevelsetUnion(*this);} @@ -355,7 +358,7 @@ public: class gLevelsetIntersection : public gLevelsetTools { public: - gLevelsetIntersection (std::vector<gLevelset *> p) : gLevelsetTools(p) { } + gLevelsetIntersection (std::vector<gLevelset *> p, bool delC=false) : gLevelsetTools(p,delC) { } gLevelsetIntersection(const gLevelsetIntersection &lv):gLevelsetTools(lv) { } virtual gLevelset *clone() const { return new gLevelsetIntersection(*this); } diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y index 5f3f1726a1e93748fe9a48f16a63f66388697edc..ae3e8afe78ce04bb0da86dfd9120f301dbb2052d 100644 --- a/Parser/Gmsh.y +++ b/Parser/Gmsh.y @@ -1987,7 +1987,7 @@ LevelSet : if(!pl) yymsg(0, "Levelset Union %d : unknown levelset %d", t, (int)d); else vl.push_back(pl->ls); } - gLevelset *ls = new gLevelsetUnion(vl); + gLevelset *ls = new gLevelsetUnion(vl, True); LevelSet *l = Create_LevelSet(t, ls); Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l); } @@ -2005,7 +2005,7 @@ LevelSet : if(!pl) yymsg(0, "Levelset Intersection %d : unknown levelset %d", t, (int)d); else vl.push_back(pl->ls); } - gLevelset *ls = new gLevelsetIntersection(vl); + gLevelset *ls = new gLevelsetIntersection(vl, True); LevelSet *l = Create_LevelSet(t, ls); Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l); } @@ -2023,7 +2023,7 @@ LevelSet : if(!pl) yymsg(0, "Levelset Cut %d : unknown levelset %d", t, (int)d); else vl.push_back(pl->ls); } - gLevelset *ls = new gLevelsetCut(vl); + gLevelset *ls = new gLevelsetCut(vl, True); LevelSet *l = Create_LevelSet(t, ls); Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l); } @@ -2041,7 +2041,7 @@ LevelSet : if(!pl) yymsg(0, "Levelset Crack %d : unknown levelset %d", t, (int)d); else vl.push_back(pl->ls); } - gLevelset *ls = new gLevelsetCrack(vl); + gLevelset *ls = new gLevelsetCrack(vl, True); LevelSet *l = Create_LevelSet(t, ls); Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l); }