diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp index 3865e9d9354c541f7b8d647ef35fb3c1874ef037..c8a9c2016a61df61f7713028d2262e46e514c637 100644 --- a/Geo/GModel.cpp +++ b/Geo/GModel.cpp @@ -1,4 +1,4 @@ -// $Id: GModel.cpp,v 1.51 2008-01-14 21:29:13 remacle Exp $ +// $Id: GModel.cpp,v 1.52 2008-01-16 20:25:39 geuzaine Exp $ // // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle // @@ -56,28 +56,33 @@ GModel *GModel::current() void GModel::destroy() { - std::vector<GFace*> to_keep; - for(riter it = firstRegion(); it != lastRegion(); ++it) delete *it; regions.clear(); + + std::vector<GFace*> to_keep; for(fiter it = firstFace(); it != lastFace(); ++it){ // projection faces are persistent - if((*it)->geomType() == GEntity::ProjectionFace) + if((*it)->getNativeType() == GEntity::UnknownModel && + (*it)->geomType() == GEntity::ProjectionFace) to_keep.push_back(*it); else delete *it; } faces.clear(); faces.insert(to_keep.begin(), to_keep.end()); + for(eiter it = firstEdge(); it != lastEdge(); ++it) delete *it; edges.clear(); + for(viter it = firstVertex(); it != lastVertex(); ++it) delete *it; vertices.clear(); + if(normals) delete normals; normals = 0; + MVertex::resetGlobalNumber(); MElement::resetGlobalNumber(); gmshSurface::reset(); diff --git a/Parser/OpenFile.cpp b/Parser/OpenFile.cpp index b45f37a026c2f47ebb46827f0ecc83e6713d6a58..dfc5960f9e6cada8e182ebfd200ab561c50ec3a4 100644 --- a/Parser/OpenFile.cpp +++ b/Parser/OpenFile.cpp @@ -1,4 +1,4 @@ -// $Id: OpenFile.cpp,v 1.165 2008-01-08 12:05:45 geuzaine Exp $ +// $Id: OpenFile.cpp,v 1.166 2008-01-16 20:25:39 geuzaine Exp $ // // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle // @@ -261,7 +261,8 @@ void SetProjectName(const char *name) char no_ext[256], ext[256], base[256]; SplitFileName(name, no_ext, ext, base); - strncpy(CTX.filename, name, 255); + if(CTX.filename != name) // yes, we mean to compare the pointers + strncpy(CTX.filename, name, 255); strncpy(CTX.no_ext_filename, no_ext, 255); strncpy(CTX.base_filename, base, 255);