diff --git a/Fltk/inputRegion.cpp b/Fltk/inputRegion.cpp new file mode 100644 index 0000000000000000000000000000000000000000..701e2597b418debd3d01e37633519186e81cc53b --- /dev/null +++ b/Fltk/inputRegion.cpp @@ -0,0 +1,89 @@ +// Gmsh - Copyright (C) 1997-2012 C. Geuzaine, J.-F. Remacle +// +// See the LICENSE.txt file for license information. Please report all +// bugs and problems to <gmsh@geuz.org>. + +#include <string> +#include <stdio.h> +#include "onelab.h" +#include "inputRegion.h" +#include "FlGui.h" +#include "drawContext.h" +#include "GRegion.h" +#include "GFace.h" +#include "GEdge.h" +#include "GVertex.h" +#include "Options.h" +#include "GmshDefines.h" + +static std::string num2str(int num) +{ + std::ostringstream tmp; + tmp << num; + return tmp.str(); +} + +void inputRegion::_region_butt_cb(Fl_Widget *w, void *data) +{ + inputRegion *b = (inputRegion*)data; + + int oldp = opt_geometry_points(0, GMSH_GET, 0); + int oldl = opt_geometry_lines(0, GMSH_GET, 0); + int olds = opt_geometry_surfaces(0, GMSH_GET, 0); + int oldv = opt_geometry_volumes(0, GMSH_GET, 0); + + opt_geometry_points(0, GMSH_SET | GMSH_GUI, 1); + opt_geometry_lines(0, GMSH_SET | GMSH_GUI, 1); + opt_geometry_surfaces(0, GMSH_SET | GMSH_GUI, 1); + opt_geometry_volumes(0, GMSH_SET | GMSH_GUI, 1); + drawContext::global()->draw(); + + std::set<std::string> physicals = b->value(); + Msg::StatusBar(3, false, "Select entities\n[Press 'e' to end]"); + while(1){ + char ib = FlGui::instance()->selectEntity(ENT_ALL); + if(ib == 'l'){ + if(FlGui::instance()->selectedRegions.size()){ + for(unsigned int i = 0; i < FlGui::instance()->selectedRegions.size(); i++){ + GRegion *gr = FlGui::instance()->selectedRegions[i]; + for(unsigned int j = 0; j < gr->physicals.size(); j++) + physicals.insert(num2str(gr->physicals[j])); + } + } + if(FlGui::instance()->selectedFaces.size()){ + for(unsigned int i = 0; i < FlGui::instance()->selectedFaces.size(); i++){ + GFace *gr = FlGui::instance()->selectedFaces[i]; + for(unsigned int j = 0; j < gr->physicals.size(); j++) + physicals.insert(num2str(gr->physicals[j])); + } + } + if(FlGui::instance()->selectedEdges.size()){ + for(unsigned int i = 0; i < FlGui::instance()->selectedEdges.size(); i++){ + GEdge *gr = FlGui::instance()->selectedEdges[i]; + for(unsigned int j = 0; j < gr->physicals.size(); j++) + physicals.insert(num2str(gr->physicals[j])); + } + } + if(FlGui::instance()->selectedVertices.size()){ + for(unsigned int i = 0; i < FlGui::instance()->selectedVertices.size(); i++){ + GVertex *gr = FlGui::instance()->selectedVertices[i]; + for(unsigned int j = 0; j < gr->physicals.size(); j++) + physicals.insert(num2str(gr->physicals[j])); + } + } + b->value(physicals); + } + else if(ib == 'e' || ib == 'q'){ + break; + } + } + Msg::StatusBar(3, false, ""); + + b->do_callback(); + + opt_geometry_points(0, GMSH_SET | GMSH_GUI, oldp); + opt_geometry_lines(0, GMSH_SET | GMSH_GUI, oldl); + opt_geometry_surfaces(0, GMSH_SET | GMSH_GUI, olds); + opt_geometry_volumes(0, GMSH_SET | GMSH_GUI, oldv); + drawContext::global()->draw(); +}