From a21bf3bae3e9ad3b1253a9821c85dd38b4e542af Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Sat, 16 Dec 2006 01:25:58 +0000
Subject: [PATCH] fix interactive modification of mesh attributes

---
 Fltk/Callbacks.cpp         | 29 ++++++++++++-----------------
 Geo/GEdge.cpp              | 20 ++++++++++++--------
 Geo/GEdge.h                |  4 +++-
 Geo/GEntity.h              |  3 +++
 Geo/GFace.cpp              | 17 +++++++++++------
 Geo/GFace.h                | 22 ++++++++++++----------
 Geo/GModelIO_Geo.cpp       |  8 +++++++-
 Geo/GRegion.cpp            | 11 ++++++++---
 Geo/GRegion.h              |  5 ++++-
 Geo/GeoStringInterface.cpp |  7 +++----
 Geo/GeoStringInterface.h   |  2 +-
 Geo/gmshEdge.cpp           | 17 +++++++++++------
 Geo/gmshEdge.h             |  1 +
 Geo/gmshFace.cpp           | 24 +++++++++++++++---------
 Geo/gmshFace.h             |  1 +
 Geo/gmshRegion.cpp         | 32 +++++++++++++++++++-------------
 Geo/gmshRegion.h           |  1 +
 doc/TODO                   |  7 +------
 18 files changed, 125 insertions(+), 86 deletions(-)

diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 319212e11a..86d0add34f 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.494 2006-12-14 02:44:01 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.495 2006-12-16 01:25:58 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -3344,9 +3344,6 @@ static void _action_point_line_surface_volume(int action, int mode, char *what)
 	case 9:
 	  add_recosurf(List1, CTX.filename);
 	  break;
-	case 10:
-	  Msg(GERROR, "BDS->get_geom and set status must be reinterfaced");
-	  break;
 	default:
 	  Msg(GERROR, "Unknown action on selected entities");
 	  break;
@@ -3359,9 +3356,6 @@ static void _action_point_line_surface_volume(int action, int mode, char *what)
       }
     }
     if(ib == 'q') {
-      if(action == 10){
-	Msg(GERROR, "BDS->classify() must be reinterfaced");
-      }
       ZeroHighlight();
       Draw();
       break;
@@ -3942,7 +3936,7 @@ void mesh_define_transfinite_cb(CALLBACK_ARGS)
   WID->set_context(menu_mesh_define_transfinite, 0);
 }
 
-static void _add_transfinite_elliptic(int type, int dim)
+static void _add_transfinite(int dim)
 {
   std::vector<GVertex*> vertices;
   std::vector<GEdge*> edges;
@@ -4017,9 +4011,11 @@ static void _add_transfinite_elliptic(int type, int dim)
     if(ib == 'l') {
       switch (dim) {
       case 1:
-	HighlightEntity(edges[0]);
+	for(unsigned int i = 0; i < edges.size(); i++){
+	  HighlightEntity(edges[i]);
+	  p[n++] = edges[i]->tag();
+	}
 	Draw();
-        p[n++] = edges[0]->tag();
         break;
       case 2:
       case 3:
@@ -4060,11 +4056,10 @@ static void _add_transfinite_elliptic(int type, int dim)
             switch (dim) {
             case 2:
               if(n == 3 + 1 || n == 4 + 1)
-                add_trsfellisurf(type, n, p, CTX.filename,
-				 (char*)WID->context_mesh_choice[1]->text());
+                add_trsfsurf(n, p, CTX.filename,
+			     (char*)WID->context_mesh_choice[1]->text());
               else
-                Msg(GERROR, "Wrong number of points for %s surface",
-		    type ? "elliptic" : "transfinite");
+                Msg(GERROR, "Wrong number of points for transfinite surface");
               break;
             case 3:
               if(n == 6 + 1 || n == 8 + 1)
@@ -4096,18 +4091,18 @@ stopall:
 void mesh_define_transfinite_line_cb(CALLBACK_ARGS)
 {
   WID->create_mesh_context_window(1);
-  _add_transfinite_elliptic(0, 1);
+  _add_transfinite(1);
 }
 
 void mesh_define_transfinite_surface_cb(CALLBACK_ARGS)
 {
   WID->create_mesh_context_window(2);
-  _add_transfinite_elliptic(0, 2);
+  _add_transfinite(2);
 }
 
 void mesh_define_transfinite_volume_cb(CALLBACK_ARGS)
 {
-  _add_transfinite_elliptic(0, 3);
+  _add_transfinite(3);
 }
 
 // Dynamic Solver Menus
diff --git a/Geo/GEdge.cpp b/Geo/GEdge.cpp
index 18b3e84cfe..b87d30de42 100644
--- a/Geo/GEdge.cpp
+++ b/Geo/GEdge.cpp
@@ -1,4 +1,4 @@
-// $Id: GEdge.cpp,v 1.20 2006-11-29 16:57:00 remacle Exp $
+// $Id: GEdge.cpp,v 1.21 2006-12-16 01:25:58 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -30,13 +30,7 @@ GEdge::GEdge(GModel *model, int tag, GVertex *_v0, GVertex *_v1)
 {
   if(v0) v0->addEdge(this);
   if(v1) v1->addEdge(this);
-
-  meshAttributes.Method = LIBRE; 
-  meshAttributes.coeffTransfinite = 0.;
-  meshAttributes.nbPointsTransfinite = 0;
-  meshAttributes.typeTransfinite = 0;
-  meshAttributes.extrude = 0;
-  meshAttributes.meshSize = 1.e22;
+  resetMeshAttributes();
 }
 
 GEdge::~GEdge() 
@@ -53,6 +47,16 @@ GEdge::~GEdge()
   lines.clear();
 }
 
+void GEdge::resetMeshAttributes() 
+{ 
+  meshAttributes.Method = LIBRE; 
+  meshAttributes.coeffTransfinite = 0.;
+  meshAttributes.nbPointsTransfinite = 0;
+  meshAttributes.typeTransfinite = 0;
+  meshAttributes.extrude = 0;
+  meshAttributes.meshSize = 1.e22;
+}
+
 void GEdge::addFace(GFace *e)
 { 
   l_faces.push_back(e);  
diff --git a/Geo/GEdge.h b/Geo/GEdge.h
index 58e2d10ef2..512798b9c4 100644
--- a/Geo/GEdge.h
+++ b/Geo/GEdge.h
@@ -104,9 +104,11 @@ class GEdge : public GEntity {
   inline double length () const {return _length;}
   inline void   setLength (const double l) {_length = l;}
 
-  // onr can impose the mesh size at an edge
+  // one can impose the mesh size at an edge
   virtual double prescribedMeshSizeAtVertex() const {return meshAttributes.meshSize;}
 
+  // Resets the mesh attributes to default values
+  virtual void resetMeshAttributes();
 
   struct {
     char   Method;
diff --git a/Geo/GEntity.h b/Geo/GEntity.h
index 4acc2a0cfa..f1756a873f 100644
--- a/Geo/GEntity.h
+++ b/Geo/GEntity.h
@@ -206,6 +206,9 @@ class GEntity {
   // Returns a type-specific additional information string
   virtual std::string getAdditionalInfoString() { return std::string(""); }
 
+  // Resets the mesh attributes to default values
+  virtual void resetMeshAttributes() { return; }
+
   // The mesh vertices uniquely owned by the entity
   std::vector<MVertex*> mesh_vertices;
 
diff --git a/Geo/GFace.cpp b/Geo/GFace.cpp
index 67522421fe..fbd663f958 100644
--- a/Geo/GFace.cpp
+++ b/Geo/GFace.cpp
@@ -1,4 +1,4 @@
-// $Id: GFace.cpp,v 1.28 2006-12-04 16:41:39 geuzaine Exp $
+// $Id: GFace.cpp,v 1.29 2006-12-16 01:25:58 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -39,11 +39,7 @@ extern Context_T CTX;
 
 GFace::GFace(GModel *model, int tag) : GEntity(model, tag), r1(0), r2(0) 
 {
-  meshAttributes.recombine = 0;
-  meshAttributes.recombineAngle = 0.;
-  meshAttributes.Method = LIBRE;
-  meshAttributes.transfiniteArrangement = 0;
-  meshAttributes.extrude = 0;
+  resetMeshAttributes();
 }
 
 GFace::~GFace()
@@ -68,6 +64,15 @@ GFace::~GFace()
   quadrangles.clear();
 }
 
+void GFace::resetMeshAttributes()
+{
+  meshAttributes.recombine = 0;
+  meshAttributes.recombineAngle = 0.;
+  meshAttributes.Method = LIBRE;
+  meshAttributes.transfiniteArrangement = 0;
+  meshAttributes.extrude = 0;
+}
+
 SBoundingBox3d GFace::bounds() const
 {
   SBoundingBox3d res;
diff --git a/Geo/GFace.h b/Geo/GFace.h
index ed4f9b4d08..c8038a4966 100644
--- a/Geo/GFace.h
+++ b/Geo/GFace.h
@@ -136,16 +136,8 @@ class GFace : public GEntity
 			double &x, double &y, double &z) const;
   void getMeanPlaneData(double plan[3][3]) const;
 
-  // a crude graphical representation using a "cross" defined by pairs
-  // of start/end points
-  std::vector<SPoint3> cross;
-
-  // a map for accessing the transfinite vertices using a pair of indices
-  std::map<std::pair<int, int>, MVertex*> transfinite_vertices;
-
-  std::vector<MTriangle*> triangles;
-  std::vector<MQuadrangle*> quadrangles;
-  std::list<GEdgeLoop> edgeLoops;
+  // Resets the mesh attributes to default values
+  virtual void resetMeshAttributes();
 
   struct {
     // do we recombine the triangles of the mesh ?
@@ -164,6 +156,16 @@ class GFace : public GEntity
     // edge loops
   } meshAttributes ;
 
+  // a crude graphical representation using a "cross" defined by pairs
+  // of start/end points
+  std::vector<SPoint3> cross;
+
+  // a map for accessing the transfinite vertices using a pair of indices
+  std::map<std::pair<int, int>, MVertex*> transfinite_vertices;
+
+  std::vector<MTriangle*> triangles;
+  std::vector<MQuadrangle*> quadrangles;
+  std::list<GEdgeLoop> edgeLoops;
 };
 
 #endif
diff --git a/Geo/GModelIO_Geo.cpp b/Geo/GModelIO_Geo.cpp
index cdaf5d8f1a..69454a6cfc 100644
--- a/Geo/GModelIO_Geo.cpp
+++ b/Geo/GModelIO_Geo.cpp
@@ -1,4 +1,4 @@
-// $Id: GModelIO_Geo.cpp,v 1.3 2006-11-27 22:22:13 geuzaine Exp $
+// $Id: GModelIO_Geo.cpp,v 1.4 2006-12-16 01:25:58 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -67,6 +67,8 @@ int GModel::importTHEM()
 			   vertexByTag(c->end->Num));
 	  add(e);
 	}
+	else
+	  e->resetMeshAttributes();
 	if(!c->Visible) e->setVisibility(0);
 	if(c->Color.type) e->setColor(c->Color.mesh);
       }
@@ -83,6 +85,8 @@ int GModel::importTHEM()
 	f = new gmshFace(this, s);
 	add(f);
       }
+      else
+	f->resetMeshAttributes();
       if(!s->Visible) f->setVisibility(0);
       if(s->Color.type) f->setColor(s->Color.mesh);
     }
@@ -98,6 +102,8 @@ int GModel::importTHEM()
 	r = new gmshRegion(this, v);
 	add(r);
       }
+      else
+	r->resetMeshAttributes();	
       if(!v->Visible) r->setVisibility(0);
       if(v->Color.type) r->setColor(v->Color.mesh);
     }
diff --git a/Geo/GRegion.cpp b/Geo/GRegion.cpp
index 8baba82656..1a82331ef3 100644
--- a/Geo/GRegion.cpp
+++ b/Geo/GRegion.cpp
@@ -1,4 +1,4 @@
-// $Id: GRegion.cpp,v 1.13 2006-11-27 22:22:13 geuzaine Exp $
+// $Id: GRegion.cpp,v 1.14 2006-12-16 01:25:58 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -25,8 +25,7 @@
 
 GRegion::GRegion(GModel *model, int tag) : GEntity (model, tag)
 {
-  meshAttributes.Method = LIBRE; 
-  meshAttributes.extrude = 0;
+  resetMeshAttributes();
 }
 
 GRegion::~GRegion()
@@ -58,6 +57,12 @@ GRegion::~GRegion()
   pyramids.clear();
 }
 
+void GRegion::resetMeshAttributes()
+{
+  meshAttributes.Method = LIBRE; 
+  meshAttributes.extrude = 0;
+}
+
 SBoundingBox3d GRegion::bounds() const
 {
   SBoundingBox3d res;
diff --git a/Geo/GRegion.h b/Geo/GRegion.h
index b2bcd6529c..fb8e1e19a7 100644
--- a/Geo/GRegion.h
+++ b/Geo/GRegion.h
@@ -49,8 +49,11 @@ class GRegion : public GEntity {
   // Delete the mesh partitions defined on this region.
   void deleteMeshPartitions();
 
+  // Resets the mesh attributes to default values
+  virtual void resetMeshAttributes();
+
   struct {
-    char   Method;
+    char Method;
     // the extrusion parameters (if any)
     ExtrudeParams *extrude;
     // corners of the transfinite interpolation
diff --git a/Geo/GeoStringInterface.cpp b/Geo/GeoStringInterface.cpp
index 69515dfe57..eed7fd8c8e 100644
--- a/Geo/GeoStringInterface.cpp
+++ b/Geo/GeoStringInterface.cpp
@@ -1,4 +1,4 @@
-// $Id: GeoStringInterface.cpp,v 1.2 2006-11-27 22:22:13 geuzaine Exp $
+// $Id: GeoStringInterface.cpp,v 1.3 2006-12-16 01:25:58 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -138,12 +138,11 @@ void delet(List_T *list, char *fich, char *what)
   add_infile(text, fich, true);
 }
 
-void add_trsfellisurf(int type, int N, int *l, char *fich, char *dir)
+void add_trsfsurf(int N, int *l, char *fich, char *dir)
 {
   char text[BUFFSIZE], text2[BUFFSIZE];
 
-  snprintf(text, BUFFSIZE, "%s Surface {%d} = {", 
-	   type ? "Elliptic" : "Transfinite", l[0]);
+  snprintf(text, BUFFSIZE, "Transfinite Surface {%d} = {", l[0]);
   for(int i = 1; i < N; i++) {
     if(i == 1)
       snprintf(text2, BUFFSIZE, "%d", l[i]);
diff --git a/Geo/GeoStringInterface.h b/Geo/GeoStringInterface.h
index 3b2757a901..5ab4cd5a49 100644
--- a/Geo/GeoStringInterface.h
+++ b/Geo/GeoStringInterface.h
@@ -29,7 +29,7 @@ void coherence(char *fich);
 void delet(List_T *list, char *fich, char *what);
 void add_infile(char *text, char *fich, bool deleted_something=false);
 void add_trsfline(int N, int *l, char *fich, char *type, char *typearg, char *pts);
-void add_trsfellisurf(int type, int N, int *l, char *fich, char *dir);
+void add_trsfsurf(int N, int *l, char *fich, char *dir);
 void add_trsfvol(int N, int *l, char *fich);
 void add_charlength(List_T *list, char *fich, char *lc);
 void add_recosurf(List_T *list, char *fich);
diff --git a/Geo/gmshEdge.cpp b/Geo/gmshEdge.cpp
index 96df0e76e9..65e849a3ae 100644
--- a/Geo/gmshEdge.cpp
+++ b/Geo/gmshEdge.cpp
@@ -1,4 +1,4 @@
-// $Id: gmshEdge.cpp,v 1.21 2006-11-27 22:22:14 geuzaine Exp $
+// $Id: gmshEdge.cpp,v 1.22 2006-12-16 01:25:58 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -30,11 +30,7 @@ extern Mesh *THEM;
 gmshEdge::gmshEdge(GModel *model, Curve *edge, GVertex *v1, GVertex *v2)
   : GEdge(model, edge->Num, v1, v2), c(edge)
 {
-  meshAttributes.Method = c->Method;
-  meshAttributes.nbPointsTransfinite = c->ipar[0];
-  meshAttributes.coeffTransfinite =  c->dpar[0];
-  meshAttributes.typeTransfinite = c->ipar[1];
-  meshAttributes.extrude = c->Extrude;
+  resetMeshAttributes();
 }
 
 gmshEdge::gmshEdge(GModel *model, int num)
@@ -45,6 +41,15 @@ gmshEdge::gmshEdge(GModel *model, int num)
   CreateReversedCurve(c);
 }
 
+void gmshEdge::resetMeshAttributes()
+{
+  meshAttributes.Method = c->Method;
+  meshAttributes.nbPointsTransfinite = c->ipar[0];
+  meshAttributes.coeffTransfinite = c->dpar[0];
+  meshAttributes.typeTransfinite = c->ipar[1];
+  meshAttributes.extrude = c->Extrude;
+}
+
 Range<double> gmshEdge::parBounds(int i) const
 { 
   return(Range<double>(c->ubeg, c->uend));
diff --git a/Geo/gmshEdge.h b/Geo/gmshEdge.h
index e2ed7df911..fe214653bf 100644
--- a/Geo/gmshEdge.h
+++ b/Geo/gmshEdge.h
@@ -49,6 +49,7 @@ class gmshEdge : public GEdge {
   virtual double parFromPoint(const SPoint3 &pt) const;
   virtual int minimumMeshSegments () const;
   virtual int minimumDrawSegments () const;
+  virtual void resetMeshAttributes ();
 };
 
 #endif
diff --git a/Geo/gmshFace.cpp b/Geo/gmshFace.cpp
index a4485bbf9f..399de13655 100644
--- a/Geo/gmshFace.cpp
+++ b/Geo/gmshFace.cpp
@@ -1,4 +1,4 @@
-// $Id: gmshFace.cpp,v 1.30 2006-12-03 17:45:37 geuzaine Exp $
+// $Id: gmshFace.cpp,v 1.31 2006-12-16 01:25:58 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -66,16 +66,29 @@ gmshFace::gmshFace(GModel *m, Surface *face)
     }
   }
 
+  resetMeshAttributes();
+}
+
+gmshFace::gmshFace(GModel *m, int num)
+  : GFace(m, num)
+{
+  s = Create_Surface(num, MSH_SURF_DISCRETE);
+  Tree_Add(THEM->Surfaces, &s);
+}
+
+void gmshFace::resetMeshAttributes()
+{
   meshAttributes.recombine = s->Recombine;
   meshAttributes.recombineAngle = s->RecombineAngle;
   meshAttributes.Method = s->Method;
   meshAttributes.extrude = s->Extrude;
   if(meshAttributes.Method == TRANSFINI){
     meshAttributes.transfiniteArrangement = s->Recombine_Dir;
+    meshAttributes.corners.clear();
     for(int i = 0; i < List_Nbr(s->TrsfPoints); i++){
       Vertex *corn;
       List_Read(s->TrsfPoints, i, &corn);
-      GVertex *gv = m->vertexByTag(corn->Num);
+      GVertex *gv = model()->vertexByTag(corn->Num);
       if(gv)
 	meshAttributes.corners.push_back(gv);
       else
@@ -84,13 +97,6 @@ gmshFace::gmshFace(GModel *m, Surface *face)
   }
 }
 
-gmshFace::gmshFace(GModel *m, int num)
-  : GFace(m, num)
-{
-  s = Create_Surface(num, MSH_SURF_DISCRETE);
-  Tree_Add(THEM->Surfaces, &s);
-}
-
 Range<double> gmshFace::parBounds(int i) const
 { 
   return Range<double>(0, 1);
diff --git a/Geo/gmshFace.h b/Geo/gmshFace.h
index 21e29c6bef..e4d3344dd9 100644
--- a/Geo/gmshFace.h
+++ b/Geo/gmshFace.h
@@ -59,6 +59,7 @@ class gmshFace : public GFace {
   void * getNativePtr() const { return s; }
   virtual bool surfPeriodic(int dim) const { return false;}
   virtual SPoint2 parFromPoint(const SPoint3 &) const;
+  virtual void resetMeshAttributes();
 };
 
 #endif
diff --git a/Geo/gmshRegion.cpp b/Geo/gmshRegion.cpp
index 5ec9f572c6..cfd3af9ceb 100644
--- a/Geo/gmshRegion.cpp
+++ b/Geo/gmshRegion.cpp
@@ -1,4 +1,4 @@
-// $Id: gmshRegion.cpp,v 1.12 2006-12-03 03:19:55 geuzaine Exp $
+// $Id: gmshRegion.cpp,v 1.13 2006-12-16 01:25:58 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -41,13 +41,26 @@ gmshRegion::gmshRegion(GModel *m, ::Volume * volume)
     l_dirs.push_back(ori);
   }
 
-  meshAttributes.Method = volume->Method;
-  meshAttributes.extrude = volume->Extrude;
+  resetMeshAttributes();
+}
+
+gmshRegion::gmshRegion(GModel *m, int num)
+  : GRegion(m, num)
+{
+  v = Create_Volume(num, MSH_VOLUME_DISCRETE);
+  Tree_Add(THEM->Volumes, &v);
+}
+
+void gmshRegion::resetMeshAttributes()
+{
+  meshAttributes.Method = v->Method;
+  meshAttributes.extrude = v->Extrude;
   if(meshAttributes.Method == TRANSFINI){
-    for(int i = 0; i < List_Nbr(volume->TrsfPoints); i++){
+    meshAttributes.corners.clear();
+    for(int i = 0; i < List_Nbr(v->TrsfPoints); i++){
       Vertex *corn;
-      List_Read(volume->TrsfPoints, i, &corn);
-      GVertex *gv = m->vertexByTag(corn->Num);
+      List_Read(v->TrsfPoints, i, &corn);
+      GVertex *gv = model()->vertexByTag(corn->Num);
       if(gv)
 	meshAttributes.corners.push_back(gv);
       else
@@ -56,13 +69,6 @@ gmshRegion::gmshRegion(GModel *m, ::Volume * volume)
   }
 }
 
-gmshRegion::gmshRegion(GModel *m, int num)
-  : GRegion(m, num)
-{
-  v = Create_Volume(num, MSH_VOLUME_DISCRETE);
-  Tree_Add(THEM->Volumes, &v);
-}
-
 GEntity::GeomType gmshRegion::geomType() const
 {
   switch (v->Typ){
diff --git a/Geo/gmshRegion.h b/Geo/gmshRegion.h
index d351f105a8..6b562415f1 100644
--- a/Geo/gmshRegion.h
+++ b/Geo/gmshRegion.h
@@ -34,6 +34,7 @@ class gmshRegion : public GRegion {
   virtual GeomType geomType() const;
   ModelType getNativeType() const { return GmshModel; }
   void * getNativePtr() const { return v; }
+  virtual void resetMeshAttributes();
 };
 
 #endif
diff --git a/doc/TODO b/doc/TODO
index c52385f5d8..725cd3edb6 100644
--- a/doc/TODO
+++ b/doc/TODO
@@ -1,4 +1,4 @@
-$Id: TODO,v 1.33 2006-12-12 01:39:15 geuzaine Exp $
+$Id: TODO,v 1.34 2006-12-16 01:25:58 geuzaine Exp $
 
 ********************************************************************
 
@@ -18,11 +18,6 @@ bug: quads orientation is wrong after recombine
 
 ********************************************************************
 
-return error when trying to mesh a volume with netgen/tetgen whose
-boundary contains quads
-
-********************************************************************
-
 physical groups->add->line/surface: pressing '-' after/while selecting 
 a surface should add it with reverse orientation?
 
-- 
GitLab