From 554efc858c3ec48c3cbc45d0b32420bade4fe6c9 Mon Sep 17 00:00:00 2001
From: Jean-Francois Remacle <jean-francois.remacle@uclouvain.be>
Date: Tue, 14 Oct 2008 13:54:49 +0000
Subject: [PATCH] add Field->Put on View -> New view

---
 Fltk/Callbacks.cpp | 12 ++++++++----
 Fltk/GUI.cpp       | 19 +++++++------------
 Mesh/Field.cpp     | 17 +++++++++++++++++
 Mesh/Field.h       |  1 +
 Plugin/GSHHS.cpp   |  4 ++--
 5 files changed, 35 insertions(+), 18 deletions(-)

diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index f459f2de3d..eb2a4bcf4b 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -4472,11 +4472,15 @@ void view_field_put_on_view_cb(CALLBACK_ARGS)
   Fl_Menu_Button* mb = ((Fl_Menu_Button*)w);
   Field *field = (Field*)WID->field_editor_group->user_data();
   int iView;
-  sscanf(mb->text(), "View [%i]", &iView);
-  if(iView<PView::list.size()){
-    field->put_on_view(PView::list[iView]);
-    Draw();
+  if(sscanf(mb->text(), "View [%i]", &iView)){
+    if(iView<PView::list.size()){
+      field->put_on_view(PView::list[iView]);
+    }
+  }else{
+    field->put_on_new_view();
+    WID->update_views();
   }
+  Draw();
 }
 
 void view_field_select_file_cb(CALLBACK_ARGS){
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 2790e69b99..bbe104116b 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -3881,16 +3881,12 @@ void GUI::load_field_options()
 void GUI::load_field_view_list()
 {
   field_put_on_view_btn->clear();
-  if(PView::list.size() > 0){
-    field_put_on_view_btn->activate();
-    for(unsigned int i = 0; i < PView::list.size(); i++) {
-      std::ostringstream s;
-      s << "View [" << i << "]";
-      field_put_on_view_btn->add(s.str().c_str());
-    }
-  }
-  else{
-    field_put_on_view_btn->deactivate();
+  field_put_on_view_btn->add("New view");
+  field_put_on_view_btn->activate();
+  for(unsigned int i = 0; i < PView::list.size(); i++) {
+    std::ostringstream s;
+    s << "View [" << i << "]";
+    field_put_on_view_btn->add(s.str().c_str());
   }
 }
 
@@ -3954,8 +3950,7 @@ void GUI::edit_field(Field *f)
   field_options_scroll->end();
   load_field_options();
   field_options_scroll->damage(1);
-  if(PView::list.size() > 0)
-    field_put_on_view_btn->activate();
+  field_put_on_view_btn->activate();
   field_delete_btn->activate();
   load_field_list();
 }
diff --git a/Mesh/Field.cpp b/Mesh/Field.cpp
index 598aabc4fc..ba4edd8786 100644
--- a/Mesh/Field.cpp
+++ b/Mesh/Field.cpp
@@ -30,6 +30,7 @@
 #if !defined(HAVE_NO_POST)
 #include "OctreePost.h"
 #include "PViewDataList.h"
+#include "MVertex.h"
 #endif
 
 extern Context_T CTX;
@@ -1330,6 +1331,22 @@ Field::Field()
 }
 
 #if !defined(HAVE_NO_POST)
+void Field::put_on_new_view(){
+  std::map<int, std::vector<double> > d;
+  std::vector<GEntity*> entities;
+  GModel::current()->getEntities(entities);
+  for(unsigned int i = 0; i < entities.size(); i++){
+   for(unsigned int j = 0; j < entities[i]->mesh_vertices.size(); j++){
+     MVertex *v = entities[i]->mesh_vertices[j];
+     d[v->getNum()].push_back((*this)(v->x(),v->y(),v->z(),entities[i]));
+   }
+  }
+  std::ostringstream oss;
+  oss<<"Field "<<id;
+  PView *view= new PView(oss.str().c_str(), "NodeData", GModel::current(), d);
+  view->setChanged(true);
+}
+
 void Field::put_on_view(PView * view, int comp)
 {
   PViewDataList *data = dynamic_cast<PViewDataList*>(view->getData());
diff --git a/Mesh/Field.h b/Mesh/Field.h
index 4660c17473..6572fd2683 100644
--- a/Mesh/Field.h
+++ b/Mesh/Field.h
@@ -67,6 +67,7 @@ class Field {
   virtual const char *get_name() = 0;
 #if !defined(HAVE_NO_POST)
   void put_on_view(PView * view, int comp = -1);
+  void put_on_new_view();
 #endif
   virtual std::string get_description(){ return ""; }
 };
diff --git a/Plugin/GSHHS.cpp b/Plugin/GSHHS.cpp
index 41e9b54419..c36a366859 100644
--- a/Plugin/GSHHS.cpp
+++ b/Plugin/GSHHS.cpp
@@ -38,7 +38,7 @@ class coordinate_lonlat:public coordinate_system{
     ll.setPosition( atan2(xyz.y(),xyz.x()), asin(xyz.z()/r), 0);
   }
 };
-// ************** Longitude Latitude_degrees ***************
+// ************** Longitude Latitude (degrees) ***************
 class coordinate_lonlat_degrees:public coordinate_system{
   coordinate_lonlat cll;
   SPoint3 llradian;
@@ -284,7 +284,7 @@ class GeoEarthImport
   }
 };
 
-/*      $Id: GSHHS.cpp,v 1.15 2008-08-21 07:31:49 geuzaine Exp $
+/*      $Id: GSHHS.cpp,v 1.16 2008-10-14 13:54:49 remacle Exp $
  *
  * PROGRAM:	gshhs.c
  * AUTHOR:	Paul Wessel (pwessel@hawaii.edu)
-- 
GitLab